go_import 3.0.30 → 3.0.32

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.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- Zjc5M2UwMDMwNzUxMmJkNWIwZTlhOWJlMWQ3NDFhYzEwYWE1MWE3YQ==
4
+ ZTVkMWQ0NTA0ZWFlZGVlYTQ3NWMwODA4YmJhNzNkYjRiN2MxNTZiYw==
5
5
  data.tar.gz: !binary |-
6
- ODNlZjljNTViZTRkMzNiMmU3NWVjOTYzOTVmMzc3MjliY2ZlYmJlYw==
6
+ NDIzYTJlZmZmMzMwNzQzZmMwZGRmYTE4ODZhMjEyNGUzYTg4M2I3ZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZmE1MWFhZmQ3MzJiYTg4NmVkYTAzZDFlNTYwODNkYzIwYWVkMmFlMWUxZTM5
10
- ZmMxZTFiZDM2NGZmNTg3ZDk2Y2EwMGJjMTViNTJjZGNhNjc1ZjIyOTQzMDY3
11
- NzA3ZTA0YTVhNTViMTgxMTAxOGUxZTI4YjNkNGU3OWEyOWQ2MTk=
9
+ YWVkNDJmMmIwNDA2NTNjMjE4MDUzYjgxODE5YjFkZDFlMjk1MmJlMjUwODU5
10
+ Yjc0NDA2ZDlkMjc3MGRiNzdhOWJmZjkzYTBmNzkyN2JlMTY2NjE4ZjUyMTM0
11
+ ZmVhYWFjZTVlZjc0NmY0ODlkMGUxZTZjM2U4MDk0ZDQwZGM2NTE=
12
12
  data.tar.gz: !binary |-
13
- MGY4YjQ3N2I2MzM3OTRiZmYzOGYzYWUwMTYxY2YyNDc2OGQxNGQ4Yzc5ZmZl
14
- ZTBhNDc1OTlmM2YzYzdmYjZiYzk0YzE4ZGE2Yjk0NmMyNzU5MWFmYTYwMTQy
15
- MDUwZWI3OGM2MWM0ZGY2MDQ1ZGYyODk0ZjBlZDg1YjBiN2JiZGQ=
13
+ MGQ3MTNjODdlNjc1YjQ0MTlmY2ZjOThjNzU0OWQwZjA2YTAzYTQ3N2RhODEw
14
+ M2UzMmY5NTFiNjIyMmMwNThmMThhODhiMDZlMjI1ZTJhNmExZTJmMDIxN2I3
15
+ YjM0OTM3NjAzMGFhNmQyOGVmZTViZWQ5NmZlMzc5M2E1MzliOTE=
@@ -0,0 +1,29 @@
1
+
2
+ module GoImport
3
+ class CanBecomeImmutable
4
+ def self.immutable_accessor(name)
5
+ define_method(name) do
6
+ return instance_variable_get("@#{name}")
7
+ end
8
+
9
+ define_method("#{name}=") do |value|
10
+ raise_if_immutable
11
+ instance_variable_set("@#{name}", value)
12
+ end
13
+ end
14
+
15
+ def raise_if_immutable
16
+ if @is_immutable
17
+ raise ObjectIsImmutableError
18
+ end
19
+ end
20
+
21
+ def set_is_immutable()
22
+ @is_immutable = true
23
+ end
24
+
25
+ def is_immutable()
26
+ @is_immutable
27
+ end
28
+ end
29
+ end
@@ -25,4 +25,7 @@ module GoImport
25
25
  super("#{classification} is not a valid note classification")
26
26
  end
27
27
  end
28
+
29
+ class ObjectIsImmutableError < StandardError
30
+ end
28
31
  end
@@ -1,9 +1,15 @@
1
1
  # encoding: utf-8
2
2
  module GoImport
3
- class Coworker
3
+ class Coworker < CanBecomeImmutable
4
4
  include SerializeHelper
5
- attr_accessor :id, :integration_id, :email, :first_name, :last_name, :direct_phone_number,
6
- :mobile_phone_number, :home_phone_number
5
+ immutable_accessor :id
6
+ immutable_accessor :integration_id
7
+ immutable_accessor :email
8
+ immutable_accessor :first_name
9
+ immutable_accessor :last_name
10
+ immutable_accessor :direct_phone_number
11
+ immutable_accessor :mobile_phone_number
12
+ immutable_accessor :home_phone_number
7
13
 
