moneta-api 1.0.1 → 1.0.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
  SHA1:
3
- metadata.gz: 2bd8ba9619326c34b72b79371521849fe44e5b78
4
- data.tar.gz: 1a9a33ce255cb1a7c8bdf4a40c69999659992da7
3
+ metadata.gz: 24f8697207e35d2545e5ff4d599f06846e723d87
4
+ data.tar.gz: 4272d2c91359233ede767dbf3dd2492208e44b6f
5
5
  SHA512:
6
- metadata.gz: ecd96715a52e1fc07270eb7e872ec91b6b7fc69c0521ef99b79c403ec41eda12574308fad9b8b94e4a0a161e85c3d82d10fdaa0625113f4de21d2864df634f40
7
- data.tar.gz: d35540807da05ab55e0f9c7872da1f6567b36275a046d52d7ce27701ba89f4bbfc3555e0f44bbc03ed32824bbf9405c4c06e8d0d984ec71535ea0ac606b0aaf7
6
+ metadata.gz: 7bfc0ca2695fa20b40d3d108151c4698313e9b2daa576cdb0eeace9df5afe9d222b09949aad8055cf5a37386a0b698c45809809475180043b2aa3451f1faa395
7
+ data.tar.gz: 90a7004453ae3aaa2bd36ab266a55e8072e829ae3337f7ff5174eb5b81df640093ba95e495fd0f8f02d39ced298a4ce4e864dac3b0d2f04edf31766b0aa69f68
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 2.0.0
5
+ - 2.1
6
+ - 2.2
7
+ before_script:
8
+ - cp spec/support/moneta.example.yml spec/support/moneta.yml
9
+ script:
10
+ - CODECLIMATE_REPO_TOKEN=d10be753ffa1a760be2df97c61673629a3fa86270cdd898250b8366213b0799c bundle exec rspec
data/README.md CHANGED
@@ -1,31 +1,104 @@
1
- # Moneta::Api
1
+ [![Gem Version](https://badge.fury.io/rb/moneta-api.svg)](http://badge.fury.io/rb/moneta-api)
2
+ [![Build Status](https://travis-ci.org/ssnikolay/moneta-api.svg?branch=master)](https://travis-ci.org/ssnikolay/moneta-api)
3
+ [![Code Climate](https://codeclimate.com/github/ssnikolay/moneta-api/badges/gpa.svg)](https://codeclimate.com/github/ssnikolay/moneta-api)
4
+ [![Test Coverage](https://codeclimate.com/github/ssnikolay/moneta-api/badges/coverage.svg)](https://codeclimate.com/github/ssnikolay/moneta-api)
5
+ [![Inline docs](http://inch-ci.org/github/ssnikolay/moneta-api.svg?branch=master)](http://inch-ci.org/github/ssnikolay/moneta-api)
2
6
 
3
- TODO: Write a gem description
7
+ [Описание MerchantAPI](https://www.moneta.ru/doc/MONETA.MerchantAPI.v2.ru.pdf) | [RDoc](http://www.rubydoc.info/gems/moneta-api) |
8
+ [Список методов](http://www.rubydoc.info/gems/moneta-api/Moneta/Api/ServiceMethods)
4
9
 
5
- ## Installation
10
+ # moneta-api
6
11
 
7
- Add this line to your application's Gemfile:
12
+ МОНЕТА.РУ (MONETA.MerchantAPI.v2).
13
+
14
+ ## Установка
15
+
16
+ Добавьте эти строки в Gemfile вашего приложения:
8
17
 
9
18
  ```ruby
10
19
  gem 'moneta-api'
11
20
  ```
12
21
 
13
- And then execute:
22
+ И выполните:
14
23
 
15
24
  $ bundle
16
25
 
17
- Or install it yourself as:
26
+ Или установите напрямую:
18
27
 
19
28
  $ gem install moneta-api
20
29
 
21
- ## Usage
30
+ ## Использование
31
+
32
+ #### Базовый пример
33
+
34
+ ```ruby
35
+ require 'moneta/api'
36
+
37
+ # получить данные счета
38
+ service = Moneta::Api::Service.new('username', 'password', { demo_mode: true })
39
+ response = service.find_account_by_id(10999)
40
+ puts response.class.name
41
+ # => 'Moneta::Api::Responses::FindAccountByIdResponse'
42
+ puts "Баланс до пополнения: #{ response.account.balance} #{ response.account.currency }"
43
+ # => 'Баланс до пополнения: 100 RUB'
44
+
45
+ # перевод
46
+ transfer_request = Moneta::Api::Requests::TransferRequest.new.tap do |request|
47
+ request.payee = 28988504
48
+ request.payer = 10999
49
+ request.amount = 10
50
+ request.is_payer_amount = false
51
+ request.payment_password = '123456'
52
+ end
53
+ response = service.transfer(transfer_request)
54
+
55
+ # данные транзакции
56
+ puts response.class.name
57
+ # => 'Moneta::Api::Responses::TransferResponse'
58
+ puts response.status
59
+ # => 'SUCCEED'
60
+
61
+ # проверить данные счета
62
+ response = service.find_account_by_id(10999)
63
+ puts "Баланс после пополнения: #{ response.account.balance} #{ response.account.currency }"
64
+ # => 'Баланс после пополнения: 110 RUB'
65
+ ```
66
+
67
+ **Полный [список методов](http://www.rubydoc.info/gems/moneta-api/Moneta/Api/ServiceMethods), с помощью которых вы можете обратиться к MONETA.MerchantAPI.v2**
22
68
 
23
- TODO: Write usage instructions here
69
+ ### Настройки
70
+
71
+ #### Logger
72
+
73
+ ```ruby
74
+ Moneta::Api::Service.new('username', 'password', {
75
+ logger: Rails.logger,
76
+ log_level: :info,
77
+ filters: [:password]
78
+ })
79
+ ```
80
+
81
+ Доступны следующие настройки:
82
+
83
+ Название | Описание
84
+ ---------------------------|:-----------------------------------------------------------
85
+ `:logger` | **moneta-api** по умолчанию пишет логи в `$STDOUT` с помощью ruby Logger'а. Можно переопределить на любой другой Logger. (прим: `Rails.logger`)
86
+ `:log_level` | Используется для фильтрации вывода в log по приоритету. Допускаются следующие значения - `:info`, `:debug`, `:warn`, `:error`, `:fatal`.
87
+ `:log` | Определяет, нужно ли писать в log. (`true` или `false`)
88
+ `:filters` | Конфиденциальная информация, которую не следует писать в log.
89
+ `:pretty_print_xml` | Определяет, нужно ли выводить в log XML запроса\ответа. (`true` или `false`)
90
+
91
+ #### Demo режим
92
+ Для использования тестового сервера (http://demo.moneta.ru) следует инициализировать сервис со специальным флагом
93
+
94
+ ```ruby
95
+ Moneta::Api::Service.new('username', 'password', { demo_mode: true })
96
+ ```
24
97
 
25
98
  ## Contributing
26
99
 
27
- 1. Fork it ( https://github.com/[my-github-username]/moneta-api/fork )
28
- 2. Create your feature branch (`git checkout -b my-new-feature`)
29
- 3. Commit your changes (`git commit -am 'Add some feature'`)
30
- 4. Push to the branch (`git push origin my-new-feature`)
31
- 5. Create a new Pull Request
100
+ 1. Стандартная схема с pull-request workflow
101
+ 2. Для локального запуска тестов необходимо создать конфигурационный файл со своими demo доступами
102
+ ```bash
103
+ echo "username: 'username'\npassword: 'password'" > spec/support/moneta.yml
104
+ ```
@@ -21,22 +21,11 @@ module Moneta
21
21
  properties.each_with_object({}) do |(property, _), hash|
22
22
  value = send(property)
23
23
  unless value.nil?
24
- hash[ classify_with_lower(property.to_s) ] = to_hash_complex_value(value)
24
+ hash[ property.to_s.classify_with_lower ] = to_hash_complex_value(value)
25
25
  end
26
26
  end
27
27
  end
28
28
 
29
- def classify_with_lower(str)
30
- str = classify(str)
31
- str[0] = str[0].downcase
32
-
33
- str
34
- end
35
-
36
- def classify(str)
37
- str.split('_').map(&:capitalize).join
38
- end
39
-
40
29
  private
41
30
 
42
31
  def build_complex_value(type, value)
@@ -6,15 +6,8 @@ module Moneta
6
6
  # @return [Moneta::Api::Responses::*]
7
7
  def build(response)
8
8
  klass, data = response.to_hash.to_a.first
9
- klass = classify(klass)
10
9
 
11
- Object.const_get("Moneta::Api::Responses::#{ klass }").build(data)
12
- end
13
-
14
- private
15
-
16
- def classify(str)
17
- str.to_s.split('_').map(&:capitalize).join
10
+ Object.const_get("Moneta::Api::Responses::#{ klass.to_s.classify }").build(data)
18
11
  end
19
12
  end
20
13
  end
@@ -4,43 +4,43 @@ module Moneta
4
4
  # @param [Moneta::Api::Requests::AuthoriseTransactionRequest]
5
5
  # @return [Moneta::Api::Responses::AuthoriseTransactionResponse]
6
6
  def authorise_transaction(request)
7
- call(__method__, request.to_hash)
7
+ call(__method__, request)
8
8
  end
9
9
 
10
10
  # @param [Moneta::Api::Requests::AuthoriseTransactionBatchRequest]
11
11
  # @return [Moneta::Api::Responses::AuthoriseTransactionBatchResponse]
12
12
  def authorise_transaction_batch(request)
13
- call(__method__, request.to_hash)
13
+ call(__method__, request)
14
14
  end
15
15
 
16
16
  # @param [Moneta::Api::Requests::CancelTransactionRequest]
17
17
  # @return [Moneta::Api::Responses::CancelTransactionResponse]
18
18
  def cancel_transaction(request)
19
- call(__method__, request.to_hash)
19
+ call(__method__, request)
20
20
  end
21
21
 
22
22
  # @param [Moneta::Api::Requests::CancelTransactionBatchRequest]
23
23
  # @return [Moneta::Api::Responses::CancelTransactionBatchResponse]
24
24
  def cancel_transaction_batch(request)
25
- call(__method__, request.to_hash)
25
+ call(__method__, request)
26
26
  end
27
27
 
28
28
  # @param [Moneta::Api::Requests::ConfirmTransactionRequest]
29
29
  # @return [Moneta::Api::Responses::ConfirmTransactionResponse]
30
30
  def confirm_transaction(request)
31
- call(__method__, request.to_hash)
31
+ call(__method__, request)
32
32
  end
33
33
 
34
34
  # @param [Moneta::Api::Requests::ConfirmTransactionBatchRequest]
35
35
  # @return [Moneta::Api::Responses::ConfirmTransactionBatchResponse]
36
36
  def confirm_transaction_batch(request)
37
- call(__method__, request.to_hash)
37
+ call(__method__, request)
38
38
  end
39
39
 
40
40
  # @param [Moneta::Api::Requests::CreateAccountRequest]
41
41
  # @return [Moneta::Api::Responses::CreateAccountResponse]
42
42
  def create_account(request)
43
- call(__method__, request.to_hash)
43
+ call(__method__, request)
44
44
  end
45
45
 
46
46
  # @param [String]
@@ -52,19 +52,19 @@ module Moneta
52
52
  # @param [Moneta::Api::Requests::FindAccountsListRequest]
53
53
  # @return [Moneta::Api::Responses::FindAccountsListResponse]
54
54
  def find_accounts_list(request)
55
- call(__method__, request.to_hash)
55
+ call(__method__, request)
56
56
  end
57
57
 
58
58
  # @param [Moneta::Api::Requests::FindOperationsListRequest]
59
59
  # @return [Moneta::Api::Responses::FindOperationsListResponse]
60
60
  def find_operations_list(request)
61
- call(__method__, request.to_hash)
61
+ call(__method__, request)
62
62
  end
63
63
 
64
64
  # @param [Moneta::Api::Requests::ForecastTransactionRequest]
65
65
  # @return [Moneta::Api::Responses::ForecastTransactionResponse]
66
66
  def forecast_transaction(request)
67
- call(__method__, request.to_hash)
67
+ call(__method__, request)
68
68
  end
69
69
 
70
70
  # @param [Integer]
@@ -76,13 +76,13 @@ module Moneta
76
76
  # @param [Moneta::Api::Requests::FindLastOperationsListRequest]
77
77
  # @return [Moneta::Api::Responses::FindLastOperationsListResponse]
78
78
  def find_last_operations_list(request)
79
- call(__method__, request.to_hash)
79
+ call(__method__, request)
80
80
  end
81
81
 
82
82
  # @param [Moneta::Api::Requests::GetAccountPaymentPasswordChallengeRequest]
83
83
  # @return [Moneta::Api::Responses::GetAccountPaymentPasswordChallengeResponse]
84
84
  def get_account_payment_password_challenge(request)
85
- call(__method__, request.to_hash)
85
+ call(__method__, request)
86
86
  end
87
87
 
88
88
  # @param [Integer]
@@ -94,57 +94,77 @@ module Moneta
94
94
  # @param [Moneta::Api::Requests::InvoiceRequest]
95
95
  # @return [Moneta::Api::Responses::InvoiceResponse]
96
96
  def invoice(request)
97
- call(__method__, request.to_hash)
97
+ call(__method__, request)
98
98
  end
99
99
 
100
100
  # @param [Moneta::Api::Requests::InvoiceBatchRequest]
101
101
  # @return [Moneta::Api::Responses::InvoiceBatchResponse]
102
102
  def invoice_batch(request)
103
- call(__method__, request.to_hash)
103
+ call(__method__, request)
104
104
  end
105
105
 
106
106
  # @param [Moneta::Api::Requests::RefundRequest]
107
107
  # @return [Moneta::Api::Responses::RefundResponse]
108
108
  def refund(request)
109
- call(__method__, request.to_hash)
109
+ call(__method__, request)
110
110
  end
111
111
 
112
112
  # @param [Moneta::Api::Requests::TransferRequest]
113
113
  # @return [Moneta::Api::Responses::TransferResponse]
114
114
  def transfer(request)
115
- call(__method__, request.to_hash)
115
+ call(__method__, request)
116
116
  end
117
117
 
118
118
  # @param [Moneta::Api::Requests::PaymentRequest]
119
119
  # @return [Moneta::Api::Responses::PaymentResponse]
120
120
  def payment(request)
121
- call(__method__, request.to_hash)
121
+ call(__method__, request)
122
122
  end
123
123
 
124
124
  # @param [Moneta::Api::Requests::VerifyPaymentRequest]
125
125
  # @return [Moneta::Api::Responses::VerifyPaymentResponse]
126
126
  def verify_payment(request)
127
- call(__method__, request.to_hash)
127
+ call(__method__, request)
128
128
  end
129
129
 
130
130
  # @param [Moneta::Api::Requests::VerifyTransferRequest]
131
131
  # @return [Moneta::Api::Responses::VerifyTransferResponse]
132
132
  def verify_transfer(request)
133
- call(__method__, request.to_hash)
133
+ call(__method__, request)
134
134
  end
135
135
 
136
136
  # @param [Moneta::Api::Requests::VerifyTransactionRequest]
137
137
  # @return [Moneta::Api::Responses::VerifyTransactionResponse]
138
138
  def verify_transaction(request)
139
- call(__method__, request.to_hash)
139
+ call(__method__, request)
140
140
  end
141
141
 
142
142
  private
143
143
 
144
- def call(method, request_message)
145
- response = client.call(method, { message: request_message })
144
+ def call(method, request)
145
+ validate!(method, request)
146
+
147
+ response = client.call(method, {
148
+ message: request.respond_to?(:to_hash) ? request.to_hash : request
149
+ })
146
150
  ResponseFactory.build(response)
147
151
  end
152
+
153
+ def validate!(method, request)
154
+ expected_request_class = get_expected_request_class(method)
155
+
156
+ unless request.kind_of?(expected_request_class)
157
+ raise TypeError.new("#{ request.class.name } can't be coerced into #{ expected_request_class.name }")
158
+ end
159
+ end
160
+
161
+ def get_expected_request_class(method)
162
+ {
163
+ 'find_account_by_alias' => String,
164
+ 'find_account_by_id' => Integer,
165
+ 'get_operation_details_by_id' => Integer
166
+ }[ method.to_s ] || Object.const_get("Moneta::Api::Requests::#{ method.to_s.classify }Request")
167
+ end
148
168
  end
149
169
  end
150
170
  end
@@ -1,5 +1,5 @@
1
1
  module Moneta
2
2
  module Api
3
- VERSION = '1.0.1'
3
+ VERSION = '1.0.2'
4
4
  end
5
5
  end
data/lib/moneta/api.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require 'moneta/api/version'
2
2
  require 'savon'
3
3
 
4
+ require 'moneta/core_ext/string'
4
5
  require 'moneta/api/service_methods'
5
6
  require 'moneta/api/service'
6
7
  require 'moneta/api/data_mapper'
@@ -0,0 +1,29 @@
1
+ module Moneta
2
+ module CoreExt
3
+ module String
4
+
5
+ def self.included(base)
6
+ unless 'moneta'.respond_to?(:classify)
7
+ base.send(:include, Extension)
8
+ end
9
+ end
10
+
11
+ module Extension
12
+ def classify_with_lower
13
+ str = dup
14
+ str = str.classify
15
+ str[0] = str[0].downcase
16
+
17
+ str
18
+ end
19
+
20
+ def classify
21
+ dup.split('_').map(&:capitalize).join
22
+ end
23
+ end
24
+
25
+ end
26
+ end
27
+ end
28
+
29
+ String.send :include, Moneta::CoreExt::String
data/moneta-api.gemspec CHANGED
@@ -28,4 +28,5 @@ Gem::Specification.new do |spec|
28
28
  spec.add_development_dependency 'vcr'
29
29
  spec.add_development_dependency 'fakeweb'
30
30
  spec.add_development_dependency 'yard'
31
+ spec.add_development_dependency 'codeclimate-test-reporter'
31
32
  end
@@ -21,4 +21,8 @@ describe Moneta::Api::Service do
21
21
  it { is_expected.to eq 'https://www.moneta.ru/services.wsdl' }
22
22
  end
23
23
  end
24
+
25
+ describe 'request validate' do
26
+ it { expect { service.authorise_transaction('invalid request') }.to raise_exception(TypeError, "String can't be coerced into Moneta::Api::Requests::AuthoriseTransactionRequest") }
27
+ end
24
28
  end
data/spec/spec_helper.rb CHANGED
@@ -1,3 +1,8 @@
1
+ if ENV['CODECLIMATE_REPO_TOKEN']
2
+ require 'codeclimate-test-reporter'
3
+ CodeClimate::TestReporter.start
4
+ end
5
+
1
6
  require 'rspec'
2
7
  require 'pry'
3
8
  require 'rspec/its'
@@ -19,6 +24,7 @@ VCR.configure do |config|
19
24
  config.hook_into :fakeweb
20
25
  config.filter_sensitive_data('<USERNAME>') { $username }
21
26
  config.filter_sensitive_data('<PASSWORD>') { $password }
27
+ config.ignore_hosts 'codeclimate.com'
22
28
  end
23
29
 
24
30
  RSpec.configure do |config|
@@ -0,0 +1,2 @@
1
+ username: 'username'
2
+ password: 'password'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moneta-api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - ssnikolay
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-04-14 00:00:00.000000000 Z
11
+ date: 2015-04-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: savon
@@ -136,6 +136,20 @@ dependencies:
136
136
  - - '>='
137
137
  - !ruby/object:Gem::Version
138
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: codeclimate-test-reporter
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - '>='
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - '>='
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
139
153
  description: МОНЕТА.РУ (MONETA.MerchantAPI.v2).
140
154
  email:
141
155
  - ssnikolay@gmail.com
@@ -145,6 +159,7 @@ extra_rdoc_files: []
145
159
  files:
146
160
  - .gitignore
147
161
  - .rspec
162
+ - .travis.yml
148
163
  - .yardopts
149
164
  - Gemfile
150
165
  - LICENSE.txt
@@ -225,6 +240,7 @@ files:
225
240
  - lib/moneta/api/types/verify_transaction_response_type.rb
226
241
  - lib/moneta/api/types/verify_transfer_response_type.rb
227
242
  - lib/moneta/api/version.rb
243
+ - lib/moneta/core_ext/string.rb
228
244
  - moneta-api.gemspec
229
245
  - spec/lib/moneta/api/requests/authorise_transaction_batch_request_spec.rb
230
246
  - spec/lib/moneta/api/requests/authorise_transaction_request_spec.rb
@@ -240,6 +256,7 @@ files:
240
256
  - spec/spec_helper.rb
241
257
  - spec/support/context.rb
242
258
  - spec/support/matchers.rb
259
+ - spec/support/moneta.example.yml
243
260
  - spec/support/wsdl
244
261
  - spec/vcr/moneta_api_requests_authorisetransactionbatchrequest/use_when_one_operation_transaction_transaction_.yml
245
262
  - spec/vcr/moneta_api_requests_authorisetransactionbatchrequest/use_when_two_operations_transaction_first_transaction_.yml
@@ -290,6 +307,7 @@ test_files:
290
307
  - spec/spec_helper.rb
291
308
  - spec/support/context.rb
292
309
  - spec/support/matchers.rb
310
+ - spec/support/moneta.example.yml
293
311
  - spec/support/wsdl
294
312
  - spec/vcr/moneta_api_requests_authorisetransactionbatchrequest/use_when_one_operation_transaction_transaction_.yml
295
313
  - spec/vcr/moneta_api_requests_authorisetransactionbatchrequest/use_when_two_operations_transaction_first_transaction_.yml