fruit_to_lime 0.9.3 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/fruit_to_lime/model/class_settings.rb +50 -0
- data/lib/fruit_to_lime/model/customfield.rb +60 -3
- data/lib/fruit_to_lime/model/deal.rb +2 -2
- data/lib/fruit_to_lime/model/organization.rb +16 -16
- data/lib/fruit_to_lime/model/person.rb +2 -2
- data/lib/fruit_to_lime/model/rootmodel.rb +5 -3
- data/lib/fruit_to_lime/model/settings.rb +35 -0
- data/lib/fruit_to_lime/model_helpers.rb +17 -16
- data/lib/fruit_to_lime/serialize_helper.rb +15 -0
- data/spec/custom_field_spec.rb +0 -3
- data/spec/helpers/serialize_helper_spec.rb +24 -9
- data/spec/helpers/xsd_validate_spec.rb +8 -4
- data/spec/person_spec.rb +21 -16
- data/templates/csv/lib/tomodel.rb +12 -0
- data/templates/excel/lib/tomodel.rb +12 -0
- data/templates/sqlserver/lib/tomodel.rb +12 -0
- metadata +4 -2
@@ -0,0 +1,50 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module FruitToLime
|
3
|
+
class ClassSettings
|
4
|
+
include SerializeHelper
|
5
|
+
attr_reader :custom_fields
|
6
|
+
|
7
|
+
def initialize(opt = nil)
|
8
|
+
if opt != nil
|
9
|
+
serialize_variables.each do |myattr|
|
10
|
+
val = opt[myattr[:id]]
|
11
|
+
instance_variable_set("@" + myattr[:id].to_s, val) if val != nil
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def serialize_variables
|
17
|
+
[{:id => :custom_fields, :type => :custom_fields} ]
|
18
|
+
end
|
19
|
+
|
20
|
+
def serialize_name
|
21
|
+
"ClassSettings"
|
22
|
+
end
|
23
|
+
|
24
|
+
def set_custom_field(obj)
|
25
|
+
@custom_fields = [] if @custom_fields==nil
|
26
|
+
|
27
|
+
field = CustomField.new(obj)
|
28
|
+
|
29
|
+
index = @custom_fields.find_index do |custom_field|
|
30
|
+
custom_field.same_as?(field)
|
31
|
+
end
|
32
|
+
if index
|
33
|
+
@custom_fields.delete_at index
|
34
|
+
end
|
35
|
+
|
36
|
+
@custom_fields.push field
|
37
|
+
|
38
|
+
return field
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_custom_field(obj)
|
42
|
+
@custom_fields = [] if @custom_fields==nil
|
43
|
+
|
44
|
+
field = CustomField.new(obj)
|
45
|
+
@custom_fields.push field
|
46
|
+
|
47
|
+
return field
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module FruitToLime
|
2
|
-
class
|
2
|
+
class CustomFieldReference
|
3
3
|
include SerializeHelper, ModelWithIntegrationIdSameAs
|
4
4
|
|
5
|
-
attr_accessor :id, :integration_id
|
5
|
+
attr_accessor :id, :integration_id
|
6
6
|
|
7
7
|
def initialize(opt=nil)
|
8
8
|
if opt != nil
|
@@ -14,7 +14,35 @@ module FruitToLime
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def serialize_variables
|
17
|
-
[:id, :integration_id
|
17
|
+
[:id, :integration_id].map {|p| { :id => p, :type => :string } }
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_import_rows
|
21
|
+
serialize_variables.map do |p|
|
22
|
+
map_to_row p
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def serialize_name
|
27
|
+
"CustomFieldReference"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
class CustomField
|
32
|
+
include SerializeHelper, ModelWithIntegrationIdSameAs
|
33
|
+
attr_accessor :id, :integration_id, :title, :type
|
34
|
+
|
35
|
+
def initialize(opt=nil)
|
36
|
+
if opt != nil
|
37
|
+
serialize_variables.each do |myattr|
|
38
|
+
val = opt[myattr[:id]]
|
39
|
+
instance_variable_set("@" + myattr[:id].to_s, val) if val != nil
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def serialize_variables
|
45
|
+
[:id, :integration_id, :title, :type].map {|p| { :id => p, :type => :string } }
|
18
46
|
end
|
19
47
|
|
20
48
|
def get_import_rows
|
@@ -27,4 +55,33 @@ module FruitToLime
|
|
27
55
|
"CustomField"
|
28
56
|
end
|
29
57
|
end
|
58
|
+
|
59
|
+
class CustomValue
|
60
|
+
include SerializeHelper
|
61
|
+
attr_accessor :field, :value
|
62
|
+
|
63
|
+
def initialize(opt=nil)
|
64
|
+
if opt != nil
|
65
|
+
serialize_variables.each do |myattr|
|
66
|
+
val = opt[myattr[:id]]
|
67
|
+
instance_variable_set("@" + myattr[:id].to_s, val) if val != nil
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def serialize_variables
|
73
|
+
[ { :id =>:field, :type => :custom_field_reference },
|
74
|
+
{ :id =>:value, :type => :string }]
|
75
|
+
end
|
76
|
+
|
77
|
+
def get_import_rows
|
78
|
+
serialize_variables.map do |p|
|
79
|
+
map_to_row p
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def serialize_name
|
84
|
+
"CustomValue"
|
85
|
+
end
|
86
|
+
end
|
30
87
|
end
|
@@ -6,7 +6,7 @@ module FruitToLime
|
|
6
6
|
attr_accessor :id, :integration_id, :name, :description, :probability, :value, :order_date, :offer_date, :customer,
|
7
7
|
:responsible_coworker, :customer_contact, :status
|
8
8
|
|
9
|
-
attr_reader :
|
9
|
+
attr_reader :custom_values
|
10
10
|
|
11
11
|
def serialize_variables
|
12
12
|
[ :id, :integration_id, :name, :description, :probability, :value, :offer_date, :order_date ].map {
|
@@ -19,7 +19,7 @@ module FruitToLime
|
|
19
19
|
{ :id => :customer, :type => :organization_reference },
|
20
20
|
{ :id => :responsible_coworker, :type => :coworker_reference },
|
21
21
|
{ :id => :customer_contact, :type => :person_reference },
|
22
|
-
{ :id => :
|
22
|
+
{ :id => :custom_values, :type => :custom_values },
|
23
23
|
{ :id => :tags, :type => :tags },
|
24
24
|
{ :id => :status, :type => :deal_status }
|
25
25
|
]
|
@@ -102,22 +102,22 @@ module FruitToLime
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def serialize_variables
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
105
|
+
[
|
106
|
+
{ :id => :id, :type => :string },
|
107
|
+
{ :id => :integration_id, :type => :string },
|
108
|
+
{ :id => :source, :type => :source_ref },
|
109
|
+
{ :id => :name, :type => :string },
|
110
|
+
{ :id => :organization_number, :type => :string },
|
111
|
+
{ :id => :postal_address, :type => :address },
|
112
|
+
{ :id => :visit_address, :type => :address },
|
113
|
+
{ :id => :central_phone_number, :type => :string },
|
114
|
+
{ :id => :email, :type => :string },
|
115
|
+
{ :id => :web_site, :type => :string },
|
116
|
+
{ :id => :employees, :type => :persons },
|
117
|
+
{ :id => :custom_values, :type => :custom_values },
|
118
|
+
{ :id => :tags, :type => :tags },
|
119
|
+
{ :id => :responsible_coworker, :type => :coworker_reference}
|
120
|
+
]
|
121
121
|
end
|
122
122
|
|
123
123
|
def serialize_name
|
@@ -35,7 +35,7 @@ module FruitToLime
|
|
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
37
|
:organization
|
38
|
-
attr_reader :
|
38
|
+
attr_reader :custom_values
|
39
39
|
|
40
40
|
def initialize(opt = nil)
|
41
41
|
@currently_employed = true
|
@@ -86,7 +86,7 @@ module FruitToLime
|
|
86
86
|
{:id => :alternative_email, :type => :string},
|
87
87
|
|
88
88
|
{:id => :postal_address, :type => :address},
|
89
|
-
{:id => :
|
89
|
+
{:id => :custom_values, :type => :custom_values},
|
90
90
|
{:id => :currently_employed, :type => :bool},
|
91
91
|
{:id => :organization, :type => :organization_reference},
|
92
92
|
|
@@ -3,11 +3,12 @@ module FruitToLime
|
|
3
3
|
class RootModel
|
4
4
|
# the import_coworker is a special coworker that is set as
|
5
5
|
# responsible for objects that requires a coworker, eg a note.
|
6
|
-
attr_accessor :organizations, :coworkers, :deals, :notes, :import_coworker
|
6
|
+
attr_accessor :settings, :organizations, :coworkers, :deals, :notes, :import_coworker
|
7
7
|
def serialize_variables
|
8
8
|
[
|
9
|
-
{:id => :
|
9
|
+
{:id => :settings, :type => :settings},
|
10
10
|
{:id => :coworkers, :type => :coworkers},
|
11
|
+
{:id => :organizations, :type => :organizations},
|
11
12
|
{:id => :deals, :type => :deals},
|
12
13
|
{:id => :notes, :type => :notes},
|
13
14
|
]
|
@@ -20,6 +21,7 @@ module FruitToLime
|
|
20
21
|
include SerializeHelper
|
21
22
|
|
22
23
|
def initialize()
|
24
|
+
@settings = Settings.new
|
23
25
|
@organizations = []
|
24
26
|
@coworkers = []
|
25
27
|
@import_coworker = Coworker.new
|
@@ -142,7 +144,7 @@ module FruitToLime
|
|
142
144
|
|
143
145
|
def to_rexml(doc)
|
144
146
|
element_name = serialize_name
|
145
|
-
elem = doc.add_element(element_name,{"Version"=>"
|
147
|
+
elem = doc.add_element(element_name,{"Version"=>"v2_0"})
|
146
148
|
SerializeHelper::serialize_variables_rexml(elem, self)
|
147
149
|
end
|
148
150
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module FruitToLime
|
3
|
+
class Settings
|
4
|
+
include SerializeHelper
|
5
|
+
attr_reader :organization, :person, :deal
|
6
|
+
def with_organization
|
7
|
+
@organization = ClassSettings.new if @organization ==nil
|
8
|
+
yield @organization
|
9
|
+
end
|
10
|
+
def with_person
|
11
|
+
@person = ClassSettings.new if @person ==nil
|
12
|
+
yield @person
|
13
|
+
end
|
14
|
+
def with_deal
|
15
|
+
@deal = ClassSettings.new if @deal ==nil
|
16
|
+
yield @deal
|
17
|
+
end
|
18
|
+
def initialize(opt = nil)
|
19
|
+
if opt != nil
|
20
|
+
serialize_variables.each do |myattr|
|
21
|
+
val = opt[myattr[:id]]
|
22
|
+
instance_variable_set("@" + myattr[:id].to_s, val) if val != nil
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def serialize_variables
|
28
|
+
[:organization, :person, :deal].map {|p| {:id => p, :type => :class_settings} }
|
29
|
+
end
|
30
|
+
|
31
|
+
def serialize_name
|
32
|
+
"Settings"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,29 +1,30 @@
|
|
1
1
|
module FruitToLime
|
2
2
|
module ModelHasCustomFields
|
3
|
-
def
|
4
|
-
@
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
def set_custom_value(value, field)
|
4
|
+
@custom_values = [] if @custom_values==nil
|
5
|
+
custom_value = CustomValue.new()
|
6
|
+
custom_value.value = value
|
7
|
+
custom_value.field = field
|
8
|
+
index = @custom_values.find_index do |custom_value|
|
9
|
+
custom_value.field.same_as?(field)
|
8
10
|
end
|
9
11
|
if index
|
10
|
-
@
|
12
|
+
@custom_values.delete_at index
|
11
13
|
end
|
12
|
-
@custom_fields.push new_custom_field
|
13
|
-
return new_custom_field
|
14
|
-
end
|
15
14
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
@custom_values.push custom_value
|
16
|
+
return custom_value
|
17
|
+
end
|
18
|
+
def set_custom_field(obj)
|
19
|
+
value = obj[:value]
|
20
|
+
ref = CustomFieldReference.new(obj)
|
21
|
+
return set_custom_value(value, ref)
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
24
25
|
module ModelWithIntegrationIdSameAs
|
25
26
|
def same_as?(other)
|
26
|
-
if @integration_id!=nil && @integration_id == other.integration_id
|
27
|
+
if @integration_id!=nil && @integration_id == other.integration_id
|
27
28
|
return true
|
28
29
|
end
|
29
30
|
if @id != nil && @id == other.id
|
@@ -40,7 +41,7 @@ module FruitToLime
|
|
40
41
|
end
|
41
42
|
def set_tag(str)
|
42
43
|
@tags = [] if @tags == nil
|
43
|
-
if ! @tags.any? {|tag| tag.value = str }
|
44
|
+
if ! @tags.any? {|tag| tag.value = str }
|
44
45
|
@tags.push(Tag.new(str))
|
45
46
|
end
|
46
47
|
end
|
@@ -119,6 +119,13 @@ module FruitToLime
|
|
119
119
|
:name => symbol_to_name(p[:id]),
|
120
120
|
:models => SerializeHelper.get_import_rows(:custom_field)
|
121
121
|
}
|
122
|
+
when :custom_values then
|
123
|
+
{
|
124
|
+
:id => p[:id].to_s,
|
125
|
+
:type => p[:type],
|
126
|
+
:name => symbol_to_name(p[:id]),
|
127
|
+
:models => SerializeHelper.get_import_rows(:custom_value)
|
128
|
+
}
|
122
129
|
else
|
123
130
|
{
|
124
131
|
:id => p[:id].to_s,
|
@@ -153,6 +160,14 @@ module FruitToLime
|
|
153
160
|
OrganizationReference.new
|
154
161
|
when :custom_field then
|
155
162
|
CustomField.new
|
163
|
+
when :custom_value then
|
164
|
+
CustomValue.new
|
165
|
+
when :custom_field_reference then
|
166
|
+
CustomFieldReference.new
|
167
|
+
when :settings then
|
168
|
+
Settings.new
|
169
|
+
when :class_settings then
|
170
|
+
ClassSettings.new
|
156
171
|
else
|
157
172
|
raise "Unknown type: #{type}"
|
158
173
|
end.get_import_rows
|
data/spec/custom_field_spec.rb
CHANGED
@@ -5,19 +5,16 @@ describe "CustomField" do
|
|
5
5
|
before (:all) do
|
6
6
|
@custom_field = FruitToLime::CustomField.new({:id => 'the id',
|
7
7
|
:integration_id=>'the key',
|
8
|
-
:title=> 'the title',
|
9
8
|
:value=> 'the value'})
|
10
9
|
end
|
11
10
|
|
12
11
|
it "is the same as a custom field with the same integration_id" do
|
13
12
|
@custom_field.same_as?(FruitToLime::CustomField.new({:integration_id=>'the key',
|
14
|
-
:title=> 'the title 2',
|
15
13
|
:value=> 'the value 2'})).should eq true
|
16
14
|
end
|
17
15
|
|
18
16
|
it "is the same as a custom field with the same id" do
|
19
17
|
@custom_field.same_as?(FruitToLime::CustomField.new({:id=>'the id',
|
20
|
-
:title=> 'the title 2',
|
21
18
|
:value=> 'the value 2'})).should eq true
|
22
19
|
end
|
23
20
|
|
@@ -31,6 +31,20 @@ describe FruitToLime::SerializeHelper do
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
describe "Serialize custom value with xml inside" do
|
35
|
+
let(:serialized) {
|
36
|
+
v = FruitToLime::CustomValue.new
|
37
|
+
v.value = "<text>"
|
38
|
+
v.field = FruitToLime::CustomFieldReference.new()
|
39
|
+
v.field.id = "1"
|
40
|
+
FruitToLime::SerializeHelper::serialize(v,-1)
|
41
|
+
}
|
42
|
+
it "should contain encoded text" do
|
43
|
+
serialized.should match(/<Value>[\n ]*<text>[\n ]*<\/Value>/)
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
34
48
|
describe "Serialize without data" do
|
35
49
|
let(:serialized) {
|
36
50
|
p = FruitToLime::Person.new
|
@@ -41,7 +55,7 @@ describe FruitToLime::SerializeHelper do
|
|
41
55
|
serialized.should_not match(/<Position>/)
|
42
56
|
serialized.should_not match(/<AlternativeEmail>/)
|
43
57
|
serialized.should_not match(/<Tags>/)
|
44
|
-
serialized.should_not match(/<
|
58
|
+
serialized.should_not match(/<CustomValues>/)
|
45
59
|
end
|
46
60
|
it "should be utf-8" do
|
47
61
|
serialized.encoding.should equal Encoding::UTF_8
|
@@ -65,9 +79,9 @@ describe FruitToLime::SerializeHelper do
|
|
65
79
|
p.add_tag("tag:anka")
|
66
80
|
p.add_tag("tag:Bj\u{00F6}rk")
|
67
81
|
p.add_tag("tag:<Bj\u{00F6}rk>")
|
68
|
-
p.set_custom_field({:
|
69
|
-
p.set_custom_field({:
|
70
|
-
p.set_custom_field({:
|
82
|
+
p.set_custom_field({:integration_id=>"2", :value=>"cf value"})
|
83
|
+
p.set_custom_field({:integration_id=>"3", :value=>"cf Bj\u{00F6}rk"})
|
84
|
+
p.set_custom_field({:integration_id=>"4", :value=>"cf <Bj\u{00F6}rk>"})
|
71
85
|
FruitToLime::SerializeHelper::serialize(p,-1)
|
72
86
|
}
|
73
87
|
it "should contain first and last name" do
|
@@ -84,7 +98,6 @@ describe FruitToLime::SerializeHelper do
|
|
84
98
|
serialized.should match(/Ankeborg/)
|
85
99
|
end
|
86
100
|
it "should contain custom field" do
|
87
|
-
serialized.should match(/cf title/)
|
88
101
|
serialized.should match(/cf value/)
|
89
102
|
end
|
90
103
|
it "should contain reference to source" do
|
@@ -116,8 +129,8 @@ describe FruitToLime::SerializeHelper do
|
|
116
129
|
#o.source_ref = {:name=>'Go',:id=>"PASE122345"}
|
117
130
|
o.add_tag("tag:bibliotek")
|
118
131
|
o.add_tag("tag:Bj\u{00F6}rk")
|
119
|
-
o.set_custom_field({:
|
120
|
-
o.set_custom_field({:
|
132
|
+
o.set_custom_field({:integration_id=>"2", :value=>"cf value"})
|
133
|
+
o.set_custom_field({:integration_id=>"3", :value=>"cf Bj\u{00F6}rk"})
|
121
134
|
o.with_postal_address do |addr|
|
122
135
|
addr.city = "Ankeborg"
|
123
136
|
end
|
@@ -125,7 +138,7 @@ describe FruitToLime::SerializeHelper do
|
|
125
138
|
addr.city = "Gaaseborg"
|
126
139
|
end
|
127
140
|
o.add_employee({
|
128
|
-
:
|
141
|
+
:integration_id => "1",
|
129
142
|
:first_name => "Kalle",
|
130
143
|
:last_name => "Anka"
|
131
144
|
})
|
@@ -146,7 +159,6 @@ describe FruitToLime::SerializeHelper do
|
|
146
159
|
serialized.should match(/<Tag>[\n ]*tag:bibliotek[\n ]*<\/Tag>/)
|
147
160
|
end
|
148
161
|
it "should contain custom field" do
|
149
|
-
serialized.should match(/cf title/)
|
150
162
|
serialized.should match(/cf value/)
|
151
163
|
#puts serialized
|
152
164
|
end
|
@@ -175,6 +187,9 @@ describe FruitToLime::SerializeHelper do
|
|
175
187
|
it "should contain name" do
|
176
188
|
serialized.should match(/Ankeborgs bibliotek/)
|
177
189
|
end
|
190
|
+
it "should have version" do
|
191
|
+
serialized.should match(/<GoImport Version='v2_0'/)
|
192
|
+
end
|
178
193
|
it "should be utf-8" do
|
179
194
|
serialized.encoding.should equal Encoding::UTF_8
|
180
195
|
end
|
@@ -7,6 +7,10 @@ describe FruitToLime::SerializeHelper do
|
|
7
7
|
describe "Validate according to xsd" do
|
8
8
|
let(:validate_result) {
|
9
9
|
i = FruitToLime::RootModel.new
|
10
|
+
i.settings.with_organization do |s|
|
11
|
+
s.set_custom_field({:integration_id=>"2", :title=>"cf title"})
|
12
|
+
s.set_custom_field({:integration_id=>"3", :title=>"cf title2"})
|
13
|
+
end
|
10
14
|
o = FruitToLime::Organization.new
|
11
15
|
o.name = "Ankeborgs bibliotek"
|
12
16
|
o.with_source do |source|
|
@@ -15,8 +19,8 @@ describe FruitToLime::SerializeHelper do
|
|
15
19
|
#o.source_ref = {:name=>'Go',:id=>"PASE122345"}
|
16
20
|
o.add_tag("tag:bibliotek")
|
17
21
|
o.add_tag("tag:Bj\u{00F6}rk")
|
18
|
-
o.set_custom_field({:
|
19
|
-
o.set_custom_field({:
|
22
|
+
o.set_custom_field({:integration_id=>"2", :value=>"cf value"})
|
23
|
+
o.set_custom_field({:integration_id=>"3", :value=>"cf Bj\u{00F6}rk"})
|
20
24
|
o.with_postal_address do |addr|
|
21
25
|
addr.city = "Ankeborg"
|
22
26
|
end
|
@@ -24,10 +28,10 @@ describe FruitToLime::SerializeHelper do
|
|
24
28
|
addr.city = "Gaaseborg"
|
25
29
|
end
|
26
30
|
o.add_responsible_coworker({
|
27
|
-
:
|
31
|
+
:integration_id => "1"
|
28
32
|
})
|
29
33
|
emp = o.add_employee({
|
30
|
-
:
|
34
|
+
:integration_id => "1",
|
31
35
|
:first_name => "Kalle",
|
32
36
|
:last_name => "Anka"
|
33
37
|
})
|
data/spec/person_spec.rb
CHANGED
@@ -8,43 +8,48 @@ describe "Person" do
|
|
8
8
|
|
9
9
|
it "can set a customfield" do
|
10
10
|
person.set_custom_field({:integration_id=>'the key',
|
11
|
-
:title=> 'the title',
|
12
11
|
:value=> 'the value'})
|
13
12
|
|
14
|
-
|
13
|
+
value = person.custom_values[0]
|
14
|
+
field = value.field
|
15
15
|
field.integration_id.should eq 'the key'
|
16
|
-
|
17
|
-
field.value.should eq 'the value'
|
16
|
+
value.value.should eq 'the value'
|
18
17
|
end
|
19
18
|
|
20
19
|
it "will set custom field with same integration_id to the last value" do
|
21
20
|
person.set_custom_field({:integration_id=>'the key',
|
22
|
-
:title=> 'the title',
|
23
21
|
:value=> 'the value'})
|
24
22
|
|
25
23
|
person.set_custom_field({:integration_id=>'the key',
|
26
|
-
:title=> 'the title 2',
|
27
24
|
:value=> 'the value 2'})
|
28
|
-
person.
|
29
|
-
field =
|
25
|
+
value = person.custom_values[0]
|
26
|
+
field = value.field
|
27
|
+
|
28
|
+
person.custom_values.length.should eq 1
|
30
29
|
field.integration_id.should eq 'the key'
|
31
|
-
|
32
|
-
field.value.should eq 'the value 2'
|
30
|
+
value.value.should eq 'the value 2'
|
33
31
|
end
|
34
32
|
|
35
33
|
it "will set custom field with same id to the last value" do
|
36
34
|
person.set_custom_field({:id=>'the id',
|
37
|
-
:title=> 'the title',
|
38
35
|
:value=> 'the value'})
|
39
36
|
|
40
37
|
person.set_custom_field({:id=>'the id',
|
41
|
-
:title=> 'the title 2',
|
42
38
|
:value=> 'the value 2'})
|
43
|
-
person.
|
44
|
-
field =
|
39
|
+
value = person.custom_values[0]
|
40
|
+
field = value.field
|
41
|
+
|
42
|
+
person.custom_values.length.should eq 1
|
45
43
|
field.id.should eq 'the id'
|
46
|
-
|
47
|
-
|
44
|
+
value.value.should eq 'the value 2'
|
45
|
+
end
|
46
|
+
|
47
|
+
it "will only set tag once" do
|
48
|
+
person.set_tag('tag1')
|
49
|
+
person.set_tag('tag1')
|
50
|
+
person.tags.length.should eq 1
|
51
|
+
tag = person.tags[0]
|
52
|
+
tag.value.should eq 'tag1'
|
48
53
|
end
|
49
54
|
|
50
55
|
it "should have a firstname if no lastname" do
|
@@ -8,8 +8,20 @@ class ToModel
|
|
8
8
|
return organization
|
9
9
|
end
|
10
10
|
|
11
|
+
def configure(model)
|
12
|
+
# add custom field to your model here. Custom fields can be
|
13
|
+
# added to organization, deal and person. Valid types are
|
14
|
+
# :String and :Link. If no type is specified :String is used
|
15
|
+
# as default.
|
16
|
+
|
17
|
+
model.settings.with_deal do |deal|
|
18
|
+
deal.set_custom_field( { :integrationid => 'discount_url', :title => 'Rabatt url', :type => :Link } )
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
11
22
|
def to_model(organization_file_name)
|
12
23
|
rootmodel = FruitToLime::RootModel.new
|
24
|
+
configure model
|
13
25
|
if organization_file_name != nil
|
14
26
|
organization_file_data = File.open(organization_file_name, 'r').read.encode('UTF-8',"ISO-8859-1")
|
15
27
|
rows = FruitToLime::CsvHelper::text_to_hashes(organization_file_data)
|
@@ -11,11 +11,23 @@ class ToModel
|
|
11
11
|
return organization
|
12
12
|
end
|
13
13
|
|
14
|
+
def configure(model)
|
15
|
+
# add custom field to your model here. Custom fields can be
|
16
|
+
# added to organization, deal and person. Valid types are
|
17
|
+
# :String and :Link. If no type is specified :String is used
|
18
|
+
# as default.
|
19
|
+
|
20
|
+
model.settings.with_deal do |deal|
|
21
|
+
deal.set_custom_field( { :integrationid => 'discount_url', :title => 'Rabatt url', :type => :Link } )
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
14
25
|
def to_model(organization_file_name)
|
15
26
|
# from excel to csv
|
16
27
|
organization_file_data = Roo::Excelx.new(organization_file_name)
|
17
28
|
|
18
29
|
model = FruitToLime::RootModel.new
|
30
|
+
configure model
|
19
31
|
rows = FruitToLime::RooHelper.new(organization_file_data).rows
|
20
32
|
rows.each do |row|
|
21
33
|
model.organizations.push(to_organization(row))
|
@@ -10,8 +10,20 @@ class ToModel
|
|
10
10
|
return organization
|
11
11
|
end
|
12
12
|
|
13
|
+
def configure(model)
|
14
|
+
# add custom field to your model here. Custom fields can be
|
15
|
+
# added to organization, deal and person. Valid types are
|
16
|
+
# :String and :Link. If no type is specified :String is used
|
17
|
+
# as default.
|
18
|
+
|
19
|
+
model.settings.with_deal do |deal|
|
20
|
+
deal.set_custom_field( { :integrationid => 'discount_url', :title => 'Rabatt url', :type => :Link } )
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
13
24
|
def to_model(organization_rows)
|
14
25
|
model = FruitToLime::RootModel.new
|
26
|
+
configure model
|
15
27
|
|
16
28
|
organization_rows.each do |row|
|
17
29
|
model.organizations.push(to_organization(row))
|
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.
|
4
|
+
version: 2.0.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2014-04-
|
14
|
+
date: 2014-04-10 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: iso_country_codes
|
@@ -138,6 +138,7 @@ files:
|
|
138
138
|
- lib/fruit_to_lime/address_helper.rb
|
139
139
|
- lib/fruit_to_lime/csv_helper.rb
|
140
140
|
- lib/fruit_to_lime/model/address.rb
|
141
|
+
- lib/fruit_to_lime/model/class_settings.rb
|
141
142
|
- lib/fruit_to_lime/model/coworker.rb
|
142
143
|
- lib/fruit_to_lime/model/coworker_reference.rb
|
143
144
|
- lib/fruit_to_lime/model/customfield.rb
|
@@ -148,6 +149,7 @@ files:
|
|
148
149
|
- lib/fruit_to_lime/model/person.rb
|
149
150
|
- lib/fruit_to_lime/model/referencetosource.rb
|
150
151
|
- lib/fruit_to_lime/model/rootmodel.rb
|
152
|
+
- lib/fruit_to_lime/model/settings.rb
|
151
153
|
- lib/fruit_to_lime/model/tag.rb
|
152
154
|
- lib/fruit_to_lime/model_helpers.rb
|
153
155
|
- lib/fruit_to_lime/roo_helper.rb
|