killbill-litle 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +36 -0
- data/.travis.yml +18 -0
- data/Gemfile +3 -0
- data/Jarfile +3 -0
- data/README.md +7 -0
- data/Rakefile +17 -0
- data/VERSION +1 -0
- data/config.ru +4 -0
- data/db/schema.rb +53 -0
- data/killbill-litle.gemspec +45 -0
- data/killbill.properties +3 -0
- data/lib/litle/api.rb +119 -0
- data/lib/litle/config/application.rb +54 -0
- data/lib/litle/config/configuration.rb +30 -0
- data/lib/litle/config/properties.rb +23 -0
- data/lib/litle/litle/gateway.rb +25 -0
- data/lib/litle/litle_utils.rb +22 -0
- data/lib/litle/models/litle_payment_method.rb +32 -0
- data/lib/litle/models/litle_response.rb +122 -0
- data/lib/litle/models/litle_transaction.rb +13 -0
- data/lib/litle/private_api.rb +34 -0
- data/lib/litle/views/paypage.erb +126 -0
- data/lib/litle.rb +27 -0
- data/pom.xml +35 -0
- data/release.sh +11 -0
- data/spec/litle/base_plugin_spec.rb +29 -0
- data/spec/litle/integration_spec.rb +85 -0
- data/spec/litle/utils_spec.rb +10 -0
- data/spec/spec_helper.rb +35 -0
- metadata +276 -0
@@ -0,0 +1,34 @@
|
|
1
|
+
module Killbill::Litle
|
2
|
+
class PrivatePaymentPlugin
|
3
|
+
include Singleton
|
4
|
+
|
5
|
+
def register_token!(kb_account_id, paypage_registration_id, options = {})
|
6
|
+
litle_response = gateway.store paypage_registration_id, options
|
7
|
+
response = save_response litle_response, :register_token
|
8
|
+
|
9
|
+
# Create the payment method (not associated to a Killbill payment method yet)
|
10
|
+
LitlePaymentMethod.create! :kb_account_id => kb_account_id, :kb_payment_method_id => nil, :litle_token => response.litle_token
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def save_response(litle_response, api_call)
|
16
|
+
logger.warn "Unsuccessful #{api_call}: #{litle_response.message}" unless litle_response.success?
|
17
|
+
|
18
|
+
# Save the response to our logs
|
19
|
+
response = LitleResponse.from_response(api_call, nil, litle_response)
|
20
|
+
response.save!
|
21
|
+
response
|
22
|
+
end
|
23
|
+
|
24
|
+
def gateway
|
25
|
+
# The gateway should have been configured when the plugin started
|
26
|
+
Killbill::Litle::Gateway.instance
|
27
|
+
end
|
28
|
+
|
29
|
+
def logger
|
30
|
+
# The logger should have been configured when the plugin started
|
31
|
+
Killbill::Litle.logger
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,126 @@
|
|
1
|
+
<!-- Inspired from the Litle official example: https://cert01.securepaypage.litle.com/checkout/dontSeeCard.html -->
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Pay Page Checkout</title>
|
5
|
+
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
|
6
|
+
<script src="<%= secure_page_url %>/LitlePayPage/litle-api.js" type="text/javascript"></script>
|
7
|
+
<script>
|
8
|
+
$(document).ready(
|
9
|
+
function() {
|
10
|
+
function setLitleResponseFields(response) {
|
11
|
+
document.getElementById('response_code').value = response.response;
|
12
|
+
document.getElementById('response_message').value = response.message;
|
13
|
+
document.getElementById('response_response_time').value = response.responseTime;
|
14
|
+
document.getElementById('response_litle_txn_id').value = response.litleTxnId;
|
15
|
+
document.getElementById('response_type').value = response.type;
|
16
|
+
}
|
17
|
+
|
18
|
+
function submitAfterLitle(response) {
|
19
|
+
setLitleResponseFields(response);
|
20
|
+
document.forms['form_checkout'].submit();
|
21
|
+
}
|
22
|
+
|
23
|
+
function timeoutOnLitle() {
|
24
|
+
alert("We are experiencing technical difficulties. Please try your query again later.");
|
25
|
+
}
|
26
|
+
|
27
|
+
function onErrorAfterLitle(response) {
|
28
|
+
setLitleResponseFields(response);
|
29
|
+
if (response.response == '871') {
|
30
|
+
alert("Invalid card number. Check and retry. (Not Mod10)");
|
31
|
+
}
|
32
|
+
else if (response.response == '872') {
|
33
|
+
alert("Invalid card number. Check and retry. (Too short)");
|
34
|
+
}
|
35
|
+
else if (response.response == '873') {
|
36
|
+
alert("Invalid card number. Check and retry. (Too long)");
|
37
|
+
}
|
38
|
+
else if (response.response == '874') {
|
39
|
+
alert("Invalid card number. Check and retry. (Not a number)");
|
40
|
+
}
|
41
|
+
else if (response.response == '875') {
|
42
|
+
alert("We are experiencing technical difficulties. Please try your query again later.");
|
43
|
+
}
|
44
|
+
else if (response.response == '876') {
|
45
|
+
alert("Invalid card number. Check and retry. (Failure from Server)");
|
46
|
+
}
|
47
|
+
else if (response.response == '880') {
|
48
|
+
alert("Invalid report group. Check and retry. (Failure from Server)");
|
49
|
+
}
|
50
|
+
else if (response.response == '889') {
|
51
|
+
alert("We are experiencing technical difficulties. Please try your query again later.");
|
52
|
+
}
|
53
|
+
return false;
|
54
|
+
}
|
55
|
+
|
56
|
+
var formFields = {
|
57
|
+
"accountNum": document.getElementById('cc_num'),
|
58
|
+
"paypageRegistrationId": document.getElementById('response_paypage_registration_id'),
|
59
|
+
"bin": document.getElementById('response_bin')
|
60
|
+
};
|
61
|
+
|
62
|
+
$("#submitId").click(
|
63
|
+
function() {
|
64
|
+
// Clear test fields
|
65
|
+
setLitleResponseFields({"response":"", "message":""});
|
66
|
+
|
67
|
+
var litleRequest = {
|
68
|
+
"paypageId": document.getElementById("request_paypage_id").value,
|
69
|
+
"reportGroup": document.getElementById("request_report_group").value,
|
70
|
+
"orderId": document.getElementById("request_order_id").value,
|
71
|
+
"id": document.getElementById("request_merchant_txn_id").value,
|
72
|
+
"url": "<%= secure_page_url %>"
|
73
|
+
};
|
74
|
+
|
75
|
+
sendToLitle(litleRequest, formFields, submitAfterLitle, onErrorAfterLitle, timeoutOnLitle, 5000);
|
76
|
+
return false;
|
77
|
+
}
|
78
|
+
);
|
79
|
+
}
|
80
|
+
);
|
81
|
+
</script>
|
82
|
+
</head>
|
83
|
+
<body>
|
84
|
+
<h2>Checkout Form</h2>
|
85
|
+
<form method="post" id="form_checkout" name="form_checkout" action="/plugins/killbill-litle/checkout">
|
86
|
+
<input type="hidden" id="kb_account_id" name="kb_account_id" value="<%= kb_account_id %>"/>
|
87
|
+
|
88
|
+
<input type="hidden" id="request_paypage_id" name="request_paypage_id" value="<%= paypage_id %>"/>
|
89
|
+
<input type="hidden" id="request_merchant_txn_id" name="request_merchant_txn_id" value="<%= merchant_txn_id %>"/>
|
90
|
+
<input type="hidden" id="request_order_id" name="request_order_id" value="<%= order_id %>"/>
|
91
|
+
<input type="hidden" id="request_report_group" name="request_report_group" value="<%= report_group %>"/>
|
92
|
+
|
93
|
+
<table>
|
94
|
+
<tr><td>First Name</td><td><input type="text" id="first_name" name="first_name" size="20" /></td></tr>
|
95
|
+
<tr><td>Last Name</td><td><input type="text" id="last_name" name="last_name" size="20" /></td></tr>
|
96
|
+
<tr><td>Credit Card</td><td><input type="text" id="cc_num" name="cc_num" size="20" /></td></tr>
|
97
|
+
<tr><td>CVV</td><td><input type="text" id="cvv" name="cvv" size="5" /></td></tr>
|
98
|
+
<tr><td>Exp Date</td><td><input type="text" id="exp_date" name="exp_date" size="5" /></td></tr>
|
99
|
+
<tr><td> </td></tr>
|
100
|
+
<tr><td></td><td align="right">
|
101
|
+
<script>
|
102
|
+
document.write('<button type="button" id="submitId" onclick="callLitle()">Check out with Pay Page</button>');
|
103
|
+
</script>
|
104
|
+
<noscript>
|
105
|
+
<button type="button" id="submitId">Enable JavaScript!</button>
|
106
|
+
</noscript>
|
107
|
+
</td></tr>
|
108
|
+
</table>
|
109
|
+
|
110
|
+
<input type="hidden" id="response_paypage_registration_id" name="response_paypage_registration_id" readOnly="true" value=""/>
|
111
|
+
<input type="hidden" id="response_bin" name="response_bin" readOnly="true"/>
|
112
|
+
<input type="hidden" id="response_code" name="response_code" readOnly="true"/>
|
113
|
+
<input type="hidden" id="response_message" name="response_message" readOnly="true"/>
|
114
|
+
<input type="hidden" id="response_response_time" name="response_response_time" readOnly="true"/>
|
115
|
+
<input type="hidden" id="response_type" name="response_type" readOnly="true"/>
|
116
|
+
<input type="hidden" id="response_litle_txn_id" name="response_litle_txn_id" readOnly="true"/>
|
117
|
+
</form>
|
118
|
+
</body>
|
119
|
+
<script>
|
120
|
+
function callLitle() {
|
121
|
+
if(typeof sendToLitle != 'function') {
|
122
|
+
alert("We are experiencing technical difficulties. Please try your query again later (API unavailable).");
|
123
|
+
}
|
124
|
+
}
|
125
|
+
</script>
|
126
|
+
</html>
|
data/lib/litle.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
require 'activemerchant'
|
3
|
+
require 'pathname'
|
4
|
+
require 'sinatra'
|
5
|
+
require 'singleton'
|
6
|
+
require 'yaml'
|
7
|
+
|
8
|
+
require 'killbill'
|
9
|
+
|
10
|
+
require 'litle/config/configuration'
|
11
|
+
require 'litle/config/properties'
|
12
|
+
|
13
|
+
require 'litle/api'
|
14
|
+
require 'litle/private_api'
|
15
|
+
|
16
|
+
require 'litle/models/litle_payment_method'
|
17
|
+
require 'litle/models/litle_response'
|
18
|
+
require 'litle/models/litle_transaction'
|
19
|
+
|
20
|
+
require 'litle/litle_utils'
|
21
|
+
require 'litle/litle/gateway'
|
22
|
+
|
23
|
+
class Object
|
24
|
+
def blank?
|
25
|
+
respond_to?(:empty?) ? empty? : !self
|
26
|
+
end
|
27
|
+
end
|
data/pom.xml
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!--
|
3
|
+
~ Copyright 2010-2013 Ning, Inc.
|
4
|
+
~
|
5
|
+
~ Ning licenses this file to you under the Apache License, version 2.0
|
6
|
+
~ (the "License"); you may not use this file except in compliance with the
|
7
|
+
~ License. You may obtain a copy of the License at:
|
8
|
+
~
|
9
|
+
~ http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
~
|
11
|
+
~ Unless required by applicable law or agreed to in writing, software
|
12
|
+
~ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
13
|
+
~ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
14
|
+
~ License for the specific language governing permissions and limitations
|
15
|
+
~ under the License.
|
16
|
+
-->
|
17
|
+
|
18
|
+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
19
|
+
<parent>
|
20
|
+
<groupId>org.sonatype.oss</groupId>
|
21
|
+
<artifactId>oss-parent</artifactId>
|
22
|
+
<version>5</version>
|
23
|
+
</parent>
|
24
|
+
<modelVersion>4.0.0</modelVersion>
|
25
|
+
<groupId>com.ning.killbill.ruby</groupId>
|
26
|
+
<artifactId>litle-plugin</artifactId>
|
27
|
+
<packaging>pom</packaging>
|
28
|
+
<version>1.0.0</version>
|
29
|
+
<name>litle-plugin</name>
|
30
|
+
<scm>
|
31
|
+
<connection>scm:git:git://github.com/killbill/killbill-litle-plugin.git</connection>
|
32
|
+
<url>https://github.com/killbill/killbill-litle-plugin/</url>
|
33
|
+
<developerConnection>scm:git:git@github.com:killbill/killbill-litle-plugin.git</developerConnection>
|
34
|
+
</scm>
|
35
|
+
</project>
|
data/release.sh
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
VERSION=`grep -E '<version>([0-9]+\.[0-9]+\.[0-9]+)</version>' pom.xml | sed 's/[\t \n]*<version>\(.*\)<\/version>[\t \n]*/\1/'`
|
2
|
+
ARTIFACT="$PWD/pkg/killbill-litle-$VERSION.tar.gz"
|
3
|
+
echo "Pushing $ARTIFACT to Maven Central"
|
4
|
+
mvn gpg:sign-and-deploy-file \
|
5
|
+
-DgroupId=com.ning.killbill.ruby \
|
6
|
+
-DartifactId=litle-plugin \
|
7
|
+
-Dversion=$VERSION \
|
8
|
+
-Dpackaging=tar.gz \
|
9
|
+
-DrepositoryId=ossrh-releases \
|
10
|
+
-Durl=https://oss.sonatype.org/service/local/staging/deploy/maven2/ \
|
11
|
+
-Dfile=$ARTIFACT
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Killbill::Litle::PaymentPlugin do
|
4
|
+
before(:each) do
|
5
|
+
Dir.mktmpdir do |dir|
|
6
|
+
file = File.new(File.join(dir, 'litle.yml'), "w+")
|
7
|
+
file.write(<<-eos)
|
8
|
+
:litle:
|
9
|
+
:merchant_id: 'merchant_id'
|
10
|
+
:password: 'password'
|
11
|
+
:database:
|
12
|
+
:adapter: 'sqlite3'
|
13
|
+
:database: 'shouldntmatter.db'
|
14
|
+
eos
|
15
|
+
file.close
|
16
|
+
|
17
|
+
@plugin = Killbill::Litle::PaymentPlugin.new
|
18
|
+
@plugin.root = File.dirname(file)
|
19
|
+
@plugin.logger = Logger.new(STDOUT)
|
20
|
+
|
21
|
+
# Start the plugin here - since the config file will be deleted
|
22
|
+
@plugin.start_plugin
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should start and stop correctly" do
|
27
|
+
@plugin.stop_plugin
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'logger'
|
3
|
+
|
4
|
+
ActiveMerchant::Billing::Base.mode = :test
|
5
|
+
|
6
|
+
describe Killbill::Litle::PaymentPlugin do
|
7
|
+
before(:each) do
|
8
|
+
@plugin = Killbill::Litle::PaymentPlugin.new
|
9
|
+
@plugin.root = File.expand_path(File.dirname(__FILE__) + '../../../')
|
10
|
+
@plugin.logger = Logger.new(STDOUT)
|
11
|
+
@plugin.start_plugin
|
12
|
+
end
|
13
|
+
|
14
|
+
after(:each) do
|
15
|
+
@plugin.stop_plugin
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should be able to create and retrieve payment methods" do
|
19
|
+
pm = create_payment_method
|
20
|
+
|
21
|
+
pms = @plugin.get_payment_methods(pm.kb_account_id)
|
22
|
+
pms.size.should == 1
|
23
|
+
pms[0].external_payment_method_id.should == pm.litle_token
|
24
|
+
|
25
|
+
pm_details = @plugin.get_payment_method_detail(pm.kb_account_id, pm.kb_payment_method_id)
|
26
|
+
pm_details.external_payment_method_id.should == pm.litle_token
|
27
|
+
|
28
|
+
@plugin.delete_payment_method(pm.kb_account_id, pm.kb_payment_method_id)
|
29
|
+
|
30
|
+
@plugin.get_payment_methods(pm.kb_account_id).size.should == 0
|
31
|
+
lambda { @plugin.get_payment_method_detail(pm.kb_account_id, pm.kb_payment_method_id) }.should raise_error RuntimeError
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should be able to charge and refund" do
|
35
|
+
pm = create_payment_method
|
36
|
+
amount_in_cents = 10000
|
37
|
+
currency = 'USD'
|
38
|
+
kb_payment_id = SecureRandom.uuid
|
39
|
+
|
40
|
+
payment_response = @plugin.process_payment pm.kb_account_id, kb_payment_id, pm.kb_payment_method_id, amount_in_cents, currency
|
41
|
+
payment_response.amount_in_cents.should == amount_in_cents
|
42
|
+
payment_response.status.should == Killbill::Plugin::PaymentStatus::SUCCESS
|
43
|
+
|
44
|
+
# Verify our table directly
|
45
|
+
response = Killbill::Litle::LitleResponse.find_by_api_call_and_kb_payment_id :charge, kb_payment_id
|
46
|
+
response.test.should be_true
|
47
|
+
response.success.should be_true
|
48
|
+
response.message.should == "Approved"
|
49
|
+
response.params_litleonelineresponse_saleresponse_order_id.should == Killbill::Litle::Utils.compact_uuid(kb_payment_id)
|
50
|
+
|
51
|
+
payment_response = @plugin.get_payment_info pm.kb_account_id, kb_payment_id
|
52
|
+
payment_response.amount_in_cents.should == amount_in_cents
|
53
|
+
payment_response.status.should == Killbill::Plugin::PaymentStatus::SUCCESS
|
54
|
+
|
55
|
+
# Check we cannot refund an amount greater than the original charge
|
56
|
+
lambda { @plugin.process_refund pm.kb_account_id, kb_payment_id, amount_in_cents + 1, currency }.should raise_error RuntimeError
|
57
|
+
|
58
|
+
refund_response = @plugin.process_refund pm.kb_account_id, kb_payment_id, amount_in_cents, currency
|
59
|
+
refund_response.amount_in_cents.should == amount_in_cents
|
60
|
+
refund_response.status.should == Killbill::Plugin::PaymentStatus::SUCCESS
|
61
|
+
|
62
|
+
# Verify our table directly
|
63
|
+
response = Killbill::Litle::LitleResponse.find_by_api_call_and_kb_payment_id :refund, kb_payment_id
|
64
|
+
response.test.should be_true
|
65
|
+
response.success.should be_true
|
66
|
+
|
67
|
+
# Make sure we can charge again the same payment method
|
68
|
+
second_amount_in_cents = 29471
|
69
|
+
second_kb_payment_id = SecureRandom.uuid
|
70
|
+
|
71
|
+
payment_response = @plugin.process_payment pm.kb_account_id, second_kb_payment_id, pm.kb_payment_method_id, second_amount_in_cents, currency
|
72
|
+
payment_response.amount_in_cents.should == second_amount_in_cents
|
73
|
+
payment_response.status.should == Killbill::Plugin::PaymentStatus::SUCCESS
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def create_payment_method
|
79
|
+
kb_account_id = SecureRandom.uuid
|
80
|
+
kb_payment_method_id = SecureRandom.uuid
|
81
|
+
# litle tokens are between 13 and 25 characters long
|
82
|
+
litle_token = "17283748291029384756"
|
83
|
+
Killbill::Litle::LitlePaymentMethod.create :kb_account_id => kb_account_id, :kb_payment_method_id => kb_payment_method_id, :litle_token => litle_token
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Killbill::Litle::Utils do
|
4
|
+
it "should convert back and forth UUIDs" do
|
5
|
+
uuid = SecureRandom.uuid
|
6
|
+
packed = Killbill::Litle::Utils.compact_uuid(uuid)
|
7
|
+
unpacked = Killbill::Litle::Utils.unpack_uuid(packed)
|
8
|
+
unpacked.should == uuid
|
9
|
+
end
|
10
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
require 'litle'
|
3
|
+
|
4
|
+
require 'logger'
|
5
|
+
|
6
|
+
require 'rspec'
|
7
|
+
|
8
|
+
RSpec.configure do |config|
|
9
|
+
config.color_enabled = true
|
10
|
+
config.tty = true
|
11
|
+
config.formatter = 'documentation'
|
12
|
+
end
|
13
|
+
|
14
|
+
require 'active_record'
|
15
|
+
ActiveRecord::Base.establish_connection(
|
16
|
+
:adapter => 'sqlite3',
|
17
|
+
:database => 'test.db'
|
18
|
+
)
|
19
|
+
# Create the schema
|
20
|
+
require File.expand_path(File.dirname(__FILE__) + '../../db/schema.rb')
|
21
|
+
|
22
|
+
begin
|
23
|
+
require 'securerandom'
|
24
|
+
SecureRandom.uuid
|
25
|
+
rescue LoadError, NoMethodError
|
26
|
+
# See http://jira.codehaus.org/browse/JRUBY-6176
|
27
|
+
module SecureRandom
|
28
|
+
def self.uuid
|
29
|
+
ary = self.random_bytes(16).unpack("NnnnnN")
|
30
|
+
ary[2] = (ary[2] & 0x0fff) | 0x4000
|
31
|
+
ary[3] = (ary[3] & 0x3fff) | 0x8000
|
32
|
+
"%08x-%04x-%04x-%04x-%04x%08x" % ary
|
33
|
+
end unless respond_to?(:uuid)
|
34
|
+
end
|
35
|
+
end
|
metadata
ADDED
@@ -0,0 +1,276 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: killbill-litle
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 1.0.1
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Killbill core team
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-04-11 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: killbill
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 1.0.12
|
21
|
+
none: false
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.0.12
|
27
|
+
none: false
|
28
|
+
prerelease: false
|
29
|
+
type: :runtime
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: activemerchant
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - "~>"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 1.31.1
|
37
|
+
none: false
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - "~>"
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 1.31.1
|
43
|
+
none: false
|
44
|
+
prerelease: false
|
45
|
+
type: :runtime
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: activerecord
|
48
|
+
version_requirements: !ruby/object:Gem::Requirement
|
49
|
+
requirements:
|
50
|
+
- - "~>"
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 3.2.1
|
53
|
+
none: false
|
54
|
+
requirement: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - "~>"
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: 3.2.1
|
59
|
+
none: false
|
60
|
+
prerelease: false
|
61
|
+
type: :runtime
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: sinatra
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.3.4
|
69
|
+
none: false
|
70
|
+
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - "~>"
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: 1.3.4
|
75
|
+
none: false
|
76
|
+
prerelease: false
|
77
|
+
type: :runtime
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: LitleOnline
|
80
|
+
version_requirements: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - "~>"
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: 8.16.0
|
85
|
+
none: false
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - "~>"
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: 8.16.0
|
91
|
+
none: false
|
92
|
+
prerelease: false
|
93
|
+
type: :runtime
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: xml-mapping
|
96
|
+
version_requirements: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - "~>"
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: 0.9.1
|
101
|
+
none: false
|
102
|
+
requirement: !ruby/object:Gem::Requirement
|
103
|
+
requirements:
|
104
|
+
- - "~>"
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 0.9.1
|
107
|
+
none: false
|
108
|
+
prerelease: false
|
109
|
+
type: :runtime
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: xml-object
|
112
|
+
version_requirements: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - "~>"
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 0.9.93
|
117
|
+
none: false
|
118
|
+
requirement: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - "~>"
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: 0.9.93
|
123
|
+
none: false
|
124
|
+
prerelease: false
|
125
|
+
type: :runtime
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: activerecord-jdbcmysql-adapter
|
128
|
+
version_requirements: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 1.2.9
|
133
|
+
none: false
|
134
|
+
requirement: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 1.2.9
|
139
|
+
none: false
|
140
|
+
prerelease: false
|
141
|
+
type: :runtime
|
142
|
+
- !ruby/object:Gem::Dependency
|
143
|
+
name: jbundler
|
144
|
+
version_requirements: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - "~>"
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: 0.4.1
|
149
|
+
none: false
|
150
|
+
requirement: !ruby/object:Gem::Requirement
|
151
|
+
requirements:
|
152
|
+
- - "~>"
|
153
|
+
- !ruby/object:Gem::Version
|
154
|
+
version: 0.4.1
|
155
|
+
none: false
|
156
|
+
prerelease: false
|
157
|
+
type: :development
|
158
|
+
- !ruby/object:Gem::Dependency
|
159
|
+
name: rake
|
160
|
+
version_requirements: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - ">="
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: 10.0.0
|
165
|
+
none: false
|
166
|
+
requirement: !ruby/object:Gem::Requirement
|
167
|
+
requirements:
|
168
|
+
- - ">="
|
169
|
+
- !ruby/object:Gem::Version
|
170
|
+
version: 10.0.0
|
171
|
+
none: false
|
172
|
+
prerelease: false
|
173
|
+
type: :development
|
174
|
+
- !ruby/object:Gem::Dependency
|
175
|
+
name: rspec
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - "~>"
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: 2.12.0
|
181
|
+
none: false
|
182
|
+
requirement: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - "~>"
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: 2.12.0
|
187
|
+
none: false
|
188
|
+
prerelease: false
|
189
|
+
type: :development
|
190
|
+
- !ruby/object:Gem::Dependency
|
191
|
+
name: activerecord-jdbcsqlite3-adapter
|
192
|
+
version_requirements: !ruby/object:Gem::Requirement
|
193
|
+
requirements:
|
194
|
+
- - "~>"
|
195
|
+
- !ruby/object:Gem::Version
|
196
|
+
version: 1.2.6
|
197
|
+
none: false
|
198
|
+
requirement: !ruby/object:Gem::Requirement
|
199
|
+
requirements:
|
200
|
+
- - "~>"
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: 1.2.6
|
203
|
+
none: false
|
204
|
+
prerelease: false
|
205
|
+
type: :development
|
206
|
+
description: Killbill payment plugin for Litle & Co.
|
207
|
+
email: killbilling-users@googlegroups.com
|
208
|
+
executables: []
|
209
|
+
extensions: []
|
210
|
+
extra_rdoc_files: []
|
211
|
+
files:
|
212
|
+
- ".gitignore"
|
213
|
+
- ".travis.yml"
|
214
|
+
- Gemfile
|
215
|
+
- Jarfile
|
216
|
+
- README.md
|
217
|
+
- Rakefile
|
218
|
+
- VERSION
|
219
|
+
- config.ru
|
220
|
+
- db/schema.rb
|
221
|
+
- killbill-litle.gemspec
|
222
|
+
- killbill.properties
|
223
|
+
- lib/litle.rb
|
224
|
+
- lib/litle/api.rb
|
225
|
+
- lib/litle/config/application.rb
|
226
|
+
- lib/litle/config/configuration.rb
|
227
|
+
- lib/litle/config/properties.rb
|
228
|
+
- lib/litle/litle/gateway.rb
|
229
|
+
- lib/litle/litle_utils.rb
|
230
|
+
- lib/litle/models/litle_payment_method.rb
|
231
|
+
- lib/litle/models/litle_response.rb
|
232
|
+
- lib/litle/models/litle_transaction.rb
|
233
|
+
- lib/litle/private_api.rb
|
234
|
+
- lib/litle/views/paypage.erb
|
235
|
+
- pom.xml
|
236
|
+
- release.sh
|
237
|
+
- spec/litle/base_plugin_spec.rb
|
238
|
+
- spec/litle/integration_spec.rb
|
239
|
+
- spec/litle/utils_spec.rb
|
240
|
+
- spec/spec_helper.rb
|
241
|
+
homepage: http://www.killbilling.org
|
242
|
+
licenses:
|
243
|
+
- Apache License (2.0)
|
244
|
+
post_install_message:
|
245
|
+
rdoc_options:
|
246
|
+
- "--exclude"
|
247
|
+
- "."
|
248
|
+
require_paths:
|
249
|
+
- lib
|
250
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
251
|
+
requirements:
|
252
|
+
- - ">="
|
253
|
+
- !ruby/object:Gem::Version
|
254
|
+
version: 1.9.3
|
255
|
+
none: false
|
256
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
257
|
+
requirements:
|
258
|
+
- - ">="
|
259
|
+
- !ruby/object:Gem::Version
|
260
|
+
segments:
|
261
|
+
- 0
|
262
|
+
hash: 2
|
263
|
+
version: !binary |-
|
264
|
+
MA==
|
265
|
+
none: false
|
266
|
+
requirements: []
|
267
|
+
rubyforge_project:
|
268
|
+
rubygems_version: 1.8.24
|
269
|
+
signing_key:
|
270
|
+
specification_version: 3
|
271
|
+
summary: Plugin to use Litle & Co. as a gateway.
|
272
|
+
test_files:
|
273
|
+
- spec/litle/base_plugin_spec.rb
|
274
|
+
- spec/litle/integration_spec.rb
|
275
|
+
- spec/litle/utils_spec.rb
|
276
|
+
- spec/spec_helper.rb
|