8
14
  def initialize(opt = nil)
9
15
  if opt != nil
@@ -34,14 +34,19 @@ module GoImport
34
34
  end
35
35
  end
36
36
 
37
- class Deal
37
+ class Deal < CanBecomeImmutable
38
38
  include SerializeHelper, ModelHasCustomFields, ModelHasTags
39
39
 
40
40
  # Get/set the deal's status. Statuses must be configured in
41
41
  # LIME Go before the import.
42
- attr_accessor :status
42
+ immutable_accessor :status
43
43
 
44
- attr_accessor :id, :integration_id, :name, :description, :probability, :order_date
44
+ immutable_accessor :id
45
+ immutable_accessor :integration_id
46
+ immutable_accessor :name
47
+ immutable_accessor :description
48
+ immutable_accessor :probability
49
+ immutable_accessor :order_date
45
50
 
46
51
  # you add custom values by using {#set_custom_value}
47
52
  attr_reader :custom_values
@@ -132,12 +137,14 @@ module GoImport
132
137
  # already exists in the application use the status label
133
138
  # (String) or integration id (Integer) here.
134
139
  def status=(status)
140
+ raise_if_immutable
135
141
  @status = DealStatus.new if @status.nil?
136
142
 
137
143
  @status.status_reference = DealStatusReference.from_deal_status(status)
138
144
  end
139
145
 
140
146
  def customer=(customer)
147
+ raise_if_immutable
141
148
  @customer_reference = OrganizationReference.from_organization(customer)
142
149
 
143
150
  if customer.is_a?(Organization)
@@ -151,6 +158,7 @@ module GoImport
151
158
  end
152
159
 
153
160
  def responsible_coworker=(coworker)
161
+ raise_if_immutable
154
162
  @responsible_coworker_reference = CoworkerReference.from_coworker(coworker)
155
163
 
156
164
  if coworker.is_a?(Coworker)
@@ -159,6 +167,7 @@ module GoImport
159
167
  end
160
168
 
161
169
  def customer_contact=(person)
170
+ raise_if_immutable
162
171
  @customer_contact_reference = PersonReference.from_person(person)
163
172
 
164
173
  if person.is_a?(Person)
@@ -171,6 +180,8 @@ module GoImport
171
180
  # ignored. This makes it easier for us to convert a string
172
181
  # into an integer value.
173
182
  def value=(value)
183
+ raise_if_immutable
184
+
174
185
  if value.nil?
175
186
  @value = "0"
176
187
  elsif value.respond_to?(:empty?) && value.empty?
@@ -1,7 +1,9 @@
1
1
  module GoImport
2
- class Note
2
+ class Note < CanBecomeImmutable
3
3
  include SerializeHelper
4
- attr_accessor :id, :integration_id, :date
4
+ immutable_accessor :id
5
+ immutable_accessor :integration_id
6
+ immutable_accessor :date
5
7
 
6
8
  attr_reader :text
7
9
  attr_reader :organization, :created_by, :person, :deal
@@ -51,6 +53,7 @@ module GoImport
51
53
  end
52
54
 
53
55
  def organization=(org)
56
+ raise_if_immutable
54
57
  @organization_reference = OrganizationReference.from_organization(org)
55
58
 
56
59
  if org.is_a?(Organization)
@@ -59,6 +62,7 @@ module GoImport
59
62
  end
60
63
 
61
64
  def created_by=(coworker)
65
+ raise_if_immutable
62
66
  @created_by_reference = CoworkerReference.from_coworker(coworker)
63
67
 
64
68
  if coworker.is_a?(Coworker)
@@ -67,6 +71,7 @@ module GoImport
67
71
  end
68
72
 
69
73
  def person=(person)
74
+ raise_if_immutable
70
75
  @person_reference = PersonReference.from_person(person)
71
76
 
72
77
  if person.is_a?(Person)
@@ -75,6 +80,7 @@ module GoImport
75
80
  end
76
81
 
77
82
  def deal=(deal)
83
+ raise_if_immutable
78
84
  @deal_reference = DealReference.from_deal(deal)
79
85
 
80
86
  if deal.is_a?(Deal)
@@ -83,6 +89,7 @@ module GoImport
83
89
  end
84
90
 
85
91
  def classification=(classification)
