ideal-payment 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 791dece43bd2a6262423bf51dbfc2309f0e57c7a
4
+ data.tar.gz: 855f6ac01553de8843419729bb5fca4389bff89e
5
+ SHA512:
6
+ metadata.gz: cb7da22944b39e4328dbef573fb0d61fe3d876959aeae4dd31e91daad9c97b7811fbf144262151c22633dbc55a3a1096fd81b83083f4af86b9f17b204756bd49
7
+ data.tar.gz: f2535f1fb276fb7a6f488dcf354d371d55dfad52479e263caf5d8e0fdcae82c3f0494aa655c640811cd92c758f5feeceea6d365954dc3d79f5e0f25899fe7f89
@@ -0,0 +1,36 @@
1
+ *.gem
2
+ *.rbc
3
+ /.config
4
+ /coverage/
5
+ /InstalledFiles
6
+ /pkg/
7
+ /spec/reports/
8
+ /test/tmp/
9
+ /test/version_tmp/
10
+ /tmp/
11
+
12
+ ## Specific to RubyMotion:
13
+ .dat*
14
+ .repl_history
15
+ build/
16
+
17
+ ## Documentation cache and generated files:
18
+ /.yardoc/
19
+ /_yardoc/
20
+ /doc/
21
+ /rdoc/
22
+
23
+ ## Environment normalisation:
24
+ /.bundle/
25
+ /lib/bundler/man/
26
+
27
+ # for a library or gem, you might want to ignore these files since the code is
28
+ # intended to run in multiple environments; otherwise, check them in:
29
+ # Gemfile.lock
30
+ # .ruby-version
31
+ # .ruby-gemset
32
+
33
+ # unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
34
+ .rvmrc
35
+
36
+ .vagrant/
@@ -0,0 +1,14 @@
1
+ language: ruby
2
+ cache: bundler
3
+ rvm:
4
+ - 2.1.2
5
+ - 2.1.0
6
+ - 2.0.0
7
+ script: bundle exec rspec spec/spec.rb spec/remote_spec.rb
8
+ notifications:
9
+ email: false
10
+ hipchat:
11
+ rooms:
12
+ secure: Ux4YUNvJarbFRjJ3wMUHYhgRkDNzZP1s7Tc5eccf9DYkbZyodgFN4etcDwm5DdIEQbD9ORpsjfcr08D7Ggn7zEw8Ka+RcuE2IH3Ym8dkEHKEfxdJ0sw2FboJwiFeb184UZNFIbREygnzsr/9KvTN+oCgFiB1y7kDZRhX5CFBsUg=
13
+ template:
14
+ - '%{repository}#%{build_number} (%{branch} - %{commit} - %{commit_message} : %{author}): %{message}'
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'rake'
4
+ gem 'xmldsig'
5
+ gem 'coveralls', require: false
6
+
7
+ gemspec
@@ -0,0 +1,67 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ideal-payment (1.0.2)
5
+ nap
6
+ nokogiri
7
+ xmldsig
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ coveralls (0.7.1)
13
+ multi_json (~> 1.3)
14
+ rest-client
15
+ simplecov (>= 0.7)
16
+ term-ansicolor
17
+ thor
18
+ diff-lcs (1.2.5)
19
+ docile (1.1.5)
20
+ metaclass (0.0.4)
21
+ mime-types (2.4.1)
22
+ mini_portile (0.6.0)
23
+ mocha (1.1.0)
24
+ metaclass (~> 0.0.1)
25
+ multi_json (1.10.1)
26
+ nap (0.8.0)
27
+ netrc (0.7.7)
28
+ nokogiri (1.6.3.1)
29
+ mini_portile (= 0.6.0)
30
+ rake (10.3.2)
31
+ rest-client (1.7.2)
32
+ mime-types (>= 1.16, < 3.0)
33
+ netrc (~> 0.7)
34
+ rspec (3.1.0)
35
+ rspec-core (~> 3.1.0)
36
+ rspec-expectations (~> 3.1.0)
37
+ rspec-mocks (~> 3.1.0)
38
+ rspec-core (3.1.5)
39
+ rspec-support (~> 3.1.0)
40
+ rspec-expectations (3.1.2)
41
+ diff-lcs (>= 1.2.0, < 2.0)
42
+ rspec-support (~> 3.1.0)
43
+ rspec-mocks (3.1.2)
44
+ rspec-support (~> 3.1.0)
45
+ rspec-support (3.1.1)
46
+ simplecov (0.9.1)
47
+ docile (~> 1.1.0)
48
+ multi_json (~> 1.0)
49
+ simplecov-html (~> 0.8.0)
50
+ simplecov-html (0.8.0)
51
+ term-ansicolor (1.3.0)
52
+ tins (~> 1.0)
53
+ thor (0.19.1)
54
+ tins (1.3.3)
55
+ xmldsig (0.2.5)
56
+ nokogiri
57
+
58
+ PLATFORMS
59
+ ruby
60
+
61
+ DEPENDENCIES
62
+ coveralls
63
+ ideal-payment!
64
+ mocha
65
+ rake
66
+ rspec
67
+ xmldsig
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2014 inventid
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 all
13
+ 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 THE
21
+ SOFTWARE.
@@ -0,0 +1,148 @@
1
+ [![inventid logo](https://s3-eu-west-1.amazonaws.com/static-inventid-nl/content/img/logo.png)](http://opensource.inventid.nl)
2
+
3
+ [![Gem Version](https://badge.fury.io/rb/ideal-payment.svg)](http://badge.fury.io/rb/ideal-payment)
4
+
5
+ # Ideal
6
+ | Branch | Build status | Code coverage |
7
+ |---|---|---|
8
+ | Master |[![Build Status](https://travis-ci.org/inventid/ideal.svg?branch=master)](https://travis-ci.org/inventid/ideal)|[![Coverage Status](http://img.shields.io/coveralls/inventid/ideal/master.svg)](https://coveralls.io/r/inventid/ideal?branch=master)|
9
+ | Develop |[![Build Status](https://travis-ci.org/inventid/ideal.svg?branch=develop)](https://travis-ci.org/inventid/ideal)|[![Coverage Status](http://img.shields.io/coveralls/inventid/ideal/develop.svg)](https://coveralls.io/r/inventid/ideal?branch=develop)|
10
+
11
+ ## What is it?
12
+
13
+ Ideal is a simple Ruby 2.1 compliant gateway to contact any banks using the Dutch iDeal protocol.
14
+ Since there was no decent one available, we decided to develop our own.
15
+ And now you can use it too!
16
+
17
+ ## How to use it?
18
+
19
+ Using it is quite simple, you can simply clone the code and then require it (_we plan to release a gem later_).
20
+
21
+ ### Preparing certificates
22
+
23
+ iDeal requires client certificates.
24
+ You have to generate these yourself (or buy one from a Certificate Authority, but that's just wasting money in this case).
25
+ Additionally you need the certificate from your acquirer, which is supplied through their dashboard.
26
+
27
+ The following code generates the certificate and key.
28
+ Replace _PASSWORD_ with your actual password.
29
+
30
+ ````bash
31
+ openssl genrsa -aes128 -out private.key -passout pass:PASSWORD 2048
32
+ openssl req -x509 -new -key private.key -passin pass:PASSWORD -days 1825 -out certificate.cer
33
+ ````
34
+
35
+ ### Using a fixture
36
+
37
+ Fixtures are a great way not to have all these constants in your code, a server administrator may even override them with tools as Puppet.
38
+
39
+ The fixture is equal to the one in the test.
40
+
41
+ ````yaml
42
+ default:
43
+ acquirer: rabobank
44
+ merchant_id: '002054205'
45
+ passphrase: wachtwoord
46
+ private_key_file: ../certs/bestandsnaam.key
47
+ private_certificate_file: ../certs/bestandsnaam.cer
48
+ ideal_certificate_file: ../certs/ideal.cer
49
+ ````
50
+
51
+ which can be later loaded with the following code
52
+
53
+ ````ruby
54
+ file = File.join(File.dirname(__FILE__), 'fixtures.yml')
55
+ fixtures ||= YAML.load(File.read(file))
56
+ fixture = fixtures[key] || raise(StandardError, "No fixture data was found for key '#{key}'")
57
+ if passphrase = fixture.delete('passphrase')
58
+ Ideal::Gateway.passphrase = passphrase
59
+ end
60
+ fixture.each { |key, value| Ideal::Gateway.send("#{key}=", value) }
61
+ ````
62
+
63
+ ### Not using a fixture
64
+
65
+ Well, also an option.
66
+ Codewise it might even be a bit cleaner :wink: although deployment is harder
67
+
68
+ ````ruby
69
+ # Other banks preloaded are :abnamro and :rabobank
70
+ Ideal::Gateway.acquirer = :ing
71
+ Ideal::Gateway.merchant_id = '00123456789'
72
+
73
+ # Maybe you'd like another location
74
+ ideal_directory = Rails.root + 'config/ideal'
75
+ Ideal::Gateway.passphrase = 'the_passphrase'
76
+ Ideal::Gateway.private_key_file = ideal_directory + 'private_key.pem'
77
+ Ideal::Gateway.private_certificate_file = ideal_directory + 'private_certificate.cer'
78
+ Ideal::Gateway.ideal_certificate_file = ideal_directory + 'ideal.cer'
79
+ ````
80
+
81
+ ### Getting a list of issuers
82
+
83
+ This does the explicit call to your acquirer.
84
+ Since the list of issuers hardly ever changes, you could better (performance-wise) cache the result for 48 hours.
85
+
86
+ ````ruby
87
+ Ideal::Gateway.new.issuers.list
88
+ ````
89
+
90
+ ### Requesting a payment
91
+
92
+ For this we need to send a Transaction Request to our acquirer with the following code
93
+
94
+ ````ruby
95
+ attributes = {
96
+ # The customer has 30 minutes to complete the iDeal transaction (ISO 8601)
97
+ :expiration_period => "PT30M",
98
+ :issuer_id => issuer_id,
99
+ :return_url => return_url,
100
+ :order_id => '14',
101
+ :description => 'Probably awesomeness',
102
+ :entrance_code => 'secretCode'
103
+ }
104
+ response = ideal.setup_purchase(5.00 , ideal_attributes)
105
+ if response.success?
106
+ # Save the data, then redirect
107
+ redirect_to response.service_url
108
+ else
109
+ # Log something
110
+ end
111
+ ````
112
+
113
+ ### Requesting the payment status
114
+
115
+ The merchant has the obligation to request a final status once the timeout has expired.
116
+
117
+ ````ruby
118
+ status = ideal.capture(transaction_id)
119
+ if status.success?
120
+ # Save the data as paid
121
+ end
122
+ ````
123
+
124
+ ## How to suggest improvements?
125
+
126
+ We are still actively developing Ideal for our internal use, but we would already love to hear your feedback. In case you have some great ideas, you may just [open an issue](https://github.com/inventid/ideal/issues/new). Be sure to check beforehand whether the same issue does not already exist.
127
+
128
+ ## How can I contribute?
129
+
130
+ We feel contributions from the community are extremely worthwhile. If you use Ideal in production and make some modification, please share it back to the community. You can simply [fork the repository](https://github.com/inventid/ideal/fork), commit your changes to your code and create a pull request back to this repository.
131
+
132
+ If there are any issues related to your changes, be sure to reference to those. Additionally we use the `develop` branch, so create a pull request to that branch and not to `master`.
133
+
134
+ Additionally we always use [vagrant](http://www.vagrantup.com) for our development. To do the same, you can do the following:
135
+
136
+ 1. Make sure to have [vagrant](http://www.vagrantup.com) installed.
137
+ 1. Clone the repository
138
+ 1. Open a terminal / shell script and nagivate to the place where you cloned the repository
139
+ 1. Simply enter `vagrant up`
140
+ 1. Provisioning takes around 5 minutes on my PC. If you want it to be faster you can use the `userConfig.json` file in the root and override the specific settings for memory and CPU.
141
+ 1. The Vagrant machine provisions and you can easily work with us. Enter `vagrant ssh` to get shell access to the machine. In case you are done with it, simply enter `vagrant destroy`. You won't lose any changes to your git repository when this happens.
142
+
143
+ ## Collaborators
144
+
145
+ We would like to thank the developers which contributed to Ideal, both big and small.
146
+
147
+ - [rogierslag](https://github.com/rogierslag) (Lead developer of Ideal @ [inventid](https://www.inventid.nl))
148
+ - [joostverdoorn](https://github.com/joostverdoorn) (Developer of Ideal @ [inventid](https://www.inventid.nl))
@@ -0,0 +1,35 @@
1
+ # -*- mode: ruby -*-
2
+ # vi: set ft=ruby :
3
+
4
+ require 'json'
5
+
6
+ # Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
7
+ VAGRANTFILE_API_VERSION = "2"
8
+
9
+ vagrantConfigFile = "vagrantConfig.json"
10
+
11
+ if File.exists?(vagrantConfigFile)
12
+ userConfig = JSON.parse(File.read(vagrantConfigFile))
13
+ else
14
+ userConfig = {}
15
+ end
16
+
17
+ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
18
+ config.vm.box = "trusty64"
19
+ config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
20
+ config.vm.provider :virtualbox do |vb|
21
+ vb.name = "ideal-local.inventid.net"
22
+ end
23
+
24
+ memory = userConfig["memory"] || 1024
25
+ cpus = userConfig["cpus"] || 1
26
+
27
+ config.vm.provider :virtualbox do |vb|
28
+ vb.customize ["modifyvm", :id, "--memory", memory, "--cpus", cpus]
29
+ end
30
+
31
+
32
+ config.vm.hostname = "ideal-local.inventid.net"
33
+ config.vm.provision :shell, :path => "provision.sh"
34
+
35
+ end
@@ -0,0 +1,25 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIEHzCCAwegAwIBAgIJAL7sbjWexzOlMA0GCSqGSIb3DQEBCwUAMIGlMQswCQYD
3
+ VQQGEwJOTDEVMBMGA1UECAwMWnVpZC1Ib2xsYW5kMQ4wDAYDVQQHDAVEZWxmdDER
4
+ MA8GA1UECgwIaW52ZW50aWQxCzAJBgNVBAsMAklUMSwwKgYDVQQDDCNpZGVhbC5y
5
+ YWJvYmFuay5wYXltZW50LmludmVudGlkLm5ldDEhMB8GCSqGSIb3DQEJARYScm9n
6
+ aWVyQGludmVudGlkLm5sMB4XDTE0MDgxNDE5MzUwOFoXDTE5MDgxMzE5MzUwOFow
7
+ gaUxCzAJBgNVBAYTAk5MMRUwEwYDVQQIDAxadWlkLUhvbGxhbmQxDjAMBgNVBAcM
8
+ BURlbGZ0MREwDwYDVQQKDAhpbnZlbnRpZDELMAkGA1UECwwCSVQxLDAqBgNVBAMM
9
+ I2lkZWFsLnJhYm9iYW5rLnBheW1lbnQuaW52ZW50aWQubmV0MSEwHwYJKoZIhvcN
10
+ AQkBFhJyb2dpZXJAaW52ZW50aWQubmwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
11
+ ggEKAoIBAQDETnZLBHrOq9g1GRefyhB1Ap2gn4YUvgM8N5KAB1i/VWUiZUIQB4pC
12
+ V3N+WAKQ1uXDVW15jwa+Tik1zRsjm2sTgFnB7fKhx+QKj113L7JegtfM9JUul1YI
13
+ 0YNtidpYPZHqe4qfS7Hf6iG9Louzn6Hpsow6WRIJcj2rzF39dbJWStqjlKrKZ4Hv
14
+ dC2CMfKNqCddiXzfUPPNsMvqshRJ/au5zyBiPVVr944TQpbi/soM79JHd8CNZBnN
15
+ JrmS7NqwyDr8fbC72S4PPJ+xWBbXaClXSBC5sR38Hxy2OYca57mWE8d8fkiTcHtg
16
+ scZfpSNXDOxFVZHjcVYcOaTbpoJX5JDtAgMBAAGjUDBOMB0GA1UdDgQWBBQhbbgu
17
+ 1XyUZAV/OXg4OZN4CfrCLTAfBgNVHSMEGDAWgBQhbbgu1XyUZAV/OXg4OZN4CfrC
18
+ LTAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQClQuGgi3ygRD83ClBR
19
+ ly0yWC807M1Orp4D35u/RBUEHzmgvzaLKfz4KBqGrnZAheZ/6TjZAcB/Tt3g6nMa
20
+ s/ICwWFvo3jQRbNsHVwwdmx3RJNFpG+5RFnZv4kZTT9XfHPZbtsxKUEF4xr21VJP
21
+ bRAZ2MIBWhhUr9fRd2ZNkUYRqsauzARKgyceMkO+STb/ZlCGvrU9NEgP8Tp7kcZk
22
+ uNiUbY+dlw5Q1+miKg+j8tXUQp237GvPvWu0s3lnRyCid6KZAzLopeqafZAs1axy
23
+ p3JWGHHXjnjTmFOyCcDLLNVZPIj8K7XW4qKSC4hETSMFE0yTw5vr39X50YN9GwwS
24
+ i37z
25
+ -----END CERTIFICATE-----
@@ -0,0 +1,30 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ Proc-Type: 4,ENCRYPTED
3
+ DEK-Info: AES-128-CBC,13741A03A0A2F5AFD56F33B9106AF9AE
4
+
5
+ EIgH374thI+coZr2xWrrCVTZt0yUNlnSUVLAmodBHMTpUi04gzst6tJ+CceTITw7
6
+ 04npFLL4w5GQlvv6lZGkf29pWIZfr1HlsPISOBJMsqOfshz/W5XIkJxFy0e3+1cj
7
+ UhPKzJaj8Gpzn92XPVGh/F819yfKF9xdeIiB5APvNXKkXGOPkwBonqeHU61h2IC9
8
+ FsCAQ4Yk4GF4W1FNAzsXDbpX4XwJA4KXLrP0AwhmUv4kgss80CxXVaLUmuqLBtWE
9
+ 8mgBG9INK+y9EAd6eJZJM8uUoHjImlvVGIb2UF7vX0C1AK/QsuCh3BSBLFKYAC0I
10
+ ImEBDztl3vElFLq6SuicuWp10HHxDxIsk1IfegnNBWEoN3KjksQB2r/Duvd8sinl
11
+ QFsNqK5UElvEiym9eRrmOyalcST/mO+EOdhI062NPnB9MEH746IG3DgnEwJMdc7+
12
+ Umixn6Ut5RVbyEk6uW42tOqaAeoWMlzhhOYB04VSWm05yZ7P3e6a+ZvImS3Iav39
13
+ eo+FptSQ75d7lO6Yl9e0E3dAobY8BPbELuwyp/Qnuw1tmM6dzN2jOn6gpHYK5KBN
14
+ Bi9T/Pkur9q5Grt9Qhr+kI9srJC7A7ZwBdF9/lyBmuoyrNQ5x1S1ZFVynjujkYbl
15
+ TSucl/jg6juLWuKHtN84yMNDJStMRthml68W5+DVE5jH0Xy99w32VuwbKBvC3USd
16
+ AfCb+qxV5K7k7w1YgW9jKosXyw5GD6SuVKjEhY7NpZ3U7skMhs6JfcP2NWFrCCGG
17
+ Dwr3mZqhvEcy44RsTvO1kmOO84Z+1SPKb1w2Lg8E825y/ZPxAsmPERjSa27Et3Cg
18
+ 14LgvT/GBMa8Hwhsm07X+9QMW4eZLLkX8En+aKKmOs3t6RDMLkb9wZqI109jY66d
19
+ FVnm1kZ6ExthcBXvq1D31EwQ3tBbkkfjxIN6Av4wJjQhrpnx4wWIBNEmD/b4hkFI
20
+ P88yv/kqaaGX0qhGjuCd3HKr5pBYz1rOtrE+rBHn1fbWN300/sfZH3bRpYW5K+0N
21
+ ePPzdzLpGLmTotcn9GgZYi4ROgMsDX4ho7OXmrNvvrET/rlQgnx4+oCfPc+D3dkq
22
+ KSfTykKjpozeUX8FR6hLo7HdfcHJLBNJwH6X0vpUYSTUcmdJ8eGPyySCzRL4TgH0
23
+ 50H+AfQ291fNl5Au+Goad5jnpAkLBaVOvRi2/AWX5BFc6j/W0AIlvYIWp3seW5F9
24
+ jJvSX5wLPewH9xwFFLJqIZUn/FHCZTW76Vdy1Q/m2bDClP1f+lHXm5w7QMxwwx2+
25
+ 9x9nIiJTgEc6KAUo/uc1P0RGKO+QFyKQXrCpvK5z6jkhGnmN3h4Wnu3NXeZ+oRON
26
+ dYayMSmIb8dYjvkuwL7TQBlVJW4/YFrLSCXKjTOJV/iKSgrSdmyNp23Vlq2+ySXs
27
+ HpETuGXu34oufANH3HKJ+Fuz6ffpra0Cy6brHJWgRvx5K11/SbIIyHjEaW+L5qRB
28
+ PW2YTdbXhzowu/bTrrHA7dYwI+VFNAkelfhrs12DtbfAejxvMfBDd+GyacSRKIox
29
+ gQeUzBxPwvRhJlmnmJFRR7fp/p7q5Jrnj3mSfYZKvbfPYy9bJZC1xn4oae7cLoHI
30
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,18 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDhzCCAm8CBgE4cUAd7DANBgkqhkiG9w0BAQsFADCBhjELMAkGA1UEBhMCREUxDzANBgNVBAgT
3
+ Bkhlc3NlbjEaMBgGA1UEBxMRRnJhbmtmdXJ0IGFtIE1haW4xDTALBgNVBAoTBFJBQk8xHTAbBgNV
4
+ BAsTFE1lcmNoYW50IFhNTCBTaWduaW5nMRwwGgYDVQQDExNBdG9zIFdvcmxkbGluZSBHbWJIMB4X
5
+ DTEyMDYzMDIyMDAwMFoXDTE3MDcwMTEwMDAwMFowgYYxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIEwZI
6
+ ZXNzZW4xGjAYBgNVBAcTEUZyYW5rZnVydCBhbSBNYWluMQ0wCwYDVQQKEwRSQUJPMR0wGwYDVQQL
7
+ ExRNZXJjaGFudCBYTUwgU2lnbmluZzEcMBoGA1UEAxMTQXRvcyBXb3JsZGxpbmUgR21iSDCCASIw
8
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL+hIul8xb811QmqLg9mzkoHh+0BdnQJZCqyHyFM
9
+ eY7tkFOW8vwi13OxSMGLFzNnehjitMievsx2s5yQW/3NrjG3xLw/18PJrSIgulngs6Cjw9mmIRSn
10
+ FZp3ViZR5aEmjP3aHGxIT7MTqt/AzU6TVaOYur55WmiOFJSA15AN+Onf3U+H06y/kbZlj9+QwKxe
11
+ 6jEZnaMlfSyhct5elswqEKjencUUU6qdRmsH8nSXmyrFJstXKlZsygDBJQSWxHqNE4r6lnYmpflC
12
+ 76KMNcW1xsp58Qa8axlpZ3UjL+nVtBKw4t+R2ebQcz12N+vv/8TBJd8ckZ+YwW4Cm2fGGcc2CcEC
13
+ AwEAATANBgkqhkiG9w0BAQsFAAOCAQEAaLXoT+EezVl4YFcFTWI58Zg7C7WujRn+pTSFGN8MLFtx
14
+ MKfujLAMRh3YPVzXr2yE1kdMiMbq7IKtsKpb3PPgD3rb6YrP7zcwzDRxkXs802BgVxCPmdYrsa1i
15
+ PdJReq2VVTKoBHXSiKWowwBQFPOOc1XjFHcJ3Nq5WgssGEjk+puRW+i8GLaIv1KdwVlWLyHNArTs
16
+ W5JCcdtBhnMDz/g3/fRMu4EAnVFVmM75KNztVvgqkt+mZVuXfHfTCSv2RVFbrJvm/xrCmGk1VxDE
17
+ t4zSMdFEi98xh8DOC1oIhMf6JDImL1JyHqTljOIjBCo2uE5TFqQ/QZiOk0IC8Rb9y3lb2g==
18
+ -----END CERTIFICATE-----
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "ideal/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = %q{ideal-payment}
7
+ s.version = Ideal::VERSION
8
+ s.authors = ["Rogier Slag"]
9
+ s.description = %q{iDEALv3 payment gateway (see http://www.ideal.nl)}
10
+ s.summary = %q{iDEALv3 payment gateway}
11
+ s.email = %q{rogier@inventid.nl}
12
+ s.licenses = ['MIT']
13
+ s.homepage = %q{http://opensource.inventid.nl/ideal}
14
+
15
+ s.extra_rdoc_files = [
16
+ "LICENSE",
17
+ "README.md"
18
+ ]
19
+
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ s.require_paths = ["lib"]
24
+
25
+ s.add_dependency "nokogiri"
26
+ s.add_dependency "nap"
27
+ s.add_dependency "xmldsig"
28
+ s.add_development_dependency "mocha"
29
+ s.add_development_dependency "rspec"
30
+
31
+ end