fruit_to_lime 2.5.5 → 2.5.6
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.
- data/lib/fruit_to_lime.rb +17 -17
- data/lib/fruit_to_lime/csv_helper.rb +47 -47
- data/lib/fruit_to_lime/email_helper.rb +10 -10
- data/lib/fruit_to_lime/errors.rb +16 -16
- data/lib/fruit_to_lime/excel_helper.rb +10 -10
- data/lib/fruit_to_lime/global_phone.json +6571 -6571
- data/lib/fruit_to_lime/model/address.rb +60 -60
- data/lib/fruit_to_lime/model/class_settings.rb +50 -50
- data/lib/fruit_to_lime/model/coworker.rb +76 -76
- data/lib/fruit_to_lime/model/coworker_reference.rb +33 -33
- data/lib/fruit_to_lime/model/customfield.rb +87 -87
- data/lib/fruit_to_lime/model/deal.rb +141 -141
- data/lib/fruit_to_lime/model/deal_status.rb +12 -12
- data/lib/fruit_to_lime/model/note.rb +80 -79
- data/lib/fruit_to_lime/model/organization.rb +203 -203
- data/lib/fruit_to_lime/model/person.rb +151 -151
- data/lib/fruit_to_lime/model/referencetosource.rb +45 -45
- data/lib/fruit_to_lime/model/relation.rb +23 -23
- data/lib/fruit_to_lime/model/rootmodel.rb +342 -338
- data/lib/fruit_to_lime/model/settings.rb +60 -60
- data/lib/fruit_to_lime/model/tag.rb +35 -35
- data/lib/fruit_to_lime/model_helpers.rb +54 -54
- data/lib/fruit_to_lime/phone_helper.rb +74 -74
- data/lib/fruit_to_lime/roo_helper.rb +72 -72
- data/lib/fruit_to_lime/serialize_helper.rb +186 -186
- data/lib/fruit_to_lime/templating.rb +52 -52
- data/spec/address_spec.rb +48 -48
- data/spec/class_settings_spec.rb +37 -37
- data/spec/coworker_spec.rb +94 -94
- data/spec/custom_field_spec.rb +22 -22
- data/spec/deal_spec.rb +101 -101
- data/spec/helpers/csv_helper_spec.rb +29 -29
- data/spec/helpers/email_helper_spec.rb +32 -32
- data/spec/helpers/phone_helper_spec.rb +97 -97
- data/spec/helpers/serialize_helper_spec.rb +249 -249
- data/spec/helpers/xsd_validate_spec.rb +58 -58
- data/spec/note_spec.rb +98 -98
- data/spec/organization_spec.rb +103 -103
- data/spec/person_spec.rb +134 -134
- data/spec/rootmodel_spec.rb +306 -277
- data/spec/templating_spec.rb +11 -11
- data/templates/csv/lib/tomodel.rb +230 -230
- data/templates/csv/spec/exporter_spec.rb +17 -17
- data/templates/csv/spec/sample_data/coworkers.csv +2 -2
- data/templates/csv/spec/sample_data/deals.csv +2 -2
- data/templates/csv/spec/sample_data/organizations.csv +2 -2
- data/templates/csv/spec/sample_data/persons.csv +2 -2
- data/templates/easy/Gemfile +5 -5
- data/templates/easy/Rakefile.rb +7 -7
- data/templates/easy/convert.rb +2 -2
- data/templates/easy/spec/exporter_spec.rb +10 -10
- data/templates/easy/spec/spec_helper.rb +24 -24
- data/templates/excel/lib/tomodel.rb +207 -207
- data/templates/sqlserver/lib/tomodel.rb +79 -79
- metadata +3 -3
@@ -1,61 +1,61 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module FruitToLime
|
3
|
-
class Settings
|
4
|
-
include SerializeHelper
|
5
|
-
attr_reader :organization, :person, :deal
|
6
|
-
|
7
|
-
# @example Add custom fields available for organization
|
8
|
-
# rootmodel.settings.with_organization do |organization_settings|
|
9
|
-
# organization_settings.set_custom_field({:integration_id=>"link_to_bi_system", :title=>"Link to BI system"})
|
10
|
-
# organization_settings.set_custom_field({:integration_id=>"yield_quota", :title=>"Yield quota"})
|
11
|
-
# end
|
12
|
-
# @see ClassSettings
|
13
|
-
# @see CustomField
|
14
|
-
# @see RootModel
|
15
|
-
def with_organization
|
16
|
-
@organization = ClassSettings.new if @organization ==nil
|
17
|
-
yield @organization
|
18
|
-
end
|
19
|
-
|
20
|
-
# @example Add custom fields available for person
|
21
|
-
# rootmodel.settings.with_person do |person_settings|
|
22
|
-
# person_settings.set_custom_field({:integration_id=>"link_to_bi_system", :title=>"Link to BI system"})
|
23
|
-
# end
|
24
|
-
# @see ClassSettings
|
25
|
-
# @see CustomField
|
26
|
-
# @see RootModel
|
27
|
-
def with_person
|
28
|
-
@person = ClassSettings.new if @person ==nil
|
29
|
-
yield @person
|
30
|
-
end
|
31
|
-
|
32
|
-
# @example Add custom fields available for deal
|
33
|
-
# rootmodel.settings.with_deal do |deal_settings|
|
34
|
-
# deal_settings.set_custom_field({:integration_id=>"link_to_bi_system", :title=>"Link to BI system"})
|
35
|
-
# end
|
36
|
-
# @see ClassSettings
|
37
|
-
# @see CustomField
|
38
|
-
# @see RootModel
|
39
|
-
def with_deal
|
40
|
-
@deal = ClassSettings.new if @deal ==nil
|
41
|
-
yield @deal
|
42
|
-
end
|
43
|
-
|
44
|
-
def initialize(opt = nil)
|
45
|
-
if opt != nil
|
46
|
-
serialize_variables.each do |myattr|
|
47
|
-
val = opt[myattr[:id]]
|
48
|
-
instance_variable_set("@" + myattr[:id].to_s, val) if val != nil
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
|
53
|
-
def serialize_variables
|
54
|
-
[:organization, :person, :deal].map {|p| {:id => p, :type => :class_settings} }
|
55
|
-
end
|
56
|
-
|
57
|
-
def serialize_name
|
58
|
-
"Settings"
|
59
|
-
end
|
60
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
module FruitToLime
|
3
|
+
class Settings
|
4
|
+
include SerializeHelper
|
5
|
+
attr_reader :organization, :person, :deal
|
6
|
+
|
7
|
+
# @example Add custom fields available for organization
|
8
|
+
# rootmodel.settings.with_organization do |organization_settings|
|
9
|
+
# organization_settings.set_custom_field({:integration_id=>"link_to_bi_system", :title=>"Link to BI system"})
|
10
|
+
# organization_settings.set_custom_field({:integration_id=>"yield_quota", :title=>"Yield quota"})
|
11
|
+
# end
|
12
|
+
# @see ClassSettings
|
13
|
+
# @see CustomField
|
14
|
+
# @see RootModel
|
15
|
+
def with_organization
|
16
|
+
@organization = ClassSettings.new if @organization ==nil
|
17
|
+
yield @organization
|
18
|
+
end
|
19
|
+
|
20
|
+
# @example Add custom fields available for person
|
21
|
+
# rootmodel.settings.with_person do |person_settings|
|
22
|
+
# person_settings.set_custom_field({:integration_id=>"link_to_bi_system", :title=>"Link to BI system"})
|
23
|
+
# end
|
24
|
+
# @see ClassSettings
|
25
|
+
# @see CustomField
|
26
|
+
# @see RootModel
|
27
|
+
def with_person
|
28
|
+
@person = ClassSettings.new if @person ==nil
|
29
|
+
yield @person
|
30
|
+
end
|
31
|
+
|
32
|
+
# @example Add custom fields available for deal
|
33
|
+
# rootmodel.settings.with_deal do |deal_settings|
|
34
|
+
# deal_settings.set_custom_field({:integration_id=>"link_to_bi_system", :title=>"Link to BI system"})
|
35
|
+
# end
|
36
|
+
# @see ClassSettings
|
37
|
+
# @see CustomField
|
38
|
+
# @see RootModel
|
39
|
+
def with_deal
|
40
|
+
@deal = ClassSettings.new if @deal ==nil
|
41
|
+
yield @deal
|
42
|
+
end
|
43
|
+
|
44
|
+
def initialize(opt = nil)
|
45
|
+
if opt != nil
|
46
|
+
serialize_variables.each do |myattr|
|
47
|
+
val = opt[myattr[:id]]
|
48
|
+
instance_variable_set("@" + myattr[:id].to_s, val) if val != nil
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def serialize_variables
|
54
|
+
[:organization, :person, :deal].map {|p| {:id => p, :type => :class_settings} }
|
55
|
+
end
|
56
|
+
|
57
|
+
def serialize_name
|
58
|
+
"Settings"
|
59
|
+
end
|
60
|
+
end
|
61
61
|
end
|
@@ -1,35 +1,35 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
module FruitToLime
|
4
|
-
class Tag
|
5
|
-
def serialize_name
|
6
|
-
"Tag"
|
7
|
-
end
|
8
|
-
|
9
|
-
attr_accessor :value
|
10
|
-
|
11
|
-
def initialize(val=nil)
|
12
|
-
if val
|
13
|
-
@value = val
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
# @!visibility private
|
18
|
-
def to_rexml(elem)
|
19
|
-
element_name = serialize_name
|
20
|
-
elem.add_element(element_name).text = @value.to_s.encode('utf-8')
|
21
|
-
end
|
22
|
-
|
23
|
-
def to_s
|
24
|
-
return "tag: '#{@value}'"
|
25
|
-
end
|
26
|
-
|
27
|
-
def ==(other)
|
28
|
-
if other.respond_to?(:value)
|
29
|
-
return @value == other.value
|
30
|
-
else
|
31
|
-
return false
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module FruitToLime
|
4
|
+
class Tag
|
5
|
+
def serialize_name
|
6
|
+
"Tag"
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_accessor :value
|
10
|
+
|
11
|
+
def initialize(val=nil)
|
12
|
+
if val
|
13
|
+
@value = val
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
# @!visibility private
|
18
|
+
def to_rexml(elem)
|
19
|
+
element_name = serialize_name
|
20
|
+
elem.add_element(element_name).text = @value.to_s.encode('utf-8')
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_s
|
24
|
+
return "tag: '#{@value}'"
|
25
|
+
end
|
26
|
+
|
27
|
+
def ==(other)
|
28
|
+
if other.respond_to?(:value)
|
29
|
+
return @value == other.value
|
30
|
+
else
|
31
|
+
return false
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,54 +1,54 @@
|
|
1
|
-
module FruitToLime
|
2
|
-
module ModelHasCustomFields
|
3
|
-
# @example
|
4
|
-
# value = row['business_value_partner_info']
|
5
|
-
# obj.set_custom_value("partner_info", value)
|
6
|
-
def set_custom_value(integration_id, value)
|
7
|
-
return set_custom_field({integration_id: integration_id, value: value})
|
8
|
-
end
|
9
|
-
# @example
|
10
|
-
# value = row['business_value_partner_info']
|
11
|
-
# obj.set_custom_field({:integration_id=>"partner_info", :value=>value})
|
12
|
-
def set_custom_field(obj)
|
13
|
-
@custom_values = [] if @custom_values == nil
|
14
|
-
value = obj[:value]
|
15
|
-
field = CustomFieldReference.new(obj)
|
16
|
-
custom_value = CustomValue.new
|
17
|
-
custom_value.value = value
|
18
|
-
custom_value.field = field
|
19
|
-
index = @custom_values.find_index do |custom_value|
|
20
|
-
custom_value.field.same_as?(field)
|
21
|
-
end
|
22
|
-
if index
|
23
|
-
@custom_values.delete_at index
|
24
|
-
end
|
25
|
-
|
26
|
-
@custom_values.push custom_value
|
27
|
-
return custom_value
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
module ModelWithIntegrationIdSameAs
|
32
|
-
# check if other is same as regarding integration_id or id
|
33
|
-
def same_as?(other)
|
34
|
-
if @integration_id!=nil && @integration_id == other.integration_id
|
35
|
-
return true
|
36
|
-
end
|
37
|
-
if @id != nil && @id == other.id
|
38
|
-
return true
|
39
|
-
end
|
40
|
-
return false
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
module ModelHasTags
|
45
|
-
# @example
|
46
|
-
# obj.set_tag("partner")
|
47
|
-
def set_tag(str)
|
48
|
-
@tags = [] if @tags == nil
|
49
|
-
if ! @tags.any? {|tag| tag.value == str }
|
50
|
-
@tags.push(Tag.new(str))
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
1
|
+
module FruitToLime
|
2
|
+
module ModelHasCustomFields
|
3
|
+
# @example
|
4
|
+
# value = row['business_value_partner_info']
|
5
|
+
# obj.set_custom_value("partner_info", value)
|
6
|
+
def set_custom_value(integration_id, value)
|
7
|
+
return set_custom_field({integration_id: integration_id, value: value})
|
8
|
+
end
|
9
|
+
# @example
|
10
|
+
# value = row['business_value_partner_info']
|
11
|
+
# obj.set_custom_field({:integration_id=>"partner_info", :value=>value})
|
12
|
+
def set_custom_field(obj)
|
13
|
+
@custom_values = [] if @custom_values == nil
|
14
|
+
value = obj[:value]
|
15
|
+
field = CustomFieldReference.new(obj)
|
16
|
+
custom_value = CustomValue.new
|
17
|
+
custom_value.value = value
|
18
|
+
custom_value.field = field
|
19
|
+
index = @custom_values.find_index do |custom_value|
|
20
|
+
custom_value.field.same_as?(field)
|
21
|
+
end
|
22
|
+
if index
|
23
|
+
@custom_values.delete_at index
|
24
|
+
end
|
25
|
+
|
26
|
+
@custom_values.push custom_value
|
27
|
+
return custom_value
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module ModelWithIntegrationIdSameAs
|
32
|
+
# check if other is same as regarding integration_id or id
|
33
|
+
def same_as?(other)
|
34
|
+
if @integration_id!=nil && @integration_id == other.integration_id
|
35
|
+
return true
|
36
|
+
end
|
37
|
+
if @id != nil && @id == other.id
|
38
|
+
return true
|
39
|
+
end
|
40
|
+
return false
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
module ModelHasTags
|
45
|
+
# @example
|
46
|
+
# obj.set_tag("partner")
|
47
|
+
def set_tag(str)
|
48
|
+
@tags = [] if @tags == nil
|
49
|
+
if ! @tags.any? {|tag| tag.value == str }
|
50
|
+
@tags.push(Tag.new(str))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -1,74 +1,74 @@
|
|
1
|
-
require 'global_phone'
|
2
|
-
|
3
|
-
module FruitToLime
|
4
|
-
# The PhoneHelper helps you parse and format phone number strings
|
5
|
-
# into pretty looking numbers.
|
6
|
-
class PhoneHelper
|
7
|
-
GlobalPhone.db_path = File.join(File.dirname(__FILE__), 'global_phone.json')
|
8
|
-
GlobalPhone.default_territory_name = :se
|
9
|
-
|
10
|
-
# Sets the country code used during parsning. The default is
|
11
|
-
# swedish (:se) and if you are parsing swedish numbers you
|
12
|
-
# dont need to set the country code.
|
13
|
-
def self.set_country_code(country_code)
|
14
|
-
GlobalPhone.default_territory_name = country_code
|
15
|
-
end
|
16
|
-
|
17
|
-
# Parses the specifed number_string and returns only valid
|
18
|
-
# numbers.
|
19
|
-
# @see parse_numbers
|
20
|
-
def self.parse_numbers_strict(number_string, delimiters = ',')
|
21
|
-
parse_numbers number_string, delimiters, true
|
22
|
-
end
|
23
|
-
|
24
|
-
# Parses the specified number_string into one or more phone
|
25
|
-
# numbers using the specified delimiters. If strict_mode is
|
26
|
-
# true only valid numbers are returned, otherwise are invalid
|
27
|
-
# numbers returned as found in the number_string.
|
28
|
-
#
|
29
|
-
# @example Parse a number
|
30
|
-
# number = FruitToLime::PhoneHelper.parse_numbers("046 - 270 48 00")
|
31
|
-
#
|
32
|
-
# @example Parses a string with two numbers and a custom delimiter
|
33
|
-
# source = "046 - 270 48 00/ 031-712 44 00"
|
34
|
-
# number1, number2 = FruitToLime::PhoneHelper.parse_numbers(source, '/')
|
35
|
-
def self.parse_numbers(number_string, delimiters = ',', strict_mode = false)
|
36
|
-
numbers = []
|
37
|
-
|
38
|
-
if delimiters.is_a?(Array)
|
39
|
-
# we have several delimiters, replace all delimiters
|
40
|
-
# in the number_string with the first delimiter
|
41
|
-
delimiters.each do |del|
|
42
|
-
number_string = number_string.sub(del, delimiters[0])
|
43
|
-
end
|
44
|
-
delimiter = delimiters[0]
|
45
|
-
elsif delimiters.is_a?(String)
|
46
|
-
delimiter = delimiters
|
47
|
-
else
|
48
|
-
raise "delimiters should be either a string or and array of strings"
|
49
|
-
end
|
50
|
-
|
51
|
-
number_string.split(delimiter).each do |possible_number|
|
52
|
-
if !possible_number.empty?
|
53
|
-
number = GlobalPhone.parse([possible_number])
|
54
|
-
|
55
|
-
if !number.nil? && number.valid?
|
56
|
-
numbers.push number.to_s
|
57
|
-
else
|
58
|
-
if !strict_mode
|
59
|
-
numbers.push possible_number
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
if numbers.length == 0
|
66
|
-
return ""
|
67
|
-
elsif numbers.length == 1
|
68
|
-
return numbers[0]
|
69
|
-
else
|
70
|
-
return numbers
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
1
|
+
require 'global_phone'
|
2
|
+
|
3
|
+
module FruitToLime
|
4
|
+
# The PhoneHelper helps you parse and format phone number strings
|
5
|
+
# into pretty looking numbers.
|
6
|
+
class PhoneHelper
|
7
|
+
GlobalPhone.db_path = File.join(File.dirname(__FILE__), 'global_phone.json')
|
8
|
+
GlobalPhone.default_territory_name = :se
|
9
|
+
|
10
|
+
# Sets the country code used during parsning. The default is
|
11
|
+
# swedish (:se) and if you are parsing swedish numbers you
|
12
|
+
# dont need to set the country code.
|
13
|
+
def self.set_country_code(country_code)
|
14
|
+
GlobalPhone.default_territory_name = country_code
|
15
|
+
end
|
16
|
+
|
17
|
+
# Parses the specifed number_string and returns only valid
|
18
|
+
# numbers.
|
19
|
+
# @see parse_numbers
|
20
|
+
def self.parse_numbers_strict(number_string, delimiters = ',')
|
21
|
+
parse_numbers number_string, delimiters, true
|
22
|
+
end
|
23
|
+
|
24
|
+
# Parses the specified number_string into one or more phone
|
25
|
+
# numbers using the specified delimiters. If strict_mode is
|
26
|
+
# true only valid numbers are returned, otherwise are invalid
|
27
|
+
# numbers returned as found in the number_string.
|
28
|
+
#
|
29
|
+
# @example Parse a number
|
30
|
+
# number = FruitToLime::PhoneHelper.parse_numbers("046 - 270 48 00")
|
31
|
+
#
|
32
|
+
# @example Parses a string with two numbers and a custom delimiter
|
33
|
+
# source = "046 - 270 48 00/ 031-712 44 00"
|
34
|
+
# number1, number2 = FruitToLime::PhoneHelper.parse_numbers(source, '/')
|
35
|
+
def self.parse_numbers(number_string, delimiters = ',', strict_mode = false)
|
36
|
+
numbers = []
|
37
|
+
|
38
|
+
if delimiters.is_a?(Array)
|
39
|
+
# we have several delimiters, replace all delimiters
|
40
|
+
# in the number_string with the first delimiter
|
41
|
+
delimiters.each do |del|
|
42
|
+
number_string = number_string.sub(del, delimiters[0])
|
43
|
+
end
|
44
|
+
delimiter = delimiters[0]
|
45
|
+
elsif delimiters.is_a?(String)
|
46
|
+
delimiter = delimiters
|
47
|
+
else
|
48
|
+
raise "delimiters should be either a string or and array of strings"
|
49
|
+
end
|
50
|
+
|
51
|
+
number_string.split(delimiter).each do |possible_number|
|
52
|
+
if !possible_number.empty?
|
53
|
+
number = GlobalPhone.parse([possible_number])
|
54
|
+
|
55
|
+
if !number.nil? && number.valid?
|
56
|
+
numbers.push number.to_s
|
57
|
+
else
|
58
|
+
if !strict_mode
|
59
|
+
numbers.push possible_number
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
if numbers.length == 0
|
66
|
+
return ""
|
67
|
+
elsif numbers.length == 1
|
68
|
+
return numbers[0]
|
69
|
+
else
|
70
|
+
return numbers
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|