fruit_to_lime 0.9.3 → 2.0.0
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/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
         |