moneta-api 2.0.0 → 2.1.1

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
- SHA1:
3
- metadata.gz: 9afe26d1633a8ca7b06ab6e985875eb38321fee4
4
- data.tar.gz: a0c02712a1532ee5591144f5758fe39a2e021e49
2
+ SHA256:
3
+ metadata.gz: c82f9dbd8db0a264f2c5a8aa035592f50c7e5b9ee142a37b0a7bc6ca9bafc407
4
+ data.tar.gz: b1fded7db6cf946e6f120a449eec29812aa9debeec07851204e77196e2b373cf
5
5
  SHA512:
6
- metadata.gz: 8f6610a206970c46cd942d5deaeefe267fb5e2a375e586aa8cd7dec48ee41f1a84690e6d1144594ad0397459e87df3f0a948b1499fd3c5a176d35f1618104b76
7
- data.tar.gz: c73e6706ca8dff9b853a7562450d954873db2cc09521451760f569b86907525a244fc9cebe8b031513f15bde1fb7f4a3596aa003d9c748132eb9387a9abb87a2
6
+ metadata.gz: 6effc742a9c1c7c01a879b64548b01b9b8a225b9f91d3f929d456d5ce50567b9d185273335e9165740cfaf96e8fc9eb7a0e64ccc448c37edbc941ae992f7b3b3
7
+ data.tar.gz: 424967818511b08af3ecfd120f6115e8316a00fcc19be0812f8b3fa6abf1119279bd3335f6e4a4a24ae90acd7e6253dd5691359468f778ad899e71ffd43b9d66
data/CHANGELOG.md CHANGED
@@ -1,15 +1,19 @@
1
+ ## 2.1.1
2
+ - Изменение основного URL.
3
+ ## 2.1.0
4
+ - Получение чека монеты в формате PDF с иcпользованием сертификатов
1
5
  ## 2.0.0
2
6
 
3
7
  - Перевод взаимодействия с Moneta.ru с SOAP на JSON.
4
-
8
+
5
9
  Interaction with MONETA.RU changed from SOAP to JSON.
6
-
10
+
7
11
  - Подключены зависимости Oj и ActiveSupport.
8
-
12
+
9
13
  Oj and ActiveSupport added as dependencies.
10
-
14
+
11
15
  - Изменились настройки подключения. Доступные опции: `demo_mode`, `logger`, `log_body`, `open_timeout`, `filter`.
12
-
16
+
13
17
  Connection settings changed. Available options: `demo_mode`, `logger`, `log_body`, `open_timeout`, `filter`.
14
18
 
15
19
  ## 1.13.0
