sbrf_merchant 1.0.0 → 2.0.1

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
- SHA1:
3
- metadata.gz: e0a432c1d76b9afe5994042bd2f89f68e38bfc2b
4
- data.tar.gz: 3ca43386c3ebf92e68767b471d8a8288a1bcb0ed
2
+ SHA256:
3
+ metadata.gz: faada4cbbe623865c865d04992845d0c1a1e805c03c03b126d627c1263aa9484
4
+ data.tar.gz: ae29ef50e146c42ae8ad65c9121607b2d5b106c11f047a96bf188d88f9334c26
5
5
  SHA512:
6
- metadata.gz: 154e51703e5758d3917478a853143bdf42e5308856cd7a4bc4b2b7391067b537b390116496d798af41064c642717966abbfda3ab813b0d2074df24e0062a879e
7
- data.tar.gz: ce34420640e00c27428b4f84e1e171d8ae392caffb38f1a3cdd74bf9f98347abe9ac6ee7104a10f841817c094e3a07f7996064bd04bdd2b658bc78b919ddad9a
6
+ metadata.gz: 1ffda247254ac00d4c2ff5181afde604c5cfd204c2f679e3b8a7948a851785a3c96bb91f291fd6d4155773b7696703cb64ffced0fdb14e6597aaf0c96781147b
7
+ data.tar.gz: f9960bb76468d78f4bb049c796553bec9c2c17a849ed5fdf56cda9db3a6dfdb868c57fab06a10e6bcf1a635d67afecf9899f17e1cc7b3945b5d6348adc201544
data/README.md CHANGED
@@ -10,8 +10,8 @@ Ruby клиент для работы с платёжным шлюзом Сбе
10
10
 
11
11
  Ключевые особенности:
12
12
  - Простой (~200 LOC).
13
- - Лёгкий (всего одна зависимость - JSON gem).
14
- - Написан в ОО стиле без "магии". Подходит для написания unit тестов.
13
+ - Расширяемый из коробки. Если В API появится новый метод то данный клиент будет его поддерживать без каких либо правок в исходный код
14
+ - Написан в ОО + ФП стиле без "магии". Легко встроится в ваши сервисные объекты и юнит тесты
15
15
 
16
16
  ## Установка
17
17
 
@@ -25,74 +25,42 @@ Ruby клиент для работы с платёжным шлюзом Сбе
25
25
 
26
26
  ```ruby
27
27
  # Gemfile
28
- gem 'sbrf_merchant'
28
+ gem 'sbrf_merchant', '~> 2.0.0`
29
29
  ```
30
+ ## Документация
31
+ - [Site(RU)](https://securepayments.sberbank.ru/wiki/doku.php/integration:api:start)
32
+ - [PDF(RU)](http://cs.petrsu.ru/~vadim/sd2018/Merchant-Manual-SBRF.pdf)
30
33
 
31
- ## Конфигурация
32
- Перед использованием необходимо проинициализировать библиотеку
34
+ ## Использование
35
+ ### Пример регистрации заказа
33
36
  ```ruby
37
+ # Перед использованием необходимо проинициализировать библиотеку.
34
38
  SbrfMerchant.configure do |config|
35
- config.userName = '<Merchant Username>'
39
+ config.user_name = '<Merchant Username>'
36
40
  config.password = '<Merchant Password>'
37
41
  config.host = '<Sberbank API Host>'
38
42
  end
