liqpay 1.0.1 → 2.0.0

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: 6a1dbccbf4ed75ad7d2bee9a85462ce68832c711
4
- data.tar.gz: 337b981afc82d4b6210f5a3e7a7efcf61f1628bf
2
+ SHA256:
3
+ metadata.gz: 3c1117a472e90a9a56221f2baacad6ae89efd7a84cbe9cbee9762573631cbe2e
4
+ data.tar.gz: cba6b10b4fbb29155797b6593dc7c4368917d71403abe4a61780afa68c72f154
5
5
  SHA512:
6
- metadata.gz: a39d8ec9301bdcddc1762c4fecfbff3bb6486a9221b18703e20e88cd7594f09d7bf7019687e1c9ac2f19c7c031dd9002d4be3877b151f6084b13d75feb74cf55
7
- data.tar.gz: 4ebde391c58b7538e7db5b456cd9a73287c010336c0545fbfd378898a8caf74288a80df9b96d6a275f9a34377b244dfb60d8a788f3b842f2f58e9ec349546d00
6
+ metadata.gz: 8b043dd9e4b1072798fd26d022864ca779f44adcd445bdee87412f76a8b216721928471d8a9703d1ed351ed056283a27170a1a9eda058042e7c694a9397f1778
7
+ data.tar.gz: f79e479e46f0c9a02276367b530f6255608398659c17d6c3ed0fa264e90aafa5e294e29effa6cdff733d53bd16084f51aa75f388dc9dcb3d02da45ed3dea0884
@@ -0,0 +1,13 @@
1
+ name: Test
2
+ on: [push, pull_request]
3
+
4
+ jobs:
5
+ test:
6
+ runs-on: ubuntu-latest
7
+ steps:
8
+ - uses: actions/checkout@v2
9
+ - uses: ruby/setup-ruby@v1
10
+ with:
11
+ ruby-version: '3.1'
12
+ bundler-cache: true
13
+ - run: bundle exec rubocop
data/CHANGELOG.md CHANGED
@@ -1,11 +1,16 @@
1
+ ## 2.0.0 (2022-09-25)
2
+
3
+ - Migrate to LiqPAY Checkout API v3.
4
+ - Modernize code.
5
+
1
6
  ## 1.0.1
2
7
 
3
- * Bugfix: rewritten `liqpay_button` to use `concat` instead of raw strings.
8
+ - Bugfix: rewritten `liqpay_button` to use `concat` instead of raw strings.
4
9
 
5
10
  ## 1.0.0
6
11
 
7
- * Updated gem to be compatible with the new LiqPAY API
12
+ - Updated gem to be compatible with the new LiqPAY API
8
13
 
9
14
  ## 0.1.2
10
15
 
11
- * Fixed initializer syntax
16
+ - Fixed initializer syntax
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
- source "http://rubygems.org"
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in liqpay.gemspec
4
6
  gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2022 Leonid Shevtsov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
data/README.md CHANGED
@@ -1,22 +1,22 @@
1
1
  # LiqPAY
2
2
 
