amorail 0.5.0 → 0.7.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.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/rspec.yml +23 -0
  3. data/.gitignore +2 -1
  4. data/CHANGELOG.md +27 -0
  5. data/README.md +49 -8
  6. data/RELEASING.md +43 -0
  7. data/amorail.gemspec +5 -3
  8. data/lib/amorail/access_token.rb +44 -0
  9. data/lib/amorail/client.rb +84 -23
  10. data/lib/amorail/config.rb +14 -8
  11. data/lib/amorail/entities/company.rb +2 -0
  12. data/lib/amorail/entities/contact.rb +2 -0
  13. data/lib/amorail/entities/contact_link.rb +2 -0
  14. data/lib/amorail/entities/elementable.rb +4 -2
  15. data/lib/amorail/entities/lead.rb +2 -0
  16. data/lib/amorail/entities/leadable.rb +2 -0
  17. data/lib/amorail/entities/note.rb +2 -0
  18. data/lib/amorail/entities/task.rb +2 -0
  19. data/lib/amorail/entities/webhook.rb +2 -0
  20. data/lib/amorail/entity/finders.rb +2 -0
  21. data/lib/amorail/entity/params.rb +13 -3
  22. data/lib/amorail/entity/persistence.rb +2 -0
  23. data/lib/amorail/entity.rb +20 -3
  24. data/lib/amorail/exceptions.rb +2 -0
  25. data/lib/amorail/property.rb +5 -3
  26. data/lib/amorail/railtie.rb +2 -0
  27. data/lib/amorail/store_adapters/abstract_store_adapter.rb +23 -0
  28. data/lib/amorail/store_adapters/memory_store_adapter.rb +50 -0
  29. data/lib/amorail/store_adapters/redis_store_adapter.rb +83 -0
  30. data/lib/amorail/store_adapters.rb +15 -0
  31. data/lib/amorail/version.rb +3 -1
  32. data/lib/amorail.rb +27 -6
  33. data/lib/tasks/amorail.rake +2 -0
  34. data/spec/access_token_spec.rb +59 -0
  35. data/spec/client_spec.rb +36 -24
  36. data/spec/company_spec.rb +2 -0
  37. data/spec/contact_link_spec.rb +2 -0
  38. data/spec/contact_spec.rb +4 -0
  39. data/spec/entity_spec.rb +2 -0
  40. data/spec/fixtures/amorail_test.yml +5 -3
  41. data/spec/fixtures/authorize.json +6 -0
  42. data/spec/fixtures/contacts/my_contact_find.json +4 -0
  43. data/spec/helpers/webmock_helpers.rb +50 -13
  44. data/spec/lead_spec.rb +2 -0
  45. data/spec/my_contact_spec.rb +5 -2
  46. data/spec/note_spec.rb +2 -0
  47. data/spec/property_spec.rb +2 -0
  48. data/spec/spec_helper.rb +2 -0
  49. data/spec/store_adapters/memory_store_adapter_spec.rb +56 -0
  50. data/spec/store_adapters/redis_store_adapter_spec.rb +67 -0
  51. data/spec/support/elementable_example.rb +2 -0
  52. data/spec/support/entity_class_example.rb +2 -0
  53. data/spec/support/leadable_example.rb +2 -0
  54. data/spec/support/my_contact.rb +3 -0
  55. data/spec/support/my_entity.rb +2 -0
  56. data/spec/task_spec.rb +2 -0
  57. data/spec/webhook_spec.rb +2 -0
  58. metadata +39 -17
  59. data/.travis.yml +0 -9
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Amorail::StoreAdapters::MemoryStoreAdapter do
6
+ let!(:expiration) { Time.now.to_i + 86_000 }
7
+ let(:store) { Amorail::StoreAdapters.build_by_name(:memory) }
8
+
9
+ describe '#initialize' do
10
+ it 'raises error on unknow option' do
11
+ expect { Amorail::StoreAdapters::MemoryStoreAdapter.new(something: 'something') }.to raise_error(ArgumentError)
12
+ end
13
+ end
14
+
15
+ describe '#persist_access' do
16
+ subject { store.persist_access('secret', 'token', 'refresh_token', expiration) }
17
+
18
+ it 'save record to memory' do
19
+ expect { subject }.to change { store.fetch_access('secret') }.from(
20
+ {}
21
+ ).to(
22
+ { token: 'token', refresh_token: 'refresh_token', expiration: expiration }
23
+ )
24
+ end
25
+ end
26
+
27
+ describe '#fetch_access' do
28
+ context 'when token not expired' do
29
+ it 'returns valid data' do
30
+ store.persist_access('secret', 'token', 'refresh_token', expiration)
31
+ expect(store.fetch_access('secret')).to eq({ token: 'token', refresh_token: 'refresh_token', expiration: expiration })
32
+ end
33
+ end
34
+
35
+ context 'when token is expired' do
36
+ it 'returns blank hash' do
37
+ store.persist_access('secret', 'token', 'refresh_token', Time.now.to_i - 10_000)
38
+ expect(store.fetch_access('secret')).to eq({})
39
+ end
40
+ end
41
+ end
42
+
43
+ describe '#update_access' do
44
+ let!(:upd_expiration) { Time.now.to_i + 92_000 }
45
+ subject { store.update_access('secret', 'upd_token', 'upd_refresh', upd_expiration) }
46
+
47
+ it 'refresh token data' do
48
+ store.persist_access('secret', 'token', 'refresh_token', expiration)
49
+ expect { subject }.to change { store.fetch_access('secret') }.from(
50
+ { token: 'token', refresh_token: 'refresh_token', expiration: expiration }
51
+ ).to(
52
+ { token: 'upd_token', refresh_token: 'upd_refresh', expiration: upd_expiration }
53
+ )
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Amorail::StoreAdapters::RedisStoreAdapter do
6
+ before :each do
7
+ Amorail.config.reload
8
+ end
9
+
10
+ let(:store) { Amorail::StoreAdapters.build_by_name(:redis) }
11
+
12
+ describe '#initialize' do
13
+ it 'raises error on mixed redis options' do
14
+ expect { Amorail::StoreAdapters::RedisStoreAdapter.new(redis_url: 'redis://127.0.0.1:6379/0',
15
+ redis_port: '8082') }.to raise_error(ArgumentError)
16
+ end
17
+
18
+ it 'raises error on unknown options' do
19
+ expect { Amorail::StoreAdapters::RedisStoreAdapter.new(redis_url: 'redis://127.0.0.1:6379/0',
20
+ something: 'smth') }.to raise_error(ArgumentError)
21
+ end
22
+ end
23
+
24
+ describe 'configuration' do
25
+ let(:adapter) { Amorail::StoreAdapters::RedisStoreAdapter.new }
26
+
27
+ it 'set default url' do
28
+ expect(adapter.storage.id).to eq('redis://127.0.0.1:6379/0')
29
+ end
30
+
31
+ it 'set url from env variable' do
32
+ ENV['REDIS_URL'] = 'redis://localhost:2020/'
33
+ adapter = Amorail::StoreAdapters::RedisStoreAdapter.new
34
+ expect(adapter.storage.id).to eq('redis://localhost:2020/0')
35
+
36
+ ENV.delete('REDIS_URL')
37
+ adapter = Amorail::StoreAdapters::RedisStoreAdapter.new
38
+ expect(adapter.storage.id).to eq('redis://127.0.0.1:6379/0')
39
+ end
40
+
41
+ it 'configuration via host post and db' do
42
+ adapter = Amorail::StoreAdapters::RedisStoreAdapter.new(
43
+ redis_host: '127.0.0.2',
44
+ redis_port: '6372',
45
+ redis_db_name: '2'
46
+ )
47
+ expect(adapter.storage.id).to eq('redis://127.0.0.2:6372/2')
48
+ end
49
+
50
+ it 'configuration via host port and db in module' do
51
+ Amorail.config.redis_host = '127.0.0.2'
52
+ Amorail.config.redis_port = '6372'
53
+ Amorail.config.redis_db_name = '2'
54
+ expect(adapter.storage.id).to eq('redis://127.0.0.2:6372/2')
55
+ end
56
+
57
+ it 'configuration via redis url' do
58
+ adapter = Amorail::StoreAdapters::RedisStoreAdapter.new(redis_url: 'redis://127.0.0.2:6322')
59
+ expect(adapter.storage.id).to eq('redis://127.0.0.2:6322/0')
60
+ end
61
+
62
+ it 'configuration via redis url in module' do
63
+ Amorail.config.redis_url = 'redis://127.0.0.2:6322'
64
+ expect(adapter.storage.id).to eq('redis://127.0.0.2:6322/0')
65
+ end
66
+ end
67
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  shared_examples 'elementable' do
2
4
  describe 'validations' do
