fruit_to_lime 0.6.5 → 0.6.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,9 +7,6 @@ module FruitToLime
7
7
  end
8
8
  include SerializeHelper
9
9
  def initialize()
10
- serialize_variables.each do |myattr|
11
- instance_variable_set("@"+myattr[:id].to_s,get_default(myattr[:type]))
12
- end
13
10
  end
14
11
 
15
12
  def get_import_rows
@@ -9,9 +9,6 @@ module FruitToLime
9
9
  end
10
10
  include SerializeHelper
11
11
  def initialize()
12
- serialize_variables.each do |myattr|
13
- instance_variable_set("@"+myattr[:id].to_s,get_default(myattr[:type]))
14
- end
15
12
  end
16
13
  end
17
14
  end
@@ -16,9 +16,12 @@ module FruitToLime
16
16
  "CustomField"
17
17
  end
18
18
  include SerializeHelper
19
- def initialize()
20
- serialize_variables.each do |myattr|
21
- instance_variable_set("@"+myattr[:id].to_s,get_default(myattr[:type]))
19
+ def initialize(opt=nil)
20
+ if opt!=nil
21
+ serialize_variables.each do |myattr|
22
+ val = opt[myattr[:id]]
23
+ instance_variable_set("@"+myattr[:id].to_s,val) if val!=nil
24
+ end
22
25
  end
23
26
  end
24
27
 
@@ -22,9 +22,6 @@ module FruitToLime
22
22
  end
23
23
  include SerializeHelper
24
24
  def initialize()
25
- serialize_variables.each do |myattr|
26
- instance_variable_set("@"+myattr[:id].to_s,get_default(myattr[:type]))
27
- end
28
25
  end
29
26
  end
30
27
  end
@@ -35,46 +35,56 @@ module FruitToLime
35
35
 
36
36
  class Organization < OrganizationReference
37
37
  include SerializeHelper
38
- attr_accessor :organization_number, :email, :web_site, :source_ref,
39
- :postal_address, :visit_address, :employees, :notes, :custom_fields
38
+
39
+ attr_accessor :organization_number, :email, :web_site, :postal_address, :visit_address
40
+ attr_reader :employees, :notes, :custom_fields
40
41
 
41
42
  def initialize()
42
- serialize_variables.each do |myattr|
43
- instance_variable_set("@"+myattr[:id].to_s,get_default(myattr[:type]))
44
- end
45
43
  end
44
+ def with_postal_address
45
+ @postal_address = Address.new
46
+ yield @postal_address
47
+ end
48
+
49
+ def with_visit_address
50
+ @visit_address = Address.new
51
+ yield @visit_address
52
+ end
53
+
46
54
 
47
- def set_custom_field(key, title, value)
48
- field = CustomField.new
49
- field.integration_id = key
50
- field.title = title
51
- field.value = value
52
- custom_fields.push field
55
+ def set_custom_field(obj)
56
+ @custom_fields = [] if @custom_fields==nil
57
+ @custom_fields.push CustomField.new(obj)
58
+ end
59
+ def source_ref
60
+ @source_ref
61
+ end
62
+ def source_ref=(val)
63
+ if !val.is_a? SourceRef
64
+ @source_ref = SourceRef.new(val)
65
+ else
66
+ @source_ref = val
67
+ end
53
68
  end
54
69
 
55
70
  def tags
56
71
  @tags
57
72
  end
58
73
 
59
- def tags=(strOrArray)
60
- if strOrArray.kind_of? String
61
- @tags = strOrArray.split(",").map do |str|
62
- Tag.new(str)
63
- end.to_a
64
- else
65
- @tags = strOrArray
66
- end
74
+ def add_tag(str)
75
+ @tags = [] if @tags == nil
76
+ @tags.push(Tag.new(str))
67
77
  end
68
78
 
69
79
  def serialize_variables