92
+ raise_if_immutable
86
93
  if classification == NoteClassification::Comment || classification == NoteClassification::SalesCall ||
87
94
  classification == NoteClassification::TalkedTo || classification == NoteClassification::TriedToReach ||
88
95
  classification == NoteClassification::ClientVisit
@@ -93,6 +100,7 @@ module GoImport
93
100
  end
94
101
 
95
102
  def text=(text)
103
+ raise_if_immutable
96
104
  @text = text
97
105
 
98
106
  if @text.nil?
@@ -37,12 +37,20 @@ module GoImport
37
37
  end
38
38
  end
39
39
  end
40
-
41
- class Organization
40
+
41
+ class Organization < CanBecomeImmutable
42
42
  include SerializeHelper, ModelHasCustomFields, ModelHasTags
43
-
44
- attr_accessor :id, :integration_id, :name, :organization_number, :email, :web_site,
45
- :postal_address, :visit_address, :central_phone_number, :source_data
43
+
44
+ immutable_accessor :id
45
+ immutable_accessor :integration_id
46
+ immutable_accessor :name
47
+ immutable_accessor :organization_number
48
+ immutable_accessor :email
49
+ immutable_accessor :web_site
50
+ immutable_accessor :postal_address
51
+ immutable_accessor :visit_address
52
+ immutable_accessor :central_phone_number
53
+ immutable_accessor :source_data
46
54
 
47
55
  # Sets/gets the date when this organization's relation was
48
56
  # changed. Default is Now.
@@ -127,10 +135,23 @@ module GoImport
127
135
  @employees = [] if @employees == nil
128
136
  person = if val.is_a? Person then val else Person.new(val) end
129
137
  @employees.push(person)
130
- person
138
+
139
+ # *** TODO:
140
+ #
141
+ # The person should be immutable after it has been added
142
+ # to the organization. However most sources (LIME Easy,
143
+ # LIME Pro, Excel, SalesForce, etc) are updating the
144
+ # person after is has been added to the organization. We
145
+ # must update the sources before we can set the person
146
+ # immutable here.
147
+
148
+ #person.set_is_immutable
149
+
150
+ return person
131
151
  end
132
152
 
133
153
  def responsible_coworker=(coworker)
154
+ raise_if_immutable
134
155
  @responsible_coworker_reference = CoworkerReference.from_coworker(coworker)
135
156
 
136
157
  if coworker.is_a?(Coworker)
@@ -142,6 +163,8 @@ module GoImport
142
163
  # relation must be a valid value from the Relation module
143
164
  # otherwise an InvalidRelationError error will be thrown.
144
165
  def relation=(relation)
166
+ raise_if_immutable
167
+
145
168
  if relation == Relation::NoRelation || relation == Relation::WorkingOnIt ||
146
169
  relation == Relation::IsACustomer || relation == Relation::WasACustomer || relation == Relation::BeenInTouch
147
170
  @relation = relation
@@ -151,8 +174,10 @@ module GoImport
151
174
  raise InvalidRelationError
152
175
  end
153
176
  end
154
-
177
+
155
178
  def relation_last_modified=(date)
179
+ raise_if_immutable
180
+
156
181
  begin
157
182
  @relation_last_modified = @relation != Relation::NoRelation ? Date.parse(date).strftime("%Y-%m-%d") : nil
158
183
  rescue
@@ -28,11 +28,22 @@ module GoImport
28
28
  end
29
29
  end
30
30
 
31
- class Person < PersonReference
31
+ class Person < CanBecomeImmutable
32
32
  include SerializeHelper, ModelHasCustomFields, ModelHasTags
33
- attr_accessor :first_name, :last_name,
34
- :direct_phone_number, :fax_phone_number, :mobile_phone_number, :home_phone_number,
35
- :position, :email, :alternative_email, :postal_address, :currently_employed
33
+
34
+ immutable_accessor :id
35
+ immutable_accessor :integration_id
36
+ immutable_accessor :first_name
37
+ immutable_accessor :last_name
38
+ immutable_accessor :direct_phone_number
39
+ immutable_accessor :fax_phone_number
40
+ immutable_accessor :mobile_phone_number
41
+ immutable_accessor :home_phone_number
42
+ immutable_accessor :position
43
+ immutable_accessor :email
44
+ immutable_accessor :alternative_email
45
+ immutable_accessor :postal_address
46
+ immutable_accessor :currently_employed
36
47
 
