visit_card 0.0.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.rdoc CHANGED
@@ -4,12 +4,20 @@ Manage visit cards in your app.
4
4
  VCard standart (RFC 2426) realization through Rails 3 Engines.
5
5
  Supports export to hCard microformat.
6
6
 
7
+ If you want parse telephone format add phone gem (http://github.com/carr/phone) to your Gemfile:
8
+ gem 'phone'
9
+
10
+ Then setup at config/initializers/phone.rb. For example:
11
+ Phone.default_country_code = '380'
12
+ Phone.default_area_code = '57'
13
+ Phone.named_formats[:ua] = '+%c-%a-%f-%l'
14
+
15
+ If you want choose country through select box install country_select plugin.
16
+
7
17
  == TODO
8
18
  * Move out styles and javascript from views.
9
19
  * Improve hCard microformat export. Move to Builder.
10
20
  * Add I18n support.
11
- * Add localized_country_select plugin support.
12
- * Add phone gem support.
13
21
  * Import/Export VCard.
14
22
  * Test suite.
15
23
  * Improve Generators. Add seeds generator.
data/Rakefile CHANGED
@@ -10,7 +10,7 @@ begin
10
10
  gem.email = "pavel.chipiga@gmail.com"
11
11
  gem.homepage = "http://github.com/chipiga/visit_card"
12
12
  gem.authors = ["Pavel Chipiga"]
13
- gem.add_dependency "bitmask-attribute", ">= 1.2.0"
13
+ gem.add_dependency "clean-bitmask-attribute", ">= 2.0.0"
14
14
  gem.add_development_dependency "rspec", ">= 1.2.9"
15
15
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
16
16
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.1
1
+ 0.1.0
@@ -0,0 +1,3 @@
1
+ class VcardExtension < ActiveRecord::Base
2
+ include VisitCard::Models::VcardExtension
3
+ end
@@ -2,7 +2,7 @@
2
2
  <legend>Address</legend>
3
3
  <ol>
4
4
  <li class="field">
5
- <%= ff.check_box_collection :types, VcardAdr::TYPES %>
5
+ <%= ff.check_box_collection :types, VisitCard.adr_types %>
6
6
  </li>
7
7
  <li class="field">
8
8
  <%= ff.label :post_office_box %>
@@ -30,7 +30,8 @@
30
30
  </li>
31
31
  <li class="field">
32
32
  <%= ff.label :country_name %>
33
- <%= ff.text_field :country_name %> <!-- TODO select -->
33
+ <%= ff.respond_to?(:country_select) ? ff.country_select(:country_name, [], :include_blank => true) : ff.text_field(:country_name)
34
+ %>
34
35
  </li>
35
36
  </ol>
36
37
  <%= ff.hidden_field :_destroy, :value => '' %>
@@ -2,7 +2,7 @@
2
2
  <legend>Email</legend>
3
3
  <ol>
4
4
  <li class="field">
5
- <%= ff.check_box_collection :types, VcardEmail::TYPES %>
5
+ <%= ff.check_box_collection :types, VisitCard.email_types %>
6
6
  </li>
7
7
  <li class="field">
8
8
  <%= ff.label :value %>
@@ -0,0 +1,18 @@
1
+ <fieldset class="inputs extension">
2
+ <legend>Extension</legend>
3
+ <ol>
4
+ <li class="field">
5
+ <%= ff.check_box_collection :types, VisitCard.extension_types %>
6
+ </li>
7
+ <li class="field">
8
+ <%= ff.label :vcard_extension_type %>
9
+ <%= ff.select :vcard_dictionary_id, VcardDictionary.extension_types.map{|e| [e.name, e.id]} %>
10
+ </li>
11
+ <li class="field">
12
+ <%= ff.label :value %>
13
+ <%= ff.text_field :value %>
14
+ </li>
15
+ </ol>
16
+ <%= ff.hidden_field :_destroy, :value => '' %>
17
+ <a href='#' class='remove'>Remove</a>
18
+ </fieldset>
@@ -2,7 +2,7 @@
2
2
  <legend>Telephone</legend>
3
3
  <ol>
4
4
  <li class="field">
5
- <%= ff.check_box_collection :types, VcardTel::TYPES %>
5
+ <%= ff.check_box_collection :types, VisitCard.tel_types %>
6
6
  </li>
7
7
  <li class="field">
8
8
  <%= ff.label :value %>
@@ -46,6 +46,10 @@
46
46
  <%= f.date_select :bday, :start_year => Time.now.year - 80, :end_year => Time.now.year, :include_blank => true %>
47
47
  </li>
48
48
 
49
+ <li class="field">
50
+ <%= f.label :mailer %>
51
+ <%= f.text_field :mailer %>
52
+ </li>
49
53
  <li class="field">
50
54
  <%= f.label :tz %>
51
55
  <%= f.time_zone_select :tz, nil, :include_blank => true %>
@@ -74,9 +78,13 @@
74
78
  <%= f.label :agent %>
75
79
  <%= f.select :agent_id, Vcard.except(params[:id]).collect {|v| [ v.fn, v.id ] }, :include_blank => true %>
76
80
  </li>
81
+ <li class="field required">
82
+ <%= f.label :organization_name %>
83
+ <%= f.text_field :organization_name %>
84
+ </li>
77
85
  <li class="field">
78
- <%= f.label :org %>
79
- <%= f.text_field :org %>
86
+ <%= f.label :organization_unit %>
87
+ <%= f.text_field :organization_unit %>
80
88
  </li>
81
89
  <li class="field">
82
90
  <%= f.check_box_collection :vcard_categories, Hash[ *VcardDictionary.categories.collect { |d| [ d.id, d.name ] }.flatten ] %>
@@ -85,13 +93,29 @@
85
93
  <%= f.label :note %>
86
94
  <%= f.text_area :note %>
87
95
  </li>
96
+ <li class="field">
97
+ <%= f.label :sort_string %>
98
+ <%= f.text_field :sort_string %>
99
+ </li>
100
+ <li class="field">
101
+ <%= f.label :sound %>
102
+ <%= f.text_field :sound %>
103
+ </li>
104
+ <li class="field">
105
+ <%= f.label :uid %>
106
+ <%= f.text_field :uid %>
107
+ </li>
88
108
  <li class="field">
89
109
  <%= f.label :url %>
90
110
  <%= f.url_field :url %>
91
111
  </li>
92
112
  <li class="field">
93
113
  <%= f.label :klass %>
94
- <%= f.select :klass, Vcard::VCARD_KLASSES %>
114
+ <%= f.select :klass, VisitCard.klasses %>
115
+ </li>
116
+ <li class="field">
117
+ <%= f.label :key %>
118
+ <%= f.text_field :key %>
95
119
  </li>
96
120
 
97
121
  <% %w{adrs tels emails extensions}.each do |item| %>
@@ -3,13 +3,11 @@
3
3
  <table>
4
4
  <tr>
5
5
  <th>FN</th>
6
- <th>ORG</th>
7
6
  <th>Action</th>
8
7
  </tr>
9
8
  <% @vcards.each do |vcard| %>
10
9
  <tr>
11
10
  <td><%= link_to(vcard.fga, vcard) %></td>
12
- <td><%= vcard.org %></td>
13
11
  <td><%= link_to 'Edit', edit_vcard_path(vcard) %> | <%= link_to 'Destroy', vcard, :confirm => 'Are you sure?', :method => :delete %></td>
14
12
  </tr>
15
13
  <% end %>
@@ -13,16 +13,22 @@ class Create<%= table_name.camelize %>Tables < ActiveRecord::Migration
13
13
  t.string :nickname
14
14
  t.text :photo
15
15
  t.date :bday
16
+ t.string :mailer
16
17
  t.string :tz
17
18
  t.float :latitude
18
19
  t.float :longitude
19
20
  t.string :title
20
21
  t.string :role
21
22
  t.text :logo
22
- t.string :org
23
+ t.string :organization_name
24
+ t.string :organization_unit
23
25
  t.text :note
26
+ t.string :sort_string
27
+ t.text :sound
28
+ t.string :uid
24
29
  t.string :url
25
30
  t.string :klass
31
+ t.text :key
26
32
 
27
33
  t.timestamps
28
34
  end
@@ -3,7 +3,6 @@ module VisitCard
3
3
  module Vcard
4
4
  extend ActiveSupport::Concern
5
5
 
6
- VCARD_KLASSES = %w{public private confidential}
7
6
  VCARD_NESTED_ATTRIBUTES_REJECT_IF = lambda {|a| a.reject{|k,v| k.include?('types') || k.include?('_id')}.all? {|_, v| v.blank?}}
8
7
 
9
8
  included do
@@ -15,7 +14,7 @@ module VisitCard
15
14
  has_many :vcard_extensions, :dependent => :destroy
16
15
  belongs_to :agent, :class_name => 'Vcard', :foreign_key => 'agent_id'
17
16
 
18
- validates :family_name, :given_name, :presence => true
17
+ validate :validates_fn # validates :family_name, :given_name, :presence => true
19
18
  validates_numericality_of :latitude, :longitude, :allow_nil => true
20
19
  validates_format_of :photo, :logo, :url, :with => URI::regexp(%w{http https}), :allow_blank => true, :allow_nil => true
21
20
 
@@ -24,6 +23,7 @@ module VisitCard
24
23
 
25
24
  scope :except, lambda {|id| id.blank? ? where('1 = 1') : where('id <> ?', (::Vcard.find(id).id rescue 0))} # for slugs support
26
25
  # scope :excepts, lambda {|*ids| ids.compact.blank? ? where('1 = 1') : where('id NOT IN(?)', ids.join(','))}
26
+ scope :sort_string_asc, order('sort_string ASC')
27
27
 
28
28
  accepts_nested_attributes_for :vcard_adrs, :vcard_tels, :vcard_emails, :vcard_extensions,
29
29
  :reject_if => VCARD_NESTED_ATTRIBUTES_REJECT_IF, :allow_destroy => true
@@ -31,7 +31,8 @@ module VisitCard
31
31
 
32
32
  module InstanceMethods
33
33
  def fn
34
- "#{honorific_prefix} #{given_name} #{additional_name ? additional_name << ' ': ''}#{family_name} #{honorific_suffix}".strip
34
+ fn = "#{honorific_prefix} #{given_name} #{additional_name} #{family_name} #{honorific_suffix}".squeeze(' ').strip
35
+ fn ? fn : org
35
36
  end
36
37
 
37
38
  def n
@@ -42,11 +43,84 @@ module VisitCard
42
43
  "#{family_name} #{given_name} #{additional_name}".strip
43
44
  end
44
45
 
45
- # TODO move to separate builder class
46
- def to_hcard
47
- out = ''
48
- out << (url? ? "<a href='#{url}' class='fn url'>#{fn}</a>" : "<span class='fn'>#{fn}</span>")
49
- out.html_safe
46
+ def geo
47
+ result = "#{latitude};#{longitude}"
48
+ result == ';' ? '' : result
49
+ end
50
+
51
+ def label
52
+ "#{fn}\n#{vcard_adrs.first.adr.squeeze(';').gsub(';','\n')}".strip
53
+ end
54
+
55
+ def org
56
+ organization_unit? ? "#{organization_name};#{organization_unit}" : organization_name
57
+ end
58
+
59
+ # TODO support two variants of category store - through habtm & simple string
60
+ # def category
61
+ # end
62
+
63
+ def rev
64
+ updated_at
65
+ end
66
+
67
+ # TODO refactor! template?
68
+ # TODO separate and improve geo, org
69
+ # TODO add photo, logo, tz, category, extensions
70
+ def to_hcard(options = {}, &block)
71
+ result = []
72
+ clasess = ['fn']
73
+ clasess << 'org' if org == fn
74
+ if url?
75
+ clasess << 'url'
76
+ result << "<a class='#{clasess.join(' ')}' href='#{url}'>#{fn}</a>"
77
+ else
78
+ result << "<span class='#{clasess.join(' ')}'>#{fn}</span>"
79
+ end
80
+ result << "(<span class='nickname'>#{nickname}</span>)" if nickname?
81
+ result << "<abbr class='bday' title='#{bday.to_s}'>#{I18n.l(bday, :format => :long)}</abbr>" if bday?
82
+ result << "<span class='title'>#{title}</span>" if title?
83
+ result << "<span class='role'>#{role}</span>" if role?
84
+ result << "<span class='org'>#{org}</span>" if org.present? && org != fn
85
+ vcard_adrs.each do |adr|
86
+ result << adr.to_hcard
87
+ end
88
+ result << "<abbr class='geo' title='#{geo}'>Location</abbr>" if geo.present?
89
+ # result << "<span class='geo'><abbr class='latitude' title='#{latitude}'>N 48° 81.6667</abbr><abbr class='longitude' title='2.366667'>E 2° 36.6667</abbr></span>" if geo.present?
90
+ vcard_tels.each do |tel|
91
+ result << tel.to_hcard
92
+ end
93
+ vcard_emails.each do |email|
94
+ result << email.to_hcard
95
+ end
96
+ # result.compact!
97
+ result << agent.to_hcard if agent_id? # TODO add agent class?
98
+ main_tag_name = options.fetch(:main_tag_name, 'div')
99
+ ("<#{main_tag_name} class='vcard'>" << result.join(' ') << "</#{main_tag_name}>").html_safe
100
+ end
101
+
102
+ # TODO proxy to parser
103
+ def from_hcard()
104
+ end
105
+
106
+ # TODO
107
+ def to_vcard
108
+ end
109
+
110
+ # TODO
111
+ def from_vcard()
112
+ end
113
+
114
+ protected
115
+
116
+ def validates_fn
117
+ if family_name.blank? && given_name.blank? && additional_name.blank? && honorific_prefix.blank? && honorific_suffix.blank?
118
+ errors.add(:organization_name) unless organization_name?
119
+ else
120
+ errors.add(:family_name) unless family_name?
121
+ errors.add(:given_name) unless given_name?
122
+ errors.add(:organization_name) if organization_unit?
123
+ end
50
124
  end
51
125
  end
52
126
 
@@ -55,3 +129,10 @@ module VisitCard
55
129
  end
56
130
  end
57
131
  end
132
+ # class String
133
+ # def wrap_html(tag_name = 'span', options = {})
134
+ # options[:class] ||= self
135
+ # options.each{}
136
+ # "<#{tag_name}>#{self}</#{tag_name}>"
137
+ # end
138
+ # end
@@ -3,14 +3,36 @@ module VisitCard
3
3
  module VcardAdr
4
4
  extend ActiveSupport::Concern
5
5
 
6
- TYPES = %w{dom intl postal parcel home work pref}
7
-
8
6
  included do
9
7
  belongs_to :vcard
10
- bitmask :types, :as => TYPES
8
+ bitmask :types, :as => VisitCard.adr_types
9
+ SERIALZABLE_ATTRIBUTES = %w{post_office_box extended_address street_address locality region postal_code country_name}
11
10
  end
12
11
 
13
12
  module InstanceMethods
13
+ def adr
14
+ # "#{post_office_box};#{extended_address};#{street_address};#{locality};#{region};#{postal_code};#{country_name}"
15
+ SERIALZABLE_ATTRIBUTES.join(';')
16
+ end
17
+
18
+ def to_hcard(options = {})
19
+ result = []
20
+ result << "<span class='type'>#{types.join(', ').titleize}</span>" unless types.empty?
21
+ tag_name = options.fetch(:tag_name, 'span')
22
+ SERIALZABLE_ATTRIBUTES.each do |attr_name|
23
+ result << wrap_attribute(attr_name, tag_name)
24
+ end
25
+ result.compact!
26
+ main_tag_name = options.fetch(:main_tag_name, 'div')
27
+ ("<#{main_tag_name} class='adr'>" << result.join(' ') << "</#{main_tag_name}>").html_safe
28
+ end
29
+
30
+ private
31
+
32
+ def wrap_attribute(attr_name, tag_name = 'span')
33
+ value = send(attr_name.to_sym)
34
+ value.present? ? "<#{tag_name} class='#{attr_name.gsub('_','-')}'>#{value}</#{tag_name}>" : nil
35
+ end
14
36
  end
15
37
 
16
38
  module ClassMethods
@@ -3,8 +3,6 @@ module VisitCard
3
3
  module VcardDictionary
4
4
  extend ActiveSupport::Concern
5
5
 
6
- KLASSES = %w{category extension_type}
7
-
8
6
  included do
9
7
  validates :klass, :name, :presence => true
10
8
  validates_uniqueness_of :name, :scope => :klass
@@ -3,15 +3,21 @@ module VisitCard
3
3
  module VcardEmail
4
4
  extend ActiveSupport::Concern
5
5
 
6
- TYPES = %w{internet x400 pref}
7
-
8
6
  included do
9
7
  belongs_to :vcard
10
8
  validates_format_of :value, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, :allow_blank => true, :allow_nil => true
11
- bitmask :types, :as => TYPES
9
+ bitmask :types, :as => VisitCard.email_types
12
10
  end
13
11
 
14
12
  module InstanceMethods
13
+ def to_hcard(options = {})
14
+ result = []
15
+ result << "<span class='type'>#{types.join(', ').titleize}</span>" unless types.empty?
16
+ tag_name = options.fetch(:tag_name, 'a')
17
+ result << "<#{tag_name} class='value' href='mailto:#{value}'>#{value}</#{tag_name}>"
18
+ main_tag_name = options.fetch(:main_tag_name, 'div')
19
+ ("<#{main_tag_name} class='email'>" << result.join(' ') << "</#{main_tag_name}>").html_safe
20
+ end
15
21
  end
16
22
 
17
23
  module ClassMethods
@@ -0,0 +1,20 @@
1
+ module VisitCard
2
+ module Models
3
+ module VcardExtension
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ belongs_to :vcard
8
+ belongs_to :vcard_extension_type, :class_name => 'VcardDictionary'
9
+ validates :vcard_extension_type, :presence => true
10
+ bitmask :types, :as => VisitCard.extension_types
11
+ end
12
+
13
+ module InstanceMethods
14
+ end
15
+
16
+ module ClassMethods
17
+ end
18
+ end
19
+ end
20
+ end
@@ -3,15 +3,27 @@ module VisitCard
3
3
  module VcardTel
4
4
  extend ActiveSupport::Concern
5
5
 
6
- TYPES = %w{home msg work pref voice fax cell video pager bbs modem car isdn pcs}
7
-
8
6
  included do
9
7
  belongs_to :vcard
10
- # TODO phone format parse and validate
11
- bitmask :types, :as => TYPES
8
+ before_validation :parse_phone
9
+ bitmask :types, :as => VisitCard.tel_types
12
10
  end
13
11
 
14
12
  module InstanceMethods
13
+ def to_hcard(options = {})
14
+ result = []
15
+ result << "<span class='type'>#{types.join(', ').titleize}</span>" unless types.empty?
16
+ tag_name = options.fetch(:tag_name, 'span')
17
+ result << "<#{tag_name} class='value'>#{value}</#{tag_name}>"
18
+ main_tag_name = options.fetch(:main_tag_name, 'div')
19
+ ("<#{main_tag_name} class='tel'>" << result.join(' ') << "</#{main_tag_name}>").html_safe
20
+ end
21
+
22
+ protected
23
+
24
+ def parse_phone
25
+ self.value = Phone.parse(value).to_s if defined? Phone
26
+ end
15
27
  end
16
28
 
17
29
  module ClassMethods
data/lib/visit_card.rb CHANGED
@@ -3,6 +3,21 @@ require 'bitmask-attribute'
3
3
  module VisitCard
4
4
  VCARD_VERSION = '3.0'
5
5
 
6
+ mattr_accessor :klasses
7
+ @@klasses = %w{public private confidential}
8
+
9
+ mattr_accessor :adr_types
10
+ @@adr_types = %w{dom intl postal parcel home work pref}
11
+
12
+ mattr_accessor :email_types
13
+ @@email_types = %w{internet x400 pref}
14
+
15
+ mattr_accessor :extension_types
16
+ @@extension_types = %w{home msg work pref voice video pager pcs internet other}
17
+
18
+ mattr_accessor :tel_types
19
+ @@tel_types = %w{home msg work pref voice fax cell video pager bbs modem car isdn pcs}
20
+
6
21
  module Models
7
22
  extend ActiveSupport::Autoload
8
23
 
data/visit_card.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{visit_card}
8
- s.version = "0.0.1"
8
+ s.version = "0.1.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Pavel Chipiga"]
12
- s.date = %q{2010-07-02}
12
+ s.date = %q{2010-07-06}
13
13
  s.description = %q{Rails 3 engines plugin for VCard store and managment}
