killbill-litle 1.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.
- 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
|