3
5
  it { is_expected.to validate_presence_of(:element_id) }
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  shared_examples 'entity_class' do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  shared_examples 'leadable' do
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class MyContact < Amorail::Contact # :nodoc:
2
4
  amo_property :teachbase_id
5
+ amo_property :phone, enum: 'MOB', multiple: true
3
6
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # We only need this class to set Amo names for core Entity
2
4
  class MyEntity < Amorail::Entity # :nodoc:
3
5
  amo_names 'entity'
data/spec/task_spec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "spec_helper"
2
4
 
3
5
  describe Amorail::Task do
data/spec/webhook_spec.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Amorail::Webhook do
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amorail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - alekseenkoss
8
8
  - palkan
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2018-10-24 00:00:00.000000000 Z
12
+ date: 2021-09-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -113,22 +113,16 @@ dependencies:
113
113
  name: anyway_config
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
- - - "~>"
117
- - !ruby/object:Gem::Version
118
- version: '0'
119
116
  - - ">="
120
117
  - !ruby/object:Gem::Version
121
- version: '0.3'
118
+ version: '1.0'
122
119
  type: :runtime
123
120
  prerelease: false
124
121
  version_requirements: !ruby/object:Gem::Requirement
125
122
  requirements:
126
- - - "~>"
127
- - !ruby/object:Gem::Version
128
- version: '0'
129
123
  - - ">="
