mandarin-api 0.2.2 → 0.3.0

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
  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