ruby-on-rails - 使用 Vpim Gem 创建公司名片

标签 ruby-on-rails ruby ruby-on-rails-3 rubygems vpim

我正在使用 Vpim生成 .vcf 文件,用户可以将这些文件导入到他们的地址簿中。我遇到的问题是他们下载的信息是针对公司而不是个人的,因此我需要将卡片标记为公司信息。有没有一种方法可以使用 Vpim 来完成此操作,或者是否有其他 gem 可以用来完成此操作?

def to_vcf
  card = Vpim::Vcard::Maker.make2 do |maker|
  ...
  end
end

地址簿中的名片来源

BEGIN:VCARD
VERSION:3.0
N:;;;;
FN:The Flow Skatepark
ORG:The Flow Skatepark;
item1.TEL;type=pref:(614) 864-1610
item1.X-ABLabel:Work #
item2.ADR;type=WORK;type=pref:;;4252 Groves Rd;Columbus;OH;43232;USA
item2.X-ABADR:us
BDAY;value=date:2001-07-06
X-ABShowAs:COMPANY
X-ABUID:5F7349CB-369F-4EAC-AB65-49ED902BEF9F\:ABPerson
END:VCARD

地址簿中非名片的来源

BEGIN:VCARD
VERSION:3.0
N:;The Flow Skatepark;;;
FN:The Flow Skatepark
item1.TEL;type=pref:(614) 864-1610
item1.X-ABLabel:Work #
item2.ADR;type=WORK;type=pref:;;4252 Groves Rd;Columbus;OH;43232;USA
item2.X-ABADR:us
BDAY;value=date:2001-07-06
X-ABUID:5F7349CB-369F-4EAC-AB65-49ED902BEF9F\:ABPerson
END:VCARD

显然,这些代码示例有两个主要区别:

  • ORG:The Flow 滑板公园;
  • X-ABShowAs:公司

不过,我不知道这如何转化为 Vpim。

enter image description here

最佳答案

快速而肮脏的实现,我希望我对你的理解是正确的:

require 'vpim/vcard'

vcards = <<VCARD
BEGIN:VCARD
VERSION:3.0
N:;;;;
FN:The Flow Skatepark
ORG:The Flow Skatepark;
item1.TEL;type=pref:(614) 864-1610
item1.X-ABLabel:Work #
item2.ADR;type=WORK;type=pref:;;4252 Groves Rd;Columbus;OH;43232;USA
item2.X-ABADR:us
BDAY;value=date:2001-07-06
X-ABShowAs:COMPANY
X-ABUID:5F7349CB-369F-4EAC-AB65-49ED902BEF9F\:ABPerson
END:VCARD
BEGIN:VCARD
VERSION:3.0
N:;The Flow Skatepark;;;
FN:The Flow Skatepark
item1.TEL;type=pref:(614) 864-1610
item1.X-ABLabel:Work #
item2.ADR;type=WORK;type=pref:;;4252 Groves Rd;Columbus;OH;43232;USA
item2.X-ABADR:us
BDAY;value=date:2001-07-06
X-ABUID:5F7349CB-369F-4EAC-AB65-49ED902BEF9F\:ABPerson
END:VCARD
VCARD

contacts = []
Vpim::Vcard.decode(vcards).each do |vcard|
  contacts << {
    first_name:        vcard.name      ? vcard.name.given         : '',
    last_name:         vcard.name      ? vcard.name.family        : '',
    organisation_name: vcard.org       ? vcard.org.first          : '',
  }
end

def to_vcard(card)
  Vpim::Vcard::Maker.make2 do |maker|
    maker.add_name do |name|
      name.given = card[:first_name] unless card[:first_name].empty? || card[:first_name].nil?
      name.family = card[:last_name] unless card[:last_name].empty?  || card[:last_name].nil?
    end
    maker.org = card[:organisation_name] unless card[:organisation_name].empty? || card[:organisation_name].nil?
  end
end

contacts.each_with_index do |contact, idx|
  File.open("contact#{idx}.vcf", 'w') {|f| f.write(to_vcard(contact)) }  
end

Normal vs Company

关于ruby-on-rails - 使用 Vpim Gem 创建公司名片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6561061/

相关文章:

mysql - 事件记录内连接

ruby-on-rails - Authlogic:如何仅在密码更新时验证密码?

ruby - 在 Ruby 中制作一个方形乘法表

ruby - 查找二叉树的最深节点

ruby-on-rails - rails : embed a flash swf

ruby-on-rails - 如何使用 Rails 3 测试线程安全?

ruby-on-rails - Ruby-如何从文件/文件夹中获取特定关键字

ruby-on-rails - rails : Is there away to get the Date object that is the closest Monday to today?

ruby-on-rails - *、self.* 和 @* 在 Ruby/Rails 模型/ Controller 中引用关联/属性时的区别

ruby-on-rails - Ruby 解释器 (CUI) 1.9.2p180 [i386-mingw32] 已停止工作(我没有使用 MySQL)