servicemerchant 0.1.0
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/MIT-LICENSE.txt +20 -0
- data/README.txt +231 -0
- data/Rakefile +122 -0
- data/demo.rb +69 -0
- data/recurring_billing/lib/am_extensions.rb +1 -0
- data/recurring_billing/lib/am_extensions/paypal_extension.rb +170 -0
- data/recurring_billing/lib/dependencies.rb +14 -0
- data/recurring_billing/lib/gateways.rb +5 -0
- data/recurring_billing/lib/gateways/authorize_net.rb +103 -0
- data/recurring_billing/lib/gateways/paypal.rb +124 -0
- data/recurring_billing/lib/recurring_billing.rb +130 -0
- data/recurring_billing/lib/recurring_billing.rdoc +87 -0
- data/recurring_billing/lib/utils.rb +81 -0
- data/recurring_billing/test/fixtures.yml +33 -0
- data/recurring_billing/test/remote/authorize_net_test.rb +36 -0
- data/recurring_billing/test/remote/paypal_test.rb +46 -0
- data/recurring_billing/test/remote/recurring_billing_test.rb +41 -0
- data/recurring_billing/test/test_helper.rb +153 -0
- data/recurring_billing/test/unit/authorize_net_gateway_class_test.rb +42 -0
- data/recurring_billing/test/unit/paypal_gateway_class_test.rb +23 -0
- data/recurring_billing/test/unit/recurring_billing_gateway_class_test.rb +35 -0
- data/recurring_billing/test/unit/utils_test.rb +17 -0
- data/subscription_management/Rakefile +29 -0
- data/subscription_management/lib/models/subscription.rb +9 -0
- data/subscription_management/lib/models/subscription_profile.rb +4 -0
- data/subscription_management/lib/subscription_management.rb +326 -0
- data/subscription_management/samples/backpack.yml +101 -0
- data/subscription_management/samples/basecamp.yml +71 -0
- data/subscription_management/samples/brainkeeper.yml +90 -0
- data/subscription_management/samples/campfire.yml +74 -0
- data/subscription_management/samples/clickandpledge.yml +24 -0
- data/subscription_management/samples/demo.rb +19 -0
- data/subscription_management/samples/elm.yml +174 -0
- data/subscription_management/samples/freshbooks.yml +78 -0
- data/subscription_management/samples/highrise.yml +100 -0
- data/subscription_management/samples/presets.yml +10 -0
- data/subscription_management/samples/tariff.outline.yml +0 -0
- data/subscription_management/samples/taxes.yml +21 -0
- data/subscription_management/subscription_management.rb +7 -0
- data/subscription_management/tasks/schema.rb +50 -0
- data/subscription_management/test/connection.rb +10 -0
- data/subscription_management/test/remote/subscription_management_test.rb +112 -0
- data/subscription_management/test/test_helper.rb +84 -0
- data/subscription_management/test/unit/subscription_management_test.rb +40 -0
- data/tracker/README +12 -0
- data/tracker/Rakefile +40 -0
- data/tracker/db/migrations/empty-directory +0 -0
- data/tracker/demo.rb +12 -0
- data/tracker/lib/models/recurring_payment_profile.rb +134 -0
- data/tracker/lib/models/transaction.rb +19 -0
- data/tracker/lib/recurring_billing_extension.rb +103 -0
- data/tracker/lib/recurring_billing_extension.rdoc +34 -0
- data/tracker/tasks/schema.rb +66 -0
- data/tracker/test/connection.rb +10 -0
- data/tracker/test/recurring_payment_profile.rb +35 -0
- data/tracker/test/remote/authorize_net_test.rb +68 -0
- data/tracker/test/remote/paypal_test.rb +115 -0
- data/tracker/test/test_helper.rb +87 -0
- data/tracker/test/unit/recurring_payment_profile_test.rb +62 -0
- data/tracker/tracker.rb +10 -0
- data/vendor/money-1.7.1/MIT-LICENSE +20 -0
- data/vendor/money-1.7.1/README +75 -0
- data/vendor/money-1.7.1/lib/bank/no_exchange_bank.rb +9 -0
- data/vendor/money-1.7.1/lib/bank/variable_exchange_bank.rb +30 -0
- data/vendor/money-1.7.1/lib/money.rb +29 -0
- data/vendor/money-1.7.1/lib/money/core_extensions.rb +26 -0
- data/vendor/money-1.7.1/lib/money/money.rb +209 -0
- data/vendor/money-1.7.1/lib/support/cattr_accessor.rb +57 -0
- metadata +153 -0
@@ -0,0 +1,9 @@
|
|
1
|
+
class NoExchangeBank# :nodoc:
|
2
|
+
|
3
|
+
def reduce(money, currency)
|
4
|
+
return money if money.currency == currency
|
5
|
+
raise Money::MoneyError.new("Current Money::bank does not support money exchange. Please implement a bank object that does and assign it to the Money class.")
|
6
|
+
end
|
7
|
+
|
8
|
+
|
9
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# Example useage:
|
2
|
+
#
|
3
|
+
# Money.bank = VariableExchangeBank.new
|
4
|
+
# Money.bank.add_rate("USD", "CAD", 1.24515)
|
5
|
+
# Money.bank.add_rate("CAD", "USD", 0.803115)
|
6
|
+
# Money.us_dollar(100).exchange_to("CAD") => Money.ca_dollar(124)
|
7
|
+
# Money.ca_dollar(100).exchange_to("USD") => Money.us_dollar(80)
|
8
|
+
class VariableExchangeBank
|
9
|
+
|
10
|
+
def add_rate(from, to, rate)
|
11
|
+
rates["#{from}_TO_#{to}".upcase] = rate
|
12
|
+
end
|
13
|
+
|
14
|
+
def get_rate(from, to)
|
15
|
+
rates["#{from}_TO_#{to}".upcase]
|
16
|
+
end
|
17
|
+
|
18
|
+
def reduce(money, currency)
|
19
|
+
rate = get_rate(money.currency, currency) or raise Money::MoneyError.new("Can't find required exchange rate")
|
20
|
+
|
21
|
+
Money.new((money.cents * rate).floor, currency)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def rates
|
27
|
+
@rates ||= {}
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#--
|
2
|
+
# Copyright (c) 2005 Tobias Luetke
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
#++
|
23
|
+
|
24
|
+
|
25
|
+
require File.dirname(__FILE__) + '/support/cattr_accessor'
|
26
|
+
require File.dirname(__FILE__) + '/bank/no_exchange_bank'
|
27
|
+
require File.dirname(__FILE__) + '/bank/variable_exchange_bank'
|
28
|
+
require File.dirname(__FILE__) + '/money/money'
|
29
|
+
require File.dirname(__FILE__) + '/money/core_extensions'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Allows Writing of 100.to_money for +Numeric+ types
|
2
|
+
# 100.to_money => #<Money @cents=10000>
|
3
|
+
# 100.37.to_money => #<Money @cents=10037>
|
4
|
+
class Numeric
|
5
|
+
def to_money
|
6
|
+
Money.new(self * 100)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
# Allows Writing of '100'.to_money for +String+ types
|
11
|
+
# Excess characters will be discarded
|
12
|
+
# '100'.to_money => #<Money @cents=10000>
|
13
|
+
# '100.37'.to_money => #<Money @cents=10037>
|
14
|
+
class String
|
15
|
+
def to_money
|
16
|
+
# Get the currency
|
17
|
+
matches = scan /([A-Z]{2,3})/
|
18
|
+
currency = matches[0] ? matches[0][0] : Money.default_currency
|
19
|
+
|
20
|
+
# Get the cents amount
|
21
|
+
matches = scan /(\-?\d+(\.(\d+))?)/
|
22
|
+
cents = matches[0] ? (matches[0][0].to_f * 100) : 0
|
23
|
+
|
24
|
+
Money.new(cents, currency)
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,209 @@
|
|
1
|
+
# === Usage with ActiveRecord
|
2
|
+
#
|
3
|
+
# Use the compose_of helper to let active record deal with embedding the money
|
4
|
+
# object in your models. The following example requires a cents and a currency field.
|
5
|
+
#
|
6
|
+
# class ProductUnit < ActiveRecord::Base
|
7
|
+
# belongs_to :product
|
8
|
+
# composed_of :price, :class_name => "Money", :mapping => [ %w(cents cents), %w(currency currency) ]
|
9
|
+
#
|
10
|
+
# private
|
11
|
+
# validate :cents_not_zero
|
12
|
+
#
|
13
|
+
# def cents_not_zero
|
14
|
+
# errors.add("cents", "cannot be zero or less") unless cents > 0
|
15
|
+
# end
|
16
|
+
#
|
17
|
+
# validates_presence_of :sku, :currency
|
18
|
+
# validates_uniqueness_of :sku
|
19
|
+
# end
|
20
|
+
#
|
21
|
+
class Money
|
22
|
+
include Comparable
|
23
|
+
|
24
|
+
attr_reader :cents, :currency
|
25
|
+
|
26
|
+
class MoneyError < StandardError# :nodoc:
|
27
|
+
end
|
28
|
+
|
29
|
+
# Bank lets you exchange the object which is responsible for currency
|
30
|
+
# exchange.
|
31
|
+
# The default implementation just throws an exception. However money
|
32
|
+
# ships with a variable exchange bank implementation which supports
|
33
|
+
# custom excahnge rates:
|
34
|
+
#
|
35
|
+
# Money.bank = VariableExchangeBank.new
|
36
|
+
# Money.bank.add_rate("USD", "CAD", 1.24515)
|
37
|
+
# Money.bank.add_rate("CAD", "USD", 0.803115)
|
38
|
+
# Money.us_dollar(100).exchange_to("CAD") => Money.ca_dollar(124)
|
39
|
+
# Money.ca_dollar(100).exchange_to("USD") => Money.us_dollar(80)
|
40
|
+
@@bank = NoExchangeBank.new
|
41
|
+
cattr_accessor :bank
|
42
|
+
|
43
|
+
@@default_currency = "USD"
|
44
|
+
cattr_accessor :default_currency
|
45
|
+
|
46
|
+
# Creates a new money object.
|
47
|
+
# Money.new(100)
|
48
|
+
#
|
49
|
+
# Alternativly you can use the convinience methods like
|
50
|
+
# Money.ca_dollar and Money.us_dollar
|
51
|
+
def initialize(cents, currency = default_currency)
|
52
|
+
@cents, @currency = cents.round, currency
|
53
|
+
end
|
54
|
+
|
55
|
+
# Do two money objects equal? Only works if both objects are of the same currency
|
56
|
+
def eql?(other_money)
|
57
|
+
cents == other_money.cents && currency == other_money.currency
|
58
|
+
end
|
59
|
+
|
60
|
+
def <=>(other_money)
|
61
|
+
if currency == other_money.currency
|
62
|
+
cents <=> other_money.cents
|
63
|
+
else
|
64
|
+
cents <=> other_money.exchange_to(currency).cents
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def +(other_money)
|
69
|
+
return other_money.dup if cents.zero?
|
70
|
+
return dup if other_money.cents.zero?
|
71
|
+
|
72
|
+
if currency == other_money.currency
|
73
|
+
Money.new(cents + other_money.cents, other_money.currency)
|
74
|
+
else
|
75
|
+
Money.new(cents + other_money.exchange_to(currency).cents,currency)
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def -(other_money)
|
80
|
+
|
81
|
+
if currency == other_money.currency
|
82
|
+
Money.new(cents - other_money.cents, other_money.currency)
|
83
|
+
else
|
84
|
+
|
85
|
+
return other_money.dup if self.cents.zero?
|
86
|
+
|
87
|
+
return self.dup if other_money.cents.zero?
|
88
|
+
|
89
|
+
|
90
|
+
Money.new(cents - other_money.exchange_to(currency).cents, currency)
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# get the cents value of the object
|
96
|
+
def cents
|
97
|
+
@cents.to_i
|
98
|
+
end
|
99
|
+
|
100
|
+
# multiply money by fixnum
|
101
|
+
def *(fixnum)
|
102
|
+
Money.new(cents * fixnum, currency)
|
103
|
+
end
|
104
|
+
|
105
|
+
# divide money by fixnum
|
106
|
+
def /(fixnum)
|
107
|
+
Money.new(cents / fixnum, currency)
|
108
|
+
end
|
109
|
+
|
110
|
+
# Test if the money amount is zero
|
111
|
+
def zero?
|
112
|
+
cents == 0
|
113
|
+
end
|
114
|
+
|
115
|
+
|
116
|
+
# Format the price according to several rules
|
117
|
+
# Currently supported are :with_currency, :no_cents and :html
|
118
|
+
#
|
119
|
+
# with_currency:
|
120
|
+
#
|
121
|
+
# Money.ca_dollar(0).format => "free"
|
122
|
+
# Money.ca_dollar(100).format => "$1.00"
|
123
|
+
# Money.ca_dollar(100).format(:with_currency) => "$1.00 CAD"
|
124
|
+
# Money.us_dollar(85).format(:with_currency) => "$0.85 USD"
|
125
|
+
#
|
126
|
+
# no_cents:
|
127
|
+
#
|
128
|
+
# Money.ca_dollar(100).format(:no_cents) => "$1"
|
129
|
+
# Money.ca_dollar(599).format(:no_cents) => "$5"
|
130
|
+
#
|
131
|
+
# Money.ca_dollar(570).format(:no_cents, :with_currency) => "$5 CAD"
|
132
|
+
# Money.ca_dollar(39000).format(:no_cents) => "$390"
|
133
|
+
#
|
134
|
+
# html:
|
135
|
+
#
|
136
|
+
# Money.ca_dollar(570).format(:html, :with_currency) => "$5.70 <span class=\"currency\">CAD</span>"
|
137
|
+
def format(*rules)
|
138
|
+
return "free" if cents == 0
|
139
|
+
|
140
|
+
rules = rules.flatten
|
141
|
+
|
142
|
+
if rules.include?(:no_cents)
|
143
|
+
formatted = sprintf("$%d", cents.to_f / 100 )
|
144
|
+
else
|
145
|
+
formatted = sprintf("$%.2f", cents.to_f / 100 )
|
146
|
+
end
|
147
|
+
|
148
|
+
if rules.include?(:with_currency)
|
149
|
+
formatted << " "
|
150
|
+
formatted << '<span class="currency">' if rules.include?(:html)
|
151
|
+
formatted << currency
|
152
|
+
formatted << '</span>' if rules.include?(:html)
|
153
|
+
end
|
154
|
+
formatted
|
155
|
+
end
|
156
|
+
|
157
|
+
# Money.ca_dollar(100).to_s => "1.00"
|
158
|
+
def to_s
|
159
|
+
sprintf("%.2f", cents.to_f / 100 )
|
160
|
+
end
|
161
|
+
|
162
|
+
# Recieve the amount of this money object in another currency
|
163
|
+
def exchange_to(other_currency)
|
164
|
+
self.class.bank.reduce(self, other_currency)
|
165
|
+
end
|
166
|
+
|
167
|
+
# Create a new money object with value 0
|
168
|
+
def self.empty(currency = default_currency)
|
169
|
+
Money.new(0, currency)
|
170
|
+
end
|
171
|
+
|
172
|
+
# Create a new money object using the Canadian dollar currency
|
173
|
+
def self.ca_dollar(num)
|
174
|
+
Money.new(num, "CAD")
|
175
|
+
end
|
176
|
+
|
177
|
+
# Create a new money object using the American dollar currency
|
178
|
+
def self.us_dollar(num)
|
179
|
+
Money.new(num, "USD")
|
180
|
+
end
|
181
|
+
|
182
|
+
# Create a new money object using the Euro currency
|
183
|
+
def self.euro(num)
|
184
|
+
Money.new(num, "EUR")
|
185
|
+
end
|
186
|
+
|
187
|
+
# Recieve a money object with the same amount as the current Money object
|
188
|
+
# in american dollar
|
189
|
+
def as_us_dollar
|
190
|
+
exchange_to("USD")
|
191
|
+
end
|
192
|
+
|
193
|
+
# Recieve a money object with the same amount as the current Money object
|
194
|
+
# in canadian dollar
|
195
|
+
def as_ca_dollar
|
196
|
+
exchange_to("CAD")
|
197
|
+
end
|
198
|
+
|
199
|
+
# Recieve a money object with the same amount as the current Money object
|
200
|
+
# in euro
|
201
|
+
def as_ca_euro
|
202
|
+
exchange_to("EUR")
|
203
|
+
end
|
204
|
+
|
205
|
+
# Conversation to self
|
206
|
+
def to_money
|
207
|
+
self
|
208
|
+
end
|
209
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# Extends the class object with class and instance accessors for class attributes,
|
2
|
+
# just like the native attr* accessors for instance attributes.
|
3
|
+
class Class # :nodoc:
|
4
|
+
def cattr_reader(*syms)
|
5
|
+
syms.each do |sym|
|
6
|
+
class_eval <<-EOS
|
7
|
+
if ! defined? @@#{sym.to_s}
|
8
|
+
@@#{sym.to_s} = nil
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.#{sym.to_s}
|
12
|
+
@@#{sym}
|
13
|
+
end
|
14
|
+
|
15
|
+
def #{sym.to_s}
|
16
|
+
@@#{sym}
|
17
|
+
end
|
18
|
+
|
19
|
+
def call_#{sym.to_s}
|
20
|
+
case @@#{sym.to_s}
|
21
|
+
when Symbol then send(@@#{sym})
|
22
|
+
when Proc then @@#{sym}.call(self)
|
23
|
+
when String then @@#{sym}
|
24
|
+
else nil
|
25
|
+
end
|
26
|
+
end
|
27
|
+
EOS
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def cattr_writer(*syms)
|
32
|
+
syms.each do |sym|
|
33
|
+
class_eval <<-EOS
|
34
|
+
if ! defined? @@#{sym.to_s}
|
35
|
+
@@#{sym.to_s} = nil
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.#{sym.to_s}=(obj)
|
39
|
+
@@#{sym.to_s} = obj
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.set_#{sym.to_s}(obj)
|
43
|
+
@@#{sym.to_s} = obj
|
44
|
+
end
|
45
|
+
|
46
|
+
def #{sym.to_s}=(obj)
|
47
|
+
@@#{sym} = obj
|
48
|
+
end
|
49
|
+
EOS
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def cattr_accessor(*syms)
|
54
|
+
cattr_reader(*syms)
|
55
|
+
cattr_writer(*syms)
|
56
|
+
end
|
57
|
+
end
|
metadata
ADDED
@@ -0,0 +1,153 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
rubygems_version: 0.9.4
|
3
|
+
specification_version: 1
|
4
|
+
name: servicemerchant
|
5
|
+
version: !ruby/object:Gem::Version
|
6
|
+
version: 0.1.0
|
7
|
+
date: 2008-10-26 00:00:00 +04:00
|
8
|
+
summary: Provides UI and tools to add billing feature to web application
|
9
|
+
require_paths:
|
10
|
+
- lib
|
11
|
+
email:
|
12
|
+
homepage:
|
13
|
+
rubyforge_project:
|
14
|
+
description:
|
15
|
+
autorequire:
|
16
|
+
default_executable:
|
17
|
+
bindir: bin
|
18
|
+
has_rdoc: true
|
19
|
+
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.0.0
|
24
|
+
version:
|
25
|
+
platform: ruby
|
26
|
+
signing_key:
|
27
|
+
cert_chain:
|
28
|
+
post_install_message:
|
29
|
+
authors: []
|
30
|
+
|
31
|
+
files:
|
32
|
+
- recurring_billing/lib
|
33
|
+
- recurring_billing/lib/am_extensions
|
34
|
+
- recurring_billing/lib/am_extensions/paypal_extension.rb
|
35
|
+
- recurring_billing/lib/am_extensions.rb
|
36
|
+
- recurring_billing/lib/dependencies.rb
|
37
|
+
- recurring_billing/lib/gateways
|
38
|
+
- recurring_billing/lib/gateways/authorize_net.rb
|
39
|
+
- recurring_billing/lib/gateways/paypal.rb
|
40
|
+
- recurring_billing/lib/gateways.rb
|
41
|
+
- recurring_billing/lib/recurring_billing.rb
|
42
|
+
- recurring_billing/lib/recurring_billing.rdoc
|
43
|
+
- recurring_billing/lib/utils.rb
|
44
|
+
- recurring_billing/test
|
45
|
+
- recurring_billing/test/fixtures.yml
|
46
|
+
- recurring_billing/test/remote
|
47
|
+
- recurring_billing/test/remote/authorize_net_test.rb
|
48
|
+
- recurring_billing/test/remote/paypal_test.rb
|
49
|
+
- recurring_billing/test/remote/recurring_billing_test.rb
|
50
|
+
- recurring_billing/test/test_helper.rb
|
51
|
+
- recurring_billing/test/unit
|
52
|
+
- recurring_billing/test/unit/authorize_net_gateway_class_test.rb
|
53
|
+
- recurring_billing/test/unit/paypal_gateway_class_test.rb
|
54
|
+
- recurring_billing/test/unit/recurring_billing_gateway_class_test.rb
|
55
|
+
- recurring_billing/test/unit/utils_test.rb
|
56
|
+
- subscription_management/lib
|
57
|
+
- subscription_management/lib/models
|
58
|
+
- subscription_management/lib/models/subscription.rb
|
59
|
+
- subscription_management/lib/models/subscription_profile.rb
|
60
|
+
- subscription_management/lib/subscription_management.rb
|
61
|
+
- subscription_management/Rakefile
|
62
|
+
- subscription_management/samples
|
63
|
+
- subscription_management/samples/backpack.yml
|
64
|
+
- subscription_management/samples/basecamp.yml
|
65
|
+
- subscription_management/samples/brainkeeper.yml
|
66
|
+
- subscription_management/samples/campfire.yml
|
67
|
+
- subscription_management/samples/clickandpledge.yml
|
68
|
+
- subscription_management/samples/demo.rb
|
69
|
+
- subscription_management/samples/elm.yml
|
70
|
+
- subscription_management/samples/freshbooks.yml
|
71
|
+
- subscription_management/samples/highrise.yml
|
72
|
+
- subscription_management/samples/presets.yml
|
73
|
+
- subscription_management/samples/tariff.outline.yml
|
74
|
+
- subscription_management/samples/taxes.yml
|
75
|
+
- subscription_management/subscription_management.rb
|
76
|
+
- subscription_management/tasks
|
77
|
+
- subscription_management/tasks/schema.rb
|
78
|
+
- subscription_management/test
|
79
|
+
- subscription_management/test/connection.rb
|
80
|
+
- subscription_management/test/remote
|
81
|
+
- subscription_management/test/remote/subscription_management_test.rb
|
82
|
+
- subscription_management/test/test_helper.rb
|
83
|
+
- subscription_management/test/unit
|
84
|
+
- subscription_management/test/unit/subscription_management_test.rb
|
85
|
+
- tracker/db
|
86
|
+
- tracker/db/migrations
|
87
|
+
- tracker/db/migrations/empty-directory
|
88
|
+
- tracker/demo.rb
|
89
|
+
- tracker/lib
|
90
|
+
- tracker/lib/models
|
91
|
+
- tracker/lib/models/recurring_payment_profile.rb
|
92
|
+
- tracker/lib/models/transaction.rb
|
93
|
+
- tracker/lib/recurring_billing_extension.rb
|
94
|
+
- tracker/lib/recurring_billing_extension.rdoc
|
95
|
+
- tracker/Rakefile
|
96
|
+
- tracker/README
|
97
|
+
- tracker/tasks
|
98
|
+
- tracker/tasks/schema.rb
|
99
|
+
- tracker/test
|
100
|
+
- tracker/test/connection.rb
|
101
|
+
- tracker/test/recurring_payment_profile.rb
|
102
|
+
- tracker/test/remote
|
103
|
+
- tracker/test/remote/authorize_net_test.rb
|
104
|
+
- tracker/test/remote/paypal_test.rb
|
105
|
+
- tracker/test/test_helper.rb
|
106
|
+
- tracker/test/unit
|
107
|
+
- tracker/test/unit/recurring_payment_profile_test.rb
|
108
|
+
- tracker/tracker.rb
|
109
|
+
- vendor/money-1.7.1
|
110
|
+
- vendor/money-1.7.1/lib
|
111
|
+
- vendor/money-1.7.1/lib/bank
|
112
|
+
- vendor/money-1.7.1/lib/bank/no_exchange_bank.rb
|
113
|
+
- vendor/money-1.7.1/lib/bank/variable_exchange_bank.rb
|
114
|
+
- vendor/money-1.7.1/lib/money
|
115
|
+
- vendor/money-1.7.1/lib/money/core_extensions.rb
|
116
|
+
- vendor/money-1.7.1/lib/money/money.rb
|
117
|
+
- vendor/money-1.7.1/lib/money.rb
|
118
|
+
- vendor/money-1.7.1/lib/support
|
119
|
+
- vendor/money-1.7.1/lib/support/cattr_accessor.rb
|
120
|
+
- vendor/money-1.7.1/MIT-LICENSE
|
121
|
+
- vendor/money-1.7.1/README
|
122
|
+
- demo.rb
|
123
|
+
- MIT-LICENSE.txt
|
124
|
+
- pkg
|
125
|
+
- Rakefile
|
126
|
+
- README.txt
|
127
|
+
- recurring_billing
|
128
|
+
- sample_app
|
129
|
+
- subscription_management
|
130
|
+
- tracker
|
131
|
+
- vendor
|
132
|
+
test_files: []
|
133
|
+
|
134
|
+
rdoc_options: []
|
135
|
+
|
136
|
+
extra_rdoc_files: []
|
137
|
+
|
138
|
+
executables: []
|
139
|
+
|
140
|
+
extensions: []
|
141
|
+
|
142
|
+
requirements: []
|
143
|
+
|
144
|
+
dependencies:
|
145
|
+
- !ruby/object:Gem::Dependency
|
146
|
+
name: activemerchant
|
147
|
+
version_requirement:
|
148
|
+
version_requirements: !ruby/object:Gem::Version::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 1.3.2
|
153
|
+
version:
|