130
124
  - !ruby/object:Gem::Version
131
- version: '0.3'
125
+ version: '1.0'
132
126
  - !ruby/object:Gem::Dependency
133
127
  name: faraday
134
128
  requirement: !ruby/object:Gem::Requirement
@@ -185,6 +179,20 @@ dependencies:
185
179
  - - ">="
186
180
  - !ruby/object:Gem::Version
187
181
  version: '0'
182
+ - !ruby/object:Gem::Dependency
183
+ name: redis
184
+ requirement: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - ">="
187
+ - !ruby/object:Gem::Version
188
+ version: '0'
189
+ type: :runtime
190
+ prerelease: false
191
+ version_requirements: !ruby/object:Gem::Requirement
192
+ requirements:
193
+ - - ">="
194
+ - !ruby/object:Gem::Version
195
+ version: '0'
188
196
  description: Ruby API client for AmoCRM. You can integrate your system with it.
189
197
  email:
190
198
  - alekseenkoss@gmail.com
@@ -193,15 +201,18 @@ executables: []
193
201
  extensions: []
194
202
  extra_rdoc_files: []
195
203
  files:
204
+ - ".github/workflows/rspec.yml"
196
205
  - ".gitignore"
197
206
  - ".rubocop.yml"
198
- - ".travis.yml"
207
+ - CHANGELOG.md
199
208
  - Gemfile
200
209
  - LICENSE.txt
201
210
  - README.md
211
+ - RELEASING.md
202
212
  - Rakefile
203
213
  - amorail.gemspec
204
214
  - lib/amorail.rb
215
+ - lib/amorail/access_token.rb
205
216
  - lib/amorail/client.rb
206
217
  - lib/amorail/config.rb
