amorail 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bbc85a53892ba746e91fb6b52a9d86dedfa4c2885bc550760797cea6b6c1077a
4
- data.tar.gz: ef947d63cdb4556d3d37934bf7ff6a4298c529b3692ee2617b207737f460b9ad
3
+ metadata.gz: ae6f74bb08bbf43aa99b6275ba276971bf8e9933bfdc89c363cd6e03d964c0f5
4
+ data.tar.gz: 33aa412d6f02256a6e98f0e7e138eca8ac88603633a3940858c0a2f865c6d689
5
5
  SHA512:
6
- metadata.gz: 92801120cb72d28e30df5d41ee23cf2f89681eec639f6837d75302204ab0b49d0b1bfffdd2ea544fad88a6e57939b2bfc8ddd1305c439ab4ff4c31b8206f998c
7
- data.tar.gz: 532f646b965c0f92f7a4e6174932a97e1c0fb023fbfa4d4b2fea1d3d348361e3885ef671fbd0e165c00c274c136fe6d39dc628904e6487cd447375e576782db7
6
+ metadata.gz: e0dc543509ca614983d4bb92eae450d7202e18a146a89ac5a52f0be77436d5c878b41b3d922760490e74a690ae1b1603a015b76821b7cecd7e0c3f3111e690d2
7
+ data.tar.gz: 7a7efb60d5746c933d0b043fe0465427854b4a1ece3947c1f55062e11fd50ac8c2ef7d4faa34759807ba6e0adecb852d2af9b52cd00cf0d7faa3a5561c924cf8
@@ -5,19 +5,21 @@ on:
5
5
  branches:
6
6
  - master
7
7
  pull_request:
8
-
9
8
  jobs:
10
9
  build:
11
-
12
10
  runs-on: ubuntu-latest
11
+ strategy:
12
+ matrix:
13
+ # TODO: Adds 3.0 and 3.1 after updating
14
+ # ruby: [2.5, 2.7, 3.0, 3.1]
15
+ ruby: [2.5, 2.7]
13
16
 
14
17
  steps:
15
- - uses: actions/checkout@v2
16
- - name: Set up Ruby 2.5
17
- uses: ruby/setup-ruby@v1
18
- with:
19
- ruby-version: 2.5
20
- bundler-cache: true
21
- bundler: 1.13.6
22
- - name: Build and test
23
- run: bundle exec rspec
18
+ - uses: actions/checkout@v2
19
+ - name: Set up Ruby
20
+ uses: ruby/setup-ruby@v1
21
+ with:
22
+ ruby-version: ${{ matrix.ruby }}
23
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
24
+ - name: Run tests
25
+ run: bundle exec rspec
data/.rubocop.yml CHANGED
@@ -23,10 +23,6 @@ Style/BlockDelimiters:
23
23
  Exclude:
24
24
  - 'spec/**/*.rb'
25
25
 
26
- Metrics/MethodLength:
27
- Exclude:
28
- - 'spec/**/*.rb'
29
-
30
26
  Rails/Date:
31
27
  Enabled: false
32
28
 
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## master (unreleased)
4
4
 
