moneta-api 1.0.1 → 1.0.2
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 +4 -4
- data/.travis.yml +10 -0
- data/README.md +86 -13
- data/lib/moneta/api/data_mapper.rb +1 -12
- data/lib/moneta/api/response_factory.rb +1 -8
- data/lib/moneta/api/service_methods.rb +42 -22
- data/lib/moneta/api/version.rb +1 -1
- data/lib/moneta/api.rb +1 -0
- data/lib/moneta/core_ext/string.rb +29 -0
- data/moneta-api.gemspec +1 -0
- data/spec/lib/moneta/api/service_spec.rb +4 -0
- data/spec/spec_helper.rb +6 -0
- data/spec/support/moneta.example.yml +2 -0
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 24f8697207e35d2545e5ff4d599f06846e723d87
|
4
|
+
data.tar.gz: 4272d2c91359233ede767dbf3dd2492208e44b6f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7bfc0ca2695fa20b40d3d108151c4698313e9b2daa576cdb0eeace9df5afe9d222b09949aad8055cf5a37386a0b698c45809809475180043b2aa3451f1faa395
|
7
|
+
data.tar.gz: 90a7004453ae3aaa2bd36ab266a55e8072e829ae3337f7ff5174eb5b81df640093ba95e495fd0f8f02d39ced298a4ce4e864dac3b0d2f04edf31766b0aa69f68
|
data/.travis.yml
ADDED
data/README.md
CHANGED
@@ -1,31 +1,104 @@
|
|
1
|
-
|
1
|
+
[](http://badge.fury.io/rb/moneta-api)
|
2
|
+
[](https://travis-ci.org/ssnikolay/moneta-api)
|
3
|
+
[](https://codeclimate.com/github/ssnikolay/moneta-api)
|
4
|
+
[](https://codeclimate.com/github/ssnikolay/moneta-api)
|
5
|
+
[](http://inch-ci.org/github/ssnikolay/moneta-api)
|
2
6
|
|
3
|
-
|
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
|
-
|
10
|
+
# moneta-api
|
6
11
|
|
7
|
-
|
12
|
+
МОНЕТА.РУ (MONETA.MerchantAPI.v2).
|
13
|
+
|
14
|
+
## Установка
|
15
|
+
|
16
|
+
Добавьте эти строки в Gemfile вашего приложения:
|
8
17
|
|
9
18
|
```ruby
|
10
19
|
gem 'moneta-api'
|
11
20
|
```
|
12
21
|
|
13
|
-
|
22
|
+
И выполните:
|
14
23
|
|
15
24
|
$ bundle
|
16
25
|
|
17
|
-
|
26
|
+
Или установите напрямую:
|
18
27
|
|
19
28
|
$ gem install moneta-api
|
20
29
|
|
21
|
-
##
|
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
|
-
|
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.
|
28
|
-
2.
|
29
|
-
|
30
|
-
|
31
|
-
|
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[
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
139
|
+
call(__method__, request)
|
140
140
|
end
|
141
141
|
|
142
142
|
private
|
143
143
|
|
144
|
-
def call(method,
|
145
|
-
|
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
|
data/lib/moneta/api/version.rb
CHANGED
data/lib/moneta/api.rb
CHANGED
@@ -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
@@ -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|
|
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.
|
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-
|
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
|