go_import 3.0.17 → 3.0.18

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
- Nzk0YTFmNGY4MzJkMDA0MTBhZDAyZTlkNzFmMjUxMzM4YmM1ZjAzYQ==
4
+ Y2U3MjU1NzIwYzUyZDZjODA2ZDg2ZjQ1YmRjNDI2ZTE4ZGMzNGVjNQ==
5
5
  data.tar.gz: !binary |-
6
- MDIzNTY0NDAzZDk5MmFjNmZmZGNmNWRmZWRkMTgyNDYzZWM3NzI1Nw==
6
+ ZWM4ZDMyYjVjOTdlYTE5ODcwNGQ0MjdkYjQ0OTViNjZhMzkxMGFmZQ==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NWUwNTJlNTZkMzgxYTg5ODk1NjQ4OGY1Y2FjNzkzYTFmNjc4Y2EzOWYzOTNl
10
- MGVmZTQ4YTY1NDc5NjFmNDhjNjJlN2ZhZGQwMDFmNmExYjRjZTQ2NmI3MjAx
11
- Mjk2ZDI0NWVhZjc0MmQ2NjNkNWIxMGVkZGIzMDA2NDJkNjI2NDE=
9
+ ZDlkMGNmMTBkOWM2ZmE0ZWY5NGNlMDZlOTU4YTBkM2NlY2FiYjYxYWZjNjdl
10
+ NzEwMjBiMWQ4ZDkxY2QxOGZjNGY1NTc5ZWNiZDVkNjRmOWI3N2YyM2IzMmE0
11
+ NDBkNmE5M2M4MDI4YmE4NzZhNTBiYzkyZTY4M2Y5NWNiOGQxZGY=
12
12
  data.tar.gz: !binary |-
13
- MThiMjRkOTZlYTk1MGY2NTVjMDg1NzEzMzA2MTNmOWZlOWM2MjhlNGU1NDc4
14
- OTAyZDYyNDAzNGUzOTQzYzJhOGRkMzhhNmYwNjZiZmU5YWE1N2UwMTI3Y2Vk
15
- NzA3NmZmMDA2MjExMWZhMDY3YWQ0ZmI0ZWZmM2JkMjRmZDE4ZDk=
13
+ NzdlMjZkYWMxYWJiMTdjMzJkOTk5MTRjNzZjNjZlNjI3MjRmMjY0Nzc5OTVj
14
+ ZGQ0OWE4NWE3ZGYwYTYyYjNjODQ4ZmVmMDA5OGYxYmMwZjY5NzdlYjNhZmE0
15
+ MzQxMWEzYTliNmM5NTVlNDQ0ZjAzMjYyNWU4Y2Q2ODczZjM1NzE=
@@ -18,5 +18,8 @@ module GoImport
18
18
  end
19
19
 
20
20
  class InvalidNoteClassificationError < StandardError
21
+ def initalize(classification)
22
+ super("#{classification} is not a valid note classification")
23
+ end
21
24
  end
22
25
  end
@@ -87,7 +87,7 @@ module GoImport
87
87
  classification == NoteClassification::ClientVisit
88
88
  @classification = classification
89
89
  else
90
- raise InvalidNoteClassificationError
90
+ raise InvalidNoteClassificationError, classification
91
91
  end
92
92
 
93
93
  end
@@ -117,7 +117,8 @@ module GoImport
117
117
 
118
118
  organization = Organization.new(organization) if !organization.is_a?(Organization)
119
119
 
120
- if find_organization_by_integration_id(organization.integration_id) != nil
120
+ if (!organization.integration_id.nil? && organization.integration_id.length > 0) &&
121
+ find_organization_by_integration_id(organization.integration_id) != nil
121
122
  raise AlreadyAddedError, "Already added an organization with integration_id #{organization.integration_id}"
122
123
  end
123
124
 
@@ -56,7 +56,7 @@ def convert_source
56
56
  # organization notes
57
57
  process_rows ORGANIZATION_NOTE_FILE do |row|
58
58
  # adds itself if applicable
59
- rootmodel.add_note(to_organization_note(row, rootmodel))
59
+ rootmodel.add_note(to_organization_note(converter, row, rootmodel))
60
60
  end
61
61
 
62
62
  # Organization - Deal connection
@@ -77,7 +77,7 @@ def convert_source
77
77
  # deal notes
78
78
  process_rows DEAL_NOTE_FILE do |row|
79
79
  # adds itself if applicable