37
48
  # you add custom values by using {#set_custom_value}
38
49
  attr_reader :custom_values, :organization
@@ -72,6 +72,7 @@ module GoImport
72
72
  end
73
73
 
74
74
  @coworkers[coworker.integration_id] = coworker
75
+ coworker.set_is_immutable
75
76
 
76
77
  return coworker
77
78
  end
@@ -100,6 +101,7 @@ module GoImport
100
101
  end
101
102
 
102
103
  @organizations[organization.integration_id] = organization
104
+ organization.set_is_immutable
103
105
 
104
106
  return organization
105
107
  end
@@ -132,6 +134,7 @@ module GoImport
132
134
  end
133
135
 
134
136
  @deals[deal.integration_id] = deal
137
+ deal.set_is_immutable
135
138
 
136
139
  return deal
137
140
  end
@@ -168,6 +171,7 @@ module GoImport
168
171
  end
169
172
 
170
173
  @notes[note.integration_id] = note
174
+ note.set_is_immutable
171
175
 
172
176
  return note
173
177
  end
@@ -288,7 +292,8 @@ module GoImport
288
292
  end
289
293
 
290
294
  converter_deal_statuses = @settings.deal.statuses.map {|status| status.label} if @settings.deal != nil
291
- @deals.each do |deal|
295
+ @deals.each do |key, deal|
296
+ #@deals.each do |deal|
292
297
  error, warning = deal.validate converter_deal_statuses
293
298
 
294
299
  if !error.empty?
@@ -299,7 +304,8 @@ module GoImport
299
304
  end
300
305
  end
301
306
 
302
- @notes.each do |note|
307
+ #@notes.each do |note|
308
+ @notes.each do |key, note|
303
309
  validation_message = note.validate
304
310
 
305
311
  if !validation_message.empty?
@@ -33,6 +33,30 @@ module GoImport
33
33
  end
34
34
  end
35
35
 
36
+ module ImmutableModel
37
+ @is_immutable = false
38
+ def self.immutable_accessor(name)
39
+ define_method(name) do
40
+ return instance_variable_get("@#{name}")
41
+ end
42
+
43
+ define_method("#{name}=") do |value|
44
+ raise_if_immutable
45
+ instance_variable_set("@#{name}", value)
46
+ end
47
+ end
48
+
49
+ def raise_if_immutable
50
+ if @is_immutable
51
+ raise ObjectIsImmutableError
52
+ end
53
+ end
54
+
55
+ def is_immutable()
56
+ @is_immutable = true
57
+ end
58
+ end
59
+
36
60
  module ModelWithIntegrationIdSameAs
37
61
  # check if other is same as regarding integration_id or id
38
62
  def same_as?(other)
data/lib/go_import.rb CHANGED
@@ -7,6 +7,7 @@ module GoImport
7
7
  require 'go_import/errors'
8
8
  require 'go_import/serialize_helper'
9
9
  require 'go_import/model_helpers'
10
+ require 'go_import/can_become_immutable'
10
11
  GoImport::require_all_in 'go_import/model/*.rb'
11
12
  require 'go_import/csv_helper'
12
13
  require 'go_import/roo_helper'
@@ -78,7 +78,7 @@ def convert_source
78
78
  end
79
79
 
80
80
  # deal notes
81
- process_rows(" - Reading Deal Notess '#{DEAL_NOTE_FILE}'", DEAL_NOTE_FILE) do |row|
81
+ process_rows(" - Reading Deal Notes '#{DEAL_NOTE_FILE}'", DEAL_NOTE_FILE) do |row|
82
82
  # adds itself if applicable
83
83
  rootmodel.add_note(to_deal_note(converter, row, rootmodel))
84
84
  end
@@ -36,11 +36,10 @@ describe GoImport::SerializeHelper do
36
36
  coworker = GoImport::Coworker.new({:integration_id => "1", :first_name => "Vincent", :last_name => "Vega"})
37
37
  organization.responsible_coworker = coworker
38
38
 
39
- emp = organization.add_employee({
40
- :integration_id => "1",
41
- :first_name => "Kalle",
42
- :last_name => "Anka"
43
- })
39
+ emp = GoImport::Person.new
40
+ emp.integration_id = "1"
41
+ emp.first_name = "Kalle"
42
+ emp.last_name = "Anka"
44
43
  emp.direct_phone_number = '234234234'
