mandarin-api 0.2.2 → 0.3.0

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: 9e9576e2892048c3af437090d2d15ebaff7ea4b0
4
- data.tar.gz: 16a9517e2d100d244fea63b9135f18bed333d9ce
3
+ metadata.gz: b4ad0afa479a33bc29e6ccc4b5f789ba4b5757c7
4
+ data.tar.gz: 82aea53a5867959c037abb5b6f5b450b40f4e7fe
5
5
  SHA512:
6
- metadata.gz: 749fb5554f98bfe87449f9a0ce4f8d48f43db7f5c4397b61d2795cfec8721d61f3248bf68146831085320c6f4211a67ede0ba2e093c1c83ed4c05491d23c28da
7
- data.tar.gz: 5deba8e26f6d8926cd49559ed5d7f5649a8278a99a22e27bec945c0115d4b84b3bb51e8c69f9baf06267dad17241cd92e4f4ba72b1e89931ba6fe10f6f68158b
6
+ metadata.gz: 72666badc5a4c65d088d61cf1927acfba94726d2255c797fba18257df919f601aa1e590c1ae0cd20c0e7d7b068b0c7c8966756e174edcbaaa3ddcb48b3ae37ec
7
+ data.tar.gz: 5f3859cfad2344d771d12d5feace4d9ee6f0c67f30682dd281bdff711b5c908f0e7ba2bdfdf257c004810f1b080f470622399e598f08727d49f6118b98530f40
data/Gemfile CHANGED
@@ -4,4 +4,5 @@ gemspec name: 'mandarin-api'
4
4
 
5
5
  group :test do
6
6
  gem 'rake'
7
+ gem 'activesupport'
7
8
  end
@@ -1,15 +1,21 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- mandarin-api (0.2.2)
4
+ mandarin-api (0.3.0)
5
5
  rest-client (>= 2.0, < 3.0)
6
6
 
7
7
  GEM
8
8
  remote: https://rubygems.org/
9
9
  specs:
10
+ activesupport (5.0.0.1)
11
+ concurrent-ruby (~> 1.0, >= 1.0.2)
12
+ i18n (~> 0.7)
13
+ minitest (~> 5.1)
14
+ tzinfo (~> 1.1)
10
15
  addressable (2.4.0)
11
- ast (2.3.0)
16
+ byebug (9.0.6)
12
17
  coderay (1.1.1)
18
+ concurrent-ruby (1.0.2)
13
19
  crack (0.4.3)
14
20
  safe_yaml (~> 1.0.0)
15
21
  diff-lcs (1.2.5)
@@ -26,19 +32,20 @@ GEM
26
32
  mime-types (3.1)
27
33
  mime-types-data (~> 3.2015)
28
34
  mime-types-data (3.2016.0521)
35
+ minitest (5.9.1)
29
36
  netrc (0.11.0)
30
- parser (2.3.1.4)
31
- ast (~> 2.2)
32
- powerpack (0.1.1)
33
37
  pry (0.10.4)
34
38
  coderay (~> 1.1.0)
35
39
  method_source (~> 0.8.1)
36
40
  slop (~> 3.4)
41
+ pry-byebug (3.4.2)
42
+ byebug (~> 9.0)
43
+ pry (~> 0.10)
37
44
  pry-doc (0.9.0)
38
45
  pry (~> 0.9)
39
46
  yard (~> 0.8)
40
- rainbow (2.1.0)
41
47
  rake (11.3.0)
48
+ rb-readline (0.5.5)
42
49
  rdoc (4.2.2)
43
50
  json (~> 1.4)
44
51
  rest-client (2.0.0)
@@ -58,19 +65,14 @@ GEM
58
65
  diff-lcs (>= 1.2.0, < 2.0)
59
66
  rspec-support (~> 3.5.0)
60
67
  rspec-support (3.5.0)
61
- rubocop (0.44.1)
62
- parser (>= 2.3.1.1, < 3.0)
63
- powerpack (~> 0.1)
64
- rainbow (>= 1.99.1, < 3.0)
65
- ruby-progressbar (~> 1.7)
66
- unicode-display_width (~> 1.0, >= 1.0.1)
67
- ruby-progressbar (1.8.1)
68
68
  safe_yaml (1.0.4)
69
69
  slop (3.6.0)
70
+ thread_safe (0.3.5)
71
+ tzinfo (1.2.2)
72
+ thread_safe (~> 0.1)
70
73
  unf (0.1.4)
71
74
  unf_ext
72
75
  unf_ext (0.0.7.2)
73
- unicode-display_width (1.1.1)
74
76
  webmock (2.1.0)
75
77
  addressable (>= 2.3.6)
