walletone 0.1.1 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 854585f01ea24db9a260cc1fe621aa29be19d1bf
4
- data.tar.gz: 4132c58019eab414552fcb1f5de5ba28664f0ef1
3
+ metadata.gz: 5afa0d525c38be77b98d36d334e2a26bede7ca55
4
+ data.tar.gz: dc8fe82e3a77fc8566d0fd90cf26559b6263c54e
5
5
  SHA512:
6
- metadata.gz: 5819cc1b3832bb12ad0eb03d9963f792402fdaebe6bd188cf4e82f366f518365fc78a3a08b1d61fd5a7b2ecb9b4a18ed8066c0ae9b67e4bd11bcb2813fcfd1f5
7
- data.tar.gz: 63f4a9fd0083a6e3fb298677564445683ad3c2026ae42edd1b7620917ee31d8a8eae9e75e12e34dfd3dc5df7209388d5bdc0152c2fe1cf64a0cc3c8c1fc8a10d
6
+ metadata.gz: a1f78edea3a44df7fa8eac66123c37a0b2bde7b505b7e960670b76cc004d897e17555f18a852e072ec04b825f880625fe714c2e368cc4dee310bdc64b3ea610f
7
+ data.tar.gz: 153a3def129ee5fe3041834c71ec6225d98f68fb1f111c357e7c49639a94c92a94397a12412f30f6deb14d3fbb6c5315b203407cc5d8e6048e3e063c6e49beea
data/README.md CHANGED
@@ -5,6 +5,13 @@
5
5
 
6
6
  ---
7
7
 