3
- This Ruby gem implements the [LiqPAY](https://www.liqpay.com) billing system API, as described in [the LiqPAY documentation](https://www.liqpay.com/doc).
3
+ [![Buy me a coffee](https://www.buymeacoffee.com/assets/img/BMC-btn-logo.svg) Пригостіть кавою, якщо цей гем для вас є корисним.](https://www.buymeacoffee.com/leonidshevtsov)
4
4
 
5
- **Users of version 0.1.2 and earlier:** your version of the gem uses the older, deprecated LiqPAY API; you should migrate to >v1, but it requires you to change configuration and set up a server callback endpoint, so it's not a trivial upgrade.
5
+ This Ruby gem implements the [LiqPAY](https://www.liqpay.ua) billing system API, as described in [the LiqPAY documentation](https://www.liqpay.ua/documentation/api/aquiring).
6
6
 
7
7
  ## Demo
8
8
 
9
- There is a demo app at http://liqpay-demo.herokuapp.com, source at https://github.com/leonid-shevtsov/liqpay_demo
9
+ There is a demo app source at https://github.com/leonid-shevtsov/liqpay_demo. Heroku removed free app hosting, so no more online demo. Also, Liqpay eventually blocks such usage of keys, so it won't survive for long.
10
10
 
11
11
  ## Installation
12
12
 
13
13
  Include the [liqpay gem](https://rubygems.org/gems/liqpay) in your `Gemfile`:
14
14
 
15
15
  ```ruby
16
- gem 'liqpay', '~>1.0.0'
16
+ gem 'liqpay', '~>2.0.0'
17
17
  ```
18
18
 
19
- The gem requries at least Ruby 1.9.
19
+ The gem requires at least Ruby 2.7.
20
20
 
21
21
  ## Configuration
22
22
 
@@ -24,7 +24,7 @@ You can provide all of the payment options in the request object, but the recomm
24
24
  your initializers.
25
25
 
26
26
  You should supply the `public_key` and `private_key` options, that are
27
- provided by LiqPAY when you sign up and create a shop on the [shops page](https://www.liqpay.com/admin/business):
27
+ provided by LiqPAY when you sign up and create a shop on the [shops page](https://www.liqpay.ua/uk/adminbusiness):
28
28
 
29
29
  ```ruby
30
30
  # config/initializers/liqpay.rb
@@ -35,30 +35,29 @@ Liqpay.default_options = {
35
35
  }
36
36
  ```
37
37
 
38
-
39
38
  ## Processing payments through LiqPay
40
39
 
41
40
  ### General flow
42
41
 
43
- 1. User initiates the payment process; you redirect him to LiqPAY via a POST form, providing necessary parameters such as the payment's amount, order id and description.
42
+ 1. User initiates the payment process; you redirect him to LiqPAY via a POST form, providing necessary parameters such as the payment's amount, order id and description.
44
43
 
45
- 2. Users completes payment through LiqPAY.
44
+ 2. Users completes payment through LiqPAY.
46
45
 
47
- 3. LiqPAY redirects the user to the URL you specified with GET.
46
+ 3. LiqPAY redirects the user to the URL you specified with GET.
48
47
 
49
- 4. You wait for a callback that LiqPAY will POST to your designated `server_url`.
48
+ 4. You wait for a callback that LiqPAY will POST to your designated `server_url`.
50
49
 
51
- 5. If the payment was successful: You process the payment on your side.
50
+ 5. If the payment was successful: You process the payment on your side.
52
51
 
53
- 6. If the payment was cancelled: You cancel the operation.
52
+ 6. If the payment was cancelled: You cancel the operation.
54
53
 
55
- The most recent version of the LiqPAY API *requires* you to have a serverside endpoint, which makes it impossible to test it with a local address.
54
+ The most recent version of the LiqPAY API _requires_ you to have a serverside endpoint, which makes it impossible to test it with a local address. Use [ngrok](https://ngrok.com) for local testing.
56
55
 
57
56
  ### Implementation in Rails
58
57
 
59
- 0. Configure Liqpay
58
+ 0. Configure Liqpay
60
59
 
61
- 1. Create a `Liqpay::Request` object
60
+ 1. Create a `Liqpay::Request` object
62
61
 
63
62
  The required options are: the amount and currency of the payment, and an
64
63
  "order ID".
@@ -66,7 +65,7 @@ The most recent version of the LiqPAY API *requires* you to have a serverside en
66
65
  The "order ID" is just a random string that you will use to
67
66
  identify the payment after it has been completed. If you have an `Order`
68
67
  model (I suggest that you should), pass its ID. If not, it can be a random
69
- string stored in the session, or whatever, but *it must be unique*.
68
+ string stored in the session, or whatever, but _it must be unique_.
70
69
 
71
70
  ```ruby
72
71
  @liqpay_request = Liqpay::Request.new(
@@ -82,7 +81,7 @@ The most recent version of the LiqPAY API *requires* you to have a serverside en
82
81
  **Note that this does not do anything permanent.** No saves to the database, no
83
82
  requests to LiqPAY.
84
83
 
85
- 2. Put a payment button somewhere
84
+ 1. Put a payment button somewhere
86
85
 
87
86
  As you need to make a POST request, there is definitely going to be a form somewhere.
88
87
 
@@ -106,7 +105,7 @@ The most recent version of the LiqPAY API *requires* you to have a serverside en
106
105
  <% end %>
107
106
  ```
108
107
 
109
- 3. Set up a receiving endpoint.
108
+ 1. Set up a receiving endpoint.
110
109
 
111
110
  ```ruby
112
111
  # config/routes.rb
@@ -137,10 +136,10 @@ That's about it.
137
136
 
138
137
  ### Security considerations
139
138
 
140
- * Check that amount from response matches the expected amount;
141
- * check that the order id is valid;
142
- * check that the order isn't completed yet (to avoid replay attacks);
139
+ - Check that amount from response matches the expected amount;
140
+ - check that the order id is valid;
141
+ - check that the order isn't completed yet (to avoid replay attacks);
143
142
 
144
- - - -
143
+ ---
145
144
 
146
- Ruby implementation (c) 2012-2014 Leonid Shevtsov
145
+ Ruby implementation (c) 2012-2022 Leonid Shevtsov
data/Rakefile CHANGED
@@ -1 +1,3 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
@@ -1,25 +1,34 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Liqpay
4
+ # Helpers to integrate LiqPay billing
2
5
  module LiqpayHelper
3
6
  # Displays a form to send a payment request to LiqPay
4
7
  #
5
- # You can either pass in a block, that SHOULD render a submit button (or not, if you plan to submit the form otherwise), or
6
- # let the helper create a simple submit button for you.
8
+ # You can either pass in a block, that SHOULD render a submit button
9
+ # (or not, if you plan to submit the form otherwise), or let the helper create a simple submit button for you.
7
10
  #
8
11
  # liqpay_request - an instance of Liqpay::Request
9
12
  # options - currently accepts two options
10
13
  # id - the ID of the form being created (`liqpay_form` by default)
11
14
  # title - text on the submit button (`Pay with LiqPay` by default); not used if you pass in a block
12
- def liqpay_button(liqpay_request, options={}, &block)
15
+ def liqpay_button(liqpay_request, options = {})
13
16
  id = options.fetch(:id, 'liqpay_form')
14
17
  title = options.fetch(:title, 'Pay with LiqPAY')
15
- content_tag(:form, :id => id, :action => Liqpay::LIQPAY_ENDPOINT_URL, :method => :post) do
18
+ render_button(liqpay_request: liqpay_request, id: id, title: title)
19
+ end
20
+
21
+ private
22
+
23
+ def render_button(liqpay_request:, id:, title:)
24
+ content_tag(:form, id: id, action: Liqpay::LIQPAY_ENDPOINT_URL, method: :post) do
16
25
  liqpay_request.form_fields.each do |name, value|
17
26
  concat hidden_field_tag(name, value)
18
27
  end
19
28
  if block_given?
20
29
  yield
21
30
  else
22
- concat submit_tag(title, :name => nil)
31
+ concat submit_tag(title, name: nil)
23
32
  end
24
33
  end
25
34
  end
@@ -1,9 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'liqpay/liqpay_helper'
2
4
 
3
5
  module Liqpay
6
+ # Rails integration for the LiqPay view helpers
4
7
  class Railtie < Rails::Railtie
5
- initializer 'liqpay.view_helpers' do |app|
6
- ActionView::Base.send :include, Liqpay::LiqpayHelper
8
+ initializer 'liqpay.view_helpers' do |_app|
9
+ ActionView::Base.include Liqpay::LiqpayHelper
7
10
  end
8
11
  end
9
12
  end
@@ -1,76 +1,88 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'base64'
2
- require 'liqpay/base_operation'
4
+ require 'liqpay/signed_payload'
3
5
 
4
6
  module Liqpay
5
- class Request < BaseOperation
7
+ # Represends a request to the LiqPay API
8
+ class Request < SignedPayload
9
+ REQUIRED_FIELDS = %i[public_key amount currency description order_id action].freeze
10
+ OPTIONAL_FIELDS = %i[result_url server_url].freeze
11
+ REQUEST_FIELDS = (REQUIRED_FIELDS + OPTIONAL_FIELDS + %i[version]).freeze
12
+
6
13
  # REQUIRED Amount of payment (Float), in :currency
7
14
  attr_accessor :amount
8
15
  # REQUIRED Currency of payment - one of `Liqpay::SUPPORTED_CURRENCIES`
9
16
  attr_accessor :currency
10
17
  # REQUIRED Description to be displayed to the user
11
18
  attr_accessor :description
12
- # RECOMMENDED Arbitrary but unique ID (May be REQUIRED by LiqPay configuration)
19
+ # REQUIRED Arbitrary but unique ID
13
20
  attr_accessor :order_id
21
+ # REQUIRED = either Liqpay::ACTION_PAY or Liqpay::ACTION_DONATE
22
+ attr_accessor :action
14
23
  # RECOMMENDED URL that the user will be redirected to after payment
15
24
  attr_accessor :result_url
16
25
  # RECOMMENDED URL that'll receive the order details in the background.
17
26
  attr_accessor :server_url
18
- # OPTIONAL type of payment = either `buy` (the default) or `donate`
19
- attr_accessor :type
20
- # OPTIONAL UI language - `ru` or `en`
21
- attr_accessor :language
22
27
 
23
- def initialize(options={})
28
+ def initialize(options = {})
24
29
  super(options)
25
30
 
26
- @amount = options[:amount]
27
- @currency = options[:currency]
28
- @description = options[:description]
29
- @order_id = options[:order_id]
30
- @result_url = options[:result_url]
31
- @server_url = options[:server_url]
32
- @type = options[:type]
33
- @language = options[:language]
31
+ (REQUIRED_FIELDS + OPTIONAL_FIELDS).each { |field| send("#{field}=", options[field]) }
32
+ @action ||= Liqpay::ACTION_PAY
33
+
34
34
  @kamikaze = options[:kamikaze]
35
35
  end
36
36
 
37
- def signature_fields
38
- [amount, currency, public_key, order_id, type, description, result_url, server_url]
37
+ def version
38
+ Liqpay::LIQPAY_API_VERSION
39
+ end
40
+
41
+ def data
42
+ json_data = REQUEST_FIELDS
43
+ .map { |field| [field, send(field)] }
44
+ .to_h
45
+ .reject { |_k, v| v.nil? }
46
+ .transform_values(&:to_s)
47
+ puts JSON.dump(json_data)
48
+ @data ||= Base64.strict_encode64(JSON.dump(json_data)).strip
39
49
  end
40
50
 
41
51
  def form_fields
42
52
  validate! unless @kamikaze
43
- {
44
- public_key: public_key,
45
- amount: amount,
46
- currency: currency,
47
- description: description,
48
- order_id: order_id,
49
- result_url: result_url,
50
- server_url: server_url,
51
- type: type,
52
- signature: signature,
53
- language: language
54
- }.reject{|k,v| v.nil?}
53
+ { data: data, signature: signature }
55
54
  end
56
55
 
57
- private
56
+ private
57
+
58
58
  def validate!
59
- %w(public_key amount currency description).each do |required_field|
60
- raise Liqpay::Exception.new(required_field + ' is a required field') unless self.send(required_field).to_s != ''
59
+ validate_required_fields!
60
+ validate_currency!
61
+ validate_amount!
62
+ end
63
+
64
+ def validate_required_fields!
65
+ REQUIRED_FIELDS.each do |required_field|
66
+ raise Liqpay::Exception, "#{required_field} is a required field" unless send(required_field).to_s != ''
61
67
  end
68
+ end
62
69
 
63
- raise Liqpay::Exception.new('currency must be one of '+Liqpay::SUPPORTED_CURRENCIES.join(', ')) unless Liqpay::SUPPORTED_CURRENCIES.include?(currency)
70
+ def validate_currency!
71
+ return if Liqpay::SUPPORTED_CURRENCIES.include?(currency)
72
+
73
+ raise Liqpay::Exception, "currency must be one of #{Liqpay::SUPPORTED_CURRENCIES.join(', ')}"
74
+ end
64
75
 
76
+ def validate_amount!
65
77
  begin
66
- self.amount = Float(self.amount)
78
+ self.amount = Float(amount)
67
79
  rescue ArgumentError, TypeError
68
- raise Liqpay::Exception.new('amount must be a number')
80
+ raise Liqpay::Exception, 'amount must be a number'
69
81
  end
70
82
 
71
- raise Liqpay::Exception.new('amount must be rounded to 2 decimal digits') unless self.amount.round(2) == self.amount
83
+ raise Liqpay::Exception, 'amount must be rounded to 2 decimal digits' unless amount.round(2) == amount
72
84
 
73
- raise Liqpay::Exception.new('amount must be more than 0.01') unless amount > 0.01
85
+ raise Liqpay::Exception, 'amount must be more than 0.01' unless amount > 0.01
74
86
  end
75
87
  end
76
88
  end
@@ -1,23 +1,29 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'base64'
2
- require 'liqpay/base_operation'
4
+ require 'liqpay/signed_payload'
3
5
 
4
6
  module Liqpay
5
- class Response < BaseOperation
6
- SUCCESS_STATUSES = %w(success wait_secure)
7
+ # Represents a response from the LiqPay API.
8
+ class Response < SignedPayload
9
+ SUCCESS_STATUSES = %w[success wait_secure sandbox].freeze
7
10
 
8
- ATTRIBUTES = %w(public_key order_id amount currency description type status transaction_id sender_phone)
9
- %w(public_key order_id description type).each do |attr|
11
+ ATTRIBUTES = %w[public_key order_id amount currency description type status transaction_id sender_phone].freeze
12
+ %w[public_key order_id description type].each do |attr|
10
13
  attr_reader attr
11
14
  end
12
15
 
16
+ attr_reader :data
17
+
13
18
  # Amount of payment. MUST match the requested amount
14
19
  attr_reader :amount
15
20
  # Currency of payment. MUST match the requested currency
16
21
  attr_reader :currency
17
22
  # Status of payment. One of '
18
- # failure
23
+ # failure
19
24
  # success
20
- # wait_secure - success, but the card wasn't known to the system
25
+ # wait_secure - success, but the card wasn't known to the system
26
+ # sandbox
21
27
  attr_reader :status
22
28
  # LiqPAY's internal transaction ID
23
29
  attr_reader :transaction_id
@@ -27,28 +33,26 @@ module Liqpay
27
33
  def initialize(params = {}, options = {})
28
34
  super(options)
29
35
 
36
+ @data = params['data']
37
+ parsed_data = JSON.parse(Base64.strict_decode64(data))
38
+
30
39
  ATTRIBUTES.each do |attribute|
31
- instance_variable_set "@#{attribute}", params[attribute]
40
+ instance_variable_set "@#{attribute}", parsed_data[attribute]
32
41
  end
33
- @request_signature = params["signature"]
42
+ @request_signature = params['signature']
34
43
 
35
44
  decode!
36
45
  end
37
46
 
38
47
  # Returns true, if the transaction was successful
39
48
  def success?
40
- SUCCESS_STATUSES.include? self.status
49
+ SUCCESS_STATUSES.include? status
41
50
  end
42
51
 
43
- def signature_fields
44
- [amount, currency, public_key, order_id, type, description, status, transaction_id, sender_phone]
45
- end
52
+ private
46
53
 
47
- private
48
54
  def decode!
49
- if signature != @request_signature
50
- raise Liqpay::InvalidResponse
51
- end
55
+ raise Liqpay::InvalidResponse if signature != @request_signature
52
56
  end
53
57
  end
54
58
  end
@@ -1,11 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'digest/sha1'
2
4
  require 'base64'
3
5
 
4
6
  module Liqpay
5
- class BaseOperation
7
+ # Handles signing and verification of LiqPay request/responses
8
+ class SignedPayload
6
9
  attr_accessor :public_key, :private_key
7
10
 
8
- def initialize(options={})
11
+ def initialize(options = {})
9
12
  options.replace(Liqpay.default_options.merge(options))
10
13
 
11
14
  @public_key = options[:public_key]
@@ -13,16 +16,17 @@ module Liqpay
13
16
  end
14
17
 
15
18
  def signature
16
- @signature ||= sign(signature_fields)
19
+ @signature ||= sign(data)
17
20
  end
18
21
 
19
- def signature_fields
22
+ def data
20
23
  raise NotImplementedError
21
24
  end
22
25
 
23
- private
24
- def sign(fields)
25
- Base64.encode64(Digest::SHA1.digest(@private_key + fields.join(''))).strip
26
+ private
27
+
28
+ def sign(data)
29
+ Base64.strict_encode64(Digest::SHA1.digest(@private_key + data + @private_key)).strip
26
30
  end
27
31
  end
28
32
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Liqpay
2
- VERSION = "1.0.1"
4
+ VERSION = '2.0.0'
3
5
  end
data/lib/liqpay.rb CHANGED
@@ -1,16 +1,25 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'liqpay/version'
2
4
  require 'liqpay/request'
3
5
  require 'liqpay/response'
4
6
 
5
7
  require 'liqpay/railtie' if defined?(Rails)
6
8
 
9
+ # Liqpay implements the LiqPay payment API.
7
10
  module Liqpay
8
- LIQPAY_ENDPOINT_URL = 'https://www.liqpay.com/api/pay'
9
- SUPPORTED_CURRENCIES = %w(UAH USD EUR RUB)
11
+ LIQPAY_ENDPOINT_URL = 'https://www.liqpay.ua/api/3/checkout'
12
+ LIQPAY_API_VERSION = 3
13
+
14
+ # Other actions are not supported
15
+ ACTION_PAY = 'pay'
16
+ ACTION_DONATE = 'paydonate'
17
+
18
+ SUPPORTED_CURRENCIES = %w[USD EUR UAH BYN KZT].freeze
10
19
 
11
20
  @default_options = {}
12
21
  class << self; attr_accessor :default_options; end
13
22
 
14
- class Exception < ::Exception; end
15
- class InvalidResponse < Exception; end
23
+ class Exception < StandardError; end
24
+ class InvalidResponse < StandardError; end
16
25
  end
data/liqpay.gemspec CHANGED
@@ -1,20 +1,22 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "liqpay/version"
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/liqpay/version'
4
4
 
5
5
  Gem::Specification.new do |s|
6
- s.name = "liqpay"
6
+ s.name = 'liqpay'
7
7
  s.version = Liqpay::VERSION
8
- s.authors = ["Leonid Shevtsov"]
9
- s.email = ["leonid@shevtsov.me"]
10
- s.homepage = "https://github.com/leonid-shevtsov/liqpay"
11
- s.summary = %q{LiqPAY billing API implementation in Ruby}
12
- s.description = %q{LiqPAY billing API implementation in Ruby}
8
+ s.authors = ['Leonid Shevtsov']
9
+ s.email = ['leonid@shevtsov.me']
10
+ s.homepage = 'https://github.com/leonid-shevtsov/liqpay'
11
+ s.summary = 'LiqPAY billing API implementation in Ruby'
12
+ s.required_ruby_version = '>= 2.7.0'
13
+ s.licenses = ['MIT']
13
14
 
14
- s.add_development_dependency 'rake'
15
+ s.add_development_dependency 'rake', '~>13'
16
+ s.add_development_dependency 'rubocop', '~>1'
15
17
 
16
18
  s.files = `git ls-files`.split("\n")
17
19
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
- s.require_paths = ["lib"]
20
+ s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
21
+ s.require_paths = ['lib']
20
22
  end
metadata CHANGED
@@ -1,53 +1,70 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: liqpay
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leonid Shevtsov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-21 00:00:00.000000000 Z
11
+ date: 2022-09-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: '13'
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: '0'
27
- description: LiqPAY billing API implementation in Ruby
26
+ version: '13'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rubocop
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1'
41
+ description:
28
42
  email:
29
43
  - leonid@shevtsov.me
30
44
  executables: []
31
45
  extensions: []
32
46
  extra_rdoc_files: []
33
47
  files:
48
+ - ".github/workflows/test.yml"
34
49
  - ".gitignore"
35
50
  - CHANGELOG.md
36
51
  - Gemfile
52
+ - LICENSE.txt
37
53
  - README.md
38
54
  - Rakefile
39
55
  - lib/liqpay.rb
40
- - lib/liqpay/base_operation.rb
41
56
  - lib/liqpay/liqpay_helper.rb
42
57
  - lib/liqpay/railtie.rb
43
58
  - lib/liqpay/request.rb
44
59
  - lib/liqpay/response.rb
60
+ - lib/liqpay/signed_payload.rb
45
61
  - lib/liqpay/version.rb
46
62
  - liqpay.gemspec
47
63
  homepage: https://github.com/leonid-shevtsov/liqpay
48
- licenses: []
64
+ licenses:
65
+ - MIT
49
66
  metadata: {}
50
- post_install_message:
67
+ post_install_message:
51
68
  rdoc_options: []
52
69
  require_paths:
53
70
  - lib
@@ -55,16 +72,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
55
72
  requirements:
56
73
  - - ">="
57
74
  - !ruby/object:Gem::Version
58
- version: '0'
75
+ version: 2.7.0
59
76
  required_rubygems_version: !ruby/object:Gem::Requirement
60
77
  requirements:
61
78
  - - ">="
62
79
  - !ruby/object:Gem::Version
63
80
  version: '0'
64
81
  requirements: []
65
- rubyforge_project:
66
- rubygems_version: 2.3.0
67
- signing_key:
82
+ rubygems_version: 3.2.15
83
+ signing_key:
68
84
  specification_version: 4
69
85
  summary: LiqPAY billing API implementation in Ruby
70
86
  test_files: []