207
218
  - lib/amorail/entities/company.rb
@@ -220,8 +231,13 @@ files:
220
231
  - lib/amorail/exceptions.rb
221
232
  - lib/amorail/property.rb
222
233
  - lib/amorail/railtie.rb
234
+ - lib/amorail/store_adapters.rb
235
+ - lib/amorail/store_adapters/abstract_store_adapter.rb
236
+ - lib/amorail/store_adapters/memory_store_adapter.rb
237
+ - lib/amorail/store_adapters/redis_store_adapter.rb
223
238
  - lib/amorail/version.rb
224
239
  - lib/tasks/amorail.rake
240
+ - spec/access_token_spec.rb
225
241
  - spec/client_spec.rb
226
242
  - spec/company_spec.rb
227
243
  - spec/contact_link_spec.rb
@@ -230,6 +246,7 @@ files:
230
246
  - spec/fixtures/accounts/response_1.json
231
247
  - spec/fixtures/accounts/response_2.json
232
248
  - spec/fixtures/amorail_test.yml
249
+ - spec/fixtures/authorize.json
233
250
  - spec/fixtures/contacts/create.json
234
251
  - spec/fixtures/contacts/find_many.json
235
252
  - spec/fixtures/contacts/find_one.json
@@ -250,6 +267,8 @@ files:
250
267
  - spec/note_spec.rb
251
268
  - spec/property_spec.rb
252
269
  - spec/spec_helper.rb
270
+ - spec/store_adapters/memory_store_adapter_spec.rb
271
+ - spec/store_adapters/redis_store_adapter_spec.rb
253
272
  - spec/support/elementable_example.rb
254
273
  - spec/support/entity_class_example.rb
255
274
  - spec/support/leadable_example.rb
@@ -261,7 +280,7 @@ homepage: ''
261
280
  licenses:
262
281
  - MIT
263
282
  metadata: {}
264
- post_install_message:
283
+ post_install_message:
265
284
  rdoc_options: []
266
285
  require_paths:
267
286
  - lib
@@ -269,19 +288,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
269
288
  requirements:
270
289
  - - ">="
271
290
  - !ruby/object:Gem::Version
272
- version: '0'
291
+ version: 2.5.0
273
292
  required_rubygems_version: !ruby/object:Gem::Requirement
274
293
  requirements:
275
294
  - - ">="
276
295
  - !ruby/object:Gem::Version
277
296
  version: '0'
278
297
  requirements: []
279
- rubyforge_project:
280
- rubygems_version: 2.7.7
281
- signing_key:
298
+ rubygems_version: 3.2.22
299
+ signing_key:
282
300
  specification_version: 4
283
301
  summary: Ruby API client for AmoCRM
284
302
  test_files:
303
+ - spec/access_token_spec.rb
285
304
  - spec/client_spec.rb
286
305
  - spec/company_spec.rb
287
306
  - spec/contact_link_spec.rb
@@ -290,6 +309,7 @@ test_files:
290
309
  - spec/fixtures/accounts/response_1.json
291
310
  - spec/fixtures/accounts/response_2.json
292
311
  - spec/fixtures/amorail_test.yml
312
+ - spec/fixtures/authorize.json
293
313
  - spec/fixtures/contacts/create.json
294
314
  - spec/fixtures/contacts/find_many.json
295
315
  - spec/fixtures/contacts/find_one.json
@@ -310,6 +330,8 @@ test_files:
310
330
  - spec/note_spec.rb
311
331
  - spec/property_spec.rb
312
332
  - spec/spec_helper.rb
333
+ - spec/store_adapters/memory_store_adapter_spec.rb
334
+ - spec/store_adapters/redis_store_adapter_spec.rb
313
335
  - spec/support/elementable_example.rb
314
336
  - spec/support/entity_class_example.rb
315
337
  - spec/support/leadable_example.rb
data/.travis.yml DELETED
@@ -1,9 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.3.3
5
-
6
- before_install: gem install bundler -v 1.13.6
7
-
8
- notifications:
9
- email: false