data/README.md CHANGED
@@ -4,7 +4,7 @@
4
4
  [![Test Coverage](https://codeclimate.com/github/ssnikolay/moneta-api/badges/coverage.svg)](https://codeclimate.com/github/ssnikolay/moneta-api)
5
5
  [![Inline docs](http://inch-ci.org/github/ssnikolay/moneta-api.svg?branch=master)](http://inch-ci.org/github/ssnikolay/moneta-api)
6
6
 
7
- [Описание MerchantAPI](https://www.moneta.ru/doc/MONETA.MerchantAPI.v2.ru.pdf) | [RDoc](http://www.rubydoc.info/gems/moneta-api) |
7
+ [Описание MerchantAPI](https://moneta.ru/doc/MONETA.MerchantAPI.v2.ru.pdf) | [RDoc](http://www.rubydoc.info/gems/moneta-api) |
8
8
  [Список методов](http://www.rubydoc.info/gems/moneta-api/Moneta/Api/ServiceMethods)
9
9
 
10
10
  # moneta-api
@@ -18,8 +18,8 @@
18
18
  - v1 работает с Moneta.ru при помощи SOAP, v2 при помощи JSON.
19
19
  - В v1 числа являются строками, в v2 числами (например, значения `id`).
20
20
  - Изменились настройки фильтрации, добавилась настройка `log_body`, убрались `log`, `pretty_print_xml`
21
- - В аттрибутах ключ-значение (например, результат `FindBankAccounts`), значение всегда строка.
22
- Поэтому например значение поля `is_international` будет строка `"false"`, а не Boolean `false`.
21
+ - В аттрибутах ключ-значение (например, результат `FindBankAccounts`), значение всегда строка.
22
+ Поэтому например значение поля `is_international` будет строка `"false"`, а не Boolean `false`.
23
23
  Это связано с особенностями работы с Moneta.ru при помощи JSON.
24
24
 
25
25
  ## Установка
@@ -39,8 +39,11 @@ gem 'moneta-api'
39
39
  $ gem install moneta-api
40
40
 
41
41
  ## Использование
42
+ Есть несколько вариантов работы с сервисами монеты:
43
+ 1. API - работа происходит с использованием методов описанных в MONETA.MerchantAPI.v2
44
+ 2. FRONT - работа происходит напрямую с интерфейсом монеты.
42
45
 
43
- ### Примеры
46
+ ### Примеры работы c API
44
47
 
45
48
  #### Получить данные счета
46
49
 
@@ -135,10 +138,48 @@ gem 'moneta-api'
135
138
  Moneta::Api::Service.new('username', 'password', { demo_mode: true })
136
139
  ```
137
140
 
141
+
142
+ ### Примеры работы с FRONT (интерфейс монеты)
143
+
144
+ #### Получить квинтанцию оплаты в формате PDF
145
+ ```ruby
146
+ require 'moneta/api'
147
+
148
+ certificate = OpenSSL::X509::Certificate.new(File.read('cert_path'))
149
+ private_key = OpenSSL::PKey::RSA.new(File.read('key_path'), 'password')
150
+
151
+ service = Moneta::Front::Service.new(certificate, private_key, { demo_mode: true })
152
+
153
+ service.get_receipt_pdf(468398)
154
+ # => 'PDF файл'
155
+ ```
156
+
157
+ **Полный [список методов](http://www.rubydoc.info/gems/moneta-api/Moneta/Front/ServiceMethods), с помощью которых вы можете обратиться к интефейсу moneta.ru**
158
+
159
+ ### Настройки
160
+ **Для работы с интерфейсом монеты понадобиться получение сертификатов, получение подробно описано в [MONETA.MerchantAPI.v2](https://moneta.ru/doc/MONETA.MerchantAPI.v2.ru.pdf)**
161
+
162
+ Параметры:
163
+
164
+ Название | Описание
165
+ ---------------------------|:----------------------------------------------
166
+ `certificate` | Сертификат пользователя, полученный от монеты.
167
+ `private_key` | Приватный ключ, сгенерированный пользователем.
168
+ `:demo_mode` | Выполнение операций на демо стенде.
169
+ `:open_timeout` | Таймаут подключения.
170
+ `:filter` | Настройка фильтрации содержимого лога.
171
+
172
+ #### Demo режим
173
+ Для использования тестового сервера (http://demo.moneta.ru) следует инициализировать сервис со специальным флагом
174
+
175
+ ```ruby
176
+ Moneta::Front::Service.new(certificate, private_key, { demo_mode: true })
177
+ ```
178
+
138
179
  ## Contributing
139
180
 
140
181
  1. Стандартная схема с pull-request workflow
141
182
  2. Для локального запуска тестов необходимо создать конфигурационный файл со своими demo доступами
142
183
  ```bash
143
- echo "username: 'username'\npassword: 'password'" > spec/support/moneta.yml
184
+ cp spec/support/moneta.example.yml spec/support/moneta.yml
144
185
  ```
@@ -1,9 +1,9 @@
1
1
  module Moneta
2
2
  module Api
3
3
  class Service
4
- DEMO = 'https://demo.moneta.ru'
5
- PRODUCTION = 'https://www.moneta.ru'
6
- URL = '/services'
4
+ DEMO = Moneta::Constants::Settings::DEMO
5
+ PRODUCTION = Moneta::Constants::Settings::PRODUCTION
6
+ URL = Moneta::Constants::Settings::SERVICES_PATH
7
7
 
8
8
  include ServiceMethods
9
9
 
@@ -1,5 +1,5 @@
1
1
  module Moneta
2
2
  module Api
3
- VERSION = '2.0.0'
3
+ VERSION = '2.1.1'
4
4
  end
5
5
  end
data/lib/moneta/api.rb CHANGED
@@ -1,10 +1,12 @@
1
1
  require 'moneta/api/version'
2
2
  require 'faraday'
3
+ require 'faraday_middleware'
3
4
  require 'oj'
4
5
  require 'active_support/core_ext/hash/indifferent_access'
5
6
  require 'active_support/core_ext/string/inflections'
6
7
 
7
8
  require 'moneta/constants/withdrawal'
9
+ require 'moneta/constants/settings'
8
10
  require 'moneta/api/options'
9
11
  require 'moneta/api/service_methods'
10
12
  require 'moneta/api/service'
@@ -122,3 +124,7 @@ require 'moneta/api/responses/approve_phone_send_confirmation_response'
122
124
  require 'moneta/api/responses/approve_phone_apply_code_response'
123
125
 
124
126
  require 'moneta/api/response_factory'
127
+
128
+ require 'moneta/front/http_exception'
129
+ require 'moneta/front/service_methods'
130
+ require 'moneta/front/service'
@@ -0,0 +1,11 @@
1
+ module Moneta
2
+ module Constants
3
+ module Settings
4
+ DEMO = 'https://demo.moneta.ru'
5
+ PRODUCTION = 'https://moneta.ru'
6
+
7
+ SERVICES_PATH = '/services'
8
+ CERTIFICATE_PATH = '/x509'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,13 @@
1
+ module Moneta
2
+ module Front
3
+ class HTTPException < StandardError
4
+ def to_hash
5
+ { message: message }
6
+ end
7
+
8
+ def inspect
9
+ "HTTPException: #{ message }"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,51 @@
1
+ require 'moneta/api/options'
2
+
3
+ module Moneta
4
+ module Front
5
+ class Service
6
+ DEMO = Moneta::Constants::Settings::DEMO
7
+ PRODUCTION = Moneta::Constants::Settings::PRODUCTION
8
+ PATH = Moneta::Constants::Settings::CERTIFICATE_PATH
9
+
10
+ include ServiceMethods
11
+
12
+ def initialize(certificate, key, params = {})
13
+ @certificate = certificate
14
+ @key = key
15
+ @connection = connection(Moneta::Api::Options.new(params))
16
+ end
17
+
18
+ def request(url)
19
+ @connection.get(url)
20
+ end
21
+
22
+ private
23
+
24
+ def connection(options)
25
+ Faraday.new(url: endpoint(options.demo?), ssl: ssl_options) do |faraday|
26
+ faraday.use ::FaradayMiddleware::FollowRedirects, limit: 10
27
+
28
+ if options.logger
29
+ faraday.response :logger, options.logger, bodies: options.log_bodies? do |logger|
30
+ options.filter.each do |subject, replacement|
31
+ logger.filter(/#{ subject }/, replacement)
32
+ end
33
+ end
34
+ end
35
+
36
+ faraday.adapter :net_http do |http|
37
+ http.open_timeout = options.open_timeout
38
+ end
39
+ end
40
+ end
41
+
42
+ def endpoint(demo)
43
+ (demo ? DEMO : PRODUCTION) + PATH
44
+ end
45
+
46
+ def ssl_options
47
+ { client_cert: @certificate, client_key: @key, verify: false }
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,26 @@
1
+ module Moneta
2
+ module Front
3
+ module ServiceMethods
4
+ def get_receipt_pdf(operation_id)
5
+ url = "report/receipt.htm?operationId=#{operation_id}&format=pdf"
6
+
7
+ call(url)
8
+ end
9
+
10
+ private
11
+
12
+ def call(url)
13
+ response = request(url)
14
+
15
+ case response.status
16
+ when 200..230 then response.body
17
+ else
18
+ raise Moneta::Front::HTTPException.new("Status code: #{response.status}")
19
+ end
20
+
21
+ rescue Faraday::Error => e
22
+ raise Moneta::Front::HTTPException.new(e.message)
23
+ end
24
+ end
25
+ end
26
+ end
data/moneta-api.gemspec CHANGED
@@ -21,10 +21,11 @@ Gem::Specification.new do |spec|
21
21
  spec.required_ruby_version = '>= 2.0'
22
22
 
23
23
  spec.add_dependency 'faraday', '~> 0.11.0'
24
+ spec.add_dependency 'faraday_middleware', '~> 0.12'
24
25
  spec.add_dependency 'activesupport', '>= 4.0.0'
25
26
  spec.add_dependency 'oj', '>= 2.16'
26
27
 
27
- spec.add_development_dependency 'bundler', '~> 1'
28
+ spec.add_development_dependency 'bundler'
28
29
  spec.add_development_dependency 'rake', '~> 10'
29
30
  spec.add_development_dependency 'pry'
30
31
  spec.add_development_dependency 'rspec'
@@ -34,7 +34,7 @@ describe Moneta::Api::Service do
34
34
  context 'when demo mode' do
35
35
  let(:params) { {} }
36
36
 
37
- its(:host) { is_expected.to eq 'www.moneta.ru' }
37
+ its(:host) { is_expected.to eq 'moneta.ru' }
38
38
  end
39
39
  end
40
40
 
@@ -0,0 +1,38 @@
1
+ describe Moneta::Front::Service, vcr: true do
2
+ let(:params) { { demo_mode: true } }
3
+
4
+ let(:service) { described_class.new($cert, $cert_private_key, params) }
5
+
6
+ describe '#request' do
7
+ subject { service.request(path) }
8
+
9
+ context 'when success request' do
10
+ let(:path) { 'report/receipt.htm?operationId=467339&format=pdf' }
11
+
12
+ its(:status) { is_expected.to eq 200 }
13
+ end
14
+
15
+ context 'when bad request' do
16
+ let(:path) { 'report/receipt.htm' }
17
+ its(:status) { is_expected.to eq 400 }
18
+ end
19
+ end
20
+
21
+ describe '#get_receipt_pdf' do
22
+ subject { service.get_receipt_pdf(operation_id) }
23
+
24
+ context 'when success request' do
25
+ let(:operation_id) { 467339 }
26
+
27
+ it 'Must be a PDF' do
28
+ expect(subject[0, 4]).to eq('%PDF')
29
+ end
30
+ end
31
+
32
+ context 'when bad request' do
33
+ let(:operation_id) { 'report/receipt.htm' }
34
+
35
+ it { expect { subject }.to raise_error(Moneta::Front::HTTPException) }
36
+ end
37
+ end
38
+ end
data/spec/spec_helper.rb CHANGED
@@ -17,9 +17,15 @@ end
17
17
 
18
18
  config = YAML.load(File.read(File.join(Dir.pwd, 'spec/support/moneta.yml')))
19
19
 
20
+ cert_path = File.join(Dir.pwd, config['cert_path'])
21
+ cert_private_key_path = File.join(Dir.pwd, config['cert_private_key_path'])
22
+
20
23
  $username = config['username']
21
24
  $password = config['password']
22
25
 
26
+ $cert = OpenSSL::X509::Certificate.new(File.read(cert_path))
27
+ $cert_private_key = OpenSSL::PKey::RSA.new(File.read(cert_private_key_path), config['private_key_password'])
28
+
23
29
  class WebHelper
24
30
  def self.with_real_connection
25
31
  WebMock.allow_net_connect!
@@ -35,6 +41,7 @@ VCR.configure do |config|
35
41
  config.hook_into :webmock
36
42
  config.filter_sensitive_data('<USERNAME>') { $username }
37
43
  config.filter_sensitive_data('<PASSWORD>') { $password }
44
+ config.filter_sensitive_data('<CERT_PASSWORD>') { $cert_pass }
38
45
  config.ignore_hosts 'codeclimate.com'
39
46
  end
40
47
 
@@ -0,0 +1,29 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIE7zCCAtegAwIBAgICKKQwDQYJKoZIhvcNAQEFBQAwgaYxCzAJBgNVBAYTAlJV
3
+ MRAwDgYDVQQIDAdNYXJpIEVsMRQwEgYDVQQHDAtZb3Noa2FyLU9sYTEcMBoGA1UE
4
+ CgwTTkNPIE1PTkVUQS5SVSAoTExDKTERMA8GA1UECwwIVGVjaERlcHQxFzAVBgNV
5
+ BAMMDmRlbW8ubW9uZXRhLnJ1MSUwIwYJKoZIhvcNAQkBFhZ0ZWNoLnN1cHBvcnRA
6
+ bW9uZXRhLnJ1MB4XDTE3MTEwMzEwMjU0OFoXDTE4MTEwMzEwMjU0OFowVzELMAkG
7
+ A1UEBhMCUlUxEjAQBgNVBAgMCVRhdGFyc3RhbjEOMAwGA1UEBwwFS2F6YW4xFDAS
8
+ BgNVBAoMC1J1bnRpbWUgTExDMQ4wDAYDVQQDDAVEYW1pcjCCASIwDQYJKoZIhvcN
9
+ AQEBBQADggEPADCCAQoCggEBAL1q0kiaP6pr3f2jtH9CMCYWF+Oc9aMOQuzoU7P5
10
+ xETxePfBZu8h2smB8WsrHjlHbj/LI8XxH5kGYzomri7XrbC6osfTQR2Up9yuPvJw
11
+ 9rV1h0bEUQ2I7y1ns0d5kCFaIqOOpFp04eF16/xqjYFcZqF6triw2IBfcDRnRSnY
12
+ 5x9cR6lyeXhnjDNCcMHyzfXcnPUzUycEyaDVVKO/gNcFJInZcblyAobM2ja07Ji/
13
+ sOI5GB6RpEKKdRMBfSjGf9cDrm/33heeVGCiVUK9rxT9lv44e+FwhmMEApuPVc9m
14
+ xVJ6j8aBlb+Y0+zEdVEysUNAuu7+gUEMQgAGU7IH/mWVeSkCAwEAAaN1MHMwHwYD
15
+ VR0jBBgwFoAUEmi7gDDSEybKT6yoaTS7VAvOxqQwHQYDVR0OBBYEFNL2nqzYd5/5
16
+ TxLSNRBe5Jsym9KSMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBMGA1Ud
17
+ JQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBBQUAA4ICAQApsU1xN+lA8iT2x9MP
18
+ Tn/W//de5tBOFAKUnefzQrpjkqf94vzQ0j2z06g2nwRNDuVeit9g/r5iZpHiJh1K
19
+ Joz2F4WPGZNeWAszDwiXfMDsCsQOuw2zq4WYa4rOOLMs+IgLR9tKhDspgbLl396U
20
+ 3MEHz5N9Lb5Pfiu/1klFE+SO/9q9HtyLn5lNkbyfxrzoKfyWpHwYZi8dofkHPNgI
21
+ qPOIjQwedPv5SUWdWghSdsjQ6NvptUnCWgJOQzaHVPJLq01wdRLhz/lL316b59YH
22
+ /VcGwmZcXwEwUVvIgDdE0ieNjHJwfp+OZJqRGszvHOh89fE8zvtSOysqvLvmSv3E
23
+ sHemrnQ18Fr3P7kOr4kfbsB9DMheaxPyp9yTQ7t+r3YOkJK8HxxNavAIchner/lU
24
+ sfWioutD1qzCI8Ex5JG6gWOltDEs6A7w2ro9zyAIjelpq8R3rnGd8c6LXbClqJdr
25
+ 1x3EU9DjAhWb8+JWNKlv9doR+EAUFHvjtojWfoWNcRxoVIAoio1qsDega0MibFVr
26
+ 9lWGMkGhsTIXOOk5KpmcTT3eLD5ZJNXLXRcYa0tj60QH9xTaTtJbfJJ3KhV8vPdO
27
+ 2sc+QRWbIjD5+MpJkSPFMMsHbHm2LO/FvrpcMExVOYZ+UXhvzfah1HiIZ2sr353f
28
+ HnFMtpar7U/YZvkoIL4fOpKWQA==
29
+ -----END CERTIFICATE-----
@@ -0,0 +1,28 @@
1
+ -----BEGIN PRIVATE KEY-----
2
+ MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC9atJImj+qa939
3
+ o7R/QjAmFhfjnPWjDkLs6FOz+cRE8Xj3wWbvIdrJgfFrKx45R24/yyPF8R+ZBmM6
4
+ Jq4u162wuqLH00EdlKfcrj7ycPa1dYdGxFENiO8tZ7NHeZAhWiKjjqRadOHhdev8
5
+ ao2BXGahera4sNiAX3A0Z0Up2OcfXEepcnl4Z4wzQnDB8s313Jz1M1MnBMmg1VSj
6
+ v4DXBSSJ2XG5cgKGzNo2tOyYv7DiORgekaRCinUTAX0oxn/XA65v994XnlRgolVC
7
+ va8U/Zb+OHvhcIZjBAKbj1XPZsVSeo/GgZW/mNPsxHVRMrFDQLru/oFBDEIABlOy
8
+ B/5llXkpAgMBAAECggEAQYHU8ajuxbiCUHqyLKSuVC2l22DoDpkbCiWa9Q43E4TT
9
+ ShPHzoHN0Yyv+lkyHasXdNaDK6ylOd3cqTrBWI/ckNcq/qKPzXQgzZAxUtVAbScV
10
+ PqMcSOsHlJNdjCV9dBthCWGGc4YirD+E+om7IHbdQ5FV6e+3IEZhXq4sXDmYTN6b
11
+ i+I+TWiEAvnUrY1qm8+o3xqdvadnD2ixcNRlbAi6uzMUkhTqPy/g6POSzPtTKYF7
12
+ LQOssf6e1mxoLihevkBFVqwrshvXSanKkVu1q2QMlWaXHUzSCs0BtZQB3mRBu+XB
13
+ 2AC1afQai4Ubr7nT/XfBz52u+bh59Tmq+qGDXnm+gQKBgQDqNSPkBj8yb30aw1nj
14
+ 0vo987jNtaFeA+PdPwMCr952YjSgMzaOV9irSQjCHqTQS5JLoUGc32Tof1fWH8kc
15
+ pCgt7IKTGn1hdvQotPMHhve9vuFI/rQ6YIPF0+USUSmNwbKbwmSzK5SzqkdvwXD/
16
+ xfAO5qMlb4A6cAlQvXXHLl/L+QKBgQDPCsTz5fG2VSN7tDr2Hh1hJ4xhXSKIu8ri
17
+ cOzmbEwL8AeVhhR1wJQEXBM/FX/dIlcYDA9SyOkcnAeNRrjFlPn6/DqzrbJSWXRL
18
+ ziiMkew7Yld5rwRGl6w5uURpfB1APQMeefsNT5AZQtepTmjW08fjFHtoNFyD7FcN
19
+ dM71vS2CsQKBgQC2Bl0BoNVHJp0tyrw3M8bnlV+BCXQD9LQJRSra0MLucT8Dbyos
20
+ kRvFa/rRnC1t8f4ep5KuEHWFuUsUERomF3Ne1d1Z5RGjSWdTp+bmZ8BuCUdgiwyZ
21
+ /l8LxrbXeJr6IJvnMLtBAVMOG/5vXgGr2DPN8PTFaJZZVK/4v3clOeacSQKBgQC9
22
+ DcVoPKjpaHa9J4bLZBZJt7Ys1cGJ/4i0Go+HnI4YPHaAZ21ZVJ8UGAuPCA+4mfnT
23
+ QHfhjQmnkSYoL9LawD0/nH/xwALbxUk3Symlqj1+wD7GIzURTL/7+Ztpguam2M93
24
+ TcUbk3IuTuXkeG+s8rdMOFCzh1SPNgkLhYTRyYu8EQKBgQC117MNYc1JG5d3PkWC
25
+ Q3xAkXPS14sRKlP4cE8m2ZyCoT04mFAP6hydlGtbUz8sDhwMwbHZVkROqrhnkzsT
26
+ 7MXifPU7Z4+Z15LzhFC8j8EdfebFlDCpXbhHMIHfFnZMGpLEPbPyOncTXA4QvjHf
27
+ i63SHI1R9T/c8KXfFZhvIzfUVw==
28
+ -----END PRIVATE KEY-----
@@ -1,2 +1,6 @@
1
1
  username: 'username'
2
2
  password: 'password'
3
+
4
+ cert_path: 'spec/support/moneta-certificate.pem'
5
+ cert_private_key_path: 'spec/support/moneta-private.key'
6
+ private_key_password: