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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9b39240e639171c284af2016c897affee25c599f
4
- data.tar.gz: 4b67891d5ff434ee7e0394fca959b6e06d2d70b0
3
+ metadata.gz: e150ccbdeb24176553161e55e95a985d0355519d
4
+ data.tar.gz: c3425ea82d471eb5c98fd998f3fc4107afdae7d6
5
5
  SHA512:
6
- metadata.gz: 339f88a6b215e7c3c717d3200c6fa753dfdba54aba7418c72cf9dc5d69893fd4b004ac456ca97d1c3e4f5aa947556a5965cc81fe59c21d3eb87176b57355d0a7
7
- data.tar.gz: a535ff335c8c6972c0a0f369e358cd90bcbd257b23003bc7033aea5b553a53a579dd6eb069310e38bc4587faeb60aed0ebd34a662af7e5956f4c8b5edaa87dec
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 |sync_meta, resource|
139
- DB.send(sync_meta.event_type, resource) ? sync_meta.ack : sync_meta.nack
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
@@ -8,6 +8,7 @@ require 'basecrm/configuration'
8
8
  require 'basecrm/http_client'
9
9
 
10
10
  require 'basecrm/model'
11
+ require 'basecrm/models/meta'
11
12
  require 'basecrm/models/account'
12
13
  require 'basecrm/models/address'
13
14
  require 'basecrm/models/associated_contact'
@@ -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<SyncMeta, Model>>] The list of sync's metadata associated with data and data.
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
- [SyncMeta.new(item[:meta][:sync]), klass.new(item[:data])]
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
- BaseCRM.const_get(type.split('_').map(&:capitalize).join)
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 |sync_meta, resource|
32
- # DB.send(sync_meta.event_type, entity) ? sync_meta.ack : sync_meta.nack
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
@@ -1,3 +1,3 @@
1
1
  module BaseCRM
2
- VERSION = "1.1.0"
2
+ VERSION = "1.1.1"
3
3
  end
@@ -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 { |s, r| s.ack }
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 { |s, r| counter += 1; s.ack }
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 |s, r|
88
- expect(s).to be_a BaseCRM::SyncMeta
89
- s.ack
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::SyncMeta
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.ack_key).to eq('User-123-1')
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::SyncMeta
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.ack_key).to eq('Source-123-1')
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.0
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-05-28 00:00:00.000000000 Z
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