basecrm 1.1.0 → 1.1.1
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 +4 -4
- data/README.md +9 -3
- data/lib/basecrm.rb +1 -0
- data/lib/basecrm/models/meta.rb +11 -0
- data/lib/basecrm/services/sync_service.rb +9 -3
- data/lib/basecrm/sync.rb +2 -2
- data/lib/basecrm/version.rb +1 -1
- data/spec/basecrm/sync_spec.rb +8 -7
- data/spec/services/sync_service_spec.rb +8 -4
- metadata +3 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: e150ccbdeb24176553161e55e95a985d0355519d
         | 
| 4 | 
            +
              data.tar.gz: c3425ea82d471eb5c98fd998f3fc4107afdae7d6
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: be39ed5e4cbdede0f58e3ff0b0ae0a0a15d84107f12a72f2cf708bc1b74b2df6065e839ca0f433a0d3a9958d1725ee8a0334cb55c84747a901a10b668088c30d
         | 
| 7 | 
            +
              data.tar.gz: f8fd742d3ba87a17968f40fdb1eea93a0884a1dd8c9a79e32ec5001cc177ab7f54a1011050ea997223cb278998e6c9b77e6444b6881ddd299e8eaa82f73d3ab5
         | 
    
        data/README.md
    CHANGED
    
    | @@ -135,12 +135,18 @@ sync = BaseCRM::Sync.new(client: client, device_uuid: "<YOUR_DEVICES_UUID>") | |
| 135 135 | 
             
            Now all you have to do is to call `#fetch` method and pass a block that you might use to store fetched data to a database.
         | 
| 136 136 |  | 
| 137 137 | 
             
            ```ruby
         | 
| 138 | 
            -
            sync.fetch do | | 
| 139 | 
            -
               | 
| 138 | 
            +
            sync.fetch do |meta, resource|
         | 
| 139 | 
            +
              options = {
         | 
| 140 | 
            +
                table: meta.type,
         | 
| 141 | 
            +
                statement: meta.sync.event_type,
         | 
| 142 | 
            +
                properties: resource
         | 
| 143 | 
            +
              }
         | 
| 144 | 
            +
             | 
| 145 | 
            +
              DB.execute(options) ? meta.sync.ack : meta.sync.nack
         | 
| 140 146 | 
             
            end
         | 
| 141 147 | 
             
            ```
         | 
| 142 148 |  | 
| 143 | 
            -
            Notice that you must call either `#ack` or `#nack` method | 
| 149 | 
            +
            Notice that you must call either `#ack` or `#nack` method on an instance of `BaseCRM::SyncMeta`.
         | 
| 144 150 |  | 
| 145 151 | 
             
            ## Resources and actions
         | 
| 146 152 |  | 
    
        data/lib/basecrm.rb
    CHANGED
    
    
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            module BaseCRM
         | 
| 2 | 
            +
              class Meta < Model
         | 
| 3 | 
            +
                # @attribute [r] type
         | 
| 4 | 
            +
                #   @return [String] An entity type.
         | 
| 5 | 
            +
                # attr_reader :type
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                # @attribute [r] sync
         | 
| 8 | 
            +
                #   @return [SyncMeta] An entity which represents sync metadata. See below for it's attributes.
         | 
| 9 | 
            +
                # attr_reader :sync
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
            end
         | 
| @@ -33,7 +33,7 @@ module BaseCRM | |
| 33 33 | 
             
                # @param device_uuid [String] Device's UUID for which to perform synchronization
         | 
| 34 34 | 
             
                # @param session_id [String] Unique identifier of a synchronization session.
         | 
| 35 35 | 
             
                # @param queue [String|Symbol] Queue name.
         | 
| 36 | 
            -
                # @return [Array<Array< | 
| 36 | 
            +
                # @return [Array<Array<Meta, Model>>] The list of sync's metadata associated with data and data.
         | 
| 37 37 | 
             
                def fetch(device_uuid, session_id, queue='main')
         | 
| 38 38 | 
             
                  validate_device!(device_uuid)
         | 
| 39 39 | 
             
                  raise ArgumentError, "session_id must not be nil nor empty" unless session_id && !session_id.strip.empty?
         | 
| @@ -44,7 +44,8 @@ module BaseCRM | |
| 44 44 |  | 
| 45 45 | 
             
                  root[:items].map do |item|
         | 
