chargify_api_ares 0.3.9 → 0.4.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/README.md +3 -18
- data/Rakefile +9 -14
- data/chargify_api_ares.gemspec +4 -10
- data/lib/chargify_api_ares.rb +71 -40
- data/spec/customer_spec.rb +1 -1
- data/spec/factories.rb +52 -50
- data/spec/product_spec.rb +1 -1
- data/spec/remote/spec_helper.rb +2 -2
- data/spec/spec_helper.rb +2 -2
- data/spec/subscription_spec.rb +9 -5
- metadata +9 -10
data/README.md
CHANGED
@@ -29,17 +29,9 @@ See the `samples` directory for more usage examples.
|
|
29
29
|
|
30
30
|
### Installation
|
31
31
|
|
32
|
-
This library can be installed as a gem.
|
32
|
+
This library can be installed as a gem. It is hosted on [Rubygems](http://rubygems.org).
|
33
33
|
|
34
|
-
|
35
|
-
<http://gemcutter.org>, i.e.:
|
36
|
-
|
37
|
-
$ gem install gemcutter
|
38
|
-
$ gem tumble
|
39
|
-
|
40
|
-
This will install Gemcutter and set your gem sources to search the gemcutter repos.
|
41
|
-
|
42
|
-
Then you can install this library as a gem:
|
34
|
+
You can install this library as a gem using the following command:
|
43
35
|
|
44
36
|
$ gem install chargify_api_ares
|
45
37
|
|
@@ -70,11 +62,4 @@ Now you'll have access to classes the interact with the Chargify API, such as:
|
|
70
62
|
`Chargifiy::Subscription`
|
71
63
|
|
72
64
|
Check out the examples in the `samples` directory. If you're not familiar with how ActiveResource works,
|
73
|
-
you may be interested in some [ActiveResource Documentation](http://apidock.com/rails/ActiveResource/Base)
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
### Contributors
|
78
|
-
|
79
|
-
* Michael Klett (Grasshopper Labs and Chargify)
|
80
|
-
* The Lab Rats @ Phase Two Labs
|
65
|
+
you may be interested in some [ActiveResource Documentation](http://apidock.com/rails/ActiveResource/Base)
|
data/Rakefile
CHANGED
@@ -1,14 +1,9 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
Jeweler::GemcutterTasks.new
|
11
|
-
end
|
12
|
-
rescue LoadError
|
13
|
-
puts "Jeweler not available. Install it with: sudo gem install jeweler"
|
14
|
-
end
|
1
|
+
require 'rake'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
desc 'Run the spec suite'
|
5
|
+
RSpec::Core::RakeTask.new('spec') {|t|
|
6
|
+
t.rspec_opts = ['--colour', '--format Fuubar']
|
7
|
+
}
|
8
|
+
|
9
|
+
task :default => :spec
|
data/chargify_api_ares.gemspec
CHANGED
@@ -1,17 +1,12 @@
|
|
1
|
-
# Generated by jeweler
|
2
|
-
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
|
4
|
-
# -*- encoding: utf-8 -*-
|
5
|
-
|
6
1
|
Gem::Specification.new do |s|
|
7
2
|
s.name = %q{chargify_api_ares}
|
8
|
-
s.version = "0.
|
3
|
+
s.version = "0.4.0"
|
9
4
|
|
10
5
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
-
s.authors = ["Michael Klett", "Nathan Verni", "
|
12
|
-
s.date = %q{2011-
|
6
|
+
s.authors = ["Michael Klett", "Nathan Verni", "Rodrigo Franco"]
|
7
|
+
s.date = %q{2011-03-02}
|
13
8
|
s.description = %q{}
|
14
|
-
s.email = %q{
|
9
|
+
s.email = %q{support@chargify.com}
|
15
10
|
s.extra_rdoc_files = [
|
16
11
|
"LICENSE.txt",
|
17
12
|
"README.md"
|
@@ -72,4 +67,3 @@ Gem::Specification.new do |s|
|
|
72
67
|
else
|
73
68
|
end
|
74
69
|
end
|
75
|
-
|
data/lib/chargify_api_ares.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# Chargify API Wrapper using ActiveResource.
|
2
2
|
#
|
3
|
+
require 'thread'
|
4
|
+
|
3
5
|
begin
|
4
6
|
require 'active_resource'
|
5
7
|
rescue LoadError
|
@@ -8,7 +10,7 @@ rescue LoadError
|
|
8
10
|
require 'active_resource'
|
9
11
|
rescue LoadError
|
10
12
|
abort <<-ERROR
|
11
|
-
The 'activeresource' library could not be loaded. If you have RubyGems
|
13
|
+
The 'activeresource' library could not be loaded. If you have RubyGems
|
12
14
|
installed you can install ActiveResource by doing "gem install activeresource".
|
13
15
|
ERROR
|
14
16
|
end
|
@@ -48,48 +50,51 @@ end
|
|
48
50
|
|
49
51
|
|
50
52
|
module Chargify
|
51
|
-
|
53
|
+
|
52
54
|
class << self
|
53
55
|
attr_accessor :subdomain, :api_key, :site, :format, :timeout
|
54
|
-
|
56
|
+
|
55
57
|
def configure
|
56
58
|
yield self
|
57
|
-
|
59
|
+
|
58
60
|
Base.user = api_key
|
59
61
|
Base.password = 'X'
|
60
62
|
Base.timeout = timeout unless (timeout.blank?)
|
61
|
-
|
63
|
+
|
62
64
|
self.site ||= "https://#{subdomain}.chargify.com"
|
63
65
|
|
64
|
-
Base.site
|
65
|
-
Subscription::Component.site
|
66
|
-
Subscription::Statement.site
|
66
|
+
Base.site = site
|
67
|
+
Subscription::Component.site = site + "/subscriptions/:subscription_id"
|
68
|
+
Subscription::Statement.site = site + "/subscriptions/:subscription_id"
|
67
69
|
Subscription::Transaction.site = site + "/subscriptions/:subscription_id"
|
70
|
+
Coupon.site = site + "/product_families/:product_family_id"
|
68
71
|
end
|
69
72
|
end
|
70
|
-
|
73
|
+
|
71
74
|
class Base < ActiveResource::Base
|
75
|
+
self.format = :xml
|
76
|
+
|
72
77
|
def self.element_name
|
73
78
|
name.split(/::/).last.underscore
|
74
79
|
end
|
75
|
-
|
80
|
+
|
76
81
|
def to_xml(options = {})
|
77
82
|
options.merge!(:dasherize => false)
|
78
83
|
super
|
79
84
|
end
|
80
85
|
end
|
81
|
-
|
86
|
+
|
82
87
|
class Site < Base
|
83
88
|
def self.clear_data!(params = {})
|
84
89
|
post(:clear_data, params)
|
85
90
|
end
|
86
91
|
end
|
87
|
-
|
92
|
+
|
88
93
|
class Customer < Base
|
89
94
|
def self.find_by_reference(reference)
|
90
95
|
Customer.new get(:lookup, :reference => reference)
|
91
96
|
end
|
92
|
-
|
97
|
+
|
93
98
|
def subscriptions(params = {})
|
94
99
|
params.merge!({:customer_id => self.id})
|
95
100
|
Subscription.find(:all, :params => params)
|
@@ -100,13 +105,13 @@ module Chargify
|
|
100
105
|
PaymentProfile.find(:all, :params => params)
|
101
106
|
end
|
102
107
|
end
|
103
|
-
|
108
|
+
|
104
109
|
class Subscription < Base
|
105
110
|
def self.find_by_customer_reference(reference)
|
106
111
|
customer = Customer.find_by_reference(reference)
|
107
|
-
find(:first, :params => {:customer_id => customer.id})
|
112
|
+
find(:first, :params => {:customer_id => customer.id})
|
108
113
|
end
|
109
|
-
|
114
|
+
|
110
115
|
# Strip off nested attributes of associations before saving, or type-mismatch errors will occur
|
111
116
|
def save
|
112
117
|
self.attributes.delete('customer')
|
@@ -114,47 +119,47 @@ module Chargify
|
|
114
119
|
self.attributes.delete('credit_card')
|
115
120
|
super
|
116
121
|
end
|
117
|
-
|
122
|
+
|
118
123
|
def cancel
|
119
124
|
destroy
|
120
125
|
end
|
121
|
-
|
126
|
+
|
122
127
|
def component(id)
|
123
128
|
Component.find(id, :params => {:subscription_id => self.id})
|
124
129
|
end
|
125
|
-
|
130
|
+
|
126
131
|
def components(params = {})
|
127
132
|
params.merge!({:subscription_id => self.id})
|
128
133
|
Component.find(:all, :params => params)
|
129
134
|
end
|
130
|
-
|
135
|
+
|
131
136
|
def payment_profile
|
132
137
|
credit_card
|
133
138
|
end
|
134
|
-
|
139
|
+
|
135
140
|
# Perform a one-time charge on an existing subscription.
|
136
|
-
# For more information, please see the one-time charge API docs available
|
141
|
+
# For more information, please see the one-time charge API docs available
|
137
142
|
# at: http://support.chargify.com/faqs/api/api-charges
|
138
143
|
def charge(attrs = {})
|
139
144
|
post :charges, {}, attrs.to_xml(:root => :charge)
|
140
145
|
end
|
141
|
-
|
146
|
+
|
142
147
|
def credit(attrs = {})
|
143
148
|
post :credits, {}, attrs.to_xml(:root => :credit)
|
144
149
|
end
|
145
|
-
|
150
|
+
|
146
151
|
def refund(attrs = {})
|
147
152
|
post :refunds, {}, attrs.to_xml(:root => :refund)
|
148
153
|
end
|
149
|
-
|
154
|
+
|
150
155
|
def reactivate(params = {})
|
151
156
|
put :reactivate, params
|
152
157
|
end
|
153
|
-
|
158
|
+
|
154
159
|
def reset_balance
|
155
160
|
put :reset_balance
|
156
161
|
end
|
157
|
-
|
162
|
+
|
158
163
|
def migrate(attrs = {})
|
159
164
|
post :migrations, :migration => attrs
|
160
165
|
end
|
@@ -164,24 +169,36 @@ module Chargify
|
|
164
169
|
raise ActiveResource::ResourceNotFound.new(nil) if (statement.subscription_id != self.id)
|
165
170
|
statement
|
166
171
|
end
|
167
|
-
|
172
|
+
|
168
173
|
def statements(params = {})
|
169
174
|
params.merge!(:subscription_id => self.id)
|
170
175
|
Statement.find(:all, :params => params)
|
171
176
|
end
|
172
|
-
|
177
|
+
|
173
178
|
def transactions(params = {})
|
174
179
|
params.merge!(:subscription_id => self.id)
|
175
180
|
Transaction.find(:all, :params => params)
|
176
181
|
end
|
177
|
-
|
182
|
+
|
183
|
+
def adjustment(attrs = {})
|
184
|
+
post :adjustments, {}, attrs.to_xml(:root => :adjustment)
|
185
|
+
end
|
186
|
+
|
187
|
+
def add_coupon(code)
|
188
|
+
post :add_coupon, :code => code
|
189
|
+
end
|
190
|
+
|
191
|
+
def remove_coupon(code)
|
192
|
+
delete :remove_coupon, :code => code
|
193
|
+
end
|
194
|
+
|
178
195
|
class Component < Base
|
179
196
|
# All Subscription Components are considered already existing records, but the id isn't used
|
180
197
|
def id
|
181
198
|
self.component_id
|
182
199
|
end
|
183
200
|
end
|
184
|
-
|
201
|
+
|
185
202
|
class Statement < Base
|
186
203
|
end
|
187
204
|
|
@@ -206,12 +223,12 @@ module Chargify
|
|
206
223
|
def self.find_by_handle(handle)
|
207
224
|
Product.new get(:lookup, :handle => handle)
|
208
225
|
end
|
209
|
-
|
226
|
+
|
210
227
|
protected
|
211
|
-
|
228
|
+
|
212
229
|
# Products are created in the scope of a ProductFamily, i.e. /product_families/nnn/products
|
213
230
|
#
|
214
|
-
# This alters the collection path such that it uses the product_family_id that is set on the
|
231
|
+
# This alters the collection path such that it uses the product_family_id that is set on the
|
215
232
|
# attributes.
|
216
233
|
def create
|
217
234
|
pfid = begin
|
@@ -225,22 +242,22 @@ module Chargify
|
|
225
242
|
end
|
226
243
|
end
|
227
244
|
end
|
228
|
-
|
245
|
+
|
229
246
|
class ProductFamily < Base
|
230
247
|
def self.find_by_handle(handle, attributes = {})
|
231
248
|
ProductFamily.find(:one, :from => :lookup, :handle => handle)
|
232
249
|
end
|
233
250
|
end
|
234
|
-
|
251
|
+
|
235
252
|
class Usage < Base
|
236
253
|
def subscription_id=(i)
|
237
254
|
self.prefix_options[:subscription_id] = i
|
238
255
|
end
|
239
256
|
def component_id=(i)
|
240
257
|
self.prefix_options[:component_id] = i
|
241
|
-
end
|
258
|
+
end
|
242
259
|
end
|
243
|
-
|
260
|
+
|
244
261
|
class Component < Base
|
245
262
|
end
|
246
263
|
|
@@ -262,8 +279,22 @@ module Chargify
|
|
262
279
|
Subscription.find(self.subscription_id).refund(attrs)
|
263
280
|
end
|
264
281
|
end
|
265
|
-
|
282
|
+
|
266
283
|
class PaymentProfile < Base
|
267
284
|
end
|
268
|
-
|
285
|
+
|
286
|
+
class Coupon < Base
|
287
|
+
def self.find_by_product_family_id_and_code(product_family_id, code)
|
288
|
+
Coupon.new get(:lookup, :product_family_id => product_family_id, :code => code)
|
289
|
+
end
|
290
|
+
|
291
|
+
def usage
|
292
|
+
get :usage
|
293
|
+
end
|
294
|
+
|
295
|
+
def archive
|
296
|
+
self.destroy
|
297
|
+
end
|
298
|
+
end
|
299
|
+
|
269
300
|
end
|
data/spec/customer_spec.rb
CHANGED
@@ -5,7 +5,7 @@ describe Chargify::Customer do
|
|
5
5
|
context 'find by reference' do
|
6
6
|
before do
|
7
7
|
@reference = 'ref0123'
|
8
|
-
@existing_customer = Factory(:customer, :reference => @reference, :id =>
|
8
|
+
@existing_customer = Factory(:customer, :reference => @reference, :id => FactoryGirl.generate(:customer_id))
|
9
9
|
FakeWeb.register_uri(:get, "#{test_domain}/customers/lookup.xml?reference=#{@existing_customer.reference}", :body => @existing_customer.attributes.to_xml)
|
10
10
|
end
|
11
11
|
|
data/spec/factories.rb
CHANGED
@@ -1,62 +1,64 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
FactoryGirl.define do
|
2
|
+
sequence :email do |n|
|
3
|
+
"customer#{n}@example.com"
|
4
|
+
end
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
end
|
6
|
+
sequence :customer_id do |n|
|
7
|
+
n
|
8
|
+
end
|
8
9
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
end
|
10
|
+
factory :customer, :class => Chargify::Customer do |c|
|
11
|
+
c.first_name { Faker::Name.first_name }
|
12
|
+
c.last_name { Faker::Name.last_name }
|
13
|
+
c.email { FactoryGirl.generate(:email) }
|
14
|
+
c.organization { Faker::Company.name }
|
15
|
+
c.created_at { 2.days.ago }
|
16
|
+
c.updated_at { 1.hour.ago }
|
17
|
+
end
|
17
18
|
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
end
|
20
|
+
sequence :product_id do |n|
|
21
|
+
n
|
22
|
+
end
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
end
|
24
|
+
sequence :product_name do |n|
|
25
|
+
"Product #{n}"
|
26
|
+
end
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
end
|
28
|
+
factory :product, :class => Chargify::Product do |p|
|
29
|
+
p.name { FactoryGirl.generate(:product_name) }
|
30
|
+
end
|
30
31
|
|
31
|
-
|
32
|
-
|
33
|
-
end
|
32
|
+
sequence :subscription_id do |n|
|
33
|
+
n
|
34
|
+
end
|
34
35
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
end
|
36
|
+
factory :subscription, :class => Chargify::Subscription do |s|
|
37
|
+
s.balance_in_cents 500
|
38
|
+
s.current_period_ends_at 3.days.from_now
|
39
|
+
end
|
39
40
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
end
|
41
|
+
factory :subscription_with_extra_attrs, :parent => :subscription do |swea|
|
42
|
+
swea.customer Chargify::Customer.new
|
43
|
+
swea.product Chargify::Product.new
|
44
|
+
swea.credit_card "CREDIT CARD"
|
45
|
+
end
|
45
46
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
end
|
47
|
+
factory :component, :class => Chargify::Component do |f|
|
48
|
+
f.name { Faker::Company.bs }
|
49
|
+
f.unit_name 'unit'
|
50
|
+
end
|
50
51
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
end
|
52
|
+
factory :quantity_based_component, :class => Chargify::Component do |f|
|
53
|
+
f.name { Faker::Company.bs }
|
54
|
+
f.unit_name 'unit'
|
55
|
+
f.pricing_scheme 'tiered'
|
56
|
+
f.component_type 'quantity_based_component'
|
57
|
+
end
|
57
58
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
end
|
59
|
+
factory :subscriptions_component, :class => Chargify::Subscription::Component do |f|
|
60
|
+
f.name { Faker::Company.bs }
|
61
|
+
f.unit_name 'unit'
|
62
|
+
f.component_type 'quantity_based_component'
|
63
|
+
end
|
64
|
+
end
|
data/spec/product_spec.rb
CHANGED
@@ -5,7 +5,7 @@ describe Chargify::Product do
|
|
5
5
|
context 'find by handle' do
|
6
6
|
before do
|
7
7
|
@handle = 'handle1'
|
8
|
-
@existing_product = Factory(:product, :handle => @handle, :id =>
|
8
|
+
@existing_product = Factory(:product, :handle => @handle, :id => FactoryGirl.generate(:product_id))
|
9
9
|
FakeWeb.register_uri(:get, "#{test_domain}/products/lookup.xml?handle=#{@existing_product.handle}", :body => @existing_product.attributes.to_xml)
|
10
10
|
end
|
11
11
|
|
data/spec/remote/spec_helper.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require '
|
2
|
+
require 'rspec'
|
3
3
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
4
4
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', '..', 'lib'))
|
5
5
|
|
6
6
|
require 'chargify_api_ares'
|
7
7
|
|
8
|
-
|
8
|
+
RSpec.configure do |config|
|
9
9
|
config.before(:all) do
|
10
10
|
Chargify.configure do |c|
|
11
11
|
c.subdomain = remote_configuration['subdomain']
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
|
-
require '
|
2
|
+
require 'rspec'
|
3
3
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
4
4
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
5
5
|
|
@@ -18,7 +18,7 @@ Chargify.configure do |c|
|
|
18
18
|
c.api_key = 'test'
|
19
19
|
end
|
20
20
|
|
21
|
-
|
21
|
+
RSpec.configure do |config|
|
22
22
|
config.after(:each) do
|
23
23
|
ActiveResource::FakeResource.clean
|
24
24
|
end
|
data/spec/subscription_spec.rb
CHANGED
@@ -4,7 +4,7 @@ describe Chargify::Subscription do
|
|
4
4
|
|
5
5
|
context 'strips nested association attributes before saving' do
|
6
6
|
before do
|
7
|
-
@subscription =
|
7
|
+
@subscription = FactoryGirl.build(:subscription_with_extra_attrs)
|
8
8
|
end
|
9
9
|
|
10
10
|
it 'strips customer' do
|
@@ -26,17 +26,18 @@ describe Chargify::Subscription do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
it 'doesn\'t strip other attrs' do
|
29
|
-
subscription =
|
29
|
+
subscription = FactoryGirl.build(:subscription)
|
30
30
|
|
31
31
|
lambda { subscription.save! }.should_not change(subscription, :attributes)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
|
35
35
|
it 'creates a one-time charge' do
|
36
|
-
id =
|
36
|
+
id = FactoryGirl.generate(:subscription_id)
|
37
37
|
subscription = Factory(:subscription, :id => id)
|
38
|
+
subscription.stub!(:persisted?).and_return(true)
|
38
39
|
expected_response = {:charge => {:amount_in_cents => 1000, :memo => "one-time charge", :success => true}}.to_xml
|
39
|
-
FakeWeb.register_uri(:post, "#{test_domain}/subscriptions/#{id}/charges.xml
|
40
|
+
FakeWeb.register_uri(:post, "#{test_domain}/subscriptions/#{id}/charges.xml", :status => 201, :body => expected_response)
|
40
41
|
|
41
42
|
response = subscription.charge(:amount => "10.00", "memo" => "one-time charge")
|
42
43
|
|
@@ -59,14 +60,17 @@ describe Chargify::Subscription do
|
|
59
60
|
@subscription = Factory(:subscription, :id => 1)
|
60
61
|
find_subscription = lambda { Chargify::Subscription.find(1) }
|
61
62
|
|
63
|
+
FakeWeb.register_uri(:get, "#{test_domain}/subscriptions/1.xml", :body => @subscription.attributes.to_xml)
|
64
|
+
|
62
65
|
find_subscription.should_not raise_error
|
63
66
|
@subscription.cancel
|
64
67
|
find_subscription.should raise_error
|
65
68
|
end
|
66
69
|
|
67
70
|
it 'migrates the subscription' do
|
68
|
-
id =
|
71
|
+
id = FactoryGirl.generate(:subscription_id)
|
69
72
|
subscription = Factory(:subscription, :id => id)
|
73
|
+
subscription.stub!(:persisted?).and_return(true)
|
70
74
|
expected_response = [subscription.attributes].to_xml(:root => 'subscription')
|
71
75
|
FakeWeb.register_uri(:post, "#{test_domain}/subscriptions/#{id}/migrations.xml?migration%5Bproduct_handle%5D=upgraded-plan", :status => 201, :body => expected_response)
|
72
76
|
|
metadata
CHANGED
@@ -1,29 +1,28 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chargify_api_ares
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
5
|
-
prerelease:
|
4
|
+
hash: 15
|
5
|
+
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Michael Klett
|
14
14
|
- Nathan Verni
|
15
|
-
-
|
16
|
-
- Brian Rose
|
15
|
+
- Rodrigo Franco
|
17
16
|
autorequire:
|
18
17
|
bindir: bin
|
19
18
|
cert_chain: []
|
20
19
|
|
21
|
-
date: 2011-03-02 00:00:00 -
|
20
|
+
date: 2011-03-02 00:00:00 -08:00
|
22
21
|
default_executable:
|
23
22
|
dependencies: []
|
24
23
|
|
25
24
|
description: ""
|
26
|
-
email:
|
25
|
+
email: support@chargify.com
|
27
26
|
executables: []
|
28
27
|
|
29
28
|
extensions: []
|
@@ -87,7 +86,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
86
|
requirements: []
|
88
87
|
|
89
88
|
rubyforge_project:
|
90
|
-
rubygems_version: 1.
|
89
|
+
rubygems_version: 1.6.2
|
91
90
|
signing_key:
|
92
91
|
specification_version: 3
|
93
92
|
summary: A Chargify API wrapper for Ruby using ActiveResource
|