76
78
  crack (>= 0.3.2)
@@ -81,14 +83,16 @@ PLATFORMS
81
83
  ruby
82
84
 
83
85
  DEPENDENCIES
86
+ activesupport
84
87
  faker (>= 1.6, < 1.7)
85
88
  mandarin-api!
86
89
  pry (~> 0)
90
+ pry-byebug
87
91
  pry-doc (~> 0)
88
92
  rake
93
+ rb-readline (~> 0.5)
89
94
  rdoc (>= 2.4.2, < 5.0)
90
95
  rspec (~> 3.0)
91
- rubocop (~> 0)
92
96
  webmock (~> 2.1)
93
97
 
94
98
  BUNDLED WITH
@@ -1,5 +1,6 @@
1
1
  module MandarinApi
2
+ # Configuration class
2
3
  class Configuration
3
- attr_accessor :merchant_id, :secret, :request_url
4
+ attr_accessor :merchant_id, :secret, :request_url, :logger
4
5
  end
5
6
  end
@@ -1,16 +1,19 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'json'
3
4
  require 'rest-client'
4
5
  module MandarinApi
5
6
  # Wraps request sending
6
7
  class Wrapper
7
- def initialize(merchant_id:, secret:)
8
+ def initialize(merchant_id:, secret:, logger: nil)
8
9
  @merchant_id = merchant_id
9
10
  @secret = secret
11
+ @logger = logger
10
12
  end
11
13
 
12
14
  def request(endpoint, params = {})
13
15
  url = URI.join(MandarinApi.config.request_url, endpoint).to_s
16
+ perform_loging url, params, header
14
17
  RestClient.post(url, json(params), header) do |response|
15
18
  case response.code
16
19
  when 200
@@ -23,6 +26,11 @@ module MandarinApi
23
26
 
24
27
  private
25
28
 
29
+ def perform_loging(url, params, header)
30
+ return if @logger.nil?
31
+ @logger.info "Calling MandarinBank at: #{url}; body: #{params}, header: #{header}"
32
+ end
33
+
26
34
  def header
