我的代码必须解析Vcard 2.1格式.我正在使用vpim(没有其他库)
当我跑步时Vpim::Vcard.decode(data)我得到错误:
undefined method `each' for #<String:0x0000000928e778>
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
NoMethodError (undefined method `each' for #<String:0x0000000928e778>):
vpim (0.695) lib/vpim/rfc2425.rb:82:in `unfold'
vpim (0.695) lib/vpim/rfc2425.rb:308:in `decode'
vpim (0.695) lib/vpim/vcard.rb:692:in `decode'
app/models/event.rb:71:in `block (2 levels) in parse_data'
Run Code Online (Sandbox Code Playgroud)
我gem install vcard尝试在RailsApp初始化之后运行并要求'vcard'directctry(在vpim gem之后config.gem不包括此文件).(config.gem 'vpim'包含在environment.rb中)通过这种方式我得到另一个错误:
;=D0=9D=D0=B0=D0=B4=D1=80=D0=B0=20=D0=B1=D0=B0=D0=BD=D0=BA=20=D0=BE=D0=BB=
(异常类是Vpim::InvalidEncodingError)
Vcard代码我尝试解析:
BEGIN:VCARD
VERSION:2.1
REV:20090710T151929Z
TEL;CELL:80954130722
X-CLASS:private
END:VCARD
Run Code Online (Sandbox Code Playgroud)
有趣的是,第二个错误是我在Rails模型中解码时.当我尝试直接从脚本/控制台解码时(在installinv vcard gem和direct包括'vcard'之后),我成功获得了Vcard对象.
堆栈跟踪:
Vpim::InvalidEncodingError (;=D0=9D=D0=B0=D0=B4=D1=80=D0=B0=20=D0=B1=D0=B0=D0=BD=D0=BA=20=D0=BE=D0=BB=):
vcard (0.1.1) lib/vcard/field.rb:106:in `decode0'
vcard (0.1.1) lib/vcard/field.rb:172:in `initialize'
vcard (0.1.1) lib/vcard/field.rb:183:in `new'
vcard (0.1.1) lib/vcard/field.rb:183:in `decode'
vcard (0.1.1) lib/vcard/rfc2425.rb:308:in `block in decode'
vcard (0.1.1) lib/vcard/rfc2425.rb:308:in `collect'
vcard (0.1.1) lib/vcard/rfc2425.rb:308:in `decode'
vcard (0.1.1) lib/vcard/vcard.rb:686:in `decode'
app/models/event.rb:71:in `block (2 levels) in parse_data'
Run Code Online (Sandbox Code Playgroud)
app/models/event.rb:71:
vcard = Vpim::Vcard.decode(contact.text)
Run Code Online (Sandbox Code Playgroud)
以下是irb的例子:
95-25-164-74:~ smix$ irb
ruby-1.9.2-rc2 > str = <<EOS
ruby-1.9.2-rc2"> BEGIN:VCARD
ruby-1.9.2-rc2"> VERSION:2.1
ruby-1.9.2-rc2"> REV:20090710T151929Z
ruby-1.9.2-rc2"> TEL;CELL:80954130722
ruby-1.9.2-rc2"> X-CLASS:private
ruby-1.9.2-rc2"> END:VCARD
ruby-1.9.2-rc2"> EOS
=> "BEGIN:VCARD\nVERSION:2.1\nREV:20090710T151929Z\nTEL;CELL:80954130722\nX-CLASS:private\nEND:VCARD\n"
ruby-1.9.2-rc2 > require 'vpim'
=> true
ruby-1.9.2-rc2 > Vpim::Vcard.decode str
NoMethodError: undefined method `each' for #<String:0x000001010e0428>
from /Users/smix/.rvm/gems/ruby-1.9.2-rc2/gems/vpim-0.695/lib/vpim/rfc2425.rb:82:in `unfold'
from /Users/smix/.rvm/gems/ruby-1.9.2-rc2/gems/vpim-0.695/lib/vpim/rfc2425.rb:308:in `decode'
from /Users/smix/.rvm/gems/ruby-1.9.2-rc2/gems/vpim-0.695/lib/vpim/vcard.rb:692:in `decode'
from (irb):10
from /Users/smix/.rvm/rubies/ruby-1.9.2-rc2/bin/irb:17:in `<main>'
ruby-1.9.2-rc2 >
Run Code Online (Sandbox Code Playgroud)
如何在rails中解析Vcard 2.1?
Ken*_*oom 11
问题是String#each已经在Ruby 1.9.1中删除了.(其功能持久String#each_line).要修复/解决此错误,请执行以下任一操作:
Vpim代码以便String#each_line适当使用(并向vpim作者发送补丁)您可以String通过定义each方法来修补类
class String
alias_method :each, :each_line
end
Run Code Online (Sandbox Code Playgroud)切换到vcard gem,它取自VpimRuby 1.9.1支持.
我推荐第4个选项.
| 归档时间: |
|
| 查看次数: |
2956 次 |
| 最近记录: |