39
- ```
40
- ## Документация
41
- - [Site(RU)](https://securepayments.sberbank.ru/wiki/doku.php/integration:api:start)
42
- - [PDF(RU)](http://cs.petrsu.ru/~vadim/sd2018/Merchant-Manual-SBRF.pdf)
43
- ## Использование
44
- ### Терминология
45
43
 
46
- - **orderId** - ID заказа в Сбербанке
47
- - **orderNumber** - ID заказа в Вашей системе
44
+ # или
48
45
 
49
- ### Инициализация объекта заказа
50
- Если необходимо зарегистрировать новый заказ
51
- ```ruby
52
- SbrfMerchant::Order.new(orderNumber: orderNumber)
53
- ```
54
- Если необходимо поработать с уже существующим
55
- ```ruby
56
- SbrfMerchant::Order.new(orderNumber: orderNumber, orderId: orderId)
57
- ```
58
- ### Аргументы вызываемых методов
59
- - передаются через keywords
60
- - имена аргументов такие же как и в документации
61
- ### Ответы API
62
- Ответы API возвращаются как объекты. Доступ через reader(getter) методы. Также в классах есть методы упрощающие работу с телом ответа (проверка успешности запроса, определение статуса заказа)
63
- ### Примеры работы
64
- #### Регистрация заказа
65
- ```ruby
66
- require 'securerandom'
67
- order = SbrfMerchant::Order.new(orderNumber: SecureRandom.hex)
68
- response = order.register_one_stage(amount: 10000, returnUrl: 'http:/localhost:3000')
46
+ SbrfMerchant.configuration = SbrfMerchant::Configuration.new(
47
+ host: '<Sberbank API Host>',
48
+ user_name: '<Merchant Username>',
49
+ password: '<Merchant Password>'
50
+ )
51
+
52
+
53
+ # Cоздаем клиент
54
+ client = SbrfMerchant::Api::Client.new
55
+
56
+ # Вызываем метод API.
57
+ # :register - название метода согласно документации Cбербанка в snake_case.
58
+ # Далее параметры запроса. Имена передаются в snake_case, перед отправкой запроса все параметры приведутся к camelCase.
59
+ response = client.call(:register, amount: 100, order_number: SecureRandom.hex, return_url: 'localhost:3000')
60
+ response.success? # => true
61
+ # В ответе имена возвращаются в snake_case
62
+ response.order_id #<order-id>
69
63
 