27
35
  {
28
36
  content_type: :json,
@@ -43,10 +51,9 @@ module MandarinApi
43
51
  def key_transform(hash)
44
52
  new_hash = {}
45
53
  hash.keys.each do |key|
46
- new_hash[camelize(key.to_s)] = if hash[key].class == Hash
47
- key_transform hash[key]
48
- elsif hash[key].class == Array
49
- hash[key].map { |e| key_transform e }
54
+ new_hash[camelize(key.to_s)] = case hash[key]
55
+ when Hash then key_transform hash[key]
56
+ when Array then hash[key].map { |e| key_transform e }
50
57
  else
51
58
  hash[key]
52
59
  end
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  Gem::Specification.new do |s|
3
4
  s.name = 'mandarin-api'
4
- s.version = '0.2.2'
5
+ s.version = '0.3.0'
5
6
  s.authors = ['Vladimir Bogaevsky']
6
7
  s.email = 'gitvbogaevsky@gmail.com'
7
8
  s.licenses = ['MIT']
@@ -15,10 +16,11 @@ Gem::Specification.new do |s|
15
16
  s.add_development_dependency('webmock', '~> 2.1')
16
17
  s.add_development_dependency('rspec', '~> 3.0')
17
18
  s.add_development_dependency('pry', '~> 0')
19
+ s.add_development_dependency('rb-readline', '~> 0.5')
18
20
  s.add_development_dependency('pry-doc', '~> 0')
19
21
  s.add_development_dependency('rdoc', '>= 2.4.2', '< 5.0')
20
- s.add_development_dependency('rubocop', '~> 0')
21
22
  s.add_development_dependency('faker', '>= 1.6', '< 1.7')
23
+ s.add_development_dependency('pry-byebug')
22
24
 
23
25
  s.add_dependency 'rest-client', '>= 2.0', '< 3.0'
24
26
 
@@ -18,4 +18,10 @@ RSpec.describe MandarinApi::Configuration do
18
18
  expect(config.request_url).to eq 'www.google.com'
19
19
  end
20
20
  end
21
+ describe '#logger=' do
22
+ it 'can set value' do
23
+ config.logger = Logger
24
+ expect(config.logger).to eq Logger
25
+ end
26
+ end
21
27
  end
@@ -1,12 +1,16 @@
1
1
  # frozen_string_literal: true
2
+ require 'logger'
3
+ require 'active_support/logger'
2
4
 
3
5
  RSpec.describe MandarinApi::Wrapper do
4
6
  include_context 'mocks'
5
7
 
6
8
  let(:wrapper) do
7
9
  MandarinApi::Wrapper
8
- .new(merchant_id: rand(1000), secret: SecureRandom.hex(5))
10
+ .new(merchant_id: rand(1000), secret: SecureRandom.hex(5), logger: logger)
9
11
  end
12
+ let(:logger) { nil }
13
+
10
14
  describe 'request' do
11
15
  let(:params) do
12
16
  {
@@ -24,12 +28,59 @@ RSpec.describe MandarinApi::Wrapper do
24
28
  '?id=0eb51e74-e704-4c36-b5cb-8f0227621518'
25
29
  }
26
30
  end
31
+
27
32
  it 'sends request with passed action' do
28
33
  allow(wrapper).to receive(:generate_x_auth_header).and_return(x_auth)
29
34
  allow(MandarinApi).to \
30
35
  receive_message_chain(:config, :request_url).and_return(mandarin_adress)
31
36
  expect(wrapper.request('api/card-bindings', params)).to eq expected
32
37
  end
38
+
39
+ describe 'logging' do
40
+ before :example do
41
+ `mkdir spec/temp`
42
+ end
43
+
44
+ after :example do
45
+ `rm -rf spec/temp`
46
+ end
47
+
48
+ let(:actual) do
49
+ File.readlines('spec/temp/logfile').last
50
+ end
51
+
52
+ let(:expected) do
53
+ header = { content_type: :json, x_auth: x_auth }
54
+ url = URI.join(MandarinApi.config.request_url, 'api/card-bindings').to_s
55
+ "Calling MandarinBank at: #{url}; body: #{params}, header: #{header}\n"
56
+ end
57
+
58
+ context 'Logger' do
59
+ let(:logger) do
60
+ Logger.new('spec/temp/logfile').tap do |logger|
61
+ logger.formatter = proc { |_severity, _datetime, _progname, msg| "#{msg}\n" }
62
+ end
63
+ end
64
+ it 'logs' do
65
+ allow(wrapper).to receive(:generate_x_auth_header).and_return(x_auth)
66
+ allow(MandarinApi).to \
67
+ receive_message_chain(:config, :request_url).and_return(mandarin_adress)
68
+ wrapper.request('api/card-bindings', params)
69
+ expect(actual).to eq expected
70
+ end
71
+ end
72
+
73
+ context 'ActiveSupport::Logger' do
74
+ let(:logger) { ActiveSupport::Logger.new('spec/temp/logfile') }
75
+ it 'logs' do
76
+ allow(wrapper).to receive(:generate_x_auth_header).and_return(x_auth)
77
+ allow(MandarinApi).to \
78
+ receive_message_chain(:config, :request_url).and_return(mandarin_adress)
79
+ wrapper.request('api/card-bindings', params)
80
+ expect(actual).to eq expected
81
+ end
82
+ end
83
+ end
33
84
  end
34
85
  describe 'camelize' do
35
86
  let(:input) { 's_tri_ng' }
@@ -2,6 +2,7 @@
2
2
  require 'webmock/rspec'
3
3
  require 'mocks'
4
4
  require 'faker'
5
+ require 'pry-byebug'
5
6
 
6
7
  Dir['./lib/**/*.rb'].each { |f| require f }
7
8
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mandarin-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Vladimir Bogaevsky
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-04-19 00:00:00.000000000 Z
11
+ date: 2017-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: webmock
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rb-readline
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '0.5'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '0.5'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: pry-doc
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -86,20 +100,6 @@ dependencies:
86
100
  - - "<"
87
101
  - !ruby/object:Gem::Version
88
102
  version: '5.0'
89
- - !ruby/object:Gem::Dependency
90
- name: rubocop
91
- requirement: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '0'
96
- type: :development
97
- prerelease: false
98
- version_requirements: !ruby/object:Gem::Requirement
99
- requirements:
100
- - - "~>"
101
- - !ruby/object:Gem::Version
102
- version: '0'
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: faker
105
105
  requirement: !ruby/object:Gem::Requirement
@@ -120,6 +120,20 @@ dependencies:
120
120
  - - "<"
121
121
  - !ruby/object:Gem::Version
122
122
  version: '1.7'
123
+ - !ruby/object:Gem::Dependency
124
+ name: pry-byebug
125
+ requirement: !ruby/object:Gem::Requirement
126
+ requirements:
127
+ - - ">="
128
+ - !ruby/object:Gem::Version
129
+ version: '0'
130
+ type: :development
131
+ prerelease: false
132
+ version_requirements: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
123
137
  - !ruby/object:Gem::Dependency
124
138
  name: rest-client
125
139
  requirement: !ruby/object:Gem::Requirement