paybox 0.0.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.
@@ -0,0 +1,3 @@
1
+ pkg/*
2
+ *.gem
3
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
@@ -0,0 +1,72 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ paybox (0.0.1)
5
+ activemodel
6
+ activesupport
7
+ activevalidators
8
+ httparty
9
+ i18n
10
+
11
+ GEM
12
+ remote: http://rubygems.org/
13
+ specs:
14
+ activemodel (3.0.3)
15
+ activesupport (= 3.0.3)
16
+ builder (~> 2.1.2)
17
+ i18n (~> 0.4)
18
+ activerecord (3.0.3)
19
+ activemodel (= 3.0.3)
20
+ activesupport (= 3.0.3)
21
+ arel (~> 2.0.2)
22
+ tzinfo (~> 0.3.23)
23
+ activesupport (3.0.3)
24
+ activevalidators (1.2.4)
25
+ activemodel (>= 3.0.0)
26
+ activerecord (>= 3.0.0)
27
+ date_validator (= 0.5.9)
28
+ mail
29
+ arel (2.0.6)
30
+ builder (2.1.2)
31
+ crack (0.1.8)
32
+ date_validator (0.5.9)
33
+ activemodel (>= 3.0.0)
34
+ diff-lcs (1.1.2)
35
+ fakeweb (1.3.0)
36
+ httparty (0.6.1)
37
+ crack (= 0.1.8)
38
+ i18n (0.5.0)
39
+ mail (2.2.12)
40
+ activesupport (>= 2.3.6)
41
+ i18n (>= 0.4.0)
42
+ mime-types (~> 1.16)
43
+ treetop (~> 1.4.8)
44
+ mime-types (1.16)
45
+ polyglot (0.3.1)
46
+ rspec (2.2.0)
47
+ rspec-core (~> 2.2)
48
+ rspec-expectations (~> 2.2)
49
+ rspec-mocks (~> 2.2)
50
+ rspec-core (2.2.1)
51
+ rspec-expectations (2.2.0)
52
+ diff-lcs (~> 1.1.2)
53
+ rspec-mocks (2.2.0)
54
+ treetop (1.4.9)
55
+ polyglot (>= 0.3.1)
56
+ tzinfo (0.3.23)
57
+
58
+ PLATFORMS
59
+ ruby
60
+
61
+ DEPENDENCIES
62
+ activemodel
63
+ activesupport
64
+ activevalidators
65
+ bundler
66
+ fakeweb
67
+ httparty
68
+ i18n
69
+ paybox!
70
+ rspec
71
+ rspec-core
72
+ rspec-expectations
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 Franck Verrot
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,61 @@
1
+ Paybox
2
+ ======
3
+
4
+
5
+ Installation (Rails 3)
6
+ ----------------------
7
+
8
+ In your Gemfile :
9
+
10
+ gem 'paybox'
11
+
12
+
13
+ Usage
14
+ -----
15
+
16
+ response = Paybox.new(
17
+ :operation => '00057',
18
+ :amount => 1000,
19
+ :user_id => your_db_customer/suscriber_account_id,
20
+ :card_nbr => card_number_or_encrypted_alias,
21
+ :expire => card_expiration_date (mmyy),
22
+ :cvv2 => card_cvv2_code (3 digits)
23
+ )
24
+
25
+ Then you can read response like this, for instance :
26
+
27
+ response.coderesponse = '00000' # => Cool, successful request
28
+ or
29
+ response.commentaire = "PAYBOX : Numéro de porteur invalide" # => Oooops, invalid card number given
30
+
31
+ Todo
32
+ ----
33
+
34
+ Lots of improvements can be made:
35
+
36
+ * Add I18n
37
+ * Tests
38
+ * Documentation
39
+ * ...
40
+
41
+ Note on Patches/Pull Requests
42
+ -----------------------------
43
+
44
+ * Fork the project.
45
+ * Make your feature addition or bug fix.
46
+ * Add tests for it. This is important so I don't break it in a
47
+ future version unintentionally.
48
+ * Commit, do not mess with rakefile, version, or history.
49
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
50
+ * Send me a pull request. Bonus points for topic branches.
51
+
52
+
53
+ Contributors
54
+ ------------
55
+ * Guillaume Barillot, author of the initial implementation
56
+ * Franck Verrot
57
+
58
+ Copyright
59
+ ---------
60
+
61
+ Copyright (c) 2010 Franck Verrot. MIT LICENSE. See LICENSE for details.
@@ -0,0 +1,17 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
3
+ begin
4
+ require 'rspec/core/rake_task'
5
+
6
+ desc "Run specs"
7
+ RSpec::Core::RakeTask.new do |t|
8
+ t.rspec_opts = %w(-fs --color)
9
+ t.ruby_opts = %w(-w)
10
+ end
11
+
12
+ rescue LoadError
13
+ task :spec do
14
+ abort "Run `gem install rspec` to be able to run specs"
15
+ end
16
+ end
17
+ task :default => :spec
@@ -0,0 +1,15 @@
1
+ require 'active_support'
2
+ require 'active_support/all'
3
+ require 'active_model'
4
+ require 'active_model/validations'
5
+ require 'activevalidators'
6
+ require 'httparty'
7
+
8
+ module Paybox
9
+ extend ActiveSupport::Autoload
10
+ autoload :Paybox
11
+ autoload :Transaction
12
+ autoload :Configuration
13
+ autoload :Gateway
14
+ autoload :Operation
15
+ end
@@ -0,0 +1,12 @@
1
+ module Paybox
2
+ module Configuration
3
+ extend ActiveSupport::Concern
4
+
5
+ module ClassMethods
6
+ attr_accessor :site, :rang, :cle
7
+ def configure &block
8
+ yield self
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ module Paybox
2
+ module Gateway
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ include HTTParty
7
+ base_uri 'https://preprod-ppps.paybox.com'
8
+ PROCESS_PATH = '/PPPS.php'
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,26 @@
1
+ module Paybox
2
+ module Operation
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ include ActiveModel::Validations
7
+
8
+ # Payment's details
9
+ attr_accessor :operation #:operation => ":operation . The code of requested operation to be done",
10
+ attr_accessor :amount #:amount => ":amount . The amount of the transaction",
11
+ attr_accessor :user_id #:user_id => "user_id . The id of your user in your own Database",
12
+ attr_accessor :card_nbr #:card_nbr => ":card_nbr . The crypted partial card number in your Database",
13
+ attr_accessor :expire #:expire => ":expire . The expiration date of the card",
14
+ attr_accessor :cvv2 #:cvv2 => ":cvv2 . The CVV2 parameter you should have stored in your DB",
15
+ attr_accessor :numtrans #:numtrans => ":numtrans . The previous transaction number"
16
+
17
+
18
+ validates :operation, :amount, :user_id, :card_nbr, :expire, :cvv2, :presence => true
19
+ validates :card_nbr, :credit_card => { :type => :any }
20
+
21
+ # WARNING :numtrans parameter IS REQUIRED only for operations 00002, 00005, 00013, 00017, 00052, 00055
22
+ NUM_TRANS_REQUIRED_ARRAY = ['00002', '00005', '000013', '00017', '00052', '00055']
23
+ validates :numtrans, :presence => true, :if => Proc.new { |obj| NUM_TRANS_REQUIRED_ARRAY.include?(obj.operation) }
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,93 @@
1
+ module Paybox
2
+ class Paybox
3
+ include Configuration # Class-level configuration like site, rang, cle
4
+ include Gateway # Gateway technical infrastructure
5
+ include Operation # Internal validations
6
+
7
+ # Internal result when the object issues a call to Paybox
8
+ attr_accessor :transaction
9
+
10
+ def initialize(args)
11
+ args.each_pair { |k,v| send("#{k}=",v) }
12
+ end
13
+
14
+ def process
15
+ return false unless self.valid?
16
+
17
+ ##### List of all available operations ###########
18
+ # One-shot operations for customers
19
+ # ------------------------------------------------
20
+ # 00001 = Autorisation,
21
+ # 00002 = Débit,
22
+ # 00003 = Autorisation + Débit,
23
+ # 00004 = Crédit,
24
+ # 00005 = Annulation,
25
+ # 00011 = Vérification de l’existence d’une transaction,
26
+ # 00012 = Transaction sans demande d’autorisation,
27
+ # 00013 = Modification du montant d’une transaction,
28
+ # 00014 = Remboursement,
29
+ # 00017 = Consultation
30
+
31
+ # Recurring Operations on suscriber accounts
32
+ # -----------------------------------------------
33
+ # 00051 = Autorisation seule sur un abonné,
34
+ # 00052 = Débit sur un abonné,
35
+ # 00053 = Autorisation + Débit sur un abonné,
36
+ # 00054 = Crédit sur un abonné,
37
+ # 00055 = Annulation d’une opération sur un abonné,
38
+ # 00056 = Inscription nouvel abonné,
39
+ # 00057 = Modification abonné existant,
40
+ # 00058 = Suppression abonné
41
+ # 00061 = Transaction sans demande d’autorisation (forçage).
42
+
43
+ current_date = Time.now
44
+
45
+ data = {
46
+ :SITE => self.class.site,
47
+ :RANG => self.class.rang,
48
+ :CLE => self.class.cle,
49
+
50
+ :DATEQ => current_date.strftime('%d%m%Y%H%M%S'),
51
+ :NUMQUESTION => current_date.to_i,
52
+ :TYPE => self.operation,
53
+ :MONTANT => self.amount,
54
+ :REFERENCE => "test",
55
+ :REFABONNE => self.user_id,
56
+ :VERSION => '00104',
57
+ :IDENTIFIANT => '2',
58
+ :DEVISE => "978", #EURO
59
+ :PORTEUR => self.card_nbr,
60
+ :DATEVAL => self.expire,
61
+ :CVV => self.cvv2,
62
+ :ACTIVITE => "024",
63
+ :ARCHIVAGE => "Simplissime.fr",
64
+ :DIFFERE => "000",
65
+ :NUMAPPEL => "",
66
+ :NUMTRANS => self.numtrans,
67
+ :AUTORISATION => "",
68
+ :PAYS => "FR"
69
+ }
70
+
71
+ response = self.class.post(PROCESS_PATH, :body => data)
72
+
73
+ # Now we've got a response, let's parse it
74
+ self.transaction = Transaction.new.tap do |trans|
75
+ response.body.split('&').each do |parameter|
76
+ parameter.strip!
77
+ key = parameter.split('=').first
78
+ value = Iconv.conv('utf-8', 'ISO-8859-1', parameter.split('=').last)
79
+
80
+ begin
81
+ #Transforms an attribute FIELD-BLAH into fieldblah
82
+ trans.send("#{key.downcase.tr('-','')}=", value)
83
+ rescue
84
+ warn "The gem doesnt know about the resulting field #{key}"
85
+ warn "Fill-in a ticket if you think this is not expected"
86
+ return false
87
+ end
88
+ end
89
+ end
90
+ true
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,20 @@
1
+ module Paybox
2
+ class Transaction
3
+ attr_accessor :numtrans #'NUMTRANS' #Numéro de la transaction créée (int (10))
4
+ attr_accessor :numappel #'NUMAPPEL' # Numéro de la requête gérée sur Paybox (int (10))
5
+ attr_accessor :numquestion #'NUMQUESTION' # Identifiant unique et sequentiel (un timestamp sur 10 chiffres )
6
+ attr_accessor :site #'SITE' # Numéro d'adhérent fourni par la banque (int (7))
7
+ attr_accessor :rang #'RANG' # Numéro de rang fourni par la banque du commerçant (int (2))
8
+ attr_accessor :identifiant #'IDENTIFIANT' # Champ vide (int (10))
9
+ attr_accessor :autorisation #'AUTORISATION' # Numéro d'autorisation délivré par le centre d'autorisation de la banque du commerçant si le paiement est accepté (varchar (10))
10
+ attr_accessor :codereponse #'CODEREPONSE' # Code réponse concernant l'état de la réponse traité, opération acceptée ou refusée (varchar (10))
11
+ attr_accessor :refabonne #'REFABONNE' # Numéro d'abonné (user) contenu dans la trame question (varchar (250))
12
+ attr_accessor :porteur #'PORTEUR' # Numéro porteur partiel (n° carte crypté), Identique à la trame question (varchar (19))
13
+ attr_accessor :commentaire #'COMMENTAIRE' # Messages divers pour information (varchar(100))
14
+ attr_accessor :pays #'PAYS' # Code Pays du porteur de la carte (format ISO 3166)
15
+ attr_accessor :typecarte #'TYPECARTE' # Type de carte utilisé (varchar(10))
16
+ attr_accessor :sha1 #'SHA-1' # Empreinte SHA-1 de la carte utilisée
17
+ attr_accessor :status #'STATUS' # Etat de la transaction, retourné uniquement avec une question type 17 (=consultation) (varchar (16))
18
+ attr_accessor :remise #'REMISE' # Identifiant Paybox de la remise collectée (uniquement en consultation type 17), (int (9))
19
+ end
20
+ end
@@ -0,0 +1,3 @@
1
+ module Paybox
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "paybox/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "paybox"
7
+ s.version = Paybox::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Franck Verrot","Guillaume Barillot"]
10
+ s.email = ["franck@verrot.fr"]
11
+ s.homepage = "http://www.verrot.fr"
12
+ s.summary = %q{Payment Gateway to Paybox's services}
13
+ s.description = %q{Payment Gateway to Paybox's services}
14
+
15
+ s.rubyforge_project = "paybox"
16
+
17
+ s.add_dependency 'activesupport'
18
+ s.add_dependency 'activemodel'
19
+ s.add_dependency 'i18n'
20
+ s.add_dependency 'httparty'
21
+ s.add_dependency 'activevalidators'
22
+
23
+ s.add_development_dependency 'bundler'
24
+ s.add_development_dependency 'rspec'
25
+ s.add_development_dependency 'rspec-core'
26
+ s.add_development_dependency 'rspec-expectations'
27
+ s.add_development_dependency 'fakeweb'
28
+
29
+ s.files = `git ls-files`.split("\n")
30
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
31
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
32
+ s.require_paths = ["lib"]
33
+ end
@@ -0,0 +1,16 @@
1
+ NUMTRANS=
2
+ &NUMAPPEL=
3
+ &NUMQUESTION=
4
+ &SITE=
5
+ &RANG=
6
+ &IDENTIFIANT=
7
+ &AUTORISATION=
8
+ &CODEREPONSE=00000
9
+ &REFABONNE=
10
+ &PORTEUR=
11
+ &COMMENTAIRE=
12
+ &PAYS=
13
+ &TYPECARTE=
14
+ &SHA-1=
15
+ &STATUS=
16
+ &REMISE=
@@ -0,0 +1,38 @@
1
+ require File.join(File.dirname(__FILE__), 'spec_helper.rb')
2
+
3
+ TEST_DATA = {
4
+ :user_id => 1,
5
+ :card_nbr => '4111 1111 1111 1111',
6
+ :expire => '1012',
7
+ :cvv2 => '123'
8
+ }
9
+
10
+ describe "Paybox" do
11
+ before(:each) do
12
+ Paybox::Paybox.configure do |configuration|
13
+ configuration.site = '1999888'
14
+ configuration.rang = '99'
15
+ configuration.cle = '1999888I'
16
+ end
17
+ end
18
+
19
+ it "can be configured" do
20
+ Paybox::Paybox.site.should == '1999888'
21
+ Paybox::Paybox.rang.should == '99'
22
+ Paybox::Paybox.cle.should == '1999888I'
23
+ end
24
+
25
+ it "initializes itself and post the data to the GW" do
26
+ paybox = Paybox::Paybox.new(
27
+ :operation => '00057',
28
+ :amount => 1000,
29
+ :user_id => TEST_DATA[:user_id],
30
+ :card_nbr => TEST_DATA[:card_nbr],
31
+ :expire => TEST_DATA[:expire],
32
+ :cvv2 => TEST_DATA[:cvv2]
33
+ )
34
+
35
+ paybox.process.should be(true)
36
+ paybox.transaction.codereponse.should == '00000' #=> Cool, successful request
37
+ end
38
+ end
@@ -0,0 +1,14 @@
1
+ require 'fakeweb'
2
+ require 'paybox'
3
+
4
+ RSpec.configure do |config|
5
+ FakeWeb.allow_net_connect = false
6
+
7
+ config.before :all do
8
+ FakeWeb.register_uri(
9
+ :post,
10
+ 'https://preprod-ppps.paybox.com/PPPS.php',
11
+ :body => File.read(File.join(File.dirname(__FILE__), 'fixtures', 'PPPS.php'))
12
+ )
13
+ end
14
+ end
metadata ADDED
@@ -0,0 +1,213 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: paybox
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Franck Verrot
13
+ - Guillaume Barillot
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-12-12 00:00:00 +01:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: activesupport
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ segments:
30
+ - 0
31
+ version: "0"
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: activemodel
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">="
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 0
44
+ version: "0"
45
+ type: :runtime
46
+ version_requirements: *id002
47
+ - !ruby/object:Gem::Dependency
48
+ name: i18n
49
+ prerelease: false
50
+ requirement: &id003 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ version: "0"
58
+ type: :runtime
59
+ version_requirements: *id003
60
+ - !ruby/object:Gem::Dependency
61
+ name: httparty
62
+ prerelease: false
63
+ requirement: &id004 !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ segments:
69
+ - 0
70
+ version: "0"
71
+ type: :runtime
72
+ version_requirements: *id004
73
+ - !ruby/object:Gem::Dependency
74
+ name: activevalidators
75
+ prerelease: false
76
+ requirement: &id005 !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ segments:
82
+ - 0
83
+ version: "0"
84
+ type: :runtime
85
+ version_requirements: *id005
86
+ - !ruby/object:Gem::Dependency
87
+ name: bundler
88
+ prerelease: false
89
+ requirement: &id006 !ruby/object:Gem::Requirement
90
+ none: false
91
+ requirements:
92
+ - - ">="
93
+ - !ruby/object:Gem::Version
94
+ segments:
95
+ - 0
96
+ version: "0"
97
+ type: :development
98
+ version_requirements: *id006
99
+ - !ruby/object:Gem::Dependency
100
+ name: rspec
101
+ prerelease: false
102
+ requirement: &id007 !ruby/object:Gem::Requirement
103
+ none: false
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ segments:
108
+ - 0
109
+ version: "0"
110
+ type: :development
111
+ version_requirements: *id007
112
+ - !ruby/object:Gem::Dependency
113
+ name: rspec-core
114
+ prerelease: false
115
+ requirement: &id008 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ segments:
121
+ - 0
122
+ version: "0"
123
+ type: :development
124
+ version_requirements: *id008
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec-expectations
127
+ prerelease: false
128
+ requirement: &id009 !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ">="
132
+ - !ruby/object:Gem::Version
133
+ segments:
134
+ - 0
135
+ version: "0"
136
+ type: :development
137
+ version_requirements: *id009
138
+ - !ruby/object:Gem::Dependency
139
+ name: fakeweb
140
+ prerelease: false
141
+ requirement: &id010 !ruby/object:Gem::Requirement
142
+ none: false
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ segments:
147
+ - 0
148
+ version: "0"
149
+ type: :development
150
+ version_requirements: *id010
151
+ description: Payment Gateway to Paybox's services
152
+ email:
153
+ - franck@verrot.fr
154
+ executables: []
155
+
156
+ extensions: []
157
+
158
+ extra_rdoc_files: []
159
+
160
+ files:
161
+ - .gitignore
162
+ - Gemfile
163
+ - Gemfile.lock
164
+ - LICENSE
165
+ - README.md
166
+ - Rakefile
167
+ - lib/paybox.rb
168
+ - lib/paybox/configuration.rb
169
+ - lib/paybox/gateway.rb
170
+ - lib/paybox/operation.rb
171
+ - lib/paybox/paybox.rb
172
+ - lib/paybox/transaction.rb
173
+ - lib/paybox/version.rb
174
+ - paybox.gemspec
175
+ - spec/fixtures/ppps.php
176
+ - spec/paybox_spec.rb
177
+ - spec/spec_helper.rb
178
+ has_rdoc: true
179
+ homepage: http://www.verrot.fr
180
+ licenses: []
181
+
182
+ post_install_message:
183
+ rdoc_options: []
184
+
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ none: false
189
+ requirements:
190
+ - - ">="
191
+ - !ruby/object:Gem::Version
192
+ segments:
193
+ - 0
194
+ version: "0"
195
+ required_rubygems_version: !ruby/object:Gem::Requirement
196
+ none: false
197
+ requirements:
198
+ - - ">="
199
+ - !ruby/object:Gem::Version
200
+ segments:
201
+ - 0
202
+ version: "0"
203
+ requirements: []
204
+
205
+ rubyforge_project: paybox
206
+ rubygems_version: 1.3.7
207
+ signing_key:
208
+ specification_version: 3
209
+ summary: Payment Gateway to Paybox's services
210
+ test_files:
211
+ - spec/fixtures/ppps.php
212
+ - spec/paybox_spec.rb
213
+ - spec/spec_helper.rb