8
+ Привет!
9
+
10
+ Мы сделали этот модуль очень удобным для Вас. Вы сделаете нам приятно и полезно,
11
+ если зарегистрируете своего мерчанта по [этой промо-ссылке](http://www.walletone.com/ru/merchant/?promo=EtRa48zZP)
12
+
13
+ Так вы получите сниженный процент за прием платежей по картам visa/mastercard - 3,5%
14
+
8
15
  ## Прием уведомлений об оплате (rack middleware)
9
16
 
10
17
  ### 1. Создаем rack middleware для приема уведомлений
@@ -17,9 +24,13 @@
17
24
  wm = Walletone::Middleware::Callback.new do |notify, env|
18
25
  # notify is a Walletone::Notification instance
19
26
 
20
- raise 'Wrong sign' unless notify.valid? W1_SECRET_KEY
27
+ raise 'WARNING! Wrong signature!' unless notify.valid? W1_SECRET_KEY
21
28
 
22
- # TODO something with notify
29
+ if notify.accepted?
30
+ # Successful payed. Deliver your goods to the client
31
+ else
32
+ # Payment is failed. Notify you client.
33
+ end
23
34
 
24
35
  'Return some message for OK response'
25
36
  end
@@ -73,18 +84,19 @@ payment = Walletone::Payment.new(
73
84
  SOME_CUSTOM_FIELD: 'value'
74
85
  # etc любые другие поля
75
86
  )
87
+ payment.sign! 'you secret key'
88
+ form = payment.form
76
89
  ```
77
90
 
78
91
 
79
92
  ### Собственно генераця формы
80
93
 
81
94
  ```haml
82
- - form = Walletone::Form.new payment
83
95
 
84
96
  %h5 В течение 5-и секунд вы будете переправлены на страницу оплаты.
85
97
  = form_tag form.checkout_url, form.options.merge(data: {autosubmit: true}) do |f|
86
- = form.hidden_fields_tags
87
- = submit_tag 'Перейти к оплате',
98
+ = raw form.hidden_fields_tags
99
+ = button_tag 'Перейти к оплате',
88
100
  :class=>'btn btn-primary',
89
101
  :data =>{:disable_with => 'Переправляю на сайт оплаты..'}
90
102
 
@@ -94,11 +106,20 @@ payment = Walletone::Payment.new(
94
106
  $ -> $('[data-autosubmit]').submit()
95
107
  ```
96
108
 
109
+ # Подсказки
110
+
111
+ Не используйте в форме кнопку `submit` с установленным `value` и `name`, потому что в
112
+ таком случае ее значение на сервер придет в параметрах и его тоже придется
113
+ включать в подписываемые поля.
114
+
97
115
  # Прочие ссылки
98
116
 
99
117
  1. [Walletone Open API](https://api.w1.ru/OpenApi/)
100
118
  2. [Документация (API)](http://www.walletone.com/ru/merchant/documentation/)
101
119
 
120
+ Sponsored by http://taaasty.com and http://kiiiosk.ru
121
+ Developers are http://brandymint.com
122
+
102
123
  ---
103
124
 
104
125
  ### Contributing
@@ -1,11 +1,9 @@
1
1
  require 'logger'
2
2
  require 'virtus'
3
3
 
4
- require 'walletone/errors/walletone_error'
5
- require 'walletone/errors/bad_url_error'
6
-
7
4
  require 'walletone/payment'
8
5
  require 'walletone/notification'
6
+ require 'walletone/form'
9
7
  require 'walletone/middleware/base'
10
8
 
11
9
  module Walletone
@@ -38,6 +36,11 @@ module Walletone
38
36
  config.error_notifier.send self.config.error_notify_method, error, *args
39
37
  end
40
38
 
39
+ def self.raise_error error
40
+ notify_error error
41
+ fail error
42
+ end
43
+
41
44
  def self.config
42
45
  Configuration.instance
43
46
  end
@@ -2,43 +2,20 @@
2
2
  #
3
3
  module Walletone
4
4
  class Fields < Hash
5
- # http://www.walletone.com/ru/merchant/documentation/#step2
6
- #
7
- #
8
- W1_KEYS = %i(
9
- WMI_MERCHANT_ID
10
- WMI_PAYMENT_AMOUNT
11
- WMI_CURRENCY_ID
12
- WMI_PAYMENT_NO
13
- WMI_DESCRIPTION
14
- WMI_SUCCESS_URL WMI_FAIL_URL
15
- WMI_EXPIRED_DATE
16
- WMI_PTENABLED WMI_PTDISABLED
17
- WMI_RECIPIENT_LOGIN
18
- WMI_CUSTOMER_FIRSTNAME WMI_CUSTOMER_LASTNAME WMI_CUSTOMER_EMAIL
19
- WMI_CULTURE_ID
20
- WMI_SIGNATURE
21
- WMI_DELIVERY_REQUEST
22
- WMI_DELIVERY_COUNTRY WMI_DELIVERY_REGION WMI_DELIVERY_CITY WMI_DELIVERY_ADDRESS
23
- WMI_DELIVERY_CONTACTINFO WMI_DELIVERY_COMMENTS WMI_DELIVERY_ORDERID
24
- WMI_DELIVERY_DATEFROM WMI_DELIVERY_DATETILL
25
- WMI_PSP_MERCHANT_ID
26
- )
27
-
28
- MULTIPLE_VALUES = %i(WMI_PTENABLED WMI_PTDISABLED)
29
-
30
- # Определяем методы для прямого доступа
31
- # > payment.WMI_MERCHANT_ID
32
- # > payment.WMI_MERCHANT_ID=123
33
- #
34
- # > payment.WMI_PTENABLED =
35
- W1_KEYS.each do |k|
36
- define_method k do
37
- fetch k
38
- end
39
-
40
- define_method "#{k}=" do |value|
41
- self[k]= value
5
+ def self.define_fields fields
6
+ # Определяем методы для прямого доступа
7
+ # > payment.WMI_MERCHANT_ID
8
+ # > payment.WMI_MERCHANT_ID=123
9
+ #
10
+ # > payment.WMI_PTENABLED =
11
+ fields.each do |k|
12
+ define_method k do
13
+ fetch k
14
+ end
15
+
16
+ define_method "#{k}=" do |value|
17
+ self[k]= value
18
+ end
42
19
  end
43
20
  end
44
21
 
@@ -1,8 +1,15 @@
1
1
  require 'cgi'
2
+ require 'walletone/payment'
2
3
  module Walletone
3
4
  class Form
4
- include Virtus.model strict: true, coerce: false
5
- attribute :payment, Payment, required: true
5
+ attr_reader :payment
6
+
7
+ def initialize payment
8
+ unless payment.is_a?( Walletone::Payment ) && payment.valid? && payment.signed?
9
+ Walletone.raise_error ArgumentError.new("Must be valid and signed Payment #{payment}")
10
+ end
11
+ @payment = payment
12
+ end
6
13
 
7
14
  def checkout_url
8
15
  Walletone.config.web_checkout_url
@@ -1,17 +1,44 @@
1
1
  require 'walletone/fields'
2
- # Уведомление от walletone которое пришло через rack middleware callback
2
+
3
+ # Уведомление об оплате от walletone которое пришло через rack middleware callback
3
4
  #
4
5
 
5
6
  module Walletone
6
7
  class Notification < Fields
8
+ FIELDS = %i(
9
+ WMI_MERCHANT_ID
10
+ WMI_PAYMENT_AMOUNT
11
+ WMI_COMMISSION_AMOUNT
12
+ WMI_CURRENCY_ID
13
+ WMI_TO_USER_ID
14
+ WMI_PAYMENT_NO
15
+ WMI_ORDER_ID
16
+ WMI_DESCRIPTION
17
+ WMI_SUCCESS_URL WMI_FAIL_URL
18
+ WMI_EXPIRED_DATE
19
+ WMI_CREATE_DATE WMI_UPDATE_DATE
20
+ WMI_ORDER_STATE
21
+ WMI_SIGNATURE
22
+ )
23
+
24
+ define_fields FIELDS
7
25
 
8
26
  def initialize params
9
27
  super( params ).freeze
10
28
  end
11
29
 
30
+ # Обязательно проверяем валидость уведомления, вдруг его
31
+ # прислал злоумышленник.
32
+ #
12
33
  def valid?(secret_key, hash_type = Signer::DEFAULT_HASH_TYPE)
13
34
  self.WMI_SIGNATURE == signer.signature( secret_key, hash_type )
14
35
  end
15
36
 
37
+ # Принята оплата или не прошла?
38
+ #
39
+ def accepted?
40
+ self['WMI_ORDER_STATE'].to_s.upcase == 'ACCEPTED'
41
+ end
42
+
16
43
  end
17
44
  end
@@ -7,9 +7,41 @@ require 'time'
7
7
  #
8
8
  module Walletone
9
9
  class Payment < Fields
10
+ # http://www.walletone.com/ru/merchant/documentation/#step2
11
+ #
12
+ #
13
+ class << self
14
+ attr_accessor :encode_description
15
+ end
16
+
17
+ DESCRIPTION_TRUNCATE_LENGTH = 250
18
+ FIELDS = %i(
19
+ WMI_MERCHANT_ID
20
+ WMI_PAYMENT_NO
21
+ WMI_PAYMENT_AMOUNT
22
+ WMI_CURRENCY_ID
23
+ WMI_DESCRIPTION
24
+ WMI_SUCCESS_URL WMI_FAIL_URL
25
+ WMI_EXPIRED_DATE
26
+ WMI_PTENABLED WMI_PTDISABLED
27
+ WMI_RECIPIENT_LOGIN
28
+ WMI_CUSTOMER_FIRSTNAME WMI_CUSTOMER_LASTNAME WMI_CUSTOMER_EMAIL
29
+ WMI_CULTURE_ID
30
+ WMI_SIGNATURE
31
+ WMI_DELIVERY_REQUEST
32
+ WMI_DELIVERY_COUNTRY WMI_DELIVERY_REGION WMI_DELIVERY_CITY WMI_DELIVERY_ADDRESS
33
+ WMI_DELIVERY_CONTACTINFO WMI_DELIVERY_COMMENTS WMI_DELIVERY_ORDERID
34
+ WMI_DELIVERY_DATEFROM WMI_DELIVERY_DATETILL
35
+ WMI_PSP_MERCHANT_ID
36
+ )
37
+
38
+ MULTIPLE_VALUES = %i(WMI_PTENABLED WMI_PTDISABLED)
39
+
10
40
  RUB_ISO_NUMBER = 643
11
41
  DEFAULT_CURRENTY = RUB_ISO_NUMBER
12
42
 
43
+ define_fields FIELDS
44
+
13
45
  def sign!(secret_key, hash_type=Signer::DEFAULT_HASH_TYPE)
14
46
  raise 'Already signed!' if signed?
15
47
  self.WMI_SIGNATURE = signer.signature secret_key, hash_type
@@ -21,22 +53,38 @@ module Walletone
21
53
  self.WMI_SIGNATURE.is_a?(String) && ! self.WMI_SIGNATURE.empty?
22
54
  end
23
55
 
56
+ def valid?
57
+ # Где узнать какие поля обязательные?
58
+ self.WMI_PAYMENT_AMOUNT && self.WMI_MERCHANT_ID
59
+ end
60
+
61
+ # Form generation shortcut
62
+ def form
63
+ Walletone::Form.new self
64
+ end
65
+
24
66
  def WMI_CURRENCY_ID
25
- super || DEFAULT_CURRENTY
67
+ fetch(:WMI_CURRENCY_ID) || DEFAULT_CURRENTY
26
68
  end
27
69
 
28
70
  def WMI_PAYMENT_AMOUNT
29
- value = super
71
+ value = fetch :WMI_PAYMENT_AMOUNT
30
72
  "%.2f" % value if value
31
73
  end
32
74
 
33
75
  def WMI_DESCRIPTION
34
- value = super
35
- "BASE64:#{Base64.encode64(value[0...250])[0..-2]}" if value
76
+ value = fetch :WMI_DESCRIPTION
77
+ return value unless value
78
+ if self.class.encode_description
79
+ # TODO энкодить автоматически, если встречаются национальные символы
80
+ "BASE64:#{Base64.encode64(value[0...250])[0..-2]}"
81
+ else
82
+ value.slice 0, DESCRIPTION_TRUNCATE_LENGTH
83
+ end
36
84
  end
37
85
 
38
86
  def WMI_EXPIRED_DATE
39
- value = super
87
+ value = fetch :WMI_EXPIRED_DATE
40
88
  value ? value.iso8601 : value
41
89
  end
42
90
 
@@ -1,3 +1,3 @@
1
1
  module Walletone
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
@@ -3,7 +3,7 @@ require 'walletone/fields'
3
3
  describe Walletone::Fields do
4
4
 
5
5
  describe 'Именованные поля' do
6
- subject { described_class.new }
6
+ subject { Walletone::Payment.new }
7
7
  let(:merchant_id) { 'some_id' }
8
8
 
9
9
  it 'nill by default' do
@@ -22,7 +22,7 @@ describe Walletone::Fields do
22
22
  describe '#initialize' do
23
23
  let(:fail_url) { 'someurl' }
24
24
  let(:attrs) { { 'WMI_FAIL_URL' => fail_url } }
25
- subject { described_class.new attrs }
25
+ subject { Walletone::Payment.new attrs }
26
26
 
27
27
  it { expect(subject.WMI_FAIL_URL).to eq fail_url }
28
28
  it { expect(subject['WMI_FAIL_URL']).to eq fail_url }
@@ -1,9 +1,9 @@
1
1
  require 'walletone/form'
2
2
 
3
3
  describe Walletone::Form do
4
- let(:payment) { Fabricate :payment }
4
+ let(:payment) { Fabricate( :payment ).sign! 'somekey' }
5
5
 
6
- subject { described_class.new payment: payment }
6
+ subject { described_class.new payment }
7
7
 
8
8
  describe '#checkout_url' do
9
9
  it { expect(subject.checkout_url).to eq Walletone.config.web_checkout_url }
@@ -33,4 +33,10 @@ describe Walletone::Notification do
33
33
  expect( subject.valid?(secret) ).to be_truthy
34
34
  end
35
35
  end
36
+
37
+ context '#accepted?' do
38
+ it do
39
+ expect( subject).to be_accepted
40
+ end
41
+ end
36
42
  end
@@ -1,8 +1,14 @@
1
+ require 'walletone/form'
2
+
1
3
  describe Walletone::Payment do
2
4
  let(:merchant_id) { 127830694690 }
3
5
  let(:secret_key) { '3475706857624f46344e573753316e387c396e5f4b54767b796c4c' }
4
6
 
5
- subject { described_class.new fields }
7
+ before do
8
+ described_class.encode_description = true
9
+ end
10
+
11
+ subject { described_class.new( fields ) }
6
12
 
7
13
  context '.new' do
8
14
  let(:fields) { Walletone::Fields.new WMI_MERCHANT_ID: merchant_id }
@@ -31,8 +37,13 @@ describe Walletone::Payment do
31
37
 
32
38
  it { expect(subject).to be_frozen }
33
39
  it { expect(subject).to be_signed }
40
+ it { expect(subject).to be_valid }
34
41
  it { expect(subject.WMI_SIGNATURE).to eq signature }
35
42
 
43
+ it '#form' do
44
+ expect(subject.form).to be_a Walletone::Form
45
+ end
46
+
36
47
  end
37
48
 
38
49
  it 'WMI_PAYMENT_AMOUNT' do
@@ -5,6 +5,22 @@ describe Walletone do
5
5
  end
6
6
  end
7
7
 
8
+ describe 'Использует Bugsnag если он есть' do
9
+ before do
10
+ ::Bugsnag = double
11
+ # Сбрасываем конфигурацию, чтобы она еще раз создалась
12
+ Walletone::Configuration.instance_variable_set('@singleton__instance__',nil)
13
+ end
14
+
15
+ it 'должен найти и применить Bugsnag' do
16
+ expect(Walletone.config.error_notifier).to eq Bugsnag
17
+ end
18
+
19
+ after do
20
+ ::Bugsnag = nil
21
+ end
22
+ end
23
+
8
24
  context '.notify_error' do
9
25
  let(:error) { StandardError.new }
10
26
  it do
@@ -19,17 +19,17 @@ Gem::Specification.new do |s|
19
19
  s.test_files = Dir.glob("spec/**/*")
20
20
 
21
21
  s.add_dependency 'virtus', '~> 1.0'
22
- s.add_dependency 'rack', '~> 1.6'
22
+ s.add_dependency 'rack', '~> 1.5'
23
23
 
24
- s.add_development_dependency 'rake'
25
- s.add_development_dependency 'rspec', '~> 3.2.0'
24
+ s.add_development_dependency 'rake', '>= 10.4.0'
25
+ s.add_development_dependency 'rspec', '>= 3.2.0'
26
26
  s.add_development_dependency 'ffaker', '>= 2.0.0'
27
- s.add_development_dependency 'fabrication', '~> 2.12.2'
28
- s.add_development_dependency "pry"
29
- s.add_development_dependency "pry-nav"
30
- s.add_development_dependency "webmock"
31
- s.add_development_dependency "guard"
32
- s.add_development_dependency "guard-rspec"
33
- s.add_development_dependency 'guard-ctags-bundler'
34
- s.add_development_dependency 'yard'
27
+ s.add_development_dependency 'fabrication', '>= 2.12'
28
+ s.add_development_dependency "pry", '~> 0'
29
+ s.add_development_dependency "pry-nav", '~> 0'
30
+ s.add_development_dependency "webmock", '>= 1.21'
31
+ s.add_development_dependency "guard", '>= 2.12'
32
+ s.add_development_dependency "guard-rspec", '>= 4.5.0'
33
+ s.add_development_dependency 'guard-ctags-bundler', '>= 1.4.0'
34
+ s.add_development_dependency 'yard', '~> 0'
35
35
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: walletone
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Danil Pismenny
@@ -31,40 +31,40 @@ dependencies:
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '1.6'
34
+ version: '1.5'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '1.6'
41
+ version: '1.5'
42
42
  - !ruby/object:Gem::Dependency
43
43
  name: rake
44
44
  requirement: !ruby/object:Gem::Requirement
45
45
  requirements:
46
46
  - - ">="
47
47
  - !ruby/object:Gem::Version
48
- version: '0'
48
+ version: 10.4.0
49
49
  type: :development
50
50
  prerelease: false
51
51
  version_requirements: !ruby/object:Gem::Requirement
52
52
  requirements:
53
53
  - - ">="
54
54
  - !ruby/object:Gem::Version
55
- version: '0'
55
+ version: 10.4.0
56
56
  - !ruby/object:Gem::Dependency
57
57
  name: rspec
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - "~>"
60
+ - - ">="
61
61
  - !ruby/object:Gem::Version
62
62
  version: 3.2.0
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - "~>"
67
+ - - ">="
68
68
  - !ruby/object:Gem::Version
69
69
  version: 3.2.0
70
70
  - !ruby/object:Gem::Dependency
@@ -85,42 +85,42 @@ dependencies:
85
85
  name: fabrication
86
86
  requirement: !ruby/object:Gem::Requirement
87
87
  requirements:
88
- - - "~>"
88
+ - - ">="
89
89
  - !ruby/object:Gem::Version
90
- version: 2.12.2
90
+ version: '2.12'
91
91
  type: :development
92
92
  prerelease: false
93
93
  version_requirements: !ruby/object:Gem::Requirement
94
94
  requirements:
95
- - - "~>"
95
+ - - ">="
96
96
  - !ruby/object:Gem::Version
97
- version: 2.12.2
97
+ version: '2.12'
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: pry
100
100
  requirement: !ruby/object:Gem::Requirement
101
101
  requirements:
102
- - - ">="
102
+ - - "~>"
103
103
  - !ruby/object:Gem::Version
104
104
  version: '0'
105
105
  type: :development
106
106
  prerelease: false
107
107
  version_requirements: !ruby/object:Gem::Requirement
108
108
  requirements:
109
- - - ">="
109
+ - - "~>"
110
110
  - !ruby/object:Gem::Version
111
111
  version: '0'
112
112
  - !ruby/object:Gem::Dependency
113
113
  name: pry-nav
114
114
  requirement: !ruby/object:Gem::Requirement
115
115
  requirements:
116
- - - ">="
116
+ - - "~>"
117
117
  - !ruby/object:Gem::Version
118
118
  version: '0'
119
119
  type: :development
120
120
  prerelease: false
121
121
  version_requirements: !ruby/object:Gem::Requirement
122
122
  requirements:
123
- - - ">="
123
+ - - "~>"
124
124
  - !ruby/object:Gem::Version
125
125
  version: '0'
126
126
  - !ruby/object:Gem::Dependency
@@ -129,68 +129,68 @@ dependencies:
129
129
  requirements:
130
130
  - - ">="
131
131
  - !ruby/object:Gem::Version
132
- version: '0'
132
+ version: '1.21'
133
133
  type: :development
134
134
  prerelease: false
135
135
  version_requirements: !ruby/object:Gem::Requirement
136
136
  requirements:
137
137
  - - ">="
138
138
  - !ruby/object:Gem::Version
139
- version: '0'
139
+ version: '1.21'
140
140
  - !ruby/object:Gem::Dependency
141
141
  name: guard
142
142
  requirement: !ruby/object:Gem::Requirement
143
143
  requirements:
144
144
  - - ">="
145
145
  - !ruby/object:Gem::Version
146
- version: '0'
146
+ version: '2.12'
147
147
  type: :development
148
148
  prerelease: false
149
149
  version_requirements: !ruby/object:Gem::Requirement
150
150
  requirements:
151
151
  - - ">="
152
152
  - !ruby/object:Gem::Version
153
- version: '0'
153
+ version: '2.12'
154
154
  - !ruby/object:Gem::Dependency
155
155
  name: guard-rspec
156
156
  requirement: !ruby/object:Gem::Requirement
157
157
  requirements:
158
158
  - - ">="
159
159
  - !ruby/object:Gem::Version
160
- version: '0'
160
+ version: 4.5.0
161
161
  type: :development
162
162
  prerelease: false
163
163
  version_requirements: !ruby/object:Gem::Requirement
164
164
  requirements:
165
165
  - - ">="
166
166
  - !ruby/object:Gem::Version
167
- version: '0'
167
+ version: 4.5.0
168
168
  - !ruby/object:Gem::Dependency
169
169
  name: guard-ctags-bundler
170
170
  requirement: !ruby/object:Gem::Requirement
171
171
  requirements:
172
172
  - - ">="
173
173
  - !ruby/object:Gem::Version
174
- version: '0'
174
+ version: 1.4.0
175
175
  type: :development
176
176
  prerelease: false
177
177
  version_requirements: !ruby/object:Gem::Requirement
178
178
  requirements:
179
179
  - - ">="
180
180
  - !ruby/object:Gem::Version
181
- version: '0'
181
+ version: 1.4.0
182
182
  - !ruby/object:Gem::Dependency
183
183
  name: yard
184
184
  requirement: !ruby/object:Gem::Requirement
185
185
  requirements:
186
- - - ">="
186
+ - - "~>"
187
187
  - !ruby/object:Gem::Version
188
188
  version: '0'
189
189
  type: :development
190
190
  prerelease: false
191
191
  version_requirements: !ruby/object:Gem::Requirement
192
192
  requirements:
193
- - - ">="
193
+ - - "~>"
194
194
  - !ruby/object:Gem::Version
195
195
  version: '0'
196
196
  description: "Клиент для приема оплаты через walletone.com"
@@ -204,8 +204,6 @@ files:
204
204
  - LICENSE
205
205
  - README.md
206
206
  - lib/walletone.rb
207
- - lib/walletone/errors/bad_url_error.rb
208
- - lib/walletone/errors/walletone_error.rb
209
207
  - lib/walletone/fields.rb
210
208
  - lib/walletone/form.rb
211
209
  - lib/walletone/middleware.rb
@@ -1,4 +0,0 @@
1
- module Walletone
2
- class BadUrlError < WalletoneError
3
- end
4
- end
@@ -1,4 +0,0 @@
1
- module Walletone
2
- class WalletoneError < StandardError
3
- end
4
- end