70
- order.orderId # "<orderId>"
71
- response.success? # true
72
- response.formUrl # "https://3dsec.sberbank.ru/payment/merchants/sbersafe/payment_ru.html?mdOrder=<orderId>"
73
- ```
74
- Для создания двустадийного заказа используте метод ```register_two_stage```
75
- #### Статус заказа
76
- ```ruby
77
- response = order.get_info
78
- response.not_paid? # true or false
79
- ```
80
- #### Возврат средств
81
- ```ruby
82
- refund_amount = 1000
83
- response = order.refund(refund_amount)
84
- response.success? # true or false
85
- ```
86
- #### Отмена заказа
87
- ```ruby
88
- response = order.cancel
89
- response.success? # true or false
90
- ```
91
- #### Завершение заказа (двухстадийная оплата)
92
- ```ruby
93
- complete_amount = 1000
94
- response = order.complete(complete_amount)
95
- response.success? # true or false
96
64
  ```
97
65
  ## Copyright
98
66
  Copyright (c) 2018 Eugene Kozlov. See [LICENSE][] for details.
data/lib/sbrf_merchant.rb CHANGED
@@ -1,24 +1,25 @@
1
- require 'sbrf_merchant/order'
1
+ require 'sbrf_merchant/api/client'
2
2
 
3
3
  module SbrfMerchant
4
4
  class << self
5
5
  attr_accessor :configuration
6
- end
7
-
8
- def self.api_client
9
- SbrfMerchant::Api::Client.new(
10
- host: SbrfMerchant.configuration.host,
11
- userName: SbrfMerchant.configuration.userName,
12
- password: SbrfMerchant.configuration.password
13
- )
14
- end
15
6
 
16
- def self.configure
17
- self.configuration ||= Configuration.new
18
- yield(configuration)
7
+ def configure
8
+ self.configuration ||= Configuration.new
9
+ yield(configuration)
10
+ end
19
11
  end
20
12
 
21
13
  class Configuration
22
- attr_accessor :host, :userName, :password
14
+ attr_accessor :host, :user_name, :password
15
+
16
+ def initialize(host: nil, user_name: nil, password: nil)
17
+ @host = host
18
+ @user_name = user_name
19
+ @password = password
20
+ end
23
21
  end
24
22
  end
23
+
24
+ Sberbank = SbrfMerchant
25
+ SBRF = SbrfMerchant
@@ -1,42 +1,50 @@
1
- require 'json'
2
- require 'uri'
3
- require 'net/http'
1
+ require 'sbrf_merchant/api/response/body_postprocessor'
2
+ require 'sbrf_merchant/api/request/body_preprocessor'
3
+ require 'sbrf_merchant/utils/http/client'
4
+ require 'sbrf_merchant/utils/string/to_camel_case'
4
5
 
5
6
  module SbrfMerchant
6
7
  module Api
7
8
  class Client
8
- attr_accessor :host, :userName, :password
9
-
10
- def initialize(host:, userName:, password:)
11
- @host = host
12
- @userName = userName
13
- @password = password
9
+ attr_reader :config,
10
+ :response_body_postprocessor,
11
+ :http_client,
12
+ :method_name_converter,
13
+ :request_body_preprocessor
14
+
15
+ def initialize(
16
+ config: SbrfMerchant.configuration,
17
+ response_body_postprocessor: SbrfMerchant::Api::Response::BodyPostProcessor,
18
+ request_body_preprocessor: SbrfMerchant::Api::Request::BodyPreProcessor,
19
+ http_client: SbrfMerchant::Utils::Http::Client,
20
+ method_name_converter: SbrfMerchant::Utils::String::ToCamelCase
21
+ )
22
+ @config = config
23
+ @response_body_postprocessor = response_body_postprocessor
24
+ @http_client = http_client
25
+ @method_name_converter = method_name_converter
26
+ @request_body_preprocessor = request_body_preprocessor
14
27
  end
15
28
 
16
- def process_request(path, params)
17
- parse_response_body(http_request(path, params))
18
- end
29
+ def call(method, **params)
30
+ prepared_params = request_body_preprocessor.call(auth_params.merge(params))
31
+ response = http_client.call(uri(method), prepared_params)
19
32
 
20
- private
21
-
22
- def parse_response_body(response)
23
- JSON.parse(response.body, symbolize_names: true)
33
+ response_body_postprocessor.call(response.body)
24
34
  end
25
35
 
26
- def http_request(path, params)
27
- uri = URI.join(host, path)
36
+ private
28
37
 
29
- Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
30
- http.request(build_net_http_request_object(uri, params))
31
- end
38
+ def auth_params
39
+ { user_name: config.user_name, password: config.password }
32
40
  end
33
41
 
34
- def build_net_http_request_object(uri, params)
35
- request = Net::HTTP::Post.new(uri)
36
- request.set_form_data(
37
- params.merge(userName: userName, password: password)
42
+ def uri(method)
43
+ URI.join(
44
+ config.host,
45
+ '/payment/rest/',
46
+ method_name_converter.call(method.to_s) + '.do'
38
47
  )
39
- request
40
48
  end
41
49
  end
42
50
  end
@@ -0,0 +1,12 @@
1
+ require 'sbrf_merchant/utils/high_order_functions/compose'
2
+ require 'sbrf_merchant/utils/hash/to_camel_case_keys'
3
+
4
+ module SbrfMerchant
5
+ module Api
6
+ module Request
7
+ BodyPreProcessor = SbrfMerchant::Utils::HighOrderFunctions::Compose.call(
8
+ SbrfMerchant::Utils::Hash::ToCamelCaseKeys
9
+ )
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,15 @@
1
+ require 'ostruct'
2
+
3
+ module SbrfMerchant
4
+ module Api
5
+ module Response
6
+ AppendSuccessFlagToHash = lambda do |hash|
7
+ hash.merge(success?: IsSuccess.call(hash))
8
+ end
9
+
10
+ IsSuccess = lambda do |hash|
11
+ !hash[:form_url].nil? || hash[:error_code] == '0'
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ require 'sbrf_merchant/utils/high_order_functions/compose'
2
+ require 'sbrf_merchant/utils/json/to_hash_parser'
3
+ require 'sbrf_merchant/utils/json/to_object_parser'
4
+ require 'sbrf_merchant/utils/hash/to_snake_case_keys'
5
+ require 'sbrf_merchant/api/response/append_success_flag_to_hash'
6
+ require 'json/ext'
7
+
8
+ module SbrfMerchant
9
+ module Api
10
+ module Response
11
+ BodyPostProcessor = SbrfMerchant::Utils::HighOrderFunctions::Compose.call(
12
+ SbrfMerchant::Utils::JSON::ToHashParser,
13
+ SbrfMerchant::Utils::Hash::ToSnakeCaseKeys,
14
+ SbrfMerchant::Api::Response::AppendSuccessFlagToHash,
15
+ ->(hash) { JSON.dump(hash) },
16
+ SbrfMerchant::Utils::JSON::ToObjectParser.call(OpenStruct)
17
+ )
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,9 @@
1
+ require 'awrence'
2
+
3
+ module SbrfMerchant
4
+ module Utils
5
+ module Hash
6
+ ToCamelCaseKeys = ->(hash) { hash.to_camelback_keys }
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ require 'plissken'
2
+
3
+ module SbrfMerchant
4
+ module Utils
5
+ module Hash
6
+ ToSnakeCaseKeys = ->(hash) { hash.to_snake_keys }
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,11 @@
1
+ module SbrfMerchant
2
+ module Utils
3
+ module HighOrderFunctions
4
+ Compose = lambda { |*functions|
5
+ lambda { |arg|
6
+ functions.inject(arg) { |acc, function| function.call(acc) }
7
+ }
8
+ }
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,16 @@
1
+ require 'net/http'
2
+
3
+ module SbrfMerchant
4
+ module Utils
5
+ module Http
6
+ Client = lambda do |uri, params|
7
+ request = ::Net::HTTP::Post.new(uri)
8
+ request.set_form_data(params)
9
+
10
+ ::Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
11
+ http.request(request)
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,9 @@
1
+ require 'json/ext'
2
+
3
+ module SbrfMerchant
4
+ module Utils
5
+ module JSON
6
+ ToHashParser = ->(json) { ::JSON.parse(json, symbolize_names: true) }
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ require 'json/ext'
2
+
3
+ module SbrfMerchant
4
+ module Utils
5
+ module JSON
6
+ ToObjectParser = lambda { |object_class|
7
+ lambda { |json|
8
+ ::JSON.parse(json, object_class: object_class)
9
+ }
10
+ }
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,11 @@
1
+ module SbrfMerchant
2
+ module Utils
3
+ module String
4
+ ToCamelCase = lambda do |str|
5
+ str.split('_').inject('') do |buffer, e|
6
+ buffer << (buffer.empty? ? e : e.capitalize!)
7
+ end
8
+ end
9
+ end
10
+ end
11
+ end
@@ -1,3 +1,3 @@
1
1
  module SbrfMerchant
2
- VERSION = '1.0.0'.freeze
2
+ VERSION = '2.0.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sbrf_merchant
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Eugene Kozlov
8
8
  autorequire:
9
- bindir: exe
9
+ bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-08 00:00:00.000000000 Z
11
+ date: 2019-05-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.16'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.16'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pry
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: awrence
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: json
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +122,20 @@ dependencies:
108
122
  - - ">="
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: plissken
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :runtime
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
111
139
  description: Sberbank Merchant API Client for Ruby
112
140
  email:
113
141
  - kozlovea8@gmail.com
@@ -115,29 +143,22 @@ executables: []
115
143
  extensions: []
116
144
  extra_rdoc_files: []
117
145
  files:
118
- - ".editorconfig"
119
- - ".gitignore"
120
- - ".rspec"
121
- - ".travis.yml"
122
- - CHANGELOG.md
123
- - CODE_OF_CONDUCT.md
124
- - Gemfile
125
146
  - LICENSE.txt
126
147
  - README.md
127
148
  - Rakefile
128
- - bin/console
129
- - bin/setup
130
149
  - lib/sbrf_merchant.rb
131
- - lib/sbrf_merchant/api/action.rb
132
150
  - lib/sbrf_merchant/api/client.rb
133
- - lib/sbrf_merchant/api/error_code.rb
134
- - lib/sbrf_merchant/api/order_status.rb
135
- - lib/sbrf_merchant/order.rb
136
- - lib/sbrf_merchant/response/base.rb
137
- - lib/sbrf_merchant/response/create_order.rb
138
- - lib/sbrf_merchant/response/order_status.rb
151
+ - lib/sbrf_merchant/api/request/body_preprocessor.rb
152
+ - lib/sbrf_merchant/api/response/append_success_flag_to_hash.rb
153
+ - lib/sbrf_merchant/api/response/body_postprocessor.rb
154
+ - lib/sbrf_merchant/utils/hash/to_camel_case_keys.rb
155
+ - lib/sbrf_merchant/utils/hash/to_snake_case_keys.rb
156
+ - lib/sbrf_merchant/utils/high_order_functions/compose.rb
157
+ - lib/sbrf_merchant/utils/http/client.rb
158
+ - lib/sbrf_merchant/utils/json/to_hash_parser.rb
159
+ - lib/sbrf_merchant/utils/json/to_object_parser.rb
160
+ - lib/sbrf_merchant/utils/string/to_camel_case.rb
139
161
  - lib/sbrf_merchant/version.rb
140
- - sbrf_merchant.gemspec
141
162
  homepage: https://github.com/abstractart/sbrf_merchant
142
163
  licenses:
143
164
  - MIT
@@ -150,7 +171,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
150
171
  requirements:
151
172
  - - ">="
152
173
  - !ruby/object:Gem::Version
153
- version: 2.1.0
174
+ version: 2.2.0
154
175
  required_rubygems_version: !ruby/object:Gem::Requirement
155
176
  requirements:
156
177
  - - ">="
@@ -158,7 +179,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
179
  version: '0'
159
180
  requirements: []
160
181
  rubyforge_project:
161
- rubygems_version: 2.6.14
182
+ rubygems_version: 2.7.6
162
183
  signing_key:
163
184
  specification_version: 4
164
185
  summary: Sberbank Merchant
data/.editorconfig DELETED
@@ -1,12 +0,0 @@
1
- root = true
2
-
3
- [*]
4
- indent_style = space
5
- indent_size = 2
6
- end_of_line = lf
7
- charset = utf-8
8
- trim_trailing_whitespace = true
9
- insert_final_newline = true
10
-
11
- [*.{sh,markdown}]
12
- indent_size = 4
data/.gitignore DELETED
@@ -1,11 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /_yardoc/
4
- /coverage/
5
- /doc/
6
- /pkg/
7
- /spec/reports/
8
- /tmp/
9
-
10
- # rspec failure tracking
11
- .rspec_status
data/.rspec DELETED
@@ -1,3 +0,0 @@
1
- --format documentation
2
- --color
3
- --require spec_helper
data/.travis.yml DELETED
@@ -1,18 +0,0 @@
1
- sudo: false
2
- env:
3
- global:
4
- - CC_TEST_REPORTER_ID=9735ef84689218db8e96c19956062b07b3f300af987cfb6817765cc12c542c97
5
- language: ruby
6
- rvm:
7
- - 2.5.1
8
- before_install: gem install bundler -v 1.16.5
9
- notifications:
10
- - false
11
- before_script:
12
- - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
13
- - chmod +x ./cc-test-reporter
14
- - ./cc-test-reporter before-build
15
- scripts:
16
- - bundle exec rspec spec
17
- after_script:
18
- - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
data/CHANGELOG.md DELETED
@@ -1,13 +0,0 @@
1
- # Changelog 1.0.0
2
- - Replace Order::OneStage class with Order class
3
- - Add methods for working with two stage orders
4
- # Changelog 0.2.0
5
- - Replace external gems with Ruby standard library features
6
- # Changelog 0.1.3
7
- - Fix unexpected behaviour in Response::Base#success?
8
-
9
- # Changelog 0.1.2
10
- - Fix errors in Response::OrderStatus
11
-
12
- # Changelog 0.1.1
13
- - Add support of OneStage Order (register, cancel, refund, status)
data/CODE_OF_CONDUCT.md DELETED
@@ -1,74 +0,0 @@
1
- # Contributor Covenant Code of Conduct
2
-
3
- ## Our Pledge
4
-
5
- In the interest of fostering an open and welcoming environment, we as
6
- contributors and maintainers pledge to making participation in our project and
7
- our community a harassment-free experience for everyone, regardless of age, body
8
- size, disability, ethnicity, gender identity and expression, level of experience,
9
- nationality, personal appearance, race, religion, or sexual identity and
10
- orientation.
11
-
12
- ## Our Standards
13
-
14
- Examples of behavior that contributes to creating a positive environment
15
- include:
16
-
17
- * Using welcoming and inclusive language
18
- * Being respectful of differing viewpoints and experiences
19
- * Gracefully accepting constructive criticism
20
- * Focusing on what is best for the community
21
- * Showing empathy towards other community members
22
-
23
- Examples of unacceptable behavior by participants include:
24
-
25
- * The use of sexualized language or imagery and unwelcome sexual attention or
26
- advances
27
- * Trolling, insulting/derogatory comments, and personal or political attacks
28
- * Public or private harassment
29
- * Publishing others' private information, such as a physical or electronic
30
- address, without explicit permission
31
- * Other conduct which could reasonably be considered inappropriate in a
32
- professional setting
33
-
34
- ## Our Responsibilities
35
-
36
- Project maintainers are responsible for clarifying the standards of acceptable
37
- behavior and are expected to take appropriate and fair corrective action in
38
- response to any instances of unacceptable behavior.
39
-
40
- Project maintainers have the right and responsibility to remove, edit, or
41
- reject comments, commits, code, wiki edits, issues, and other contributions
42
- that are not aligned to this Code of Conduct, or to ban temporarily or
43
- permanently any contributor for other behaviors that they deem inappropriate,
44
- threatening, offensive, or harmful.
45
-
46
- ## Scope
47
-
48
- This Code of Conduct applies both within project spaces and in public spaces
49
- when an individual is representing the project or its community. Examples of
50
- representing a project or community include using an official project e-mail
51
- address, posting via an official social media account, or acting as an appointed
52
- representative at an online or offline event. Representation of a project may be
53
- further defined and clarified by project maintainers.
54
-
55
- ## Enforcement
56
-
57
- Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
- reported by contacting the project team at kozlovea8@gmail.com. All
59
- complaints will be reviewed and investigated and will result in a response that
60
- is deemed necessary and appropriate to the circumstances. The project team is
61
- obligated to maintain confidentiality with regard to the reporter of an incident.
62
- Further details of specific enforcement policies may be posted separately.
63
-
64
- Project maintainers who do not follow or enforce the Code of Conduct in good
65
- faith may face temporary or permanent repercussions as determined by other
66
- members of the project's leadership.
67
-
68
- ## Attribution
69
-
70
- This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
- available at [http://contributor-covenant.org/version/1/4][version]
72
-
73
- [homepage]: http://contributor-covenant.org
74
- [version]: http://contributor-covenant.org/version/1/4/
data/Gemfile DELETED
@@ -1,6 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
-
5
- # Specify your gem's dependencies in sberbank_merchant_api.gemspec
6
- gemspec
data/bin/console DELETED
@@ -1,14 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- require 'bundler/setup'
4
- require 'sbrf_merchant'
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require 'irb'
14
- IRB.start(__FILE__)
data/bin/setup DELETED
@@ -1,8 +0,0 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install
7
-
8
- # Do any other automated setup that you need to do here
@@ -1,13 +0,0 @@
1
- module SbrfMerchant
2
- module Api
3
- module Action
4
- REST = '/payment/rest/'.freeze
5
- REFUND_ORDER = "#{REST}refund.do".freeze
6
- REGISTER_ORDER = "#{REST}register.do".freeze
7
- ORDER_STATUS = "#{REST}getOrderStatusExtended.do".freeze
8
- CANCEL_ORDER = "#{REST}reverse.do".freeze
9
- REGISTER_PRE_AUTH = "#{REST}registerPreAuth.do".freeze
10
- COMPLETE_ORDER = "#{REST}deposit.do".freeze
11
- end
12
- end
13
- end
@@ -1,7 +0,0 @@
1
- module SbrfMerchant
2
- module Api
3
- module ErrorCode
4
- SUCCESS = 0
5
- end
6
- end
7
- end
@@ -1,13 +0,0 @@
1
- module SbrfMerchant
2
- module Api
3
- module OrderStatus
4
- NOT_PAID = 0
5
- PREAUTHORIZED_AMOUNT_HOLD = 1
6
- COMPLETED = 2
7
- CANCEL = 3
8
- REFUND = 4
9
- AUTH_ON_BANK_ISSUER_SIDE = 5
10
- REJECTED = 6
11
- end
12
- end
13
- end
@@ -1,84 +0,0 @@
1
- require 'sbrf_merchant/api/client'
2
- require 'sbrf_merchant/api/action'
3
- require 'sbrf_merchant/response/base'
4
- require 'sbrf_merchant/response/create_order'
5
- require 'sbrf_merchant/response/order_status'
6
-
7
- module SbrfMerchant
8
- class Order
9
- attr_reader :api_client, :orderId, :orderNumber
10
-
11
- def initialize(orderId: nil, orderNumber: nil, api_client: SbrfMerchant.api_client)
12
- @orderId = orderId
13
- @orderNumber = orderNumber
14
- @api_client = api_client
15
- end
16
-
17
- def register_one_stage(**args)
18
- register(SbrfMerchant::Api::Action::REGISTER_ORDER, args)
19
- end
20
-
21
- def register_two_stage(**args)
22
- register(SbrfMerchant::Api::Action::REGISTER_PRE_AUTH, args)
23
- end
24
-
25
- def get_info
26
- Response::OrderStatus.new(
27
- api_client.process_request(
28
- SbrfMerchant::Api::Action::ORDER_STATUS,
29
- default_request_params
30
- )
31
- )
32
- end
33
-
34
- def cancel
35
- Response::Base.new(
36
- api_client.process_request(
37
- SbrfMerchant::Api::Action::CANCEL_ORDER,
38
- default_request_params
39
- )
40
- )
41
- end
42
-
43
- def refund(amount)
44
- Response::Base.new(
45
- api_client.process_request(
46
- SbrfMerchant::Api::Action::REFUND_ORDER,
47
- default_request_params.merge(amount: amount)
48
- )
49
- )
50
- end
51
-
52
- def complete(amount)
53
- Response::Base.new(
54
- api_client.process_request(
55
- SbrfMerchant::Api::Action::COMPLETE_ORDER,
56
- default_request_params.merge(amount: amount)
57
- )
58
- )
59
- end
60
-
61
- private
62
-
63
- def default_request_params
64
- params = {}
65
-
66
- params[:orderId] = orderId if orderId
67
- params[:orderNumber] = orderNumber if orderNumber
68
-
69
- params
70
- end
71
-
72
- def register(path, args)
73
- response = Response::CreateOrder.new(
74
- api_client.process_request(
75
- path,
76
- args.merge(default_request_params)
77
- )
78
- )
79
- @orderId = response.orderId
80
-
81
- response
82
- end
83
- end
84
- end
@@ -1,20 +0,0 @@
1
- require 'sbrf_merchant/api/error_code'
2
-
3
- module SbrfMerchant
4
- module Response
5
- class Base
6
- attr_reader :errorCode, :errorMessage
7
-
8
- def initialize(args = {})
9
- @errorCode = args[:errorCode]
10
- @errorMessage = args[:errorMessage]
11
- end
12
-
13
- def success?
14
- return false unless errorCode
15
-
16
- errorCode.to_i == SbrfMerchant::Api::ErrorCode::SUCCESS
17
- end
18
- end
19
- end
20
- end
@@ -1,17 +0,0 @@
1
- module SbrfMerchant
2
- module Response
3
- class CreateOrder < Response::Base
4
- attr_reader :formUrl, :orderId
5
-
6
- def initialize(args = {})
7
- super(args)
8
- @formUrl = args[:formUrl]
9
- @orderId = args[:orderId]
10
- end
11
-
12
- def success?
13
- !formUrl.nil? && !orderId.nil?
14
- end
15
- end
16
- end
17
- end
@@ -1,70 +0,0 @@
1
- require 'sbrf_merchant/api/order_status'
2
-
3
- module SbrfMerchant
4
- module Response
5
- class OrderStatus < Response::Base
6
- AVAILABLE_FIELDS = %i[
7
- orderNumber
8
- orderStatus
9
- actionCode
10
- actionCodeDescription
11
- amount
12
- currency
13
- date
14
- ip
15
- merchantOrderParams
16
- attributes
17
- cardAuthInfo
18
- authDateTime
19
- terminalId
20
- authRefnum
21
- paymentAmountInfo
22
- bankInfo
23
- ].freeze
24
-
25
- attr_reader(*AVAILABLE_FIELDS)
26
-
27
- def initialize(args = {})
28
- super(args)
29
-
30
- AVAILABLE_FIELDS.each do |field|
31
- instance_variable_set("@#{field}", args[field]) unless args[field].nil?
32
- end
33
- end
34
-
35
- def not_paid?
36
- status_equals?(SbrfMerchant::Api::OrderStatus::NOT_PAID)
37
- end
38
-
39
- def preauthorized?
40
- status_equals?(SbrfMerchant::Api::OrderStatus::PREAUTHORIZED_AMOUNT_HOLD)
41
- end
42
-
43
- def completed?
44
- status_equals?(SbrfMerchant::Api::OrderStatus::COMPLETED)
45
- end
46
-
47
- def cancelled?
48
- status_equals?(SbrfMerchant::Api::OrderStatus::CANCEL)
49
- end
50
-
51
- def refunded?
52
- status_equals?(SbrfMerchant::Api::OrderStatus::REFUND)
53
- end
54
-
55
- def auth_on_bank_issuer_side?
56
- status_equals?(SbrfMerchant::Api::OrderStatus::AUTH_ON_BANK_ISSUER_SIDE)
57
- end
58
-
59
- def rejected?
60
- status_equals?(SbrfMerchant::Api::OrderStatus::REJECTED)
61
- end
62
-
63
- private
64
-
65
- def status_equals?(status)
66
- orderStatus == status
67
- end
68
- end
69
- end
70
- end
@@ -1,32 +0,0 @@
1
- lib = File.expand_path('lib', __dir__)
2
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
- require 'sbrf_merchant/version'
4
-
5
- Gem::Specification.new do |spec|
6
- spec.name = 'sbrf_merchant'
7
- spec.version = SbrfMerchant::VERSION
8
- spec.authors = ['Eugene Kozlov']
9
- spec.email = ['kozlovea8@gmail.com']
10
-
11
- spec.summary = 'Sberbank Merchant'
12
- spec.description = 'Sberbank Merchant API Client for Ruby'
13
- spec.homepage = 'https://github.com/abstractart/sbrf_merchant'
14
- spec.license = 'MIT'
15
- spec.required_ruby_version = '>= 2.1.0'
16
-
17
- spec.files = `git ls-files -z`.split("\x0").reject do |f|
18
- f.match(%r{^(test|spec|features)/})
19
- end
20
- spec.bindir = 'exe'
21
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
- spec.require_paths = ['lib']
23
-
24
- spec.add_development_dependency 'bundler', '~> 1.16'
25
- spec.add_development_dependency 'pry'
26
- spec.add_development_dependency 'rake', '~> 10.0'
27
- spec.add_development_dependency 'rspec', '~> 3.0'
28
- spec.add_development_dependency 'simplecov'
29
- spec.add_development_dependency 'simplecov-console'
30
-
31
- spec.add_runtime_dependency 'json'
32
- end