5
+ ## 0.7.2 (2024-01-08)
6
+
7
+ ### Fixes
8
+
9
+ - Fixed refreshing tokin with redis storage ([@VladimirMikhailov][]) [#56](https://github.com/teachbase/amorail/pull/56)
10
+
5
11
  ## 0.7.1 (2021-09-25)
6
12
 
7
13
  ### Features
@@ -25,3 +31,4 @@ See spec/support/my_contact.rb and spec/my_contact_spec.rb
25
31
  [@palkan]: https://github.com/palkan
26
32
  [@AlexanderShvaykin]: https://github.com/AlexanderShvaykin
27
33
  [@lHydra]: https://github.com/lHydra
34
+ [@VladimirMikhailov]: https://github.com/VladimirMikhailov
data/amorail.gemspec CHANGED
@@ -19,12 +19,12 @@ Gem::Specification.new do |spec|
19
19
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "bundler", "~> 2.3"
23
23
  spec.add_development_dependency "rake", "~> 10.0"
24
24
  spec.add_development_dependency "rspec", "~> 3.4"
25
25
  spec.add_development_dependency "webmock"
26
26
  spec.add_development_dependency "pry"
27
- spec.add_development_dependency "shoulda-matchers", "~> 2.0"
27
+ spec.add_development_dependency "shoulda-matchers"
28
28
  spec.add_development_dependency "rubocop", "~> 0.49"
29
29
  spec.add_dependency "anyway_config", ">= 1.0"
30
30
  spec.add_dependency "faraday"
data/dip.yml ADDED
@@ -0,0 +1,16 @@
1
+ version: "7.6"
2
+
3
+ compose:
4
+ files:
5
+ - docker-compose.yml
6
+
7
+ interaction:
8
+ sh:
9
+ description: Open a Bash shell within a Rails container (with dependencies up)
10
+ service: ruby
11
+ command: /bin/bash
12
+
13
+ rspec:
14
+ description: Run specs
15
+ service: ruby
16
+ command: rspec
@@ -0,0 +1,14 @@
1
+ version: "3.8"
2
+
3
+ services:
4
+ ruby:
5
+ image: ruby:2.5
6
+ stdin_open: true
7
+ tty: true
8
+ volumes:
9
+ - /teachbase/.git
10
+ - .:/app:cached
11
+ - bundle:/usr/local/bundle
12
+ working_dir: /app
13
+ volumes:
14
+ bundle:
@@ -83,8 +83,8 @@ module Amorail
83
83
  end
84
84
 
85
85
  def safe_request(method, url, params = {})
86
- authorize if access_token.blank?
87
86
  refresh_token! if access.expired?
87
+ authorize if access_token.blank?
88
88
  public_send(method, url, params)
89
89
  end
90
90
 
@@ -99,7 +99,7 @@ module Amorail
99
99
  next if fname.nil?
100
100
 
101
101
  fname = "#{fname.downcase}="
102
- fval = f.fetch('values').pluck('value')
102
+ fval = f.fetch('values').map { |v| v['value'] }
103
103
  send(fname, fval) if respond_to?(fname)
104
104
  end
105
105
  end
@@ -38,7 +38,7 @@ module Amorail
38
38
  if !access_expired?(key)
39
39
  storage[key]
40
40
  else
41
- {}
41
+ { refresh_token: storage[key][:refresh_token] }
42
42
  end
43
43
  end
44
44
 
@@ -19,7 +19,7 @@ module Amorail
19
19
  def fetch_access(secret)
20
20
  token = storage.get(access_key(secret))
21
21
  refresh_token = storage.get(refresh_key(secret))
22
- token.nil? ? {} : { token: token, refresh_token: refresh_token }
22
+ { token: token, refresh_token: refresh_token }.compact
23
23
  end
24
24
 
25
25
  def persist_access(secret, token, refresh_token, expiration)
@@ -61,7 +61,7 @@ module Amorail
61
61
  end
62
62
 
63
63
  def build_redis_url(redis_host: nil, redis_port: nil, redis_db_name: nil)
64
- redis_db_name ||= Amorail.config.redis_db_name
64
+ redis_db_name ||= Amorail.config.redis_db_name.to_s
65
65
  return URI.join(Amorail.config.redis_url, redis_db_name).to_s if Amorail.config.redis_url
66
66
 
67
67
  redis_host ||= Amorail.config.redis_host
@@ -2,5 +2,5 @@
2
2
 
3
3
  # Amorail version
4
4
  module Amorail
5
- VERSION = '0.7.1'
5
+ VERSION = '0.7.2'
6
6
  end
data/lib/amorail.rb CHANGED
@@ -38,7 +38,7 @@ module Amorail
38
38
  end
39
39
 
40
40
  def with_client(client)
41
- client = Client.new(client) unless client.is_a?(Client)
41
+ client = Client.new(**client) unless client.is_a?(Client)
42
42
  ClientRegistry.client = client
43
43
  yield
44
44
  ensure
@@ -61,9 +61,15 @@ module Amorail
61
61
  end
62
62
 
63
63
  class ClientRegistry # :nodoc:
64
- extend ActiveSupport::PerThreadRegistry
64
+ class << self
65
+ def client=(value)
66
+ Thread.current["attr_#{name}_client"] = value
67
+ end
65
68
 
66
- attr_accessor :client
69
+ def client
70
+ Thread.current["attr_#{name}_client"]
71
+ end
72
+ end
67
73
  end
68
74
 
69
75
  require 'amorail/railtie' if defined?(Rails)
data/spec/client_spec.rb CHANGED
@@ -132,4 +132,39 @@ describe Amorail::Client do
132
132
  expect(results[2]).to eq 'some_id_3'
133
133
  end
134
134
  end
135
+
136
+ describe '#safe_request' do
137
+ subject(:safe_request) { client.safe_request(:get, '/private/api/v2/json/accounts/current') }
138
+
139
+ let(:response) { instance_double('Faraday::Response', body: {}, status: 200) }
140
+ let(:client) { described_class.new }
141
+ let(:access_token) { 'eyJ0eXAiOiJKf2QihCJhbGciOiJSUzI1NiIsImp0aSI6IjMxMT' }
142
+
143
+ # We need to refresh the token store before the initial safe_request
144
+ # to test that it performs authorization
145
+ before { Amorail.token_store = :memory }
146
+
147
+ it 'authorizes the client if there is no access token' do
148
+ expect { safe_request }.to change { client.access_token }.from(nil).to(start_with(access_token))
149
+ end
150
+
151
+ context 'when access token is expired' do
152
+ let(:renewed_access_token) { '50d084c7efbd911f0a9d03bb387f3ad4dc092be253' }
153
+
154
+ before do
155
+ Amorail.token_store.persist_access(
156
+ Amorail.config.client_secret,
157
+ 'old_access_token',
158
+ 'refresh_token',
159
+ Time.now.to_i - 10
160
+ )
161
+ end
162
+
163
+ it 'refreshes authorization token' do
164
+ expect { safe_request }.to change { client.access_token }.from(nil).to(
165
+ start_with(renewed_access_token)
166
+ )
167
+ end
168
+ end
169
+ end
135
170
  end
@@ -0,0 +1,6 @@
1
+ {
2
+ "token_type": "Bearer",
3
+ "expires_in": 86400,
4
+ "access_token": "50d084c7efbd911f0a9d03bb387f3ad4dc092be253fc5af0564c38454f473c075ecb8b3dc9e65a257196cc0c44a07acea7720140739a86015a701403",
5
+ "refresh_token": "c17d6c45e63efda9e20edb9ab08eb04cd89cf83acd203a8a4796160886e334561c54e8193f25a27004c732fe784b2bf9f1b4357d3c4a284e30164764"
6
+ }
@@ -54,7 +54,7 @@ module AmoWebMock
54
54
  .to_return(
55
55
  status: 200,
56
56
  body: File.read('./spec/fixtures/authorize.json'),
57
- headers: {}
57
+ headers: { 'Content-Type' => 'application/json' }
58
58
  )
59
59
  end
60
60
 
@@ -65,8 +65,8 @@ module AmoWebMock
65
65
  )