80
- rootmodel.add_note(to_deal_note(row, rootmodel))
80
+ rootmodel.add_note(to_deal_note(converter, row, rootmodel))
81
81
  end
82
82
 
83
83
  # documents
@@ -148,7 +148,7 @@ end
148
148
 
149
149
  # Turns a row from the Easy exported Company-History.txt file into
150
150
  # a go_import model that is used to generate xml.
151
- def to_organization_note(row, rootmodel)
151
+ def to_organization_note(converter, row, rootmodel)
152
152
  organization = rootmodel.find_organization_by_integration_id(row['idCompany'])
153
153
  coworker = rootmodel.find_coworker_by_integration_id(row['idUser'])
154
154
 
@@ -158,8 +158,26 @@ def to_organization_note(row, rootmodel)
158
158
  note.created_by = coworker
159
159
  note.person = organization.find_employee_by_integration_id(row['idPerson'])
160
160
  note.date = row['Date']
161
- note.text = "#{row['Category']}: #{row['History']}"
162
-
161
+
162
+ if converter.respond_to?(:get_note_classification_for_activity_on_company)
163
+ # we will get an InvalidNoteClassificationError if we are
164
+ # setting and invalid classification. So no need to verify
165
+ # return value from converter.
166
+ classification =
167
+ converter.get_note_classification_for_activity_on_company(row['Category'])
168
+
169
+ if classification.nil?
170
+ classification = GoImport::NoteClassification::Comment
171
+ end
172
+
173
+ note.classification = classification
174
+
175
+ note.text = row['History']
176
+ else
177
+ note.classification = GoImport::NoteClassification::Comment
178
+ note.text = "#{row['Category']}: #{row['History']}"
179
+ end
180
+
163
181
  return note.text.empty? ? nil : note
164
182
  end
165
183
 
@@ -235,7 +253,7 @@ end
235
253
 
236
254
  # Turns a row from the Easy exported Project-History.txt file into
237
255
  # a go_import model that is used to generate xml
238
- def to_deal_note(row, rootmodel)
256
+ def to_deal_note(converter, row, rootmodel)
239
257
  # TODO: This could be improved to read a person from an
240
258
  # organization connected to this deal if any, but since it is
241
259
  # a many to many connection between organizations and deals
@@ -251,6 +269,26 @@ def to_deal_note(row, rootmodel)
251
269
  # Raw history looks like this <category>: <person>: <text>
252
270
  note.text = row['RawHistory']
253
271
 
272
+ if converter.respond_to?(:get_note_classification_for_activity_on_project)
273
+ # we will get an InvalidNoteClassificationError if we are
274
+ # setting and invalid classification. So no need to verify
275
+ # return value from converter.
276
+
277
+ classification =
278
+ converter.get_note_classification_for_activity_on_project(row['Category'])
279
+
280
+ if classification.nil?
281
+ classification = GoImport::NoteClassification::Comment
282
+ end
283
+
284
+ note.classification = classification
285
+ note.text = row['RawHistory'].to_s.sub("#{row['Category']}:", "")
286
+ else
287
+ note.classification = GoImport::NoteClassification::Comment
288
+ note.text = row['RawHistory']
289
+ end
290
+
291
+
254
292
  return note.text.empty? ? nil : note
255
293
  end
256
294
 
@@ -1,4 +1,4 @@
1
- # encoding: UTF-8
1
+ # encoding: iso-8859-1
2
2
  require 'go_import'
3
3
 
4
4
  # Customize this file to suit your input files.
@@ -220,6 +220,7 @@ class Converter
220
220
  ## LIME Go custom fields.
221
221
  # This is how you populate a LIME Go custom field that was created in
222
222
  # the configure method.
223
+
223
224
  # person.set_custom_value("shoe_size", row['shoe size'])
224
225
  end
225
226
 
@@ -268,6 +269,50 @@ class Converter
268
269
  return deal
269
270
  end
270
271
 
