chargify 0.2.5 → 0.2.6
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 +2 -1
- data/README.markdown +0 -2
- data/VERSION +1 -1
- data/changelog.md +6 -0
- data/chargify.gemspec +3 -2
- data/lib/chargify.rb +1 -1
- data/lib/chargify/client.rb +71 -19
- data/test/chargify_test.rb +23 -2
- data/test/helper.rb +1 -0
- metadata +17 -3
data/.gitignore
CHANGED
data/README.markdown
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.6
|
data/changelog.md
CHANGED
@@ -1,4 +1,10 @@
|
|
1
1
|
# Changelog
|
2
|
+
|
3
|
+
## 0.2.6 May 27, 2010
|
4
|
+
* Fix #charge_subscription to submit it's body as json [@will](http://github.com/will) and [@ignat](http://github.com/ignat)
|
5
|
+
* API coverage for quantity components [@will](http://github.com/will)
|
6
|
+
* API coverage for site and subscription transactions [@ignat](http://github.com/ignat)
|
7
|
+
|
2
8
|
## 0.2.5 May 24, 2010
|
3
9
|
* Require fix from [@will](http://github.com/will)
|
4
10
|
|
data/chargify.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{chargify}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Wynn Netherland", "Nash Kabbara"]
|
12
|
-
s.date = %q{2010-05-
|
12
|
+
s.date = %q{2010-05-27}
|
13
13
|
s.description = %q{Ruby wrapper for the chargify.com SAAS and billing API}
|
14
14
|
s.email = %q{wynn.netherland@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -61,6 +61,7 @@ Gem::Specification.new do |s|
|
|
61
61
|
s.add_development_dependency(%q<jnunemaker-matchy>, ["= 0.4.0"])
|
62
62
|
s.add_development_dependency(%q<mocha>, ["~> 0.9.8"])
|
63
63
|
s.add_development_dependency(%q<fakeweb>, [">= 1.2.5"])
|
64
|
+
s.add_development_dependency(%q<redgreen>, [">= 1.2.2"])
|
64
65
|
else
|
65
66
|
s.add_dependency(%q<hashie>, ["~> 0.1.3"])
|
66
67
|
s.add_dependency(%q<httparty>, ["~> 0.5.2"])
|
data/lib/chargify.rb
CHANGED
data/lib/chargify/client.rb
CHANGED
@@ -32,19 +32,19 @@ module Chargify
|
|
32
32
|
|
33
33
|
# options: page
|
34
34
|
def list_customers(options={})
|
35
|
-
customers =
|
35
|
+
customers = get("/customers.json", :query => options)
|
36
36
|
customers.map{|c| Hashie::Mash.new c['customer']}
|
37
37
|
end
|
38
38
|
|
39
39
|
def customer_by_id(chargify_id)
|
40
|
-
request =
|
40
|
+
request = get("/customers/#{chargify_id}.json")
|
41
41
|
success = request.code == 200
|
42
42
|
response = Hashie::Mash.new(request).customer if success
|
43
43
|
Hashie::Mash.new(response || {}).update(:success? => success)
|
44
44
|
end
|
45
45
|
|
46
46
|
def customer_by_reference(reference_id)
|
47
|
-
request =
|
47
|
+
request = get("/customers/lookup.json?reference=#{reference_id}")
|
48
48
|
success = request.code == 200
|
49
49
|
response = Hashie::Mash.new(request).customer if success
|
50
50
|
Hashie::Mash.new(response || {}).update(:success? => success)
|
@@ -61,7 +61,7 @@ module Chargify
|
|
61
61
|
# * reference (Optional, but encouraged) The unique identifier used within your own application for this customer
|
62
62
|
#
|
63
63
|
def create_customer(info={})
|
64
|
-
response = Hashie::Mash.new(
|
64
|
+
response = Hashie::Mash.new(post("/customers.json", :body => {:customer => info}))
|
65
65
|
return response.customer if response.customer
|
66
66
|
response
|
67
67
|
end
|
@@ -76,20 +76,18 @@ module Chargify
|
|
76
76
|
def update_customer(info={})
|
77
77
|
info.stringify_keys!
|
78
78
|
chargify_id = info.delete('id')
|
79
|
-
response = Hashie::Mash.new(
|
79
|
+
response = Hashie::Mash.new(put("/customers/#{chargify_id}.json", :body => {:customer => info}))
|
80
80
|
return response.customer unless response.customer.to_a.empty?
|
81
81
|
response
|
82
82
|
end
|
83
83
|
|
84
84
|
def customer_subscriptions(chargify_id)
|
85
|
-
subscriptions =
|
85
|
+
subscriptions = get("/customers/#{chargify_id}/subscriptions.json")
|
86
86
|
subscriptions.map{|s| Hashie::Mash.new s['subscription']}
|
87
87
|
end
|
88
88
|
|
89
|
-
|
90
|
-
|
91
89
|
def subscription(subscription_id)
|
92
|
-
raw_response =
|
90
|
+
raw_response = get("/subscriptions/#{subscription_id}.json")
|
93
91
|
return nil if raw_response.code != 200
|
94
92
|
Hashie::Mash.new(raw_response).subscription
|
95
93
|
end
|
@@ -97,7 +95,7 @@ module Chargify
|
|
97
95
|
# Returns all elements outputted by Chargify plus:
|
98
96
|
# response.success? -> true if response code is 201, false otherwise
|
99
97
|
def create_subscription(subscription_attributes={})
|
100
|
-
raw_response =
|
98
|
+
raw_response = post("/subscriptions.json", :body => {:subscription => subscription_attributes})
|
101
99
|
created = true if raw_response.code == 201
|
102
100
|
response = Hashie::Mash.new(raw_response)
|
103
101
|
(response.subscription || response).update(:success? => created)
|
@@ -106,7 +104,7 @@ module Chargify
|
|
106
104
|
# Returns all elements outputted by Chargify plus:
|
107
105
|
# response.success? -> true if response code is 200, false otherwise
|
108
106
|
def update_subscription(sub_id, subscription_attributes = {})
|
109
|
-
raw_response =
|
107
|
+
raw_response = put("/subscriptions/#{sub_id}.json", :body => {:subscription => subscription_attributes})
|
110
108
|
updated = true if raw_response.code == 200
|
111
109
|
response = Hashie::Mash.new(raw_response)
|
112
110
|
(response.subscription || response).update(:success? => updated)
|
@@ -115,21 +113,21 @@ module Chargify
|
|
115
113
|
# Returns all elements outputted by Chargify plus:
|
116
114
|
# response.success? -> true if response code is 200, false otherwise
|
117
115
|
def cancel_subscription(sub_id, message="")
|
118
|
-
raw_response =
|
116
|
+
raw_response = delete("/subscriptions/#{sub_id}.json", :body => {:subscription => {:cancellation_message => message} })
|
119
117
|
deleted = true if raw_response.code == 200
|
120
118
|
response = Hashie::Mash.new(raw_response)
|
121
119
|
(response.subscription || response).update(:success? => deleted)
|
122
120
|
end
|
123
121
|
|
124
122
|
def reactivate_subscription(sub_id)
|
125
|
-
raw_response =
|
123
|
+
raw_response = put("/subscriptions/#{sub_id}/reactivate.json", :body => "")
|
126
124
|
reactivated = true if raw_response.code == 200
|
127
125
|
response = Hashie::Mash.new(raw_response) rescue Hashie::Mash.new
|
128
126
|
(response.subscription || response).update(:success? => reactivated)
|
129
127
|
end
|
130
128
|
|
131
129
|
def charge_subscription(sub_id, subscription_attributes={})
|
132
|
-
raw_response =
|
130
|
+
raw_response = post("/subscriptions/#{sub_id}/charges.json", :body => { :charge => subscription_attributes })
|
133
131
|
success = raw_response.code == 201
|
134
132
|
if raw_response.code == 404
|
135
133
|
raw_response = {}
|
@@ -140,31 +138,85 @@ module Chargify
|
|
140
138
|
end
|
141
139
|
|
142
140
|
def migrate_subscription(sub_id, product_id)
|
143
|
-
raw_response =
|
141
|
+
raw_response = post("/subscriptions/#{sub_id}/migrations.json", :body => {:product_id => product_id })
|
144
142
|
success = true if raw_response.code == 200
|
145
143
|
response = Hashie::Mash.new(raw_response)
|
146
144
|
(response.subscription || {}).update(:success? => success)
|
147
145
|
end
|
148
146
|
|
149
147
|
def list_products
|
150
|
-
products =
|
148
|
+
products = get("/products.json")
|
151
149
|
products.map{|p| Hashie::Mash.new p['product']}
|
152
150
|
end
|
153
151
|
|
154
152
|
def product(product_id)
|
155
|
-
Hashie::Mash.new(
|
153
|
+
Hashie::Mash.new( get("/products/#{product_id}.json")).product
|
156
154
|
end
|
157
155
|
|
158
156
|
def product_by_handle(handle)
|
159
|
-
Hashie::Mash.new(
|
157
|
+
Hashie::Mash.new(get("/products/handle/#{handle}.json")).product
|
160
158
|
end
|
161
159
|
|
162
160
|
def list_subscription_usage(subscription_id, component_id)
|
163
|
-
raw_response =
|
161
|
+
raw_response = get("/subscriptions/#{subscription_id}/components/#{component_id}/usages.json")
|
164
162
|
success = raw_response.code == 200
|
165
163
|
response = Hashie::Mash.new(raw_response)
|
166
164
|
response.update(:success? => success)
|
167
165
|
end
|
168
166
|
|
167
|
+
def subscription_transactions(sub_id, options={})
|
168
|
+
transactions = get("/subscriptions/#{sub_id}/transactions.json", :query => options)
|
169
|
+
transactions.map{|t| Hashie::Mash.new t['transaction']}
|
170
|
+
end
|
171
|
+
|
172
|
+
def site_transactions(options={})
|
173
|
+
transactions = get("/transactions.json", :query => options)
|
174
|
+
transactions.map{|t| Hashie::Mash.new t['transaction']}
|
175
|
+
end
|
176
|
+
|
177
|
+
def list_components(subscription_id)
|
178
|
+
components = get("/subscriptions/#{subscription_id}/components.json")
|
179
|
+
components.map{|c| Hashie::Mash.new c['component']}
|
180
|
+
end
|
181
|
+
|
182
|
+
def subscription_component(subscription_id, component_id)
|
183
|
+
response = get("/subscriptions/#{subscription_id}/components/#{component_id}.json")
|
184
|
+
Hashie::Mash.new(response).component
|
185
|
+
end
|
186
|
+
|
187
|
+
def update_subscription_component_allocated_quantity(subscription_id, component_id, quantity)
|
188
|
+
response = put("/subscriptions/#{subscription_id}/components/#{component_id}.json", :body => {:component => {:allocated_quantity => quantity}})
|
189
|
+
response[:success?] = response.code == 200
|
190
|
+
Hashie::Mash.new(response)
|
191
|
+
end
|
192
|
+
|
193
|
+
|
194
|
+
|
195
|
+
private
|
196
|
+
|
197
|
+
def post(path, options={})
|
198
|
+
jsonify_body!(options)
|
199
|
+
self.class.post(path, options)
|
200
|
+
end
|
201
|
+
|
202
|
+
def put(path, options={})
|
203
|
+
jsonify_body!(options)
|
204
|
+
self.class.put(path, options)
|
205
|
+
end
|
206
|
+
|
207
|
+
def delete(path, options={})
|
208
|
+
jsonify_body!(options)
|
209
|
+
self.class.delete(path, options)
|
210
|
+
end
|
211
|
+
|
212
|
+
def get(path, options={})
|
213
|
+
jsonify_body!(options)
|
214
|
+
self.class.get(path, options)
|
215
|
+
end
|
216
|
+
|
217
|
+
def jsonify_body!(options)
|
218
|
+
options[:body] = options[:body].to_json if options[:body]
|
219
|
+
|
220
|
+
end
|
169
221
|
end
|
170
222
|
end
|
data/test/chargify_test.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'helper'
|
2
2
|
|
3
3
|
class ChargifyTest < Test::Unit::TestCase
|
4
|
-
context "
|
4
|
+
context "Chargify API client" do
|
5
5
|
setup do
|
6
6
|
@client = Chargify::Client.new('OU812', 'pengwynn')
|
7
7
|
end
|
@@ -250,7 +250,7 @@ class ChargifyTest < Test::Unit::TestCase
|
|
250
250
|
setup do
|
251
251
|
stub_post "https://OU812:x@pengwynn.chargify.com/subscriptions/123/charges.json", "charge_subscription.json", 201
|
252
252
|
@options = {
|
253
|
-
:
|
253
|
+
:memo => "This is the description of the one time charge.",
|
254
254
|
:amount => 1.00,
|
255
255
|
:amount_in_cents => 100
|
256
256
|
}
|
@@ -324,6 +324,27 @@ class ChargifyTest < Test::Unit::TestCase
|
|
324
324
|
product.accounting_code.should == 'TSMO'
|
325
325
|
end
|
326
326
|
|
327
|
+
context "for quantity based components" do
|
328
|
+
should "list components" do
|
329
|
+
stub_get "https://OU812:x@pengwynn.chargify.com/subscriptions/123/components.json", "components.json"
|
330
|
+
components = @client.list_components(123)
|
331
|
+
components.first.allocated_quantity.should == 42
|
332
|
+
components.last.allocated_quantity.should == 2
|
333
|
+
end
|
334
|
+
|
335
|
+
should "show a specific component" do
|
336
|
+
stub_get "https://OU812:x@pengwynn.chargify.com/subscriptions/123/components/16.json", "component.json"
|
337
|
+
component = @client.subscription_component 123, 16
|
338
|
+
component.name.should == "Extra Rubies"
|
339
|
+
component.allocated_quantity.should == 42
|
340
|
+
end
|
341
|
+
|
342
|
+
should "update the allocated_quantity for a component" do
|
343
|
+
stub_put "https://OU812:x@pengwynn.chargify.com/subscriptions/123/components/16.json", "component.json"
|
344
|
+
response = @client.update_subscription_component_allocated_quantity 123, 16, 20_000_000
|
345
|
+
response.success?.should == true
|
346
|
+
end
|
347
|
+
end
|
327
348
|
|
328
349
|
end
|
329
350
|
end
|
data/test/helper.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 6
|
9
|
+
version: 0.2.6
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Wynn Netherland
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-05-
|
18
|
+
date: 2010-05-27 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -102,6 +102,20 @@ dependencies:
|
|
102
102
|
version: 1.2.5
|
103
103
|
type: :development
|
104
104
|
version_requirements: *id006
|
105
|
+
- !ruby/object:Gem::Dependency
|
106
|
+
name: redgreen
|
107
|
+
prerelease: false
|
108
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
segments:
|
113
|
+
- 1
|
114
|
+
- 2
|
115
|
+
- 2
|
116
|
+
version: 1.2.2
|
117
|
+
type: :development
|
118
|
+
version_requirements: *id007
|
105
119
|
description: Ruby wrapper for the chargify.com SAAS and billing API
|
106
120
|
email: wynn.netherland@gmail.com
|
107
121
|
executables: []
|