fruit_to_lime 2.4.1 → 2.5.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -4,4 +4,7 @@ module FruitToLime
4
4
 
5
5
  class InvalidCustomFieldError < StandardError
6
6
  end
7
+
8
+ class InvalidRelationError < StandardError
9
+ end
7
10
  end
@@ -13,7 +13,7 @@ module FruitToLime
13
13
  end
14
14
 
15
15
  def serialize_variables
16
- [:id, :heading, :integration_id].map {|p| {:id => p, :type => :string} }
16
+ [:id, :integration_id, :heading].map {|p| {:id => p, :type => :string} }
17
17
  end
18
18
 
19
19
  def serialize_name
@@ -41,9 +41,9 @@ module FruitToLime
41
41
  include SerializeHelper, ModelHasCustomFields, ModelHasTags
42
42
 
43
43
  attr_accessor :id, :integration_id, :name, :organization_number, :email, :web_site,
44
- :postal_address, :visit_address, :central_phone_number, :responsible_coworker, :source_data
44
+ :postal_address, :visit_address, :central_phone_number, :source_data
45
45
 
46
- attr_reader :employees
46
+ attr_reader :employees, :responsible_coworker, :relation
47
47
  # you add custom values by using {#set_custom_value}
48
48
  attr_reader :custom_values
49
49
 
@@ -54,6 +54,8 @@ module FruitToLime
54
54
  instance_variable_set("@" + myattr[:id].to_s, val) if val != nil
55
55
  end
56
56
  end
57
+
58
+ @relation = Relation::NoRelation if @relation.nil?
57
59
  end
58
60
 
59
61
  def to_reference()
@@ -106,16 +108,6 @@ module FruitToLime
106
108
  yield @source
107
109
  end
108
110
 
109
- # @example Set the responsible coworker of the organization to the coworker with integration id 943
110
- # o.with_responsible_coworker do |responsible_coworker|
111
- # responsible_coworker.integration_id = "943"
112
- # end
113
- # @see CoworkerReference responsible_coworker
114
- def with_responsible_coworker
115
- @responsible_coworker = CoworkerReference.new if @responsible_coworker==nil
116
- yield @responsible_coworker
117
- end
118
-
119
111
  # @example Add an employee and then add additional info to that employee
120
112
  # employee = o.add_employee({
121
113
  # :integration_id => "79654",
@@ -132,12 +124,20 @@ module FruitToLime
132
124
  person
133
125
  end
134
126
 
135
- # TODO! Remove, it's obsolete
136
- # @!visibility private
137
- def add_responsible_coworker(val)
138
- coworker = if val.is_a? CoworkerReference then val else CoworkerReference.new(val) end
139
- @responsible_coworker = coworker
140
- coworker
127
+ def responsible_coworker=(coworker)
128
+ @responsible_coworker = CoworkerReference.from_coworker(coworker)
129
+ end
130
+
131
+ # Sets the organization's relation to the specified value. The
132
+ # relation must be a valid value from the Relation module
133
+ # otherwise an InvalidRelationError error will be thrown.
134
+ def relation=(relation)
135
+ if relation == Relation::NoRelation || relation == Relation::WorkingOnIt ||
136
+ relation == Relation::IsACustomer || relation == Relation::WasACustomer || relation == Relation::BeenInTouch
137
+ @relation = relation
138
+ else
139
+ raise InvalidRelationError
140
+ end
141
141
  end
142
142
 
143
143
  def find_employee_by_integration_id(integration_id)
@@ -162,7 +162,8 @@ module FruitToLime
162
162
  { :id => :employees, :type => :persons },
163
163
  { :id => :custom_values, :type => :custom_values },
164
164
  { :id => :tags, :type => :tags },
165
- { :id => :responsible_coworker, :type => :coworker_reference}
165
+ { :id => :responsible_coworker, :type => :coworker_reference},
166
+ { :id => :relation, :type => :string }
166
167
  ]
167
168
  end
168
169
 
@@ -22,7 +22,7 @@ module FruitToLime
22
22
  return nil
23
23
  elsif person.is_a?(Person)
24
24
  return person.to_reference
25
- elsif coworker.is?(PersonReference)
25
+ elsif person.is_a?(PersonReference)
26
26
  return person
27
27
  end
28
28
  end
