chargify_api_ares 0.4.4 → 0.5.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.
Files changed (48) hide show
  1. data/.gitignore +1 -0
  2. data/.travis.yml +7 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +57 -0
  5. data/Guardfile +15 -0
  6. data/README.md +29 -37
  7. data/Rakefile +12 -5
  8. data/chargify_api_ares.gemspec +25 -63
  9. data/examples/coupons.rb +50 -0
  10. data/{samples → examples}/customers.rb +1 -1
  11. data/{samples → examples}/metered_components.rb +5 -2
  12. data/{samples → examples}/products.rb +1 -1
  13. data/{samples → examples}/subscriptions.rb +2 -2
  14. data/{samples → examples}/transactions.rb +2 -3
  15. data/lib/chargify_api_ares.rb +14 -314
  16. data/lib/chargify_api_ares/config.rb +16 -0
  17. data/lib/chargify_api_ares/resources/base.rb +14 -0
  18. data/lib/chargify_api_ares/resources/component.rb +4 -0
  19. data/lib/chargify_api_ares/resources/coupon.rb +19 -0
  20. data/lib/chargify_api_ares/resources/customer.rb +21 -0
  21. data/lib/chargify_api_ares/resources/payment_profile.rb +4 -0
  22. data/lib/chargify_api_ares/resources/product.rb +25 -0
  23. data/lib/chargify_api_ares/resources/product_family.rb +34 -0
  24. data/lib/chargify_api_ares/resources/site.rb +7 -0
  25. data/lib/chargify_api_ares/resources/statement.rb +4 -0
  26. data/lib/chargify_api_ares/resources/subscription.rb +123 -0
  27. data/lib/chargify_api_ares/resources/transaction.rb +17 -0
  28. data/lib/chargify_api_ares/resources/usage.rb +11 -0
  29. data/spec/factories.rb +28 -24
  30. data/spec/remote/remote.example.yml +6 -0
  31. data/spec/remote/remote_spec.rb +347 -452
  32. data/spec/remote/spec_helper.rb +11 -15
  33. data/spec/{base_spec.rb → resources/base_spec.rb} +1 -1
  34. data/spec/resources/coupon_spec.rb +35 -0
  35. data/spec/resources/customer_spec.rb +36 -0
  36. data/spec/resources/product_family_spec.rb +57 -0
  37. data/spec/resources/product_spec.rb +23 -0
  38. data/spec/{subscriptions_component_spec.rb → resources/subscription_component_spec.rb} +2 -2
  39. data/spec/{subscription_spec.rb → resources/subscription_spec.rb} +2 -2
  40. data/spec/resources/usage_spec.rb +44 -0
  41. data/spec/spec_helper.rb +6 -8
  42. data/spec/{mocks → support}/fake_resource.rb +0 -0
  43. metadata +148 -29
  44. data/VERSION +0 -1
  45. data/config/remote.example.yml +0 -7
  46. data/spec/components_spec.rb +0 -48
  47. data/spec/customer_spec.rb +0 -23
  48. data/spec/product_spec.rb +0 -23
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  config/remote.yml
2
+ spec/remote/remote.yml
2
3
  pkg
