paysto-rails 1.0.0

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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ MDc3NzBiMTNmOGFjNjgxNTZhMmRjODM2MTAzNzBmYmYwZGM1ZmNiYQ==
5
+ data.tar.gz: !binary |-
6
+ MGUwYjY1M2RmZTY0OGFjZWRkMmFjNjE5ZWE3ODg5MDI1MjdlMGNmNA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ ZjNjYTVhODgyZDJlNThiMDU2M2EwODYxMzAzNzkyNmFmZmQ3MTQ5NmI4OTA4
10
+ NmRlMDk0YmZhYTdkNDg3NTZmZTg3MTk2OWNjZjAxMzFjNmNjOGJlYjY3MWNm
11
+ ZGFhMzFkZjRjMTM5N2I4YjI4ZTYxY2U4ZTc3NWNlNjUwYTIxOTU=
12
+ data.tar.gz: !binary |-
13
+ MzFmNzY3NzZmYWM5YzFkNGZmNDc4YzZhNWYwMTc4NDg1MTk2NzFkZDg3OWFk
14
+ OWI1YWQxMzY4OGMzYjZhNWYyMzU4ODY2MzMxZTEzYjYzNzc1YjQ2YjZmNjA2
15
+ OGYwOGI2OWE0NGQ3NWVlYjcyNTQwNGJjMzU5NTc0Y2RkZWU1MWI=
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in paysto-rails.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Andrey Baiburin
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,121 @@
1
+ # «paysto-rails»
2
+ [![GitHub version](https://badge.fury.io/gh/fbandrey%2Fpaysto-rails.svg)](http://badge.fury.io/gh/fbandrey%2Fpaysto-rails)
3
+ [![Code Climate](https://codeclimate.com/github/fbandrey/paysto-rails/badges/gpa.svg)](https://codeclimate.com/github/fbandrey/paysto-rails)
4
+
5
+ This is first implementation of gateway for passing payments through [Paysto](https://paysto.com).
6
+
7
+ It works only with «[onlineMerchant](https://paysto.com/ru/products/onlineMerchant)», if you know what I mean. :)
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ gem 'paysto-rails'
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install paysto-rails
22
+
23
+ ## Setup
24
+
25
+ After installation run this command:
26
+ ```
27
+ rails generate paysto:install
28
+ ```
29
+
30
+ It will create files for you:
31
+ ```
32
+ create config/initializers/paysto.rb
33
+ create config/locales/paysto.en.yml
34
+ create config/locales/paysto.ru.yml
35
+ create app/controllers/paysto_controller.rb
36
+ ```
37
+ and extend your routes with:
38
+ ```
39
+ namespace :paysto do
40
+ post :success, :fail, :check, :callback
41
+ get :fail
42
+ end
43
+ ```
44
+
45
+ Right now you may to configure model names in ```config/initializers/paysto.rb``` file for payments, invoices and their notifications. By default they are ```Payment```, ```Invoice``` and ```InvoiceNotification``` respectively.
46
+
47
+ Then run this command:
48
+ ```
49
+ rails generate paysto:models
50
+ ```
51
+ It will create your models and migration:
52
+
53
+ ```
54
+ create db/migrate/20140101000000_create_paysto_tables.rb
55
+ create app/models/payment.rb
56
+ create app/models/invoice.rb
57
+ create app/models/invoice_notification.rb
58
+ ```
59
+
60
+ In the simple case only what you should to do:
61
+
62
+ 1. Put your real credentials in ```config/initializers/paysto.rb``` as well
63
+ 2. Run ```rake db:migrate```
64
+
65
+ That's all.
66
+
67
+ Now you may to customize models as you want, associate it with users or anything else...
68
+
69
+ For more information check [payment workflow](https://github.com/fbandrey/paysto-rails/wiki/Payment-workflow) wiki.
70
+
71
+ ## Usage
72
+
73
+ You have 3 models and 1 controller now if you did everything right before. Check models and extend them with logic and associations, which you need in your application.
74
+
75
+ Controller by default [extended with concern](https://github.com/fbandrey/paysto-rails/blob/master/lib/paysto/controller.rb) and looks so:
76
+ ```
77
+ class PaystoController < ApplicationController
78
+ include Paysto::Controller
79
+ end
80
+ ```
81
+ But you may override methods here as you want. For example, if I want to redirect user to "/payments" URL when payment is passed:
82
+ ```
83
+ class PaystoController < ApplicationController
84
+ include Paysto::Controller
85
+
86
+ def success
87
+ flash[:success] = I18n.t('paysto.success')
88
+ redirect_to custom_payments_path
89
+ end
90
+ end
91
+ ```
92
+
93
+ Also you can customize [check](https://github.com/fbandrey/paysto-rails/blob/master/lib/paysto/controller.rb#L9) or [callback](https://github.com/fbandrey/paysto-rails/blob/master/lib/paysto/controller.rb#L18) methods using Paysto module as you want, but we don't recommend it, do it only if you know what's going on there.
94
+
95
+ ### Paysto methods
96
+
97
+ ```Paysto.balance``` – current balance in Paysto.
98
+
99
+ ```Paysto.currencies``` – available pay methods.
100
+
101
+ ```Paysto.get_payments(from_date, to_date)``` – payments list between dates.
102
+
103
+ ```Paysto.get_payment_type(invoice.id)``` – pay method for ```Invoice```.
104
+
105
+ ```Paysto.invoice_valid?(invoice)``` – check whether the invoice is valid.
106
+
107
+ ```Paysto.ip_valid?(request.remote_ip)``` – check whether the IP is permitted.
108
+
109
+ ```Paysto.md5_valid?(params)``` – check whether the MD5 sign is valid.
110
+
111
+ ```Paysto.pay_till``` – timestamp string in Paysto format.
112
+
113
+ ```Paysto.real_amount(amount)``` – real income amount without Paysto tax.
114
+
115
+ ## Contributing
116
+
117
+ 1. Fork it
118
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
119
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
120
+ 4. Push to the branch (`git push origin my-new-feature`)
121
+ 5. Create new Pull Request
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,31 @@
1
+ require 'rails/generators'
2
+
3
+ module Paysto
4
+ class InstallGenerator < Rails::Generators::Base
5
+ source_root File.expand_path('../../templates', __FILE__)
6
+
7
+ def add_paysto_routes
8
+ paysto_route = <<-PAYSTO_ROUTES
9
+ namespace :paysto do
10
+ post :success, :fail, :check, :callback
11
+ get :fail
12
+ end
13
+ PAYSTO_ROUTES
14
+ route paysto_route
15
+ end
16
+
17
+ def copy_config
18
+ template 'config/paysto.rb', 'config/initializers/paysto.rb'
19
+ end
20
+
21
+ def copy_locale
22
+ template 'config/paysto.en.yml', 'config/locales/paysto.en.yml'
23
+ template 'config/paysto.ru.yml', 'config/locales/paysto.ru.yml'
24
+ end
25
+
26
+ def copy_controller
27
+ template 'controllers/paysto_controller.rb', 'app/controllers/paysto_controller.rb'
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,27 @@
1
+ require 'rails/generators'
2
+ require 'rails/generators/migration'
3
+
4
+ module Paysto
5
+ class ModelsGenerator < Rails::Generators::Base
6
+ include Rails::Generators::Migration
7
+ source_root File.expand_path('../../templates', __FILE__)
8
+
9
+ def self.next_migration_number(dirname)
10
+ if ActiveRecord::Base.timestamped_migrations
11
+ Time.new.utc.strftime("%Y%m%d%H%M%S")
12
+ else
13
+ "%.3d" % (current_migration_number(dirname) + 1)
14
+ end
15
+ end
16
+
17
+ def create_migration_file
18
+ migration_template 'migration.rb', 'db/migrate/create_paysto_tables.rb'
19
+ end
20
+
21
+ def copy_models
22
+ template 'models/payment.rb', "app/models/#{Paysto.payment_class_name.underscore}.rb"
23
+ template 'models/invoice.rb', "app/models/#{Paysto.invoice_class_name.underscore}.rb"
24
+ template 'models/invoice_notification.rb', "app/models/#{Paysto.invoice_notification_class_name.underscore}.rb"
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,8 @@
1
+ en:
2
+ paysto:
3
+ check:
4
+ fail: 'Payment not found.'
5
+ callback:
6
+ fail: 'Payment not found.'
7
+ success: 'Payment successfully passed.'
8
+ fail: 'Sorry, but something went wrong. Please, try again later.'
@@ -0,0 +1,31 @@
1
+ Paysto.setup do |config|
2
+
3
+ # === Put your Paysto credentials here
4
+ config.id = 'SECRET-ID'
5
+ config.secret = 'SECRET-KEY'
6
+ config.description = 'CUSTOM-DESCRIPTION-FOR-PAYMENTS'
7
+
8
+ config.urls = {
9
+ payment: 'https://paysto.com/ru/pay',
10
+ currencies: 'https://paysto.com/api/Common/Currency',
11
+ balance: 'https://paysto.com/api/Common/Balance',
12
+ payments_list: 'https://paysto.com/api/Payment/GetList'
13
+ }
14
+
15
+ config.ips = [
16
+ '66.226.72.66',
17
+ '66.226.74.225',
18
+ '66.226.74.226',
19
+ '66.226.74.227',
20
+ '66.226.74.228'
21
+ ]
22
+
23
+ # === Payments tax of your tariff plan in Paysto, default onlineMerchant "All inclusive" is 5%.
24
+ config.tax = 0.05
25
+
26
+ # === Customize model names as you want before they are will be generated
27
+ config.payment_class_name = 'Payment'
28
+ config.invoice_class_name = 'Invoice'
29
+ config.invoice_notification_class_name = 'InvoiceNotification'
30
+
31
+ end
@@ -0,0 +1,8 @@
1
+ ru:
2
+ paysto:
3
+ check:
4
+ fail: 'Платеж не найден.'
5
+ callback:
6
+ fail: 'Платеж не найден.'
7
+ success: 'Оплата успешно проведена.'
8
+ fail: 'Сожалеем, что-то пошло не так. Попробуйте еще раз позже.'
@@ -0,0 +1,3 @@
1
+ class PaystoController < ActionController::Base
2
+ include Paysto::Controller
3
+ end
@@ -0,0 +1,28 @@
1
+ class CreatePaystoTables < ActiveRecord::Migration
2
+ def change
3
+
4
+ create_table :<%= Paysto.payment_class_name.underscore.pluralize %> do |t|
5
+ t.float :amount, default: 0.0
6
+ t.float :real_amount
7
+ t.string :gateway_code
8
+ t.string :gateway_payment_method
9
+ t.timestamps
10
+ end
11
+
12
+ create_table :<%= Paysto.invoice_class_name.underscore.pluralize %> do |t|
13
+ t.integer :<%= Paysto.payment_class_name.underscore %>_id
14
+ t.float :amount, default: 0.0
15
+ t.datetime :paid_at
16
+ t.timestamps
17
+ end
18
+ add_index :<%= Paysto.invoice_class_name.underscore.pluralize %>, :<%= Paysto.payment_class_name.underscore %>_id
19
+
20
+ create_table :<%= Paysto.invoice_notification_class_name.underscore.pluralize %> do |t|
21
+ t.integer :<%= Paysto.invoice_class_name.underscore %>_id
22
+ t.text :pay_data
23
+ t.timestamps
24
+ end
25
+ add_index :<%= Paysto.invoice_notification_class_name.underscore.pluralize %>, :<%= Paysto.invoice_class_name.underscore %>_id
26
+
27
+ end
28
+ end
@@ -0,0 +1,54 @@
1
+ class <%= Paysto.invoice_class_name %> < ActiveRecord::Base
2
+ # attr_accessible :<%= Paysto.payment_class_name.underscore %>_id,
3
+ # :amount,
4
+ # :paid_at
5
+
6
+ belongs_to :<%= Paysto.payment_class_name.underscore %>, class_name: '<%= Paysto.payment_class_name %>'
7
+ has_many :<%= Paysto.invoice_notification_class_name.underscore.pluralize %>, class_name: '<%= Paysto.invoice_notification_class_name %>', dependent: :destroy
8
+
9
+ validates :amount, presence: true
10
+
11
+ SUCCESS_STATES = {
12
+ 'paysto' => 'RES_PAID'
13
+ }
14
+
15
+ def notify(params, gateway)
16
+ self.<%= Paysto.invoice_notification_class_name.underscore.pluralize %>.create(pay_data: info_by_gateway(params, gateway))
17
+ end
18
+
19
+ def need_to_be_paid?(gateway, payment_status, amount)
20
+ !paid? && (payment_status == SUCCESS_STATES[gateway.to_s]) && (self.amount.to_f == amount.to_f)
21
+ end
22
+
23
+ def create_<%= Paysto.payment_class_name.underscore %>(payment_method, gateway_code, real_amount = nil)
24
+ self.<%= Paysto.payment_class_name.underscore %> = <%= Paysto.payment_class_name %>.new(amount: self.amount,
25
+ real_amount: real_amount,
26
+ gateway_code: gateway_code,
27
+ gateway_payment_method: payment_method)
28
+
29
+ if self.<%= Paysto.payment_class_name.underscore %>.save
30
+ self.paid_at = Time.zone.now
31
+ self.save
32
+ end
33
+ end
34
+
35
+ def paid?
36
+ !!paid_at
37
+ end
38
+
39
+ private
40
+
41
+ def info_by_gateway(_params, _gateway)
42
+ _keys = case _gateway
43
+ when :paysto
44
+ ['PAYSTO_SUM', 'PAYSTO_INVOICE_ID', 'PAYSTO_SHOP_ID', 'PAYSTO_DESC', 'PAYSTO_TTL', 'PAYSTO_PAYMENT_ID', 'PAYSTO_REQUEST_MODE']
45
+ else
46
+ []
47
+ end
48
+
49
+ _keys.map do |_key|
50
+ [_key, _params[_key.to_sym]].join(':')
51
+ end.join(';')
52
+ end
53
+
54
+ end
@@ -0,0 +1,4 @@
1
+ class <%= Paysto.invoice_notification_class_name %> < ActiveRecord::Base
2
+ # attr_accessible :<%= Paysto.invoice_class_name.underscore %>_id, :pay_data
3
+ belongs_to :<%= Paysto.invoice_class_name.underscore %>, class_name: '<%= Paysto.invoice_class_name %>'
4
+ end
@@ -0,0 +1,11 @@
1
+ class <%= Paysto.payment_class_name %> < ActiveRecord::Base
2
+ # attr_accessible :amount,
3
+ # :real_amount,
4
+ # :gateway_code,
5
+ # :gateway_payment_method
6
+
7
+ has_one :<%= Paysto.invoice_class_name.underscore %>, class_name: '<%= Paysto.invoice_class_name %>', dependent: :destroy
8
+
9
+ validates :amount, presence: true
10
+ validates :amount, exclusion: { in: [0] }, allow_nil: false
11
+ end
@@ -0,0 +1,11 @@
1
+ require 'rails'
2
+ require 'paysto/version'
3
+
4
+ module Paysto
5
+ if defined?(Rails)
6
+ require 'paysto/base'
7
+ require 'paysto/controller'
8
+ else
9
+ raise 'Rails framework not found.'
10
+ end
11
+ end
@@ -0,0 +1,113 @@
1
+ module Paysto
2
+ require 'csv'
3
+
4
+ mattr_accessor :id,
5
+ :secret,
6
+ :description,
7
+ :urls,
8
+ :ips,
9
+ :tax,
10
+ :payment_class_name,
11
+ :invoice_class_name,
12
+ :invoice_notification_class_name
13
+
14
+ class << self
15
+
16
+ def setup
17
+ yield self
18
+ end
19
+
20
+ def payment_class
21
+ @@payment_class_name.constantize
22
+ end
23
+
24
+ def invoice_class
25
+ @@invoice_class_name.constantize
26
+ end
27
+
28
+ def invoice_notification_class
29
+ @@invoice_notification_class_name.constantize
30
+ end
31
+
32
+ def currencies
33
+ https_request_to Paysto.urls[:currencies], base_params
34
+ end
35
+
36
+ def balance
37
+ https_request_to Paysto.urls[:balance], base_params
38
+ end
39
+
40
+ def get_payments(from, to)
41
+ p = { 'PAYSTO_SHOP_ID' => Paysto.id,
42
+ 'FROM' => from.strftime('%Y%m%d%H%M'),
43
+ 'TO' => to.strftime('%Y%m%d%H%M') }
44
+ p.merge!('PAYSTO_MD5' => generate_md5(p))
45
+
46
+ res = https_request_to(Paysto.urls[:payments_list], p)
47
+ CSV.parse(res)
48
+ end
49
+
50
+ def get_payment_type(invoice_id, time = Time.zone.now)
51
+ _type = 'common'
52
+ _payments = get_payments(time.utc - 30.minutes, time.utc + 5.minutes)
53
+ if _payments.present?
54
+ p = _payments.select{|_p| _p[2].eql?(invoice_id.to_s)}.first
55
+ _type = p[7] if p
56
+ end
57
+ _type
58
+ end
59
+
60
+ def invoice_valid?(invoice)
61
+ invoice && invoice.payment_id.blank? && invoice.paid_at.blank?
62
+ end
63
+
64
+ def ip_valid?(ip)
65
+ Paysto.ips.include?(ip)
66
+ end
67
+
68
+ def md5_valid?(p)
69
+ generate_md5(p.reject{|k,v| ['action', 'controller', 'PAYSTO_MD5'].include?(k)}) == p['PAYSTO_MD5']
70
+ end
71
+
72
+ def pay_till
73
+ (Time.zone.now + 1.day + 1.minute).utc.strftime('%Y%m%d%H%M')
74
+ end
75
+
76
+ def real_amount(str)
77
+ amount = str.to_f
78
+ _tax = amount * Paysto.tax
79
+ _tax = 10 if _tax < 10
80
+ amount - _tax
81
+ end
82
+
83
+ private
84
+
85
+ def generate_md5(p = {}, upcase = true)
86
+ hash_str = p.to_a.sort_by{|pair| pair.first.downcase}.map{|pair| pair.join('=')}.join('&')
87
+ md5 = Digest::MD5.hexdigest("#{hash_str}&#{Paysto.secret}")
88
+ if upcase
89
+ md5.upcase
90
+ else
91
+ md5
92
+ end
93
+ end
94
+
95
+ def base_params
96
+ p = { 'PAYSTO_SHOP_ID' => Paysto.id }
97
+ p.merge!('PAYSTO_MD5' => generate_md5(p))
98
+ end
99
+
100
+ def https_request_to(url, params)
101
+ uri = URI.parse(url)
102
+ req = Net::HTTP::Post.new(uri.path)
103
+ req.set_form_data(params)
104
+ session = Net::HTTP.new(uri.hostname, 443)
105
+ session.use_ssl = true
106
+ res = session.start do |http|
107
+ http.request(req)
108
+ end
109
+ res.body.force_encoding('UTF-8')
110
+ end
111
+
112
+ end
113
+ end
@@ -0,0 +1,40 @@
1
+ module Paysto
2
+ module Controller
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ skip_before_filter :verify_authenticity_token, only: [:callback, :check]
7
+ end
8
+
9
+ def check
10
+ invoice = Paysto.invoice_class.find_by_id(params['PAYSTO_INVOICE_ID'])
11
+ if Paysto.invoice_valid?(invoice) && Paysto.ip_valid?(request.remote_ip) && Paysto.md5_valid?(params)
12
+ render text: invoice.id
13
+ else
14
+ render text: I18n.t('paysto.check.fail')
15
+ end
16
+ end
17
+
18
+ def callback
19
+ invoice = Paysto.invoice_class.find_by_id(params['PAYSTO_INVOICE_ID'])
20
+ if invoice && invoice.need_to_be_paid?(:paysto, params['PAYSTO_REQUEST_MODE'], params['PAYSTO_SUM']) && Paysto.ip_valid?(request.remote_ip) && Paysto.md5_valid?(params)
21
+ invoice.notify(params, :paysto)
22
+ invoice.send("create_#{Paysto.payment_class_name.underscore}", Paysto.get_payment_type(invoice.id), 'paysto', Paysto.real_amount(params['PAYSTO_SUM']))
23
+ render text: invoice.id
24
+ else
25
+ render text: I18n.t('paysto.callback.fail')
26
+ end
27
+ end
28
+
29
+ def success
30
+ flash[:success] = I18n.t('paysto.success')
31
+ redirect_to root_path
32
+ end
33
+
34
+ def fail
35
+ flash[:alert] = I18n.t('paysto.fail')
36
+ redirect_to root_path
37
+ end
38
+
39
+ end
40
+ end
@@ -0,0 +1,3 @@
1
+ module Paysto
2
+ VERSION = '1.0.0'
3
+ end
@@ -0,0 +1,24 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'paysto/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'paysto-rails'
8
+ spec.version = Paysto::VERSION
9
+ spec.authors = ['Andrey Baiburin']
10
+ spec.email = ['fbandrey@gmail.com']
11
+ spec.description = %q{Payments gateway for Paysto.com}
12
+ spec.summary = %q{Payments gateway for Paysto.com}
13
+ spec.homepage = ''
14
+ spec.license = 'MIT'
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ['lib']
20
+
21
+ spec.add_development_dependency 'bundler', '~> 1.3'
22
+ spec.add_development_dependency 'rake'
23
+ spec.add_development_dependency 'i18n'
24
+ end
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: paysto-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Andrey Baiburin
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-09-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: i18n
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ! '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Payments gateway for Paysto.com
56
+ email:
57
+ - fbandrey@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - .gitignore
63
+ - Gemfile
64
+ - LICENSE.txt
65
+ - README.md
66
+ - Rakefile
67
+ - lib/generators/paysto/install_generator.rb
68
+ - lib/generators/paysto/models_generator.rb
69
+ - lib/generators/templates/config/paysto.en.yml
70
+ - lib/generators/templates/config/paysto.rb
71
+ - lib/generators/templates/config/paysto.ru.yml
72
+ - lib/generators/templates/controllers/paysto_controller.rb
73
+ - lib/generators/templates/migration.rb
74
+ - lib/generators/templates/models/invoice.rb
75
+ - lib/generators/templates/models/invoice_notification.rb
76
+ - lib/generators/templates/models/payment.rb
77
+ - lib/paysto-rails.rb
78
+ - lib/paysto/base.rb
79
+ - lib/paysto/controller.rb
80
+ - lib/paysto/version.rb
81
+ - paysto-rails.gemspec
82
+ homepage: ''
83
+ licenses:
84
+ - MIT
85
+ metadata: {}
86
+ post_install_message:
87
+ rdoc_options: []
88
+ require_paths:
89
+ - lib
90
+ required_ruby_version: !ruby/object:Gem::Requirement
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
95
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ! '>='
98
+ - !ruby/object:Gem::Version
99
+ version: '0'
100
+ requirements: []
101
+ rubyforge_project:
102
+ rubygems_version: 2.2.2
103
+ signing_key:
104
+ specification_version: 4
105
+ summary: Payments gateway for Paysto.com
106
+ test_files: []