14
14
  s.email = %q{pavel.chipiga@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -30,9 +30,11 @@ Gem::Specification.new do |s|
30
30
  "app/models/vcard_categorization.rb",
31
31
  "app/models/vcard_dictionary.rb",
32
32
  "app/models/vcard_email.rb",
33
+ "app/models/vcard_extension.rb",
33
34
  "app/models/vcard_tel.rb",
34
35
  "app/views/visit_card/vcard_adrs/_form_fields.html.erb",
35
36
  "app/views/visit_card/vcard_emails/_form_fields.html.erb",
37
+ "app/views/visit_card/vcard_extensions/_form_fields.html.erb",
36
38
  "app/views/visit_card/vcard_tels/_form_fields.html.erb",
37
39
  "app/views/visit_card/vcards/_form.html.erb",
38
40
  "app/views/visit_card/vcards/_hcard.html.erb",
@@ -54,6 +56,7 @@ Gem::Specification.new do |s|
54
56
  "lib/visit_card/models/vcard_categorization.rb",
55
57
  "lib/visit_card/models/vcard_dictionary.rb",
56
58
  "lib/visit_card/models/vcard_email.rb",
59
+ "lib/visit_card/models/vcard_extension.rb",
57
60
  "lib/visit_card/models/vcard_tel.rb",
58
61
  "spec/spec.opts",
59
62
  "spec/spec_helper.rb",
@@ -75,14 +78,14 @@ Gem::Specification.new do |s|
75
78
  s.specification_version = 3
76
79
 
77
80
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
78
- s.add_runtime_dependency(%q<bitmask-attribute>, [">= 1.2.0"])
81
+ s.add_runtime_dependency(%q<clean-bitmask-attribute>, [">= 2.0.0"])
79
82
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
80
83
  else
81
- s.add_dependency(%q<bitmask-attribute>, [">= 1.2.0"])
84
+ s.add_dependency(%q<clean-bitmask-attribute>, [">= 2.0.0"])
82
85
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
83
86
  end
84
87
  else
85
- s.add_dependency(%q<bitmask-attribute>, [">= 1.2.0"])
88
+ s.add_dependency(%q<clean-bitmask-attribute>, [">= 2.0.0"])
86
89
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
87
90
  end
88
91
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: visit_card
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 0
9
8
  - 1
10
- version: 0.0.1
9
+ - 0
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Pavel Chipiga
@@ -15,23 +15,23 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-02 00:00:00 +03:00
18
+ date: 2010-07-06 00:00:00 +03:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: bitmask-attribute
22
+ name: clean-bitmask-attribute
23
23
  prerelease: false
24
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
25
  none: false
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- hash: 31
29
+ hash: 15
30
30
  segments:
31
- - 1
32
31
  - 2
33
32
  - 0
34
- version: 1.2.0
33
+ - 0
34
+ version: 2.0.0
35
35
  type: :runtime
36
36
  version_requirements: *id001
37
37
  - !ruby/object:Gem::Dependency
@@ -73,9 +73,11 @@ files:
73
73
  - app/models/vcard_categorization.rb
74
74
  - app/models/vcard_dictionary.rb
75
75
  - app/models/vcard_email.rb
76
+ - app/models/vcard_extension.rb
76
77
  - app/models/vcard_tel.rb
77
78
  - app/views/visit_card/vcard_adrs/_form_fields.html.erb
78
79
  - app/views/visit_card/vcard_emails/_form_fields.html.erb
80
+ - app/views/visit_card/vcard_extensions/_form_fields.html.erb
79
81
  - app/views/visit_card/vcard_tels/_form_fields.html.erb
80
82
  - app/views/visit_card/vcards/_form.html.erb
81
83
  - app/views/visit_card/vcards/_hcard.html.erb
@@ -97,6 +99,7 @@ files:
97
99
  - lib/visit_card/models/vcard_categorization.rb
98
100
  - lib/visit_card/models/vcard_dictionary.rb
99
101
  - lib/visit_card/models/vcard_email.rb
102
+ - lib/visit_card/models/vcard_extension.rb
100
103
  - lib/visit_card/models/vcard_tel.rb
101
104
  - spec/spec.opts
102
105
  - spec/spec_helper.rb