chargify_api_ares 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/chargify_api_ares.gemspec +19 -3
- data/lib/chargify_api_ares.rb +3 -3
- data/spec/base_spec.rb +10 -0
- data/spec/customer_spec.rb +23 -0
- data/spec/factories.rb +40 -0
- data/spec/mocks/fake_resource.rb +82 -0
- data/spec/product_spec.rb +23 -0
- data/spec/spec_helper.rb +28 -0
- data/spec/subscription_spec.rb +44 -0
- metadata +17 -4
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.2
|
data/chargify_api_ares.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{chargify_api_ares}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.2"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Michael Klett", "The Lab Rats @ Phase Two Labs"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2010-01-08}
|
13
13
|
s.description = %q{}
|
14
14
|
s.email = %q{mklett@grasshopper.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -26,13 +26,29 @@ Gem::Specification.new do |s|
|
|
26
26
|
"lib/chargify_api_ares.rb",
|
27
27
|
"samples/customers.rb",
|
28
28
|
"samples/products.rb",
|
29
|
-
"samples/subscriptions.rb"
|
29
|
+
"samples/subscriptions.rb",
|
30
|
+
"spec/base_spec.rb",
|
31
|
+
"spec/customer_spec.rb",
|
32
|
+
"spec/factories.rb",
|
33
|
+
"spec/mocks/fake_resource.rb",
|
34
|
+
"spec/product_spec.rb",
|
35
|
+
"spec/spec_helper.rb",
|
36
|
+
"spec/subscription_spec.rb"
|
30
37
|
]
|
31
38
|
s.homepage = %q{http://github.com/grasshopperlabs/chargify_api_ares}
|
32
39
|
s.rdoc_options = ["--charset=UTF-8"]
|
33
40
|
s.require_paths = ["lib"]
|
34
41
|
s.rubygems_version = %q{1.3.5}
|
35
42
|
s.summary = %q{A Chargify API wrapper for Ruby using ActiveResource}
|
43
|
+
s.test_files = [
|
44
|
+
"spec/base_spec.rb",
|
45
|
+
"spec/customer_spec.rb",
|
46
|
+
"spec/factories.rb",
|
47
|
+
"spec/mocks/fake_resource.rb",
|
48
|
+
"spec/product_spec.rb",
|
49
|
+
"spec/spec_helper.rb",
|
50
|
+
"spec/subscription_spec.rb"
|
51
|
+
]
|
36
52
|
|
37
53
|
if s.respond_to? :specification_version then
|
38
54
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
data/lib/chargify_api_ares.rb
CHANGED
@@ -76,7 +76,7 @@ module Chargify
|
|
76
76
|
|
77
77
|
class Customer < Base
|
78
78
|
def self.find_by_reference(reference)
|
79
|
-
get(:lookup, :reference => reference)
|
79
|
+
Customer.new get(:lookup, :reference => reference)
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
@@ -96,7 +96,7 @@ module Chargify
|
|
96
96
|
|
97
97
|
class Product < Base
|
98
98
|
def self.find_by_handle(handle)
|
99
|
-
get(:lookup, :handle => handle)
|
99
|
+
Product.new get(:lookup, :handle => handle)
|
100
100
|
end
|
101
101
|
end
|
102
|
-
end
|
102
|
+
end
|
data/spec/base_spec.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe Chargify::Base do
|
4
|
+
|
5
|
+
it 'parses element names' do
|
6
|
+
Chargify::Base.stub!(:name).and_return("Test::Namespace::ElementName")
|
7
|
+
Chargify::Base.element_name.should eql('element_name')
|
8
|
+
end
|
9
|
+
|
10
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe Chargify::Customer do
|
4
|
+
|
5
|
+
context 'find by reference' do
|
6
|
+
before do
|
7
|
+
@reference = 'ref0123'
|
8
|
+
@existing_customer = Factory(:customer, :reference => @reference, :id => Factory.next(:customer_id))
|
9
|
+
FakeWeb.register_uri(:get, "#{test_domain}/customers/lookup.xml?reference=#{@existing_customer.reference}", :body => @existing_customer.attributes.to_xml)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'finds the correct customer by reference' do
|
13
|
+
customer = Chargify::Customer.find_by_reference(@reference)
|
14
|
+
customer.should eql(@existing_customer)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'is an instance of Chargify::Customer' do
|
18
|
+
customer = Chargify::Customer.find_by_reference(@reference)
|
19
|
+
customer.should be_instance_of(Chargify::Customer)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/spec/factories.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
Factory.sequence :email do |n|
|
2
|
+
"customer#{n}@example.com"
|
3
|
+
end
|
4
|
+
|
5
|
+
Factory.sequence :customer_id do |n|
|
6
|
+
n
|
7
|
+
end
|
8
|
+
|
9
|
+
Factory.define :customer, :class => Chargify::Customer do |c|
|
10
|
+
c.first_name { Faker::Name.first_name }
|
11
|
+
c.last_name { Faker::Name.last_name }
|
12
|
+
c.email { Factory.next(:email) }
|
13
|
+
c.organization { Faker::Company.name }
|
14
|
+
c.created_at { 2.days.ago }
|
15
|
+
c.updated_at { 1.hour.ago }
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
Factory.sequence :product_id do |n|
|
20
|
+
n
|
21
|
+
end
|
22
|
+
|
23
|
+
Factory.sequence :product_name do |n|
|
24
|
+
"Product #{n}"
|
25
|
+
end
|
26
|
+
|
27
|
+
Factory.define :product, :class => Chargify::Product do |p|
|
28
|
+
p.name { Factory.next(:product_name) }
|
29
|
+
end
|
30
|
+
|
31
|
+
Factory.define :subscription, :class => Chargify::Subscription do |s|
|
32
|
+
s.balance_in_cents 500
|
33
|
+
s.current_period_ends_at 3.days.from_now
|
34
|
+
end
|
35
|
+
|
36
|
+
Factory.define :subscription_with_extra_attrs, :parent => :subscription do |swea|
|
37
|
+
swea.customer Chargify::Customer.new
|
38
|
+
swea.product Chargify::Product.new
|
39
|
+
swea.credit_card "CREDIT CARD"
|
40
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
# Taken from https://gist.github.com/238158/487a411c392e1fb2a0c00347e32444320f5cdd49
|
2
|
+
require 'FakeWeb'
|
3
|
+
|
4
|
+
module ActiveResource
|
5
|
+
|
6
|
+
#
|
7
|
+
# The FakeResource fakes ActiveResources so that no real resources are transferred. It catches the creation methods
|
8
|
+
# and stores the resources internally instead of sending to a remote service and responds these resources back on
|
9
|
+
# request.
|
10
|
+
#
|
11
|
+
# Additionally it adds a save! method and can be used in conjunction with Cucumber/Pickle/FactoryGirl to fully
|
12
|
+
# fake a back end service in the BDD cycle
|
13
|
+
#
|
14
|
+
module FakeResource
|
15
|
+
|
16
|
+
@@fake_resources = []
|
17
|
+
|
18
|
+
def self.clean
|
19
|
+
FakeWeb.clean_registry
|
20
|
+
@@fake_resources = []
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.included(base)
|
24
|
+
base.class_eval do
|
25
|
+
|
26
|
+
def save
|
27
|
+
@@fake_resources << self
|
28
|
+
update_fake_responses
|
29
|
+
end
|
30
|
+
|
31
|
+
def destroy
|
32
|
+
@@fake_resources.delete(self)
|
33
|
+
update_fake_responses
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.delete(id, options = {})
|
37
|
+
puts "delete"
|
38
|
+
@@fake_resources.delete_if {|r| r.id == id }
|
39
|
+
#update_fake_responses
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.exists?(id, options = {})
|
43
|
+
not @@fake_resources.select {|r| r.id == id}.blank?
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def save!
|
50
|
+
save
|
51
|
+
end
|
52
|
+
|
53
|
+
def save
|
54
|
+
super
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def update_fake_responses
|
60
|
+
FakeWeb.clean_registry
|
61
|
+
|
62
|
+
@@fake_resources.each do |r|
|
63
|
+
FakeWeb.register_uri(:get, element_uri, :body => r.to_xml)
|
64
|
+
end
|
65
|
+
|
66
|
+
FakeWeb.register_uri(:get, collection_uri, :body => @@fake_resources.to_xml)
|
67
|
+
end
|
68
|
+
|
69
|
+
def element_uri
|
70
|
+
"#{base_uri}#{element_path}"
|
71
|
+
end
|
72
|
+
|
73
|
+
def collection_uri
|
74
|
+
"#{base_uri}#{collection_path}"
|
75
|
+
end
|
76
|
+
|
77
|
+
def base_uri
|
78
|
+
"#{connection.site.scheme}://#{connection.user}:#{connection.password}@#{connection.site.host}:#{connection.site.port}"
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe Chargify::Product do
|
4
|
+
|
5
|
+
context 'find by handle' do
|
6
|
+
before do
|
7
|
+
@handle = 'handle1'
|
8
|
+
@existing_product = Factory(:product, :handle => @handle, :id => Factory.next(:product_id))
|
9
|
+
FakeWeb.register_uri(:get, "#{test_domain}/products/lookup.xml?handle=#{@existing_product.handle}", :body => @existing_product.attributes.to_xml)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'finds the correct product by handle' do
|
13
|
+
product = Chargify::Product.find_by_handle(@handle)
|
14
|
+
product.should eql(@existing_product)
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'is an instance of Chargify::Product' do
|
18
|
+
product = Chargify::Product.find_by_handle(@handle)
|
19
|
+
product.should be_instance_of(Chargify::Product)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spec'
|
3
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
4
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
5
|
+
|
6
|
+
require 'chargify_api_ares'
|
7
|
+
|
8
|
+
require 'fakeweb'
|
9
|
+
require 'mocks/fake_resource'
|
10
|
+
ActiveResource::Base.send :include, ActiveResource::FakeResource
|
11
|
+
FakeWeb.allow_net_connect = false
|
12
|
+
require 'factory_girl'
|
13
|
+
require 'faker'
|
14
|
+
|
15
|
+
Chargify.configure do |c|
|
16
|
+
c.subdomain = 'test'
|
17
|
+
c.api_key = 'test'
|
18
|
+
end
|
19
|
+
|
20
|
+
Spec::Runner.configure do |config|
|
21
|
+
config.after(:each) do
|
22
|
+
ActiveResource::FakeResource.clean
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_domain
|
27
|
+
"#{Chargify::Base.connection.site.scheme}://#{Chargify::Base.connection.user}:#{Chargify::Base.connection.password}@#{Chargify::Base.connection.site.host}:#{Chargify::Base.connection.site.port}"
|
28
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe Chargify::Subscription do
|
4
|
+
|
5
|
+
context 'strips nested association attributes before saving' do
|
6
|
+
before do
|
7
|
+
@subscription = Factory.build(:subscription_with_extra_attrs)
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'strips customer' do
|
11
|
+
@subscription.attributes['customer'].should_not be_blank
|
12
|
+
@subscription.save!
|
13
|
+
@subscription.attributes['customer'].should be_blank
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'strips product' do
|
17
|
+
@subscription.attributes['product'].should_not be_blank
|
18
|
+
@subscription.save!
|
19
|
+
@subscription.attributes['product'].should be_blank
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'strips credit card' do
|
23
|
+
@subscription.attributes['credit_card'].should_not be_blank
|
24
|
+
@subscription.save!
|
25
|
+
@subscription.attributes['credit_card'].should be_blank
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'doesn\'t strip other attrs' do
|
29
|
+
subscription = Factory.build(:subscription)
|
30
|
+
|
31
|
+
lambda { subscription.save! }.should_not change(subscription, :attributes)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'cancels the subscription' do
|
36
|
+
@subscription = Factory(:subscription, :id => 1)
|
37
|
+
find_subscription = lambda { Chargify::Subscription.find(1) }
|
38
|
+
|
39
|
+
find_subscription.should_not raise_error
|
40
|
+
@subscription.cancel
|
41
|
+
find_subscription.should raise_error
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chargify_api_ares
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Klett
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date:
|
13
|
+
date: 2010-01-08 00:00:00 -08:00
|
14
14
|
default_executable:
|
15
15
|
dependencies: []
|
16
16
|
|
@@ -34,6 +34,13 @@ files:
|
|
34
34
|
- samples/customers.rb
|
35
35
|
- samples/products.rb
|
36
36
|
- samples/subscriptions.rb
|
37
|
+
- spec/base_spec.rb
|
38
|
+
- spec/customer_spec.rb
|
39
|
+
- spec/factories.rb
|
40
|
+
- spec/mocks/fake_resource.rb
|
41
|
+
- spec/product_spec.rb
|
42
|
+
- spec/spec_helper.rb
|
43
|
+
- spec/subscription_spec.rb
|
37
44
|
has_rdoc: true
|
38
45
|
homepage: http://github.com/grasshopperlabs/chargify_api_ares
|
39
46
|
licenses: []
|
@@ -62,5 +69,11 @@ rubygems_version: 1.3.5
|
|
62
69
|
signing_key:
|
63
70
|
specification_version: 3
|
64
71
|
summary: A Chargify API wrapper for Ruby using ActiveResource
|
65
|
-
test_files:
|
66
|
-
|
72
|
+
test_files:
|
73
|
+
- spec/base_spec.rb
|
74
|
+
- spec/customer_spec.rb
|
75
|
+
- spec/factories.rb
|
76
|
+
- spec/mocks/fake_resource.rb
|
77
|
+
- spec/product_spec.rb
|
78
|
+
- spec/spec_helper.rb
|
79
|
+
- spec/subscription_spec.rb
|