70
- [ :id, :integration_id, :name, :organization_number, :email, :web_site ].map { |prop| {:id=>prop,:type=>:string} } +
71
- [{:id=>:postal_address,:type=>:address},
72
- {:id=>:visit_address,:type=>:address},
73
- {:id=>:employees,:type=>:persons},
74
- #{:id=>:notes,:type=>:notes},
75
- {:id=>:tags,:type=>:tags},
76
- {:id=>:custom_fields,:type=>:custom_fields},
77
- {:id=>:source_ref,:type=>:source_ref}
80
+ [ :id, :integration_id, :name, :organization_number, :email, :web_site ].map { |prop| { :id => prop, :type => :string } } +
81
+ [
82
+ { :id => :postal_address, :type => :address},
83
+ { :id => :visit_address, :type => :address},
84
+ { :id => :employees, :type => :persons},
85
+ { :id => :tags, :type => :tags},
86
+ { :id => :custom_fields, :type => :custom_fields},
87
+ { :id => :source_ref, :type => :source_ref}
78
88
  ]
79
89
  end
80
90
 
@@ -34,35 +34,40 @@ module FruitToLime
34
34
  attr_accessor :first_name, :last_name,
35
35
  :direct_phone_number, :fax_phone_number, :mobile_phone_number, :home_phone_number,
36
36
  :position, :email, :alternative_email, :postal_address, :currently_employed,
37
- :source_ref,
38
- :notes, :organization, :custom_fields
37
+ :notes, :organization
38
+ attr_reader :custom_fields
39
39
 
40
40
  def initialize()
41
- serialize_variables.each do |myattr|
42
- instance_variable_set("@"+myattr[:id].to_s, get_default(myattr[:type]))
43
- end
44
41
  end
45
42
 
46
- def set_custom_field(key, title, value)
47
- field = CustomField.new
48
- field.integration_id = key
49
- field.title = title
50
- field.value = value
51
- custom_fields.push field
43
+ def with_postal_address
44
+ @postal_address = Address.new
45
+ yield @postal_address
46
+ end
47
+
48
+ def set_custom_field(obj)
49
+ @custom_fields = [] if @custom_fields==nil
50
+ @custom_fields.push CustomField.new(obj)
51
+ end
52
+ def source_ref
53
+ @source_ref
54
+ end
55
+ def source_ref=(val)
56
+ if !val.is_a? SourceRef
57
+ @source_ref = SourceRef.new(val)
58
+ else
59
+ @source_ref = val
60
+ end
52
61
  end
53
62
 
63
+
54
64
  def tags
55
65
  @tags
56
66
  end
57
67
 
58
- def tags=(strOrArray)
59
- if strOrArray.kind_of? String
60
- @tags = strOrArray.split(",").map do |str|
61
- Tag.new(str)
62
- end.to_a
63
- else
64
- @tags = strOrArray
65
- end
68
+ def add_tag(str)
69
+ @tags = [] if @tags == nil
70
+ @tags.push(Tag.new(str))
66
71
  end
67
72
 
68
73
  def serialize_name
@@ -58,13 +58,10 @@ module FruitToLime
58
58
  end
59
59
  def initialize(opt=nil)
60
60
  if opt!=nil
61
- @name = opt[:name]
62
- @id = opt[:id]
63
- @format = opt[:format]
64
- else
65
- @name =""
66
- @id =""
67
- @format = ""
61
+ serialize_variables.each do |myattr|
62
+ val = opt[myattr[:id]]
63
+ instance_variable_set("@"+myattr[:id].to_s,val) if val!=nil
64
+ end
68
65
  end
69
66
  end
70
67
 
@@ -32,10 +32,12 @@ module SerializeHelper
32
32
  varv = serialize_variables(varv)
33
33
  elsif (varv.is_a?(Array))
34
34
  varv = varv.map { |elem| SerializeHelper::serialize(elem) }.join("\n")
35
+ elsif (varv == nil)
36
+ varv = nil
35
37
  else
36
38
  varv = varv.to_s.encode('UTF-8').encode(:xml => :text)
37
39
  end
38
- "<#{varn}>#{ varv }</#{varn}>"
40
+ if varv != nil then "<#{varn}>#{ varv }</#{varn}>" else "" end
39
41
  end.join("\n")
40
42
  end
41
43
  raise "!!#{obj.class}"
@@ -81,7 +83,7 @@ module SerializeHelper
81
83
  end
82
84
  subval = send(found[:id].to_s)
83
85
  if !subval
84
- subval = get_default(found[:type])
86
+ subval = nil
85
87
  send(found[:id].to_s+"=",subval)
86
88
  end
87
89
  subval.set_attribute(selected.slice(1), value)
@@ -94,35 +96,6 @@ module SerializeHelper
94
96
  symbol.to_s.split('_').join(' ').capitalize
95
97
  end
96
98
 
97
- def get_default(type)
98
- case type
99
- when :string then
100
- ""
101
- when :bool then
102
- false
103
- when :source_ref then
104
- SourceRef.new
105
- when :address then
106
- Address.new
107
- when :notes then
108
- []
109
- when :tags then
110
- []
111
- when :persons then
112
- []
113
- when :custom_fields then
114
- []
115
- when :organization_reference then
116
- OrganizationReference.new
117
- when :date then
118
- nil
119
- when :coworker_reference then
120
- CoworkerReference.new
121
- else
122
- raise "Dont know how to handle '#{type}'"
123
- end
124
- end
125
-
126
99
  def map_symbol_to_row(symbol,type)
127
100
  {
128
101
  :id=>symbol.to_s,
@@ -6,7 +6,7 @@ describe FruitToLime::SerializeHelper do
6
6
  describe "Serialize note" do
7
7
  let(:serialized) {
8
8
  n = FruitToLime::Note.new
9
- n.text = "text"
9
+ n.text = "text"
10
10
  FruitToLime::SerializeHelper::serialize(n)
11
11
  }
12
12
  it "should contain text" do
@@ -19,25 +19,38 @@ describe FruitToLime::SerializeHelper do
19
19
  serialized.encoding.should equal Encoding::UTF_8
20
20
  end
21
21
  end
22
+ describe "Serialize without data" do
23
+ let(:serialized) {
24
+ p = FruitToLime::Person.new
25
+ FruitToLime::SerializeHelper::serialize(p)
26
+ }
27
+ it "should not contain fields that are not set" do
28
+ #puts serialized
29
+ serialized.should_not match(/<Email>/)
30
+ serialized.should_not match(/<Position>/)
31
+ serialized.should_not match(/<AlternativeEmail>/)
32
+ serialized.should_not match(/<Tags>/)
33
+ serialized.should_not match(/<CustomFields>/)
34
+ end
35
+ it "should be utf-8" do
36
+ serialized.encoding.should equal Encoding::UTF_8
37
+ end
38
+ end
39
+
22
40
  describe "Serialize person" do
23
41
  let(:serialized) {
24
42
  p = FruitToLime::Person.new
25
43
  p.id = "1"
26
44
  p.first_name = "Kalle"
27
45
  p.last_name = "Anka"
28
- p.source_ref = FruitToLime::SourceRef.new({:name=>'Go',:id=>"PASE122345"})
29
- p.postal_address.city = "Ankeborg"
30
- p.tags="tag:anka,tag:Bj\u{00F6}rk"
31
- cf = FruitToLime::CustomField.new
32
- cf.id = "2"
33
- cf.title = "cf title"
34
- cf.value = "cf value"
35
- p.custom_fields.push(cf)
36
- cf2 = FruitToLime::CustomField.new
37
- cf2.id = "3"
38
- cf2.title = "cf title2"
39
- cf2.value = "cf Bj\u{00F6}rk"
40
- p.custom_fields.push(cf2)
46
+ p.source_ref = {:name=>'Go',:id=>"PASE122345"}
47
+ p.with_postal_address do |addr|
48
+ addr.city = "Ankeborg"
49
+ end
50
+ p.add_tag("tag:anka")
51
+ p.add_tag("tag:Bj\u{00F6}rk")
52
+ p.set_custom_field({:id=>"2", :title=>"cf title", :value=>"cf value"})
53
+ p.set_custom_field({:id=>"3", :title=>"cf title2", :value=>"cf Bj\u{00F6}rk"})
41
54
  FruitToLime::SerializeHelper::serialize(p)
42
55
  }
43
56
  it "should contain first and last name" do
@@ -47,6 +60,9 @@ describe FruitToLime::SerializeHelper do
47
60
  it "should tag name" do
48
61
  serialized.should match(/tag:anka/)
49
62
  end
63
+ it "should contain address" do
64
+ serialized.should match(/Ankeborg/)
65
+ end
50
66
  it "should contain custom field" do
51
67
  serialized.should match(/cf title/)
52
68
  serialized.should match(/cf value/)
@@ -69,24 +85,26 @@ describe FruitToLime::SerializeHelper do
69
85
  let(:serialized) {
70
86
  o = FruitToLime::Organization.new
71
87
  o.name = "Ankeborgs bibliotek"
72
- o.tags="tag:bibliotek,tag:Bj\u{00F6}rk"
73
- o.source_ref = FruitToLime::SourceRef.new({:name=>'Go',:id=>"PASE122345"})
74
- cf = FruitToLime::CustomField.new
75
- cf.id = "2"
76
- cf.title = "cf title"
77
- cf.value = "cf value"
78
- o.custom_fields.push(cf)
79
- cf2 = FruitToLime::CustomField.new
80
- cf2.id = "3"
81
- cf2.title = "cf title2"
82
- cf2.value = "cf Bj\u{00F6}rk"
83
- o.custom_fields.push(cf2)
88
+ o.source_ref = {:name=>'Go',:id=>"PASE122345"}
89
+ o.add_tag("tag:bibliotek")
90
+ o.add_tag("tag:Bj\u{00F6}rk")
91
+ o.set_custom_field({:id=>"2", :title=>"cf title", :value=>"cf value"})
92
+ o.set_custom_field({:id=>"3", :title=>"cf title2", :value=>"cf Bj\u{00F6}rk"})
93
+ o.with_postal_address do |addr|
94
+ addr.city = "Ankeborg"
95
+ end
96
+ o.with_visit_address do |addr|
97
+ addr.city = "Gaaseborg"
98
+ end
84
99
  FruitToLime::SerializeHelper::serialize(o)
85
100
  }
86
101
  it "should contain name" do
87
102
  serialized.should match(/Ankeborgs bibliotek/)
88
103
  end
89
-
104
+ it "should contain address" do
105
+ serialized.should match(/Ankeborg/)
106
+ serialized.should match(/Gaaseborg/)
107
+ end
90
108
  it "should tag name" do
91
109
  serialized.should match(/<Tag>tag:bibliotek<\/Tag>/)
92
110
  end
data/spec/person_spec.rb CHANGED
@@ -6,7 +6,9 @@ describe "Person" do
6
6
  @person = FruitToLime::Person.new
7
7
  end
8
8
  it "can set a customfield" do
9
- @person.set_custom_field('the key', 'the title', 'the value')
9
+ @person.set_custom_field({:integration_id=>'the key',
10
+ :title=> 'the title',
11
+ :value=> 'the value'})
10
12
 
11
13
  field = @person.custom_fields[0]
12
14
  field.integration_id.should eq 'the key'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fruit_to_lime
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.5
4
+ version: 0.6.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-10-04 00:00:00.000000000 Z
13
+ date: 2013-10-07 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: iso_country_codes