66
66
  .to_return(
67
67
  status: 200,
68
- body: File.read('./spec/fixtures/authorize.json'),
69
- headers: {}
68
+ body: File.read('./spec/fixtures/authorize_refresh_token.json'),
69
+ headers: { 'Content-Type' => 'application/json' }
70
70
  )
71
71
  end
72
72
 
data/spec/spec_helper.rb CHANGED
@@ -19,4 +19,5 @@ Dir[File.expand_path("support/**/*.rb", __dir__)].each { |f| require f }
19
19
  RSpec.configure do |config|
20
20
  config.mock_with :rspec
21
21
  include AmoWebMock
22
+ config.include(Shoulda::Matchers::ActiveModel)
22
23
  end
@@ -35,7 +35,7 @@ describe Amorail::StoreAdapters::MemoryStoreAdapter do
35
35
  context 'when token is expired' do
36
36
  it 'returns blank hash' do
37
37
  store.persist_access('secret', 'token', 'refresh_token', Time.now.to_i - 10_000)
38
- expect(store.fetch_access('secret')).to eq({})
38
+ expect(store.fetch_access('secret')).to eq(refresh_token: 'refresh_token')
39
39
  end
40
40
  end
41
41
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amorail
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - alekseenkoss
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-09-25 00:00:00.000000000 Z
12
+ date: 2024-01-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: '1.7'
20
+ version: '2.3'
21
21
  type: :development
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: '1.7'
27
+ version: '2.3'
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: rake
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -85,16 +85,16 @@ dependencies:
85
85
  name: shoulda-matchers
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - "~>"
88
+ - - ">="
89
89
  - !ruby/object:Gem::Version
90
- version: '2.0'
90
+ version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - "~>"
95
+ - - ">="
96
96
  - !ruby/object:Gem::Version
97
- version: '2.0'
97
+ version: '0'
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: rubocop
100
100
  requirement: !ruby/object:Gem::Requirement
@@ -211,6 +211,8 @@ files:
211
211
  - RELEASING.md
212
212
  - Rakefile
213
213
  - amorail.gemspec
214
+ - dip.yml
215
+ - docker-compose.yaml
214
216
  - lib/amorail.rb
215
217
  - lib/amorail/access_token.rb
216
218
  - lib/amorail/client.rb
@@ -247,6 +249,7 @@ files:
247
249
  - spec/fixtures/accounts/response_2.json
248
250
  - spec/fixtures/amorail_test.yml
249
251
  - spec/fixtures/authorize.json
252
+ - spec/fixtures/authorize_refresh_token.json
250
253
  - spec/fixtures/contacts/create.json
251
254
  - spec/fixtures/contacts/find_many.json
252
255
  - spec/fixtures/contacts/find_one.json
@@ -295,7 +298,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
295
298
  - !ruby/object:Gem::Version
296
299
  version: '0'
297
300
  requirements: []
298
- rubygems_version: 3.2.22
301
+ rubygems_version: 3.3.7
299
302
  signing_key:
300
303
  specification_version: 4
301
304
  summary: Ruby API client for AmoCRM
@@ -310,6 +313,7 @@ test_files:
310
313
  - spec/fixtures/accounts/response_2.json
311
314
  - spec/fixtures/amorail_test.yml
312
315
  - spec/fixtures/authorize.json
316
+ - spec/fixtures/authorize_refresh_token.json
313
317
  - spec/fixtures/contacts/create.json
314
318
  - spec/fixtures/contacts/find_many.json
315
319
  - spec/fixtures/contacts/find_one.json