ideal-payment 1.0.2

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,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