| 46 46 | 
             
                    klass = classify_type(item[:meta][:type])
         | 
| 47 | 
            -
                     | 
| 47 | 
            +
                    next unless klass
         | 
| 48 | 
            +
                    [build_meta(item[:meta]), klass.new(item[:data])]
         | 
| 48 49 | 
             
                  end
         | 
| 49 50 | 
             
                end
         | 
| 50 51 |  | 
| @@ -82,7 +83,8 @@ module BaseCRM | |
| 82 83 | 
             
                end
         | 
| 83 84 |  | 
| 84 85 | 
             
                def classify_type(type)
         | 
| 85 | 
            -
                   | 
| 86 | 
            +
                  return nil unless type && !type.empty?
         | 
| 87 | 
            +
                  BaseCRM.const_get(type.split('_').map(&:capitalize).join) rescue nil
         | 
| 86 88 | 
             
                end
         | 
| 87 89 |  | 
| 88 90 | 
             
                def build_session(root)
         | 
| @@ -90,5 +92,9 @@ module BaseCRM | |
| 90 92 | 
             
                  session_data[:queues] = session_data[:queues].map { |queue| SyncQueue.new(queue[:data]) }
         | 
| 91 93 | 
             
                  SyncSession.new(session_data)
         | 
| 92 94 | 
             
                end
         | 
| 95 | 
            +
             | 
| 96 | 
            +
                def build_meta(meta)
         | 
| 97 | 
            +
                  Meta.new(meta.merge(sync: SyncMeta.new(meta[:sync])))
         | 
| 98 | 
            +
                end
         | 
| 93 99 | 
             
              end
         | 
| 94 100 | 
             
            end
         | 
    
        data/lib/basecrm/sync.rb
    CHANGED
    
    | @@ -28,8 +28,8 @@ module BaseCRM | |
| 28 28 | 
             
                #
         | 
| 29 29 | 
             
                #   client = BaseCRM::Client.new(access_token: "<YOUR_ACCESS_TOKEN>")
         | 
| 30 30 | 
             
                #   sync = BaseCRM::Sync.new(client: client, device_uuid: "<YOUR_DEVICES_UUID>")
         | 
| 31 | 
            -
                #   sync.fetch do | | 
| 32 | 
            -
                #     DB.send( | 
| 31 | 
            +
                #   sync.fetch do |meta, resource|
         | 
| 32 | 
            +
                #     DB.send(meta.sync.event_type, entity) ? meta.sync.ack : meta.sync.nack
         | 
| 33 33 | 
             
                #   end
         | 
| 34 34 | 
             
                #
         | 
| 35 35 | 
             
                # @param block [Proc] Procedure that will be called for every item in the queue. Takes two input arguments: SyncMeta instance
         | 
    
        data/lib/basecrm/version.rb
    CHANGED
    
    
    
        data/spec/basecrm/sync_spec.rb
    CHANGED
    
    | @@ -61,8 +61,8 @@ describe BaseCRM::Sync do | |
| 61 61 |  | 
| 62 62 | 
             
                  let(:queue_items) do
         | 
| 63 63 | 
             
                    [
         | 
| 64 | 
            -
                      [BaseCRM::SyncMeta.new(event_type: 'created', ack_key: 'User-1234-1'), BaseCRM::User.new(id: 1)],
         | 
| 65 | 
            -
                      [BaseCRM::SyncMeta.new(event_type: 'created', ack_key: 'Source-1234-1'), BaseCRM::Source.new(id: 1)]
         | 
| 64 | 
            +
                      [BaseCRM::Meta.new(type: 'user', sync: BaseCRM::SyncMeta.new(event_type: 'created', ack_key: 'User-1234-1')), BaseCRM::User.new(id: 1)],
         | 
| 65 | 
            +
                      [BaseCRM::Meta.new(type: 'source', sync: BaseCRM::SyncMeta.new(event_type: 'created', ack_key: 'Source-1234-1')), BaseCRM::Source.new(id: 1)]
         | 
| 66 66 | 
             
                    ]
         | 
| 67 67 | 
             
                  end
         | 
| 68 68 |  | 
| @@ -74,19 +74,20 @@ describe BaseCRM::Sync do | |
| 74 74 | 
             
                  end
         | 
