stall-atos 0.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: daf588b4c8f1d06db827b602cc8eae3b4a137139
4
+ data.tar.gz: 34163d8ac6e761c506ce37d2ae8f8d01e2e55f2f
5
+ SHA512:
6
+ metadata.gz: 8e136677ec3ac23ae433114051d390e2084065e758d96092850285224f125a35df9980d66eab82065cc358acba7ea6acdf4680e7b0049d152c4d53b46553c588
7
+ data.tar.gz: 048de03bba28c77bacc848f3fd228086b66973bc5a91a861998debca45332d31b40c1625e96f4b4f820208deeef8ded14cfe5907f10ebdaa24a4f361cd4a1ef0
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.gem
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.travis.yml ADDED
@@ -0,0 +1,4 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.3.0
4
+ before_install: gem install bundler -v 1.11.2
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in stall-atos.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2016 vala
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 ADDED
@@ -0,0 +1,80 @@
1
+ # Stall::Atos
2
+
3
+ This gem allows integrating your [Stall](https://github.com/stall-rails/stall)
4
+ e-commerce app with one of the Atos online payment gateway solutions.
5
+
6
+ This gem is just the glue between [Stall](https://github.com/stall-rails/stall)
7
+ and the provided Atos executable.
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ ```ruby
14
+ gem 'stall-atos'
15
+ ```
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Or install it yourself as:
22
+
23
+ $ gem install stall-atos
24
+
25
+ Then use the install generator to copy the config template file :
26
+
27
+ $ rails generator stall:atos:install
28
+
29
+
30
+ ## Usage
31
+
32
+ You first need to configure the gateway by filling the required variables in
33
+ that were added to the stall config initialize.
34
+
35
+ By default, it is configured to fetch from the variables from the environment,
36
+ so ideally, just create the following env vars :
37
+
38
+ - `ATOS_MERCHANT_ID`
39
+ - `ATOS_SECRET_KEY`
40
+
41
+ > **Note** : Test merchant id and secret key can be different than production
42
+ ones.
43
+
44
+ Now, go to the Stall initializer, and fill in the test and production URLs
45
+ provdided by your bank in the `atos.test_payment_url` and `atos.payment_url`
46
+ configuration.
47
+
48
+ Restart your server, and you should now be able to use the CM-CIC payment
49
+ gateway in test mode.
50
+
51
+ When you're ready to switch to production, set the following environment
52
+ variable :
53
+
54
+ - `ATOS_PRODUCTION_MODE=true`
55
+
56
+ Just like the other settings, you can change the way it's configured in the
57
+ stall initializer file.
58
+
59
+ ### Automatic response URL
60
+
61
+ You need to provide a payment response URL to your bank which will be :
62
+
63
+ ```text
64
+ <http|http>://<YOUR_DOMAIN>/atos/payment/notify
65
+ ```
66
+
67
+ You can find the route with :
68
+
69
+ ```bash
70
+ rake routes | grep payment/notify
71
+ ```
72
+
73
+ ## Contributing
74
+
75
+ Bug reports and pull requests are welcome on GitHub at https://github.com/stall-rails/stall-atos.
76
+
77
+ ## License
78
+
79
+ The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
80
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -0,0 +1,7 @@
1
+ %form.payment-gateway-form{ action: request.params.target_url, method: "post" }
2
+ %input#version{ name: "Data", type: "hidden", value: request.params.data }
3
+ %input#tpe{ name: "Seal", type: "hidden", value: request.params.seal }
4
+ %input#date{ name: "InterfaceVersion", type: "hidden", value: request.params.interface_version }
5
+
6
+ %button.btn.btn-primary{ name: "submit_cic_payment_form", type: "submit" }
7
+ = t('stall.payments.gateway.pay')
data/bin/console ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "stall/atos"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,13 @@
1
+ module Stall
2
+ module Atos
3
+ class InstallGenerator < Rails::Generators::Base
4
+ source_root File.expand_path('../templates', __FILE__)
5
+
6
+ def copy_config_template
7
+ inject_into_file 'config/initializers/stall.rb', after: "Stall.configure do |config|\n" do
8
+ File.read(File.join(self.class.source_root, 'config.rb'))
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,34 @@
1
+ # Atos payment gateway configuration
2
+ # Fill in the informations provided by your bank (Atos service provider)
3
+ #
4
+ config.payment.atos do |atos|
5
+ # Hmac key calculated with the js calculator given by CIC
6
+ atos.merchant_id = ENV['ATOS_MERCHANT_ID']
7
+ # Hmac key calculated with the js calculator given by CIC
8
+ atos.secret_key = ENV['ATOS_SECRET_KEY']
9
+
10
+ # Secret key version. Defaults to 1 when first generated, but you can update
11
+ # this value if you generated another key
12
+ #
13
+ # atos.key_version = '1'
14
+
15
+ # Test payment URL, provided by the bank
16
+ atos.test_payment_url = ''
17
+ # Production payment URL, provided by the bank
18
+ atos.payment_url = ''
19
+
20
+ # Atos / SIPS target version. Defaults to HP_2.9, but could need to be
21
+ # updated, depending on the bank provided version
22
+ #
23
+ # atos.interface_version = 'HP_2.9'
24
+
25
+ # Test or production mode, default to false, changes the payment
26
+ # gateway target URL
27
+ #
28
+ # By default, the test mode is activated in all environments but you just
29
+ # need to add `ATOS_PRODUCTION_MODE=true` in your environment variables
30
+ # and restart your server to switch to production mode
31
+ #
32
+ atos.test_mode = ENV['ATOS_PRODUCTION_MODE'] != 'true'
33
+ end
34
+
data/lib/stall/atos.rb ADDED
@@ -0,0 +1,16 @@
1
+ require 'stall'
2
+
3
+ module Stall
4
+ module Atos
5
+ extend ActiveSupport::Autoload
6
+
7
+ autoload :PaymentParams
8
+ autoload :PaymentResponse
9
+ autoload :Version
10
+
11
+ autoload :FakeGatewayPaymentNotification
12
+ end
13
+ end
14
+
15
+ require 'stall/atos/gateway'
16
+ require 'stall/atos/engine'
@@ -0,0 +1,6 @@
1
+ module Stall
2
+ module Atos
3
+ class Engine < ::Rails::Engine
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,52 @@
1
+ module Stall
2
+ module Atos
3
+ class FakeGatewayPaymentNotification < Stall::Payments::FakeGatewayPaymentNotification
4
+ delegate :currency, to: :cart
5
+
6
+ def params
7
+ {}.tap do |params|
8
+ params.merge!(options)
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def options
15
+ @options ||= {
16
+ "Data" => data,
17
+ "Seal" => Stall::Atos::PaymentParams.calculate_seal_for(data),
18
+ "InterfaceVersion" => "HP_2.0",
19
+ "Encode" => ""
20
+ }
21
+ end
22
+
23
+ def data
24
+ @data ||= Stall::Atos::PaymentParams.serialize(
25
+ merchantId: gateway.merchant_id,
26
+ transactionReference: gateway.transaction_id,
27
+ keyVersion: gateway.key_version,
28
+ amount: cart.total_price.cents,
29
+ currencyCode: cart.currency.iso_numeric,
30
+ transactionDateTime: Time.now.iso8601,
31
+ captureDay: '0',
32
+ captureMode: 'AUTHOR_CAPTURE',
33
+ orderChannel: 'INTERNET',
34
+ responseCode: '00',
35
+ acquirerResponseCode: '00',
36
+ authorisationId: '12345',
37
+ guaranteeIndicator: 'N',
38
+ cardCSCResultCode: '4E',
39
+ panExpiryDate: '210001',
40
+ paymentMeanBrand: 'VISA',
41
+ paymentMeanType: 'CARD',
42
+ customerIpAddress: '127.0.0.1',
43
+ maskedPan: '4100##########00',
44
+ holderAuthentRelegation: 'N',
45
+ holderAuthentStatus: '3D_ERROR',
46
+ transactionOrigin: 'INTERNET',
47
+ paymentPattern: 'ONE_SHOT'
48
+ )
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,138 @@
1
+ module Stall
2
+ module Atos
3
+ class Gateway < Stall::Payments::Gateway
4
+ register :atos
5
+
6
+ # Merchant ID
7
+ class_attribute :merchant_id
8
+ # Secret key found in the banks's download interface
9
+ class_attribute :secret_key
10
+ # Secret key version
11
+ class_attribute :key_version
12
+ self.key_version = '1'
13
+
14
+ # Test payment URL to send payment form to, provided by the bank
15
+ class_attribute :test_payment_url
16
+ # Production payment URL to send payment form to, provided by the bank
17
+ class_attribute :payment_url
18
+
19
+ # Interface version of the Atos / SIPS API
20
+ class_attribute :interface_version
21
+ self.interface_version = 'HP_2.9'
22
+
23
+ # Test or production mode, default to false, changes the payment
24
+ # gateway target URL
25
+ class_attribute :test_mode
26
+ self.test_mode = !Rails.env.production?
27
+
28
+ def self.request(cart)
29
+ Request.new(cart)
30
+ end
31
+
32
+ def self.response(request)
33
+ Response.new(request)
34
+ end
35
+
36
+ def self.fake_payment_notification_for(cart)
37
+ Stall::Atos::FakeGatewayPaymentNotification.new(cart)
38
+ end
39
+
40
+ def target_url
41
+ test_mode ? test_payment_url : payment_url
42
+ end
43
+
44
+ # The gateway interface only provides one return URL, so we use the
45
+ # payment notification state to determine wether to forward the customer
46
+ # to the next checkout step or not.
47
+ #
48
+ def synchronous_payment_notification?
49
+ true
50
+ end
51
+
52
+ private
53
+
54
+ # Override the transaction id methods, since the Atos gateway only
55
+ # authorize numbers
56
+ def next_transaction_id
57
+ if (last_transaction = Payment.order("data->>'transaction_id' DESC").select(:data).first)
58
+ if (id = last_transaction.transaction_id)
59
+ index = id[-5..-1].to_i + 1
60
+ return transaction_id_for(index)
61
+ end
62
+ end
63
+
64
+ transaction_id_for(1)
65
+ end
66
+
67
+ def transaction_id_for(index)
68
+ super.gsub(/-/, '')
69
+ end
70
+
71
+ def transaction_id_format
72
+ '%{cart_id}%{transaction_index}'
73
+ end
74
+
75
+ class Request
76
+ attr_reader :cart
77
+
78
+ delegate :currency, to: :cart, allow_nil: true
79
+
80
+ def initialize(cart)
81
+ @cart = cart
82
+ end
83
+
84
+ def payment_form_partial_path
85
+ 'stall/atos/payment_form'
86
+ end
87
+
88
+ def params
89
+ @params ||= Stall::Atos::PaymentParams.new(gateway)
90
+ end
91
+
92
+ def gateway
93
+ @gateway = Stall::Atos::Gateway.new(cart)
94
+ end
95
+ end
96
+
97
+ class Response
98
+ attr_reader :request
99
+
100
+ def initialize(request)
101
+ @request = request
102
+ end
103
+
104
+ def rendering_options
105
+ { nothing: true }
106
+ end
107
+
108
+ def success?
109
+ response.success?
110
+ end
111
+
112
+ def notify
113
+ cart.payment.pay! if success?
114
+ end
115
+
116
+ def valid?
117
+ response.valid?
118
+ end
119
+
120
+ def cart
121
+ @cart ||= Cart.find_by_payment_transaction_id(response.transaction_id)
122
+ end
123
+
124
+ def gateway
125
+ @gateway = Stall::Atos::Gateway
126
+ end
127
+
128
+ private
129
+
130
+ def response
131
+ @response ||= Stall::Atos::PaymentResponse.new(
132
+ gateway, Rack::Utils.parse_nested_query(request.raw_post)
133
+ )
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
@@ -0,0 +1,52 @@
1
+ require 'digest'
2
+
3
+ module Stall
4
+ module Atos
5
+ class PaymentParams
6
+ attr_reader :gateway
7
+
8
+ delegate :cart, :target_url, :interface_version, to: :gateway
9
+
10
+ def initialize(gateway)
11
+ @gateway = gateway
12
+ end
13
+
14
+ def data
15
+ @data ||= self.class.serialize(
16
+ amount: cart.total_price.cents,
17
+ currencyCode: cart.currency.iso_numeric,
18
+ merchantId: gateway.merchant_id,
19
+ transactionReference: gateway.transaction_id(refresh: true),
20
+ keyVersion: gateway.key_version,
21
+ automaticResponseUrl: gateway.payment_urls.payment_notification_url,
22
+ normalReturnUrl: gateway.payment_urls.payment_success_return_url
23
+ )
24
+ end
25
+
26
+ def seal
27
+ @seal ||= self.class.calculate_seal_for(data)
28
+ end
29
+
30
+ private
31
+
32
+ # Transforms the provided hash to the following Atos accepted format :
33
+ #
34
+ # key1=value1|key2=value2|...|keyN=valueN
35
+ #
36
+ def self.serialize(hash)
37
+ hash.map { |item| item.map(&:to_s).join('=') }.join('|')
38
+ end
39
+
40
+ def self.unserialize(string)
41
+ string.split('|').each_with_object({}.with_indifferent_access) do |str, hash|
42
+ key, value = str.split('=')
43
+ hash[key] = value
44
+ end
45
+ end
46
+
47
+ def self.calculate_seal_for(data)
48
+ Digest::SHA256.hexdigest([data, Stall::Atos::Gateway.secret_key].join)
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,88 @@
1
+ # This object handles the internal processing of Atos payment gateway response,
2
+ # handling params parsing, request origin verification, success tracking and
3
+ # other data extracting tasks
4
+ #
5
+ module Stall
6
+ module Atos
7
+ class PaymentResponse
8
+ attr_reader :gateway, :params
9
+
10
+ def initialize(gateway, params)
11
+ @gateway = gateway
12
+ @params = params
13
+ end
14
+
15
+ def transaction_id
16
+ data['transactionReference']
17
+ end
18
+
19
+ def success?
20
+ data['responseCode'] == '00'
21
+ end
22
+
23
+ # Ensure the response comes from the Gateway by casting the seal from the
24
+ # provided key-value string data and the secret key
25
+ #
26
+ def valid?
27
+ params['Seal'] == Stall::Atos::PaymentParams.calculate_seal_for(params['Data'])
28
+ end
29
+
30
+ def data
31
+ @data ||= Stall::Atos::PaymentParams.unserialize(params['Data'])
32
+ end
33
+
34
+ private
35
+
36
+ # Response code that can be sent from the ATOS gateway. They're not used
37
+ # for now and here just for reference, but could be used some day to
38
+ # implement a way to bubble payment processing errors to the end user.
39
+ #
40
+ def response_code_messages
41
+ @response_code_messages ||= {
42
+ '00' => %(Transaction approuvée ou traitée avec succès),
43
+ '02' => %(Contactez l'émetteur du moyen de paiement),
44
+ '03' => %(Accepteur invalide),
45
+ '04' => %(Conservez le support du moyen de paiement),
46
+ '05' => %(Ne pas honorer),
47
+ '07' => %(Conservez le support du moyen de paiement, conditions spéciales),
48
+ '08' => %(Approuvez après l'identification),
49
+ '12' => %(Transaction invalide),
50
+ '13' => %(Montant invalide),
51
+ '14' => %(Coordonnées du moyen de paiement invalides),
52
+ '15' => %(Émetteur du moyen de paiement inconnu),
53
+ '17' => %(Paiement interrompu par l'acheteur),
54
+ '24' => %(Opération impossible),
55
+ '25' => %(Transaction inconnue),
56
+ '30' => %(Érreur de format),
57
+ '31' => %(Id de l'organisation d'acquisition inconnu),
58
+ '33' => %(Moyen de paiement expiré),
59
+ '34' => %(Suspicion de fraude),
60
+ '40' => %(Fonction non supportée),
61
+ '41' => %(Moyen de paiement perdu),
62
+ '43' => %(Moyen de paiement volé),
63
+ '51' => %(Provision insuffisante ou crédit dépassé),
64
+ '54' => %(Moyen de paiement expiré),
65
+ '56' => %(Moyen de paiement manquant dans le fichier),
66
+ '57' => %(Transaction non autorisée pour ce porteur),
67
+ '58' => %(Transaction interdite au terminal),
68
+ '59' => %(Suspicion de fraude),
69
+ '60' => %(L'accepteur du moyen de paiement doit contacter l'acquéreur),
70
+ '61' => %(Éxcède le maximum autorisé),
71
+ '62' => %(Transaction en attente de confirmation de paiement),
72
+ '63' => %(Règles de sécurité non respectées),
73
+ '65' => %(Nombre de transactions du jour dépassé),
74
+ '68' => %(Réponse non parvenue ou reçue trop tard),
75
+ '75' => %(Nombre de tentatives de saisie des coordonnées du moyen de paiement dépassé 87 Terminal inconnu),
76
+ '90' => %(Arrêt momentané du système),
77
+ '91' => %(Émetteur du moyen de paiement inaccessible),
78
+ '92' => %(La transaction ne contient pas les informations suffisantes pour être redirigées vers l'organisme d'autorisation),
79
+ '94' => %(Transaction dupliquée),
80
+ '96' => %(Mauvais fonctionnement du système),
81
+ '97' => %(Requête expirée: transaction refusée),
82
+ '98' => %(Serveur inaccessible),
83
+ '99' => %(Incident technique)
84
+ }
85
+ end
86
+ end
87
+ end
88
+ end
@@ -0,0 +1,5 @@
1
+ module Stall
2
+ module Atos
3
+ VERSION = "0.1.1"
4
+ end
5
+ end
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'stall/atos/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = 'stall-atos'
8
+ spec.version = Stall::Atos::VERSION
9
+ spec.authors = ['vala']
10
+ spec.email = ['vala@glyph.fr']
11
+
12
+ spec.summary = %q{Stall e-commerce CM-CIC payment gateway integration}
13
+ spec.description = %q{Allows easy CM-CIC gateway integration in a Stall e-commerce app}
14
+ spec.homepage = 'https://github.com/rails-stall/stall-atos'
15
+ spec.license = 'MIT'
16
+
17
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
18
+ spec.bindir = 'exe'
19
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
+ spec.require_paths = ['lib']
21
+
22
+ spec.add_dependency 'stall', '~> 0.1'
23
+
24
+ spec.add_development_dependency 'bundler', '~> 1.11'
25
+ spec.add_development_dependency 'rake', '~> 10.0'
26
+ spec.add_development_dependency 'rspec', '~> 3.0'
27
+ end
metadata ADDED
@@ -0,0 +1,120 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: stall-atos
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - vala
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-11-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: stall
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '1.11'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '1.11'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.0'
69
+ description: Allows easy CM-CIC gateway integration in a Stall e-commerce app
70
+ email:
71
+ - vala@glyph.fr
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - ".rspec"
78
+ - ".travis.yml"
79
+ - Gemfile
80
+ - LICENSE.txt
81
+ - README.md
82
+ - Rakefile
83
+ - app/views/stall/atos/_payment_form.html.haml
84
+ - bin/console
85
+ - bin/setup
86
+ - lib/generators/stall/atos/install/install_generator.rb
87
+ - lib/generators/stall/atos/install/templates/config.rb
88
+ - lib/stall/atos.rb
89
+ - lib/stall/atos/engine.rb
90
+ - lib/stall/atos/fake_gateway_payment_notification.rb
91
+ - lib/stall/atos/gateway.rb
92
+ - lib/stall/atos/payment_params.rb
93
+ - lib/stall/atos/payment_response.rb
94
+ - lib/stall/atos/version.rb
95
+ - stall-atos.gemspec
96
+ homepage: https://github.com/rails-stall/stall-atos
97
+ licenses:
98
+ - MIT
99
+ metadata: {}
100
+ post_install_message:
101
+ rdoc_options: []
102
+ require_paths:
103
+ - lib
104
+ required_ruby_version: !ruby/object:Gem::Requirement
105
+ requirements:
106
+ - - ">="
107
+ - !ruby/object:Gem::Version
108
+ version: '0'
109
+ required_rubygems_version: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '0'
114
+ requirements: []
115
+ rubyforge_project:
116
+ rubygems_version: 2.5.1
117
+ signing_key:
118
+ specification_version: 4
119
+ summary: Stall e-commerce CM-CIC payment gateway integration
120
+ test_files: []