@@ -0,0 +1,23 @@
1
+ module FruitToLime
2
+ module Relation
3
+ # This is the default, we have not been in contact with this
4
+ # organization in any way.
5
+ NoRelation = 0
6
+
7
+ # Something is happening with this organization, we might have
8
+ # booked a meeting with them or created a deal, etc.
9
+ WorkingOnIt = 1
10
+
11
+ # We have made a deal with this organization.
12
+ IsACustomer = 2
13
+
14
+ # We have made a deal with this organization but it was some
15
+ # time ago and we don't consider them a customer any more.
16
+ WasACustomer = 3
17
+
18
+ # We had something going with this organization but we
19
+ # couldn't close the deal and we don't think they will be a
20
+ # customer to us in the foreseeable future.
21
+ BeenInTouch = 4
22
+ end
23
+ end
@@ -33,9 +33,9 @@ describe FruitToLime::SerializeHelper do
33
33
  o.with_visit_address do |addr|
34
34
  addr.city = "Gaaseborg"
35
35
  end
36
- o.with_responsible_coworker do |coworker|
37
- coworker.integration_id = "1"
38
- end
36
+ coworker = FruitToLime::Coworker.new({:integration_id => "1", :first_name => "Vincent", :last_name => "Vega"})
37
+ o.responsible_coworker = coworker
38
+
39
39
  emp = o.add_employee({
40
40
  :integration_id => "1",
41
41
  :first_name => "Kalle",
@@ -45,15 +45,14 @@ describe FruitToLime::SerializeHelper do
45
45
  emp.currently_employed = true
46
46
  i.organizations.push(o)
47
47
  xsd_file = File.join(File.dirname(__FILE__), '..', 'sample_data', 'schema0.xsd')
48
-
48
+
49
49
  xsd = Nokogiri::XML::Schema(File.read(xsd_file))
50
- #puts FruitToLime::SerializeHelper::serialize(i)
51
50
  doc = Nokogiri::XML(FruitToLime::SerializeHelper::serialize(i,-1))
52
51
  xsd.validate(doc)
53
52
  }
54
53
  it "Should not contain validation errors" do
55
54
  expect(validate_result).to eq([])
56
55
  end
57
-
56
+
58
57
  end
59
- end
58
+ end
@@ -17,6 +17,38 @@ describe "Organization" do
17
17
 
18
18
  organization.validate.length > 0
19
19
  end
20
+
21
+ it "will auto convert coworker to coworker.ref during assignment" do
22
+ # given
23
+ coworker = FruitToLime::Coworker.new({:integration_id => "456", :first_name => "Billy", :last_name => "Bob"})
24
+
25
+ # when
26
+ organization.responsible_coworker = coworker
27
+
28
+ # then
29
+ organization.responsible_coworker.is_a?(FruitToLime::CoworkerReference).should eq true
30
+ end
31
+
32
+ it "will have a no relation as default" do
33
+ # given, when, then
34
+ organization.relation.should eq FruitToLime::Relation::NoRelation
35
+ end
36
+
37
+ it "should only accept relations from Relations enum" do
38
+ # given, when
39
+ organization.relation = FruitToLime::Relation::IsACustomer
40
+
41
+ # then
42
+ organization.relation.should eq FruitToLime::Relation::IsACustomer
43
+ end
44
+
45
+ it "should not accept invalid relations" do
46
+ # when, then
47
+ expect {
48
+ organization.relation = "hubbabubba"
49
+ }.to raise_error(FruitToLime::InvalidRelationError)
50
+ end
51
+
20
52
  end
21
53
 
22
54
  describe "OrganizationReference" do
@@ -75,6 +75,10 @@ class Converter
75
75
  # same file more than once without creating duplicates
76
76
  organization.integration_id = row['ID']
77
77
 
78
+ # Sets the organization's relation. Relation must be a value
79
+ # from FruitToLime::Relation.
80
+ organization.relation = FruitToLime::Relation::IsACustomer
81
+
78
82
  # *** TODO:
79
83
  #
80
84
  # Set organization properties from the 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: 2.4.1
4
+ version: 2.5.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-05-19 00:00:00.000000000 Z
14
+ date: 2014-05-26 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: iso_country_codes
@@ -182,6 +182,7 @@ files:
182
182
  - lib/fruit_to_lime/model/organization.rb
183
183
  - lib/fruit_to_lime/model/person.rb
184
184
  - lib/fruit_to_lime/model/referencetosource.rb
185
+ - lib/fruit_to_lime/model/relation.rb
185
186
  - lib/fruit_to_lime/model/rootmodel.rb
186
187
  - lib/fruit_to_lime/model/settings.rb
187
188
  - lib/fruit_to_lime/model/tag.rb