272
+ def get_note_classification_for_activity_on_company(activity)
273
+ # When notes are added to LIME Go this method is called for
274
+ # every note that is connected to a company in LIME Easy. The
275
+ # note's activity from LIME Easy is supplied as an argument
276
+ # and this method should return a classification for the note
277
+ # in LIME Go. The return value must be a value from the
278
+ # GoImport::NoteClassification enum. If no classification is
279
+ # return the note will get the default classification 'Comment'
280
+
281
+ # case activity
282
+ # when 'SalesCall'
283
+ # classification = GoImport::NoteClassification::SalesCall
284
+ # when 'Customer Visit'
285
+ # classification = GoImport::NoteClassification::ClientVisit
286
+ # when 'No answer'
287
+ # classification = GoImport::NoteClassification::TriedToReach
288
+ # else
289
+ # classification = GoImport::NoteClassification::Comment
290
+ # end
291
+
292
+ # return classification
293
+ end
294
+
295
+ def get_note_classification_for_activity_on_project(activity)
296
+ # When notes are added to LIME Go this method is called for
297
+ # every note that is connected to a project in LIME Easy. The
298
+ # note's activity from LIME Easy is supplied as an argument
299
+ # and this method should return a classification for the note
300
+ # in LIME Go. The return value must be a value from the
301
+ # GoImport::NoteClassification enum. If no classification is
302
+ # return the note will get the default classification 'Comment'
303
+
304
+ # case activity
305
+ # when 'Installation'
306
+ # classification = GoImport::NoteClassification::ClientVisit
307
+ # when 'No answer'
308
+ # classification = GoImport::NoteClassification::TriedToReach
309
+ # else
310
+ # classification = GoImport::NoteClassification::Comment
311
+ # end
312
+
313
+ # return classification
314
+ end
315
+
271
316
  def configure(rootmodel)
272
317
  #####################################################################
273
318
  ## LIME Go custom fields.