3
4
  .rvmrc
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ rvm:
2
+ - 1.8.7
3
+ - 1.9.2
4
+ - ree
5
+ branches:
6
+ only:
7
+ - master
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :rubygems
2
+
3
+ # Specify your gem's dependencies in chargify_api_ares.gemspec
4
+ gemspec
data/Gemfile.lock ADDED
@@ -0,0 +1,57 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ chargify_api_ares (0.4.4)
5
+ activeresource (>= 2.3.5)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ activemodel (3.1.1)
11
+ activesupport (= 3.1.1)
12
+ builder (~> 3.0.0)
13
+ i18n (~> 0.6)
14
+ activeresource (3.1.1)
15
+ activemodel (= 3.1.1)
16
+ activesupport (= 3.1.1)
17
+ activesupport (3.1.1)
18
+ multi_json (~> 1.0)
19
+ builder (3.0.0)
20
+ diff-lcs (1.1.3)
21
+ factory_girl (2.1.2)
22
+ activesupport
23
+ faker (1.0.1)
24
+ i18n (~> 0.4)
25
+ fakeweb (1.3.0)
26
+ growl (1.0.3)
27
+ guard (0.8.8)
28
+ thor (~> 0.14.6)
29
+ guard-rspec (0.5.0)
30
+ guard (>= 0.8.4)
31
+ i18n (0.6.0)
32
+ multi_json (1.0.3)
33
+ rake (0.9.2.2)
34
+ rb-fsevent (0.4.3.1)
35
+ rspec (2.7.0)
36
+ rspec-core (~> 2.7.0)
37
+ rspec-expectations (~> 2.7.0)
38
+ rspec-mocks (~> 2.7.0)
39
+ rspec-core (2.7.1)
40
+ rspec-expectations (2.7.0)
41
+ diff-lcs (~> 1.1.2)
42
+ rspec-mocks (2.7.0)
43
+ thor (0.14.6)
44
+
45
+ PLATFORMS
46
+ ruby
47
+
48
+ DEPENDENCIES
49
+ chargify_api_ares!
50
+ factory_girl (~> 2.1.0)
51
+ faker (~> 1.0.1)
52
+ fakeweb (~> 1.3.0)
53
+ growl (~> 1.0.3)
54
+ guard-rspec (~> 0.5.0)
55
+ rake (~> 0.9.2)
56
+ rb-fsevent (~> 0.4.2)
57
+ rspec (~> 2.7.0)
data/Guardfile ADDED
@@ -0,0 +1,15 @@
1
+ # Run me with:
2
+ #
3
+ # $ bundle exec guard
4
+
5
+ begin
6
+ require 'rb-inotify'
7
+ require 'libnotify'
8
+ rescue LoadError
9
+ end
10
+
11
+ guard 'rspec', :all_on_start => false, :all_after_pass => false do
12
+ watch(%r{^spec/.+_spec\.rb})
13
+ watch(%r{^lib/(.+)\.rb}) { |m| "spec/lib/#{m[1]}_spec.rb" }
14
+ watch(%r{^spec/.+_spec\.rb})
15
+ end
data/README.md CHANGED
@@ -1,31 +1,30 @@
1
1
  Chargify API wrapper for Ruby (using ActiveResource) [![build status](https://secure.travis-ci.org/grasshopperlabs/chargify_api_ares.png)](http://travis-ci.org/grasshopperlabs/chargify_api_ares)
2
2
  ====================================================
3
3
 
4
- chargify_api_ares
5
- -----------------
6
-
7
4
  This is a Ruby wrapper for the [Chargify](http://chargify.com) API that leverages ActiveResource.
5
+
8
6
  It allows you to interface with the Chargify API using simple ActiveRecord-like syntax, i.e.:
9
7
 
10
- Chargify::Subscription.create(
11
- :customer_reference => 'moklett',
12
- :product_handle => 'chargify-api-ares-test',
13
- :credit_card_attributes => {
14
- :first_name => "Michael",
15
- :last_name => "Klett",
16
- :expiration_month => 1,
17
- :expiration_year => 2010,
18
- :full_number => "1234-1234-1234-1234"
19
- }
20
- )
21
-
22
- subscription.credit_card_attributes = {:expiration_year => 2013}
23
- subscription.save
24
-
25
- subscription.cancel
8
+ ``` ruby
9
+ Chargify::Subscription.create(
10
+ :customer_reference => 'moklett',
11
+ :product_handle => 'chargify-api-ares-test',
12
+ :credit_card_attributes => {
13
+ :first_name => "Michael",
14
+ :last_name => "Klett",
15
+ :expiration_month => 1,
16
+ :expiration_year => 2010,
17
+ :full_number => "1234-1234-1234-1234"
18
+ }
19
+ )
20
+
21
+ subscription.credit_card_attributes = { :expiration_year => 2013 }
22
+ subscription.save
26
23
 
27
- See the `samples` directory for more usage examples.
24
+ subscription.cancel
25
+ ```
28
26
 
27
+ See the `examples` directory for more usage examples.
29
28
 
30
29
  ### Installation
31
30
 
@@ -35,31 +34,24 @@ You can install this library as a gem using the following command:
35
34
 
36
35
  $ gem install chargify_api_ares
37
36
 
38
-
39
- ### Requirements
40
-
41
- This library requires ActiveResource version 2.3.4 or greater.
42
-
43
- $ gem install activeresource
44
-
45
-
46
37
  ### Usage
47
38
 
48
39
  Simply require this library before you use it:
49
40
 
50
- require 'chargify_api_ares'
41
+ ``` ruby
42
+ require 'chargify_api_ares'
43
+ ```
51
44
 
52
-
53
45
  If you're using Rails, you could include this gem in your configuration, i.e. in `environment.rb`
54
46
 
55
- config.gem 'chargify_api_ares'
47
+ ``` ruby
48
+ config.gem 'chargify_api_ares'
49
+ ```
56
50
 
57
-
58
51
  Now you'll have access to classes the interact with the Chargify API, such as:
59
52
 
60
- `Chargify::Product`
61
- `Chargify::Customer`
62
- `Chargifiy::Subscription`
53
+ * `Chargify::Product`
54
+ * `Chargify::Customer`
55
+ * `Chargify::Subscription`
63
56
 
64
- Check out the examples in the `samples` directory. If you're not familiar with how ActiveResource works,
65
- you may be interested in some [ActiveResource Documentation](http://apidock.com/rails/ActiveResource/Base)
57
+ Check out the examples in the `examples` directory. If you're not familiar with how ActiveResource works, you may be interested in some [ActiveResource Documentation](http://apidock.com/rails/ActiveResource/Base)
data/Rakefile CHANGED
@@ -1,9 +1,16 @@
1
- require 'rake'
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
2
3
  require 'rspec/core/rake_task'
3
4
 
4
- desc 'Run the spec suite'
5
- RSpec::Core::RakeTask.new('spec') {|t|
6
- t.rspec_opts = ['--colour', '--format Fuubar']
7
- }
5
+ RSpec::Core::RakeTask.new(:spec) do |t|
6
+ t.pattern = FileList['spec/**/*_spec.rb'].exclude('spec/remote/**/*')
7
+ end
8
+
9
+ namespace :spec do
10
+ desc "Run remote specs"
11
+ RSpec::Core::RakeTask.new(:remote) do |t|
12
+ t.pattern = FileList['spec/remote/**/*_spec.rb']
13
+ end
14
+ end
8
15
 
9
16
  task :default => :spec
@@ -1,69 +1,31 @@
1
1
  Gem::Specification.new do |s|
2
- s.name = %q{chargify_api_ares}
3
- s.version = "0.4.4"
4
-
2
+ s.specification_version = 3 if s.respond_to? :specification_version=
5
3
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
4
+ s.rubygems_version = '1.3.7'
5
+
6
+ s.name = 'chargify_api_ares'
7
+ s.version = '0.5.0'
8
+ s.date = '2011-11-08'
9
+ s.summary = 'A Chargify API wrapper for Ruby using ActiveResource'
10
+ s.description = ''
6
11
  s.authors = ["Michael Klett", "Nathan Verni", "Rodrigo Franco", "Shay Frendt"]
7
- s.date = %q{2011-10-25}
8
- s.description = %q{}
9
- s.email = %q{support@chargify.com}
10
- s.extra_rdoc_files = [
11
- "LICENSE.txt",
12
- "README.md"
13
- ]
14
- s.files = [
15
- ".gitignore",
16
- "LICENSE.txt",
17
- "README.md",
18
- "Rakefile",
19
- "VERSION",
20
- "chargify_api_ares.gemspec",
21
- "config/remote.example.yml",
22
- "lib/chargify_api_ares.rb",
23
- "samples/customers.rb",
24
- "samples/metered_components.rb",
25
- "samples/products.rb",
26
- "samples/subscriptions.rb",
27
- "samples/transactions.rb",
28
- "spec/base_spec.rb",
29
- "spec/components_spec.rb",
30
- "spec/customer_spec.rb",
31
- "spec/factories.rb",
32
- "spec/mocks/fake_resource.rb",
33
- "spec/product_spec.rb",
34
- "spec/remote/remote_spec.rb",
35
- "spec/remote/spec_helper.rb",
36
- "spec/spec.opts",
37
- "spec/spec_helper.rb",
38
- "spec/subscription_spec.rb",
39
- "spec/subscriptions_component_spec.rb"
40
- ]
41
- s.homepage = %q{http://github.com/grasshopperlabs/chargify_api_ares}
42
- s.rdoc_options = ["--charset=UTF-8"]
43
- s.require_paths = ["lib"]
44
- s.rubygems_version = %q{1.3.7}
45
- s.summary = %q{A Chargify API wrapper for Ruby using ActiveResource}
46
- s.test_files = [
47
- "spec/base_spec.rb",
48
- "spec/components_spec.rb",
49
- "spec/customer_spec.rb",
50
- "spec/factories.rb",
51
- "spec/mocks/fake_resource.rb",
52
- "spec/product_spec.rb",
53
- "spec/remote/remote_spec.rb",
54
- "spec/remote/spec_helper.rb",
55
- "spec/spec_helper.rb",
56
- "spec/subscription_spec.rb",
57
- "spec/subscriptions_component_spec.rb"
58
- ]
12
+ s.email = 'support@chargify.com'
13
+ s.homepage = 'http://github.com/grasshopperlabs/chargify_api_ares'
14
+
15
+ s.files = `git ls-files`.split("\n")
16
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
+ s.require_paths = %w[lib]
59
18
 
60
- if s.respond_to? :specification_version then
61
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
62
- s.specification_version = 3
19
+ # Runtime Dependencies
20
+ s.add_runtime_dependency('activeresource', '>= 2.3.5')
63
21
 
64
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
65
- else
66
- end
67
- else
68
- end
22
+ # Development Dependencies
23
+ s.add_development_dependency('rake', '~> 0.9.2')
24
+ s.add_development_dependency('rspec', '~> 2.7.0')
25
+ s.add_development_dependency('factory_girl', '~> 2.1.0')
26
+ s.add_development_dependency('fakeweb', '~> 1.3.0')
27
+ s.add_development_dependency('faker', '~> 1.0.1')
28
+ s.add_development_dependency('guard-rspec', '~> 0.5.0')
29
+ s.add_development_dependency('growl', '~> 1.0.3')
30
+ s.add_development_dependency('rb-fsevent', '~> 0.4.2')
69
31
  end
@@ -0,0 +1,50 @@
1
+ $: << File.expand_path(File.dirname(__FILE__) + '/../lib')
2
+
3
+ require 'chargify_api_ares'
4
+
5
+ # You could load your credentials from a file...
6
+ chargify_config = YAML::load_file(File.join(File.dirname(__FILE__), '..', 'chargify.yml'))
7
+
8
+ Chargify.configure do |c|
9
+ c.subdomain = chargify_config['subdomain']
10
+ c.api_key = chargify_config['api_key']
11
+ end
12
+
13
+
14
+ # Create a new coupon
15
+ coupon = Chargify::Coupon.create(
16
+ :name => "66% off",
17
+ :code => "66OFF",
18
+ :description => "66% OFF for life",
19
+ :percentage => "66",
20
+ :recurring => false,
21
+ :product_family_id => 2
22
+ )
23
+
24
+ # Lookup up existing coupon using the product_family_id and the coupon code
25
+ coupon = Chargify::Subscription::Coupon.find_by_product_family_id_and_code(2,"10OFF")
26
+
27
+ # Looking up all coupons for a product family
28
+ coupons = Chargify::Coupon.find_all_by_product_family_id(12345)
29
+
30
+ # Update coupon information
31
+ coupon = Chargify::Coupon.find_by_product_family_id_and_code(2,"10OFF")
32
+ coupon.code = "FOO"
33
+ coupon.save
34
+
35
+ # Archive coupon
36
+ coupon = Chargify::Coupon.find_by_product_family_id_and_code(2,"10OFF")
37
+ coupon.archive
38
+
39
+ # Inspect coupon usage
40
+ coupon = Chargify::Coupon.find_by_product_family_id_and_code(2,"10OFF")
41
+ coupon.usage
42
+ #>> [{"name"=>"Product 1", "savings"=>0.0, "id"=>8, "signups"=>5, "revenue"=>0.0}, {"name"=>"Product 2", "savings"=>0.0, "id"=>9, "signups"=>0, "revenue"=>0.0}]
43
+
44
+ # Apply coupon to subscription
45
+ subscription = Subscription.find_by_customer_reference('moklett')
46
+ subscription.add_coupon('5OFF')
47
+
48
+ # Remove coupon from subscription
49
+ subscription = Subscription.find_by_customer_reference('moklett')
50
+ subscription.remove_coupon
@@ -3,7 +3,7 @@ $: << File.expand_path(File.dirname(__FILE__) + '/../lib')
3
3
  require 'chargify_api_ares'
4
4
 
5
5
  # You could load your credentials from a file...
6
- chargify_config = YAML::load_file(File.join(File.dirname(__FILE__), '..', 'config', 'chargify.yml'))
6
+ chargify_config = YAML::load_file(File.join(File.dirname(__FILE__), '..', 'chargify.yml'))
7
7
 
8
8
  Chargify.configure do |c|
9
9
  c.subdomain = chargify_config['subdomain']
@@ -3,7 +3,7 @@ $: << File.expand_path(File.dirname(__FILE__) + '/../lib')
3
3
  require 'chargify_api_ares'
4
4
 
5
5
  # You could load your credentials from a file...
6
- chargify_config = YAML::load_file(File.join(File.dirname(__FILE__), '..', 'config', 'chargify.yml'))
6
+ chargify_config = YAML::load_file(File.join(File.dirname(__FILE__), '..', 'chargify.yml'))
7
7
 
8
8
  Chargify.configure do |c|
9
9
  c.subdomain = chargify_config['subdomain']
@@ -32,4 +32,7 @@ u.save
32
32
 
33
33
 
34
34
  x = Chargify::Usage.find(:last, :params => {:subscription_id => subscription.id, :component_id => component.id})
35
- puts x.memo == d
35
+ puts x.memo == d
36
+
37
+ # Call a specific Component by ID
38
+ component = Chargify::ProductFamily::Component.find(component_id, :params => {:product_family_id => product_family_id})
@@ -3,7 +3,7 @@ $: << File.expand_path(File.dirname(__FILE__) + '/../lib')
3
3
  require 'chargify_api_ares'
4
4
 
5
5
  # You could load your credentials from a file...
6
- chargify_config = YAML::load_file(File.join(File.dirname(__FILE__), '..', 'config', 'chargify.yml'))
6
+ chargify_config = YAML::load_file(File.join(File.dirname(__FILE__), '..', 'chargify.yml'))
7
7
 
8
8
  Chargify.configure do |c|
9
9
  c.subdomain = chargify_config['subdomain']
@@ -3,7 +3,7 @@ $: << File.expand_path(File.dirname(__FILE__) + '/../lib')
3
3
  require 'chargify_api_ares'
4
4
 
5
5
  # You could load your credentials from a file...
6
- chargify_config = YAML::load_file(File.join(File.dirname(__FILE__), '..', 'config', 'chargify.yml'))
6
+ chargify_config = YAML::load_file(File.join(File.dirname(__FILE__), '..', 'chargify.yml'))
7
7
 
8
8
  Chargify.configure do |c|
9
9
  c.subdomain = chargify_config['subdomain']
@@ -50,4 +50,4 @@ subscription.charge(:amount => 10.00, :memo => 'Extra service')
50
50
  # Cancel a subscription
51
51
  subscription.cancel
52
52
  subscription.reload
53
- # => #<Chargify::Subscription:0x1020ed4b0 @prefix_options={}, @attributes={"cancellation_message"=>nil, "activated_at"=>Tue Nov 17 16:00:17 UTC 2009, "expires_at"=>nil, "updated_at"=>Tue Nov 17 16:00:17 UTC 2009, "credit_card"=>#<Chargify::Subscription::CreditCard:0x10234f168 @prefix_options={}, @attributes={"card_type"=>"bogus", "expiration_year"=>2015, "masked_card_number"=>"XXXX-XXXX-XXXX-2", "first_name"=>"Michael", "expiration_month"=>1, "last_name"=>"Klett"}>, "product"=>#<Chargify::Product:0x10234f370 @prefix_options={}, @attributes={"price_in_cents"=>0, "name"=>"Chargify API Ares Test", "handle"=>"chargify-api-ares-test", "product_family"=>#<Chargify::Product::ProductFamily:0x102354708 @prefix_options={}, @attributes={"name"=>"Chargify API ARes Test", "handle"=>"chargify-api-ares-test", "id"=>79, "accounting_code"=>nil}>, "id"=>153, "accounting_code"=>nil, "interval_unit"=>"month", "interval"=>1}>, "credit_card_attributes"=>{:full_number=>"2", :expiration_year=>"2015"}, "trial_ended_at"=>nil, "id"=>331, "current_period_ends_at"=>Thu Dec 17 16:00:17 UTC 2009, "product_handle"=>"chargify-api-ares-test", "customer"=>#<Chargify::Customer:0x10234f730 @prefix_options={}, @attributes={"reference"=>"moklett", "updated_at"=>Tue Nov 17 15:51:02 UTC 2009, "id"=>331, "first_name"=>"Michael", "organization"=>"Chargify", "last_name"=>"Klett", "email"=>"moklett@example.com", "created_at"=>Tue Nov 17 15:51:02 UTC 2009}>, "trial_started_at"=>nil, "balance_in_cents"=>0, "current_period_started_at"=>Tue Nov 17 16:00:17 UTC 2009, "state"=>"canceled", "created_at"=>Tue Nov 17 16:00:17 UTC 2009, "customer_reference"=>"moklett"}>
53
+ # => #<Chargify::Subscription:0x1020ed4b0 @prefix_options={}, @attributes={"cancellation_message"=>nil, "activated_at"=>Tue Nov 17 16:00:17 UTC 2009, "expires_at"=>nil, "updated_at"=>Tue Nov 17 16:00:17 UTC 2009, "credit_card"=>#<Chargify::Subscription::CreditCard:0x10234f168 @prefix_options={}, @attributes={"card_type"=>"bogus", "expiration_year"=>2015, "masked_card_number"=>"XXXX-XXXX-XXXX-2", "first_name"=>"Michael", "expiration_month"=>1, "last_name"=>"Klett"}>, "product"=>#<Chargify::Product:0x10234f370 @prefix_options={}, @attributes={"price_in_cents"=>0, "name"=>"Chargify API Ares Test", "handle"=>"chargify-api-ares-test", "product_family"=>#<Chargify::Product::ProductFamily:0x102354708 @prefix_options={}, @attributes={"name"=>"Chargify API ARes Test", "handle"=>"chargify-api-ares-test", "id"=>79, "accounting_code"=>nil}>, "id"=>153, "accounting_code"=>nil, "interval_unit"=>"month", "interval"=>1}>, "credit_card_attributes"=>{:full_number=>"2", :expiration_year=>"2015"}, "trial_ended_at"=>nil, "id"=>331, "current_period_ends_at"=>Thu Dec 17 16:00:17 UTC 2009, "product_handle"=>"chargify-api-ares-test", "customer"=>#<Chargify::Customer:0x10234f730 @prefix_options={}, @attributes={"reference"=>"moklett", "updated_at"=>Tue Nov 17 15:51:02 UTC 2009, "id"=>331, "first_name"=>"Michael", "organization"=>"Chargify", "last_name"=>"Klett", "email"=>"moklett@example.com", "created_at"=>Tue Nov 17 15:51:02 UTC 2009}>, "trial_started_at"=>nil, "balance_in_cents"=>0, "current_period_started_at"=>Tue Nov 17 16:00:17 UTC 2009, "state"=>"canceled", "created_at"=>Tue Nov 17 16:00:17 UTC 2009, "customer_reference"=>"moklett"}>
@@ -3,15 +3,14 @@ $: << File.expand_path(File.dirname(__FILE__) + '/../lib')
3
3
  require 'chargify_api_ares'
4
4
 
5
5
  # You could load your credentials from a file...
6
- chargify_config = YAML::load_file(File.join(File.dirname(__FILE__), '..', 'config', 'chargify.yml'))
6
+ chargify_config = YAML::load_file(File.join(File.dirname(__FILE__), '..', 'chargify.yml'))
7
7
 
8
8
  Chargify.configure do |c|
9
9
  c.subdomain = chargify_config['subdomain']
10
10
  c.api_key = chargify_config['api_key']
11
11
  end
12
12
 
13
-
14
13
  # Retrieve a list of all your customers
15
14
  subscription = Chargify::Subscription.find(:all).first
16
15
 
17
- transactions = subscription.transactions
16
+ transactions = subscription.transactions
@@ -1,314 +1,14 @@
1
- # Chargify API Wrapper using ActiveResource.
2
- #
3
- require 'thread'
4
-
5
- begin
6
- require 'active_resource'
7
- rescue LoadError
8
- begin
9
- require 'rubygems'
10
- require 'active_resource'
11
- rescue LoadError
12
- abort <<-ERROR
13
- The 'activeresource' library could not be loaded. If you have RubyGems
14
- installed you can install ActiveResource by doing "gem install activeresource".
15
- ERROR
16
- end
17
- end
18
-
19
-
20
- # Version check
21
- module Chargify
22
- MIN_VERSION = '2.3.4'
23
- end
24
- require 'active_resource/version'
25
- unless Gem::Version.new(ActiveResource::VERSION::STRING) >= Gem::Version.new(Chargify::MIN_VERSION)
26
- abort <<-ERROR
27
- ActiveResource version #{Chargify::MIN_VERSION} or greater is required.
28
- ERROR
29
- end
30
-
31
- # Patch ActiveResource version 2.3.4
32
- if ActiveResource::VERSION::STRING == '2.3.4'
33
- module ActiveResource
34
- class Base
35
- def save
36
- save_without_validation
37
- true
38
- rescue ResourceInvalid => error
39
- case error.response['Content-Type']
40
- when /application\/xml/
41
- errors.from_xml(error.response.body)
42
- when /application\/json/
43
- errors.from_json(error.response.body)
44
- end
45
- false
46
- end
47
- end
48
- end
49
- end
50
-
51
-
52
- module Chargify
53
-
54
- class << self
55
- attr_accessor :subdomain, :api_key, :site, :format, :timeout
56
-
57
- def configure
58
- yield self
59
-
60
- Base.user = api_key
61
- Base.password = 'X'
62
- Base.timeout = timeout unless (timeout.blank?)
63
-
64
- self.site ||= "https://#{subdomain}.chargify.com"
65
-
66
- Base.site = site
67
- Subscription::Component.site = site + "/subscriptions/:subscription_id"
68
- Subscription::Statement.site = site + "/subscriptions/:subscription_id"
69
- Subscription::Transaction.site = site + "/subscriptions/:subscription_id"
70
- Coupon.site = site + "/product_families/:product_family_id"
71
- ProductFamily::Component.site = site + "/product_families/:product_family_id"
72
- end
73
- end
74
-
75
- class Base < ActiveResource::Base
76
- self.format = :xml
77
-
78
- def self.element_name
79
- name.split(/::/).last.underscore
80
- end
81
-
82
- def to_xml(options = {})
83
- options.merge!(:dasherize => false)
84
- super
85
- end
86
- end
87
-
88
- class Site < Base
89
- def self.clear_data!(params = {})
90
- post(:clear_data, params)
91
- end
92
- end
93
-
94
- class Customer < Base
95
- def self.find_by_reference(reference)
96
- Customer.new get(:lookup, :reference => reference)
97
- end
98
-
99
- def subscriptions(params = {})
100
- params.merge!({:customer_id => self.id})
101
- Subscription.find(:all, :params => params)
102
- end
103
-
104
- def payment_profiles(params = {})
105
- params.merge!({:customer_id => self.id})
106
- PaymentProfile.find(:all, :params => params)
107
- end
108
- end
109
-
110
- class Subscription < Base
111
- def self.find_by_customer_reference(reference)
112
- customer = Customer.find_by_reference(reference)
113
- find(:first, :params => {:customer_id => customer.id})
114
- end
115
-
116
- # Strip off nested attributes of associations before saving, or type-mismatch errors will occur
117
- def save
118
- self.attributes.delete('customer')
119
- self.attributes.delete('product')
120
- self.attributes.delete('credit_card')
121
- super
122
- end
123
-
124
- def cancel
125
- destroy
126
- end
127
-
128
- def component(id)
129
- Component.find(id, :params => {:subscription_id => self.id})
130
- end
131
-
132
- def components(params = {})
133
- params.merge!({:subscription_id => self.id})
134
- Component.find(:all, :params => params)
135
- end
136
-
137
- def payment_profile
138
- self.respond_to?('credit_card') ? credit_card : nil
139
- end
140
-
141
- # Perform a one-time charge on an existing subscription.
142
- # For more information, please see the one-time charge API docs available
143
- # at: http://support.chargify.com/faqs/api/api-charges
144
- def charge(attrs = {})
145
- post :charges, {}, attrs.to_xml(:root => :charge)
146
- end
147
-
148
- def credit(attrs = {})
149
- post :credits, {}, attrs.to_xml(:root => :credit)
150
- end
151
-
152
- def refund(attrs = {})
153
- post :refunds, {}, attrs.to_xml(:root => :refund)
154
- end
155
-
156
- def reactivate(params = {})
157
- put :reactivate, params
158
- end
159
-
160
- def reset_balance
161
- put :reset_balance
162
- end
163
-
164
- def migrate(attrs = {})
165
- post :migrations, :migration => attrs
166
- end
167
-
168
- def statement(id)
169
- statement = Chargify::Statement.find(id)
170
- raise ActiveResource::ResourceNotFound.new(nil) if (statement.subscription_id != self.id)
171
- statement
172
- end
173
-
174
- def statements(params = {})
175
- params.merge!(:subscription_id => self.id)
176
- Statement.find(:all, :params => params)
177
- end
178
-
179
- def transactions(params = {})
180
- params.merge!(:subscription_id => self.id)
181
- Transaction.find(:all, :params => params)
182
- end
183
-
184
- def adjustment(attrs = {})
185
- post :adjustments, {}, attrs.to_xml(:root => :adjustment)
186
- end
187
-
188
- def add_coupon(code)
189
- post :add_coupon, :code => code
190
- end
191
-
192
- def remove_coupon(code)
193
- delete :remove_coupon, :code => code
194
- end
195
-
196
- class Component < Base
197
- # All Subscription Components are considered already existing records, but the id isn't used
198
- def id
199
- self.component_id
200
- end
201
- end
202
-
203
- class Statement < Base
204
- end
205
-
206
- class Transaction < Base
207
- def full_refund(attrs = {})
208
- return false if self.transaction_type != 'payment'
209
-
210
- attrs.merge!(:amount_in_cents => self.amount_in_cents)
211
- self.refund(attrs)
212
- end
213
-
214
- def refund(attrs = {})
215
- return false if self.transaction_type != 'payment'
216
-
217
- attrs.merge!(:payment_id => self.id)
218
- Subscription.find(self.prefix_options[:subscription_id]).refund(attrs)
219
- end
220
- end
221
- end
222
-
223
- class Product < Base
224
- def self.find_by_handle(handle)
225
- Product.new get(:lookup, :handle => handle)
226
- end
227
-
228
- protected
229
-
230
- # Products are created in the scope of a ProductFamily, i.e. /product_families/nnn/products
231
- #
232
- # This alters the collection path such that it uses the product_family_id that is set on the
233
- # attributes.
234
- def create
235
- pfid = begin
236
- self.product_family_id
237
- rescue NoMethodError
238
- 0
239
- end
240
- connection.post("/product_families/#{pfid}/products.#{self.class.format.extension}", encode, self.class.headers).tap do |response|
241
- self.id = id_from_response(response)
242
- load_attributes_from_response(response)
243
- end
244
- end
245
- end
246
-
247
- class ProductFamily < Base
248
- def self.find_by_handle(handle, attributes = {})
249
- ProductFamily.find(:one, :from => :lookup, :params => { :handle => handle })
250
- end
251
-
252
- class Component < Base
253
- end
254
-
255
- def components(params = {})
256
- params.merge!({:product_family_id => self.id})
257
- ::Chargify::ProductFamily::Component.find(:all, :params => params)
258
- end
259
-
260
- end
261
-
262
- class Usage < Base
263
- def subscription_id=(i)
264
- self.prefix_options[:subscription_id] = i
265
- end
266
- def component_id=(i)
267
- self.prefix_options[:component_id] = i
268
- end
269
- end
270
-
271
- class Component < Base
272
- end
273
-
274
- class Statement < Base
275
- end
276
-
277
- class Transaction < Base
278
- def full_refund(attrs = {})
279
- return false if self.transaction_type != 'payment'
280
-
281
- attrs.merge!(:amount_in_cents => self.amount_in_cents)
282
- self.refund(attrs)
283
- end
284
-
285
- def refund(attrs = {})
286
- return false if self.transaction_type != 'payment'
287
-
288
- attrs.merge!(:payment_id => self.id)
289
- Subscription.find(self.subscription_id).refund(attrs)
290
- end
291
- end
292
-
293
- class PaymentProfile < Base
294
- end
295
-
296
- class Coupon < Base
297
- def self.find_all_by_product_family_id(product_family_id)
298
- Coupon.find(:all, :params => { :product_family_id => product_family_id })
299
- end
300
-
301
- def self.find_by_product_family_id_and_code(product_family_id, code)
302
- Coupon.new get(:lookup, :product_family_id => product_family_id, :code => code)
303
- end
304
-
305
- def usage
306
- get :usage
307
- end
308
-
309
- def archive
310
- self.destroy
311
- end
312
- end
313
-
314
- end
1
+ require 'active_resource'
2
+ require 'chargify_api_ares/config'
3
+ require 'chargify_api_ares/resources/base'
4
+ require 'chargify_api_ares/resources/component'
5
+ require 'chargify_api_ares/resources/coupon'
6
+ require 'chargify_api_ares/resources/customer'
7
+ require 'chargify_api_ares/resources/payment_profile'
8
+ require 'chargify_api_ares/resources/product'
9
+ require 'chargify_api_ares/resources/product_family'
10
+ require 'chargify_api_ares/resources/site'
11
+ require 'chargify_api_ares/resources/statement'
12
+ require 'chargify_api_ares/resources/subscription'
13
+ require 'chargify_api_ares/resources/transaction'
14
+ require 'chargify_api_ares/resources/usage'