walletone 0.1.1 → 0.1.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: 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