| 75 75 |  | 
| 76 76 | 
             
                  it 'does whole synchronization flow' do
         | 
| 77 | 
            -
                    subject.fetch { | | 
| 77 | 
            +
                    subject.fetch { |m, r| m.sync.ack }
         | 
| 78 78 | 
             
                  end
         | 
| 79 79 |  | 
| 80 80 | 
             
                  it 'calls a provided block as many times as items in the queue' do
         | 
| 81 81 | 
             
                    counter = 0
         | 
| 82 | 
            -
                    subject.fetch { | | 
| 82 | 
            +
                    subject.fetch { |m, r| counter += 1; m.sync.ack }
         | 
| 83 83 | 
             
                    expect(counter).to eq(2)
         | 
| 84 84 | 
             
                  end
         | 
| 85 85 |  | 
| 86 86 | 
             
                  it 'passes two elements to provided block: first element is BaseCRM::SyncMeta and the second is a resource' do
         | 
| 87 | 
            -
                    subject.fetch do | | 
| 88 | 
            -
                      expect( | 
| 89 | 
            -
                       | 
| 87 | 
            +
                    subject.fetch do |m, r|
         | 
| 88 | 
            +
                      expect(m).to be_a BaseCRM::Meta
         | 
| 89 | 
            +
                      expect(m.sync).to be_a BaseCRM::SyncMeta
         | 
| 90 | 
            +
                      m.sync.ack
         | 
| 90 91 | 
             
                    end
         | 
| 91 92 | 
             
                  end
         | 
| 92 93 | 
             
                end
         | 
| @@ -267,15 +267,19 @@ describe BaseCRM::SyncService do | |
| 267 267 | 
             
                    items = client.sync.fetch(device_uuid, session_id)
         | 
| 268 268 |  | 
| 269 269 | 
             
                    sync_meta, user = items[0]
         | 
| 270 | 
            -
                    expect(sync_meta).to be_a BaseCRM:: | 
| 270 | 
            +
                    expect(sync_meta).to be_a BaseCRM::Meta
         | 
| 271 | 
            +
                    expect(sync_meta.sync).to be_a BaseCRM::SyncMeta
         | 
| 271 272 | 
             
                    expect(user).to be_a BaseCRM::User
         | 
| 272 | 
            -
                    expect(sync_meta. | 
| 273 | 
            +
                    expect(sync_meta.type).to eq('user')
         | 
| 274 | 
            +
                    expect(sync_meta.sync.ack_key).to eq('User-123-1')
         | 
| 273 275 | 
             
                    expect(user.id).to eq(1)
         | 
| 274 276 |  | 
| 275 277 | 
             
                    sync_meta, source = items[1]
         | 
| 276 | 
            -
                    expect(sync_meta).to be_a BaseCRM:: | 
| 278 | 
            +
                    expect(sync_meta).to be_a BaseCRM::Meta
         | 
| 279 | 
            +
                    expect(sync_meta.sync).to be_a BaseCRM::SyncMeta
         | 
| 277 280 | 
             
                    expect(source).to be_a BaseCRM::Source
         | 
| 278 | 
            -
                    expect(sync_meta. | 
| 281 | 
            +
                    expect(sync_meta.type).to eq('source')
         | 
| 282 | 
            +
                    expect(sync_meta.sync.ack_key).to eq('Source-123-1')
         | 
| 279 283 | 
             
                    expect(source.id).to eq(1)
         | 
| 280 284 | 
             
                  end
         | 
| 281 285 | 
             
                end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: basecrm
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.1. | 
| 4 | 
            +
              version: 1.1.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - BaseCRM developers
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2015- | 
| 11 | 
            +
            date: 2015-06-10 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: faraday
         | 
| @@ -144,6 +144,7 @@ files: | |
| 144 144 | 
             
            - lib/basecrm/models/deal.rb
         | 
| 145 145 | 
             
            - lib/basecrm/models/lead.rb
         | 
| 146 146 | 
             
            - lib/basecrm/models/loss_reason.rb
         | 
| 147 | 
            +
            - lib/basecrm/models/meta.rb
         | 
| 147 148 | 
             
            - lib/basecrm/models/note.rb
         | 
| 148 149 | 
             
            - lib/basecrm/models/pipeline.rb
         | 
| 149 150 | 
             
            - lib/basecrm/models/source.rb
         |