45
44
  emp.currently_employed = true
46
45
  rootmodel.add_organization organization
data/spec/person_spec.rb CHANGED
@@ -84,6 +84,21 @@ describe "Person" do
84
84
  person.organization.is_a?(GoImport::OrganizationReference).should eq true
85
85
  end
86
86
 
87
+ # *** TODO:
88
+ # Enable this when sources are fixed, see comment in organization.add_employee
89
+
90
+ # it "should be immutable when added to an organization" do
91
+ # # given
92
+ # org = GoImport::Organization.new({:integration_id => "123", :name => "Lundalogik"})
93
+ # person = GoImport::Person.new({:integration_id => "456", :first_name => "vincent"})
94
+
95
+ # # when
96
+ # org.add_employee person
97
+
98
+ # # then
99
+ # person.is_immutable.should eq true
100
+ # end
101
+
87
102
  describe "parse_name_to_firstname_lastname_se" do
88
103
  it "can parse 'Kalle Nilsson' into firstname 'Kalle' and lastname 'Nilsson'" do
89
104
  person.parse_name_to_firstname_lastname_se 'Kalle Nilsson'
@@ -27,6 +27,20 @@ describe "RootModel" do
27
27
  rootmodel.coworkers.length.should eq 2
28
28
  end
29
29
 
30
+ it "will make coworkers immutable after it has been added" do
31
+ # given
32
+ coworker = GoImport::Coworker.new
33
+ coworker.integration_id = "123key"
34
+ coworker.first_name = "vincent"
35
+
36
+ # when
37
+ rootmodel.add_coworker(coworker)
38
+
39
+ # then
40
+ coworker.is_immutable.should eq true
41
+ end
42
+
43
+
30
44
  it "will only add coworkers" do
31
45
  # given
32
46
  not_a_coworker = { :integration_id => "123", :first_name => "Vincent" }
@@ -78,6 +92,19 @@ describe "RootModel" do
78
92
  rootmodel.organizations.length.should eq 1
79
93
  end
80
94
 
95
+ it "will make organizations immutable after it has been added" do
96
+ # given
97
+ organization = GoImport::Organization.new
98
+ organization.integration_id = "123key"
99
+ organization.name = "Beagle Boys"
100
+
101
+ # when
102
+ rootmodel.add_organization(organization)
103
+
104
+ # then
105
+ organization.is_immutable.should eq true
106
+ end
107
+
81
108
  it "will only add organizations" do
82
109
  # given
83
110
  not_an_organization = { :integration_id => "123", :name => "This is not a note"}
@@ -149,6 +176,19 @@ describe "RootModel" do
149
176
  rootmodel.deals.length.should eq 1
150
177
  end
151
178
 
179
+ it "will make deal immutable after it has been added" do
180
+ # given
181
+ deal = GoImport::Deal.new
182
+ deal.integration_id = "123key"
183
+ deal.name = "Big deal"
184
+
185
+ # when
186
+ rootmodel.add_deal(deal)
187
+
188
+ # then
189
+ deal.is_immutable.should eq true
190
+ end
191
+
152
192
  it "will only add deals" do
153
193
  # given
154
194
  not_a_deal = { :integration_id => "123", :name => "This is not a deal" }
@@ -245,6 +285,18 @@ describe "RootModel" do
245
285
  }.to raise_error(ArgumentError)
246
286
  rootmodel.notes.length.should eq 0
247
287
  end
288
+
289
+ it "will make note immutable after it has been added" do
290
+ # given
291
+ note = GoImport::Note.new
292
+ note.text = "this is a note"
293
+
294
+ # when
295
+ rootmodel.add_note(note)
296
+
297
+ # then
298
+ note.is_immutable.should eq true
299
+ end
248
300
 
249
301
  it "can add a note from a new note" do
250
302
  # given
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: go_import
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.30
4
+ version: 3.0.32
5
5
  platform: ruby
6
6
  authors:
7
7
  - Petter Sandholdt
@@ -179,6 +179,7 @@ executables:
179
179
  extensions: []
180
180
  extra_rdoc_files: []
181
181
  files:
182
+ - lib/go_import/can_become_immutable.rb
182
183
  - lib/go_import/csv_helper.rb
183
184
  - lib/go_import/email_helper.rb
184
185
  - lib/go_import/errors.rb