@@ -0,0 +1,14 @@
1
+ # See http://help.github.com/ignore-files/ for more about ignoring files.
2
+ #
3
+ # If you find yourself ignoring temporary files generated by your text editor
4
+ # or operating system, you probably want to add a global ignore instead:
5
+ # git config --global core.excludesfile ~/.gitignore_global
6
+
7
+ # Ignore bundler config
8
+ /.bundle
9
+ # Ignore built gems
10
+ /*.gem
11
+ # Ignore all logfiles and tempfiles.
12
+ /tmp
13
+ /spec/tmp
14
+ pkg
@@ -0,0 +1 @@
1
+ This source converts a csv file to LIME Go.
@@ -0,0 +1,72 @@
1
+
2
+ require 'go_import'
3
+ require_relative("../converter")
4
+
5
+ # COWORKER_FILE and other file names should be defined ../converter.rb
6
+
7
+ def process_rows(file_name)
8
+ data = File.open(file_name, 'r').read.encode('UTF-8',"ISO-8859-1")
9
+ rows = GoImport::CsvHelper::text_to_hashes(data)
10
+ rows.each do |row|
11
+ yield row
12
+ end
13
+ end
14
+
15
+ def convert_source
16
+ puts "Trying to convert Salesforce CSV export to LIME Go..."
17
+
18
+ converter = Converter.new
19
+
20
+ # A rootmodel is used to represent all entitite/models that is
21
+ # exported
22
+ rootmodel = GoImport::RootModel.new
23
+
24
+ if converter.respond_to?(:configure)
25
+ converter.configure(rootmodel)
26
+ end
27
+
28
+ contacts_file = ::File.expand_path('data/contacts.csv', Dir.pwd)
29
+ process_rows contacts_file do |row|
30
+ rootmodel.add_organization(converter.to_organization(row, rootmodel))
31
+ end
32
+
33
+ return rootmodel
34
+
35
+ # coworkers
36
+ # start with these since they are referenced
37
+ # from everywhere....
38
+ if defined?(COWORKER_FILE) && !COWORKER_FILE.nil? && !COWORKER_FILE.empty?
39
+ process_rows COWORKER_FILE do |row|
40
+ rootmodel.add_coworker(converter.to_coworker(row))
41
+ end
42
+ end
43
+
44
+ # organizations
45
+ if defined?(ORGANIZATION_FILE) && !ORGANIZATION_FILE.nil? && !ORGANIZATION_FILE.empty?
46
+ process_rows ORGANIZATION_FILE do |row|
47
+ organization = converter.to_organization(row, rootmodel)
48
+ rootmodel.add_organization(organization)
49
+ end
50
+ end
51
+
52
+ # persons
53
+ # depends on organizations
54
+ if defined?(PERSON_FILE) && !PERSON_FILE.nil? && !PERSON_FILE.empty?
55
+ process_rows PERSON_FILE do |row|
56
+ # adds it self to the employer
57
+ converter.to_person(row, rootmodel)
58
+ end
59
+ end
60
+
61
+ # deals
62
+ # deals can reference coworkers (responsible), organizations
63
+ # and persons (contact)
64
+ if defined?(DEAL_FILE) && !DEAL_FILE.nil? && !DEAL_FILE.empty?
65
+ process_rows DEAL_FILE do |row|
66
+ rootmodel.add_deal(converter.to_deal(row, rootmodel))
67
+ end
68
+ end
69
+
70
+ return rootmodel
71
+ end
72
+
@@ -0,0 +1,5 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'thor'
4
+ gem 'go_import'
5
+ gem 'rspec'
@@ -0,0 +1,47 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ diff-lcs (1.2.5)
5
+ global_phone (1.0.1)
6
+ go_import (3.0.17)
7
+ bundler
8
+ global_phone
9
+ iso_country_codes
10
+ nokogiri
11
+ roo
12
+ sixarm_ruby_email_address_validation
13
+ thor
14
+ iso_country_codes (0.6.1)
15
+ mini_portile (0.6.1)
16
+ nokogiri (1.6.4.1-x86-mingw32)
17
+ mini_portile (~> 0.6.0)
18
+ roo (1.13.2)
19
+ nokogiri
20
+ rubyzip
21
+ spreadsheet (> 0.6.4)
22
+ rspec (3.1.0)
23
+ rspec-core (~> 3.1.0)
24
+ rspec-expectations (~> 3.1.0)
25
+ rspec-mocks (~> 3.1.0)
26
+ rspec-core (3.1.7)
27
+ rspec-support (~> 3.1.0)
28
+ rspec-expectations (3.1.2)
29
+ diff-lcs (>= 1.2.0, < 2.0)
30
+ rspec-support (~> 3.1.0)
31
+ rspec-mocks (3.1.3)
32
+ rspec-support (~> 3.1.0)
33
+ rspec-support (3.1.2)
34
+ ruby-ole (1.2.11.7)
35
+ rubyzip (1.1.6)
36
+ sixarm_ruby_email_address_validation (2.0.0)
37
+ spreadsheet (1.0.0)
38
+ ruby-ole (>= 1.0)
39
+ thor (0.19.1)
40
+
41
+ PLATFORMS
42
+ x86-mingw32
43
+
44
+ DEPENDENCIES
45
+ go_import
46
+ rspec
47
+ thor
@@ -0,0 +1,204 @@
1
+
2
+ require 'go_import'
3
+
4
+ # This converter will convert one or more CVS files into a LIME Go XML
5
+ # file.
6
+
7
+ # You need to customize this script to suit your CVS file(s).
8
+
9
+ # First we set the file names of your CVS files. If you dont need to
10
+ # import all kind of objects, just leave the filename empty or remove
11
+ # the line.
12
+ DATA_FOLDER = "data"
13
+
14
+ #COWORKER_FILE = "data/coworkers.csv"
15
+ #ORGANIZATION_FILE = "data/organizations.csv"
16
+ #PERSON_FILE = "data/persons.csv"
17
+ #DEAL_FILE = "data/deals.csv"
18
+
19
+ # Ie if you dont want to import deals, set DEAL_FILE = ""
20
+
21
+ # If you are importing files then you must set the FILES_FOLDER
22
+ # constant. FILES_FOLDER should point to the folder where the files
23
+ # are stored. FILES_FOLDER can be relative to the project directory
24
+ # or absolute. Note that you need to escape \ with a \ so in order to
25
+ # write \ use \\.
26
+ FILES_FOLDER = "./files"
27
+
28
+ # If you are importing files with an absolute path (eg
29
+ # m:\documents\readme.doc) then you probably wont have files at that
30
+ # location on the computer where "go-import run" is executed. Set
31
+ # FILES_FOLDER_AT_CUSTOMER to the folder where documents are stored at
32
+ # the customers site. Ie, in this example m:\documents.
33
+ # Note that you need to escape \ with a \ so in order to write \ use
34
+ # \\.
35
+ FILES_FOLDER_AT_CUSTOMER = "m:\\documents\\"
36
+
37
+ class Converter
38
+ # Configure your root model, add custom fields and deal statuses.
39
+ def configure(rootmodel)
40
+ # add custom field to your model here. Custom fields can be
41
+ # added to organization, deal and person. Valid types are
42
+ # :String and :Link. If no type is specified :String is used
43
+ # as default.
44
+ # rootmodel.settings.with_organization do |organization|
45
+ # organization.set_custom_field( { :integrationid => 'external_url', :title => 'Link to external system', :type => :Link } )
46
+ # end
47
+
48
+ # rootmodel.settings.with_deal do |deal|
49
+ # deal.add_status({:label => "1. Kvalificering", :integration_id => "qualification"})
50
+ # deal.add_status({:label => "Vunnen", :integration_id => "won",
51
+ # :assessment => GoImport::DealState::PositiveEndState })
52
+ # deal.add_status({:label => "Lost", :integration_id => "Lost",
53
+ # :assessment => GoImport::DealState::NegativeEndState })
54
+ # end
55
+ end
56
+
57
+ # Turns a row from the organization csv file into a
58
+ # GoImport::Organization.
59
+ # Use rootmodel to locate other related stuff such coworker
60
+ def to_organization(row, rootmodel)
61
+ organization = GoImport::Organization.new
62
+
63
+ puts "Trying to create org '#{row}'"
64
+
65
+ return organization
66
+
67
+
68
+ # Integrationid is typically the id in the system that
69
+ # we are getting the csv from. Must be set to be able
70
+ # to import the same file more than once without
71
+ # creating duplicates
72
+ organization.integration_id = row['id']
73
+ organization.name = row['name']
74
+
75
+ # Just setting all basic properties to show whats available
76
+ # Remove or fix...
77
+ organization.organization_number = 'a number' # needs clean up, should have helpers for that in lib. Swedish format.
78
+ organization.email = 'email to organizaiton, not the person'
79
+ organization.web_site = 'www.whatever.com'
80
+ organization.central_phone_number = '0000' # needs clean up, should have helpers for that in lib. Default swedish format, convert to global format
81
+
82
+ # Addresses consists of several parts in Go.
83
+ # Lots of other systems have the address all in one
84
+ # line, to be able to match when importing it is
85
+ # way better to split the addresses
86
+ organization.with_visit_address do |address|
87
+ address.street = 'visit street'
88
+ address.zip_code = 'visit zip'
89
+ address.city = 'visit city'
90
+ end
91
+
92
+ # Another example of setting address using
93
+ # helper to split '226 48 LUND' into zip and city
94
+ organization.with_postal_address do |address|
95
+ address.street = 'postal street'
96
+ address.parse_zip_and_address_se '226 48 LUND'
97
+ end
98
+
99
+ # Responsible coworker is set by first locating
100
+ # it in the root model and then setting a reference
101
+ # to him/her
102
+ # We need to be able handle missing coworkers here
103
+ coworker = rootmodel.find_coworker_by_integration_id row['responsible_id']
104
+ organization.responsible_coworker = coworker.to_reference
105
+
106
+ # Set tags for the organization. All organizations will get
107
+ # the tag "import" automagically
108
+ organization.set_tag("Guldkund")
109
+
110
+ # When imported from web based ERP or similair that
111
+ # client will continue to use it can be useful to be
112
+ # able to link from Go to the same record in the ERP
113
+ # FOr instance Lime links
114
+ organization.set_custom_value("external_url", "http://something.com?key=#{row['id']}")
115
+
116
+ return organization
117
+ end
118
+
119
+ # Turns a row from the coworker csv file into a GoImport::Coworker.
120
+ def to_coworker(row)
121
+ coworker = GoImport::Coworker.new
122
+ coworker.integration_id = row['id']
123
+ coworker.first_name = row['first_name']
124
+ coworker.last_name = row['last_name']
125
+
126
+ # Other optional attributes
127
+ coworker.email = 't@e.com'
128
+ coworker.direct_phone_number = '+46121212'
129
+ coworker.mobile_phone_number = '+46324234'
130
+ coworker.home_phone_number = '+46234234'
131
+
132
+ # Tags and custom fields are set the same
133
+ # way as on organizations
134
+
135
+ return coworker
136
+ end
137
+
138
+ # Turns a row from the person csv file into a GoImport::Person.
139
+ #
140
+ # You MUST add the new person to an existing organization. Use the
141
+ # rootmodel to find the organization and then add the person with
142
+ # organization.add_employee
143
+ def to_person(row, rootmodel)
144
+ person = GoImport::Person.new
145
+ person.integration_id = row['id']
146
+ # Note that Go has separate first and last names
147
+ # Some splitting might be necessary
148
+ person.first_name = row['first_name']
149
+ person.last_name = row['last_name']
150
+ # other optional attributes
151
+ person.direct_phone_number = '+4611111'
152
+ person.fax_phone_number = '+4623234234234'
153
+ person.mobile_phone_number = '+462321212'
154
+ person.email = 'x@y.com'
155
+ person.alternative_email = 'y@x.com'
156
+ person.with_postal_address do |address|
157
+ address.street = 'postal street'
158
+ address.parse_zip_and_address_se '226 48 LUND'
159
+ end
160
+
161
+ # Tags and custom fields are set the same
162
+ # way as on organizations
163
+
164
+ # set employer connection
165
+ employer_id = row['employer_id']
166
+ employer = rootmodel.find_organization_by_integration_id employer_id
167
+ employer.add_employee person
168
+ end
169
+
170
+ # Turns a row form the deal csv file into a GoImport::Deal. Use
171
+ # the rootmodel to find objects that should be linked to the new
172
+ # deal.
173
+ def to_deal(row, rootmodel)
174
+ deal = GoImport::Deal.new
175
+ deal.integration_id = row['id']
176
+ deal.name = row['name']
177
+ # should be integer, same currency should be used in
178
+ # the system
179
+ deal.value = row['value']
180
+
181
+ # find stuff connected to deal
182
+ responsible = rootmodel.find_coworker_by_integration_id row['responsible_id']
183
+ organization = rootmodel.find_organization_by_integration_id row['customer_id']
184
+ person = organization.find_employee_by_integration_id row['customer_contact_id']
185
+ # connect the deal by references
186
+ deal.responsible_coworker = responsible.to_reference
187
+ deal.customer = organization.to_reference
188
+ deal.customer_contact = person.to_reference
189
+
190
+ # other optional attributes
191
+ deal.probability = 50 # should be between 0 - 100
192
+ deal.order_date = '2014-01-05' # Format ?
193
+
194
+ # status, set this by either label, id or integration_id (use
195
+ # appropriate method to find status)
196
+ deal.status = rootmodel.settings.deal.find_status_by_label row['status']
197
+
198
+ # or set by existing status, search by label, integration_id
199
+ # (if string) or id (if integer).
200
+ # deal.status = "Won"
201
+
202
+ return deal
203
+ end
204
+ end
@@ -0,0 +1,4 @@
1
+ FirstName,LastName,Title,ReportsTo.Email,Birthdate,Description
2
+ Tom,Jones,Senior Director,buyer@salesforcesample.com,1940-06-07Z,"Self-described as ""the top"" branding guru on the West Coast"
3
+ Ian,Dury,Chief Imagineer,cto@salesforcesample.com,,"World-renowned expert in fuzzy logic design.
4
+ Influential in technology purchases."
Binary file
@@ -96,10 +96,25 @@ describe "RootModel" do
96
96
  rootmodel.organizations.length.should eq 1
97
97
  end
98
98
 
99
+ it "will add two organizations without integration id" do
100
+ # given
101
+ org1 = GoImport::Organization.new
102
+ org1.name = "Beagle Boys"
103
+ org2 = GoImport::Organization.new
104
+ org2.name = "The Corporation"
105
+
106
+ # when
107
+ rootmodel.add_organization(org1)
108
+ rootmodel.add_organization(org2)
109
+
110
+ # then
111
+ rootmodel.organizations.length.should eq 2
112
+ end
113
+
99
114
  it "can add a deal from hash" do
100
115
  rootmodel.add_deal({
101
- :integration_id => "123key",
102
- :name => "Big deal"
116
+ :integration_id => "123key",
117
+ :name => "Big deal"
103
118
  })
104
119
  rootmodel.find_deal_by_integration_id("123key").name.should eq "Big deal"
105
120
  rootmodel.deals.length.should eq 1
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.17
4
+ version: 3.0.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Oskar Gewalli
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2014-11-14 00:00:00.000000000 Z
14
+ date: 2014-11-26 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: iso_country_codes
@@ -227,6 +227,14 @@ files:
227
227
  - sources/excel-basic/files/offert-2.docx
228
228
  - sources/excel-basic/files/offert.docx
229
229
  - sources/excel-basic/Gemfile
230
+ - sources/salesforce/.gitignore
231
+ - sources/salesforce/.go_import/readme.txt
232
+ - sources/salesforce/.go_import/runner.rb
233
+ - sources/salesforce/converter.rb
234
+ - sources/salesforce/data/contacts.csv
235
+ - sources/salesforce/Gemfile
236
+ - sources/salesforce/Gemfile.lock
237
+ - sources/salesforce/go.zip
230
238
  - sources/VISMA/.gitignore
231
239
  - sources/VISMA/.go_import/readme.txt
232
240
  - sources/VISMA/.go_import/runner.rb