amorail 0.5.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
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