chargify_api_ares 0.6.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 603c7ec312d18a99d9cce9e2f9f0e863afbce583
4
+ data.tar.gz: fe3b1ee31a4d5f14dffdc98cd953b4d68dfd0869
5
+ SHA512:
6
+ metadata.gz: b824586396ae701bc6f06731bec1f146733184089af858803a83cdb6ed647fcbadf7d4cbd21e27aa43da13c3dea43a81fab15fe5762756752f92346c2a104d25
7
+ data.tar.gz: 96f8f56782d5d83344de9a0ec73e59cb78cebd6f78fa6ec5a38bf01b014a09af204e4f7ff317ffc1f6a161a30b79782437e6dc247fa316c362cefbce4bd82383
data/.travis.yml CHANGED
@@ -1,7 +1,7 @@
1
+ language: ruby
1
2
  rvm:
2
- - 1.8.7
3
+ - 2.0.0
4
+ - 1.9.3
3
5
  - 1.9.2
6
+ - 1.8.7
4
7
  - ree
5
- branches:
6
- only:
7
- - master
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- chargify_api_ares (0.6.1)
4
+ chargify_api_ares (1.0.0)
5
5
  activeresource (>= 3.0.0)
6
6
 
7
7
  GEM
data/HISTORY.md ADDED
@@ -0,0 +1,34 @@
1
+ ## 1.0.0 / Nov 19 2013
2
+
3
+ ### Backwards-incompatible changes
4
+ * `Chargify::Subscription.charge` now returns an ActiveResource `Charge` object. In the case of an error, the `Charge` object will have `errors`, and you will not have to rescue an HTTP `422`.
5
+
6
+ * Adds new `Chargify::Migration` and `Chargify::Migration::Preview` resources. These can be used as follows:
7
+
8
+ ```ruby
9
+ subscription = Chargify::Subscription.find_by_customer_reference('marky-mark')
10
+
11
+ # Chargify::Migration
12
+ migration = subscription.migrate(:product_handle => "basic-plan")
13
+
14
+ migration = Chargify::Migration.create(:subscription_id => subscription.id, :product_handle => "basic-plan")
15
+
16
+ # Chargify::Migration::Preview
17
+ preview = Chargify::Migration::Preview.create(:subscription_id => subscription.id, :product_handle => "basic-plan")
18
+
19
+ preview = Chargify::Migration.preview(:subscription_id => subscription.id, :product_handle => "basic-plan")
20
+ ```
21
+
22
+ Error handling looks like:
23
+
24
+ ```ruby
25
+ migration = subscription.migrate(:product_handle => "non-existent-plan")
26
+ migration.errors.full_messages
27
+ # => ["Invalid Product"]
28
+
29
+ preview = Chargify::Migration.preview(:subscription_id => subscription.id, :product_handle => "non-existent-plan")
30
+ preview.errors.full_messages
31
+ # => ["Product must be specified"]
32
+ ```
33
+
34
+ See `examples/migrations.rb` and specs for more details.
data/README.md CHANGED
@@ -2,15 +2,48 @@ Chargify API wrapper for Ruby (using ActiveResource)
2
2
  ====================================================
3
3
  [![build status](https://secure.travis-ci.org/chargify/chargify_api_ares.png)](http://travis-ci.org/chargify/chargify_api_ares)
4
4
 
5
+ **Note:** we have bumped to v1.0.0 to indicate a backwards incompatible change to the responses from `Chargify::Subscription.charge` and `Chargify::Subscription.migrate`. Please see the HISTORY.md for more information.
6
+
5
7
  **Please see important compatibility information at the bottom of this file.**
6
8
 
7
9
  This is a Ruby wrapper for the [Chargify](http://chargify.com) API that leverages ActiveResource.
8
10
 
11
+ ### Installation
12
+
13
+ This library can be installed as a gem. It is hosted on [Rubygems](http://rubygems.org).
14
+
15
+ You can install this library as a gem using the following command:
16
+
17
+ ``` bash
18
+ $ gem install chargify_api_ares
19
+ ```
20
+
21
+ ### Usage
22
+
23
+ Simply require this library before you use it:
24
+
25
+ ``` ruby
26
+ require 'chargify_api_ares'
27
+ ```
28
+
29
+ If you're using Rails 3.x, you could include this gem in your Gemfile.
30
+ ``` ruby
31
+ gem 'chargify_api_ares'
32
+ ```
33
+
34
+ Install the gem using the following command:
35
+ $ bundle install
36
+
37
+ If you're using Rails 2 you could include this gem in your configuration, i.e. in `environment.rb`
38
+
39
+ ``` ruby
40
+ config.gem 'chargify_api_ares'
41
+ ```
42
+
9
43
  To configure api key, site, domain, and protocol you can do the
10
44
  following. Please note that this step is required.
11
45
 
12
- Most common usage
13
- ----------------
46
+ #### Most common usage
14
47
 
15
48
  ``` ruby
16
49
  Chargify.configure do |c|
@@ -19,8 +52,7 @@ Most common usage
19
52
  end
20
53
  ```
21
54
 
22
- Overriding the endpoint
23
- --------------
55
+ #### Overriding the endpoint
24
56
 
25
57
  ``` ruby
26
58
  Chargify.configure do |c|
@@ -29,8 +61,7 @@ Overriding the endpoint
29
61
  end
30
62
  ```
31
63
 
32
- Available configuration options
33
- -------------------------------
64
+ ### Available configuration options
34
65
 
35
66
  | Name | Description | Default | Required |
36
67
  | ----------------- | ----------------------------------------------------------------------------------- | --------- | -------------------------- |
@@ -42,6 +73,12 @@ Available configuration options
42
73
  | format | The format of the request and response type that you want to deal with | xml | No |
43
74
  | timeout | The time in seconds for a request to be valid. Will raise a timeout error if exceeds time limit. | N/A | No |
44
75
 
76
+ Now you'll have access to classes the interact with the Chargify API, such as:
77
+
78
+ * `Chargify::Product`
79
+ * `Chargify::Customer`
80
+ * `Chargify::Subscription`
81
+
45
82
  It allows you to interface with the Chargify API using simple ActiveRecord-like syntax, i.e.:
46
83
 
47
84
  ``` ruby
@@ -63,44 +100,6 @@ subscription.save
63
100
  subscription.cancel
64
101
  ```
65
102
 
66
- See the `examples` directory for more usage examples.
67
-
68
- ### Installation
69
-
70
- This library can be installed as a gem. It is hosted on [Rubygems](http://rubygems.org).
71
-
72
- You can install this library as a gem using the following command:
73
-
74
- $ gem install chargify_api_ares
75
-
76
- ### Usage
77
-
78
- Simply require this library before you use it:
79
-
80
- ``` ruby
81
- require 'chargify_api_ares'
82
- ```
83
-
84
- If you're using Rails 3.x, you could include this gem in your Gemfile.
85
- ``` ruby
86
- gem 'chargify_api_ares'
87
- ```
88
-
89
- Install the gem using the following command:
90
- $ bundle install
91
-
92
- If you're using Rails 2 you could include this gem in your configuration, i.e. in `environment.rb`
93
-
94
- ``` ruby
95
- config.gem 'chargify_api_ares'
96
- ```
97
-
98
- Now you'll have access to classes the interact with the Chargify API, such as:
99
-
100
- * `Chargify::Product`
101
- * `Chargify::Customer`
102
- * `Chargify::Subscription`
103
-
104
103
  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)
105
104
 
106
105
  ### Compatibility
@@ -143,3 +142,21 @@ requests will be rejected.
143
142
  Version 0.6.x of this gem will attempt to patch your ActiveModel if you
144
143
  have an incompatible version. To avoid this patch, you should use
145
144
  3.0.20 or higher of ActiveResource.
145
+
146
+ ### Contributing
147
+
148
+ * Check out the latest master to make sure the feature hasn't been
149
+ implemented or the bug hasn't been fixed yet
150
+ * Check out the [issue
151
+ tracker](http://github.com/chargify/chargify_api_ares/issues) to make
152
+ sure someone already hasn't requested it and/or contributed it
153
+ * Fork the project
154
+ * Start a feature/bugfix branch
155
+ * Commit and push until you are happy with your contribution
156
+ * Make sure to add tests for the feature/bugfix
157
+ * Please squash your commits.
158
+ * Please try not to mess with the Rakefile, version, or history. If you
159
+ want to have your own version, or is otherwise necessary, that is
160
+ fine, but please isolate it to its own commit so we can cherry-pick
161
+ around it.
162
+
@@ -4,11 +4,11 @@ Gem::Specification.new do |s|
4
4
  s.rubygems_version = '1.3.7'
5
5
 
6
6
  s.name = 'chargify_api_ares'
7
- s.version = '0.6.1'
8
- s.date = '2013-02-26'
7
+ s.version = '1.0.0'
8
+ s.date = '2013-11-19'
9
9
  s.summary = 'A Chargify API wrapper for Ruby using ActiveResource'
10
10
  s.description = ''
11
- s.authors = ["Michael Klett", "Nathan Verni", "Graham McIntire", "Jeremy W. Rowe", "Rodrigo Franco", "Shay Frendt"]
11
+ s.authors = ["Michael Klett", "Nathan Verni", "Graham McIntire", "Jeremy W. Rowe", "Rodrigo Franco", "Shay Frendt", "Eric Farkas"]
12
12
  s.email = 'support@chargify.com'
13
13
  s.homepage = 'http://github.com/chargify/chargify_api_ares'
14
14
 
@@ -0,0 +1,33 @@
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
+ # Lookup up existing Subscription using the Customer's reference
14
+ subscription = Subscription.find_by_customer_reference('moklett')
15
+ # => #<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:0x102046b10 @prefix_options={}, @attributes={"card_type"=>"bogus", "expiration_year"=>2020, "masked_card_number"=>"XXXX-XXXX-XXXX-1", "first_name"=>"Michael", "expiration_month"=>1, "last_name"=>"Klett"}>, "product"=>#<Chargify::Product:0x10204a2d8 @prefix_options={}, @attributes={"price_in_cents"=>0, "name"=>"Chargify API Ares Test", "handle"=>"chargify-api-ares-test", "product_family"=>#<Chargify::Product::ProductFamily:0x1020490b8 @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}>, "trial_ended_at"=>nil, "id"=>331, "current_period_ends_at"=>Thu Dec 17 16:00:17 UTC 2009, "product_handle"=>"chargify-api-ares-test", "trial_started_at"=>nil, "customer"=>#<Chargify::Customer:0x10204b688 @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}>, "balance_in_cents"=>0, "current_period_started_at"=>Tue Nov 17 16:00:17 UTC 2009, "state"=>"active", "created_at"=>Tue Nov 17 16:00:17 UTC 2009, "customer_reference"=>"moklett"}>
16
+
17
+ # Perform a one-time charge against this subscription
18
+ Chargify::Charge.create(:subscription_id => subscription.id, :amount => 10.00, :memo => 'Extra service')
19
+ # => #<Chargify::Charge:0x007f80da97b6b8 @attributes={"amount"=>10.00, "memo"=>"Extra service", "id"=>43382, "amount_in_cents"=>1000, "component_id"=>nil, "created_at"=>2013-11-08 21:16:03 UTC, "ending_balance_in_cents"=>1000, "kind"=>"one_time", "payment_id"=>4383, "product_id"=>153, "starting_balance_in_cents"=>0, "success"=>true, "tax_id"=>nil, "type"=>"Charge", "transaction_type"=>"charge", "gateway_transaction_id"=>nil, "statement_id"=>25695, "customer_id"=>40210}, @prefix_options={:subscription_id=>416940}, @persisted=true, @remote_errors=nil, @validation_context=nil, @errors=#<ActiveResource::Errors:0x007f80da97b0f0 @base=#<Chargify::Charge:0x007f80da97b6b8 ...>, @messages={}>>
20
+
21
+ # If a charge fails
22
+ charge = Chargify::Charge.create(:subscription_id => subscription.id, :amount => 10.00, :memo =>'Extra service')
23
+ # => #<Chargify::Charge:0x007f80dcc9f428 @attributes={"amount"=>10.0, "memo"=>"Extra service"}, @prefix_options={:subscription_id=>41630}, @persisted=false, @remote_errors=#<ActiveResource::ResourceInvalid: Failed. Response code = 422. Response message = Unprocessable Entity.>, @validation_context=nil, @errors=#<ActiveResource::Errors:0x007f80dcc9f0b8 @base=#<Chargify::Charge:0x007f80dcc9f428 ...>, @messages={:base=>["Bogus Gateway: Forced failure"]}>>
24
+
25
+ charge.valid?
26
+ # => false
27
+
28
+ charge.errors.full_messages
29
+ # => ["Bogus Gateway: Forced failure"]
30
+
31
+ # Or call 'charge' right on the subscription
32
+ subscription.charge(:amount => 10.00, :memo => 'Extra service')
33
+ # => #<Chargify::Charge:0x007f80da97b6b8 @attributes={"amount"=>10.00, "memo"=>"Extra service", "id"=>4313282, "amount_in_cents"=>1000, "component_id"=>nil, "created_at"=>2013-11-08 21:16:03 UTC, "ending_balance_in_cents"=>1000, "kind"=>"one_time", "payment_id"=>43303, "product_id"=>153, "starting_balance_in_cents"=>0, "success"=>true, "tax_id"=>nil, "type"=>"Charge", "transaction_type"=>"charge", "gateway_transaction_id"=>nil, "statement_id"=>25695, "customer_id"=>48210}, @prefix_options={:subscription_id=>41690}, @persisted=true, @remote_errors=nil, @validation_context=nil, @errors=#<ActiveResource::Errors:0x007f80da97b0f0 @base=#<Chargify::Charge:0x007f80da97b6b8 ...>, @messages={}>>
data/examples/coupons.rb CHANGED
@@ -22,7 +22,7 @@ coupon = Chargify::Coupon.create(
22
22
  )
23
23
 
24
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")
25
+ coupon = Chargify::Coupon.find_by_product_family_id_and_code(2,"10OFF")
26
26
 
27
27
  # Looking up all coupons for a product family
28
28
  coupons = Chargify::Coupon.find_all_by_product_family_id(12345)
@@ -0,0 +1,30 @@
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
+ # Lookup up existing Subscription using the Customer's reference
14
+ subscription = Subscription.find_by_customer_reference('marky-mark')
15
+
16
+ # Migrate the subscription to a new product
17
+ subscription.migrate(:product_handle => "basic-plan")
18
+ # => #<Chargify::Migration:0x007fe656ab4430 @attributes={"product_id"=>20, "id"=>518, "activated_at"=>2013-11-11 20:42:57 UTC, "balance_in_cents"=>-7499, "cancel_at_end_of_period"=>false, "canceled_at"=>nil, "cancellation_message"=>nil, "created_at"=>2013-11-11 20:42:55 UTC, "current_period_ends_at"=>2013-12-12 03:54:21 UTC, "expires_at"=>nil, "next_assessment_at"=>2013-12-12 03:54:21 UTC, "payment_collection_method"=>"automatic", "state"=>"active", "trial_ended_at"=>nil, "trial_started_at"=>nil, "updated_at"=>2013-11-12 03:54:21 UTC, "current_period_started_at"=>2013-11-12 03:54:21 UTC, "previous_state"=>"active", "signup_payment_id"=>2029, "signup_revenue"=>"99.00", "delayed_cancel_at"=>nil, "coupon_code"=>nil, "total_revenue_in_cents"=>10001, "product_price_in_cents"=>2400, "product_version_number"=>2, "customer"=>#<Chargify::Customer:0x007fe656977ea0 @attributes={"address"=>nil, "address_2"=>nil, "city"=>nil, "country"=>nil, "created_at"=>2013-11-11 20:42:35 UTC, "email"=>"marky@example.com", "first_name"=>"Marky ", "id"=>518, "last_name"=>"Mark", "organization"=>nil, "phone"=>nil, "reference"=>"marky-mark", "state"=>nil, "updated_at"=>2013-11-11 20:42:35 UTC, "zip"=>nil}, @prefix_options={}, @persisted=false>, "product"=>#<Chargify::Product:0x007fe656976910 @attributes={"accounting_code"=>nil, "archived_at"=>nil, "created_at"=>2013-11-09 20:00:59 UTC, "description"=>"Eos quam veritatis quo iste et. Quaerat dolor suscipit explicabo et sit. Nostrum dolor commodi voluptatum similique et facere accusamus.", "expiration_interval"=>nil, "expiration_interval_unit"=>"never", "handle"=>"basic-plan", "id"=>20, "initial_charge_in_cents"=>nil, "interval"=>1, "interval_unit"=>"month", "name"=>"Basic", "price_in_cents"=>2400, "request_credit_card"=>true, "require_credit_card"=>true, "return_params"=>nil, "return_url"=>nil, "trial_interval"=>1, "trial_interval_unit"=>"month", "trial_price_in_cents"=>0, "update_return_url"=>nil, "updated_at"=>2013-11-12 03:51:18 UTC, "product_family"=>#<Chargify::ProductFamily:0x007fe6569749f8 @attributes={"accounting_code"=>nil, "description"=>nil, "handle"=>"acme-online", "id"=>3, "name"=>"Acme Online"}, @prefix_options={}, @persisted=false>}, @prefix_options={}, @persisted=false>, "credit_card"=>#<Chargify::Migration::CreditCard:0x007fe65696de78 @attributes={"type"=>"PaymentProfile", "billing_address"=>nil, "billing_address_2"=>nil, "billing_city"=>nil, "billing_country"=>nil, "billing_state"=>nil, "billing_zip"=>nil, "card_type"=>"bogus", "current_vault"=>"bogus", "customer_id"=>518, "customer_vault_token"=>nil, "expiration_month"=>1, "expiration_year"=>2023, "first_name"=>"Marky", "id"=>518, "last_name"=>"Mark", "masked_card_number"=>"XXXX-XXXX-XXXX-1", "vault_token"=>"1"}, @prefix_options={}, @persisted=false>}, @prefix_options={}, @persisted=true, @remote_errors=nil, @validation_context=nil, @errors=#<ActiveResource::Errors:0x007fe656aafd18 @base=#<Chargify::Migration:0x007fe656ab4430 ...>, @messages={}>>
19
+
20
+ # Another way to migrate a subscription to a new product
21
+ Migration.create(:subscription_id => subscription.id, :product_handle => "basic-plan")
22
+ # => #<Chargify::Migration:0x007fe656cc8b90 @attributes={"product_id"=>20, "id"=>518, "activated_at"=>2013-11-11 20:42:57 UTC, "balance_in_cents"=>-7499, "cancel_at_end_of_period"=>false, "canceled_at"=>nil, "cancellation_message"=>nil, "created_at"=>2013-11-11 20:42:55 UTC, "current_period_ends_at"=>2013-12-12 03:53:10 UTC, "expires_at"=>nil, "next_assessment_at"=>2013-12-12 03:53:10 UTC, "payment_collection_method"=>"automatic", "state"=>"active", "trial_ended_at"=>nil, "trial_started_at"=>nil, "updated_at"=>2013-11-12 03:53:10 UTC, "current_period_started_at"=>2013-11-12 03:53:09 UTC, "previous_state"=>"active", "signup_payment_id"=>2029, "signup_revenue"=>"99.00", "delayed_cancel_at"=>nil, "coupon_code"=>nil, "total_revenue_in_cents"=>9999, "product_price_in_cents"=>2400, "product_version_number"=>2, "customer"=>#<Chargify::Customer:0x007fe6548fdbc0 @attributes={"address"=>nil, "address_2"=>nil, "city"=>nil, "country"=>nil, "created_at"=>2013-11-11 20:42:35 UTC, "email"=>"marky@example.com", "first_name"=>"Marky ", "id"=>518, "last_name"=>"Mark", "organization"=>nil, "phone"=>nil, "reference"=>"marky-mark", "state"=>nil, "updated_at"=>2013-11-11 20:42:35 UTC, "zip"=>nil}, @prefix_options={}, @persisted=false>, "product"=>#<Chargify::Product:0x007fe6548fc608 @attributes={"accounting_code"=>nil, "archived_at"=>nil, "created_at"=>2013-11-09 20:00:59 UTC, "description"=>"Eos quam veritatis quo iste et. Quaerat dolor suscipit explicabo et sit. Nostrum dolor commodi voluptatum similique et facere accusamus.", "expiration_interval"=>nil, "expiration_interval_unit"=>"never", "handle"=>"basic-plan", "id"=>20, "initial_charge_in_cents"=>nil, "interval"=>1, "interval_unit"=>"month", "name"=>"Basic", "price_in_cents"=>2400, "request_credit_card"=>true, "require_credit_card"=>true, "return_params"=>nil, "return_url"=>nil, "trial_interval"=>1, "trial_interval_unit"=>"month", "trial_price_in_cents"=>0, "update_return_url"=>nil, "updated_at"=>2013-11-12 03:51:18 UTC, "product_family"=>#<Chargify::ProductFamily:0x007fe6548f6820 @attributes={"accounting_code"=>nil, "description"=>nil, "handle"=>"acme-online", "id"=>3, "name"=>"Acme Online"}, @prefix_options={}, @persisted=false>}, @prefix_options={}, @persisted=false>, "credit_card"=>#<Chargify::Migration::CreditCard:0x007fe6548f5d58 @attributes={"type"=>"PaymentProfile", "billing_address"=>nil, "billing_address_2"=>nil, "billing_city"=>nil, "billing_country"=>nil, "billing_state"=>nil, "billing_zip"=>nil, "card_type"=>"bogus", "current_vault"=>"bogus", "customer_id"=>518, "customer_vault_token"=>nil, "expiration_month"=>1, "expiration_year"=>2023, "first_name"=>"Marky", "id"=>518, "last_name"=>"Mark", "masked_card_number"=>"XXXX-XXXX-XXXX-1", "vault_token"=>"1"}, @prefix_options={}, @persisted=false>}, @prefix_options={}, @persisted=true, @remote_errors=nil, @validation_context=nil, @errors=#<ActiveResource::Errors:0x007fe656cc8320 @base=#<Chargify::Migration:0x007fe656cc8b90 ...>, @messages={}>>
23
+
24
+ # Preview a migration
25
+ preview = Migration::Preview.create(:subscription_id => subscription.id, :product_handle => "basic-plan")
26
+ # => #<Chargify::Migration::Preview:0x007fe65686fb98 @attributes={"product_id"=>20, "prorated_adjustment_in_cents"=>"-9899", "charge_in_cents"=>"2400", "payment_due_in_cents"=>"0", "credit_applied_in_cents"=>"-7499"}, @prefix_options={}, @persisted=false, @remote_errors=nil, @validation_context=nil, @errors=#<ActiveResource::Errors:0x007fe65686f260 @base=#<Chargify::Migration::Preview:0x007fe65686fb98 ...>, @messages={}>>
27
+
28
+ # Another way to preview a migration
29
+ preview = Migration.preview(:subscription_id => subscription.id, :product_handle => "basic-plan")
30
+ # => #<Chargify::Migration::Preview:0x007fe65686fb98 @attributes={"product_id"=>20, "prorated_adjustment_in_cents"=>"-9899", "charge_in_cents"=>"2400", "payment_due_in_cents"=>"0", "credit_applied_in_cents"=>"-7499"}, @prefix_options={}, @persisted=false, @remote_errors=nil, @validation_context=nil, @errors=#<ActiveResource::Errors:0x007fe65686f260 @base=#<Chargify::Migration::Preview:0x007fe65686fb98 ...>, @messages={}>>
@@ -12,9 +12,11 @@ end
12
12
 
13
13
 
14
14
  # Retrieve a list of all your customers
15
- subscription = Chargify::Subscription.find(:all)
15
+ subscriptions = Chargify::Subscription.find(:all)
16
16
  # => [#<Chargify::Subscription:0x1020fff70 @prefix_options={}, @attributes={"cancellation_message"=>nil, "activated_at"=>Tue Nov 17 15:51:42 UTC 2009, "expires_at"=>nil, "updated_at"=>Tue Nov 17 15:51:41 UTC 2009, "credit_card"=>#<Chargify::Subscription::CreditCard:0x1020f24d8 @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:0x1020f5a70 @prefix_options={}, @attributes={"price_in_cents"=>0, "name"=>"Chargify API Ares Test", "handle"=>"chargify-api-ares-test", "product_family"=>#<Chargify::Product::ProductFamily:0x1020f48f0 @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}>, "trial_ended_at"=>nil, "id"=>328, "current_period_ends_at"=>Thu Dec 17 15:51:41 UTC 2009, "trial_started_at"=>nil, "customer"=>#<Chargify::Customer:0x1020f6d80 @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}>, "balance_in_cents"=>0, "current_period_started_at"=>Tue Nov 17 15:51:41 UTC 2009, "state"=>"canceled", "created_at"=>Tue Nov 17 15:51:41 UTC 2009}>]]
17
17
 
18
+ # Paginate through your subscriptions
19
+ subscriptions = Chargify::Subscription.find(:all, params: { per_page: 50, page: 3})
18
20
 
19
21
  # Create a subscription from a customer reference
20
22
  subscription = Chargify::Subscription.create(
@@ -44,8 +46,7 @@ subscription.save
44
46
 
45
47
  # Perform a one-time charge against an existing subscription
46
48
  subscription.charge(:amount => 10.00, :memo => 'Extra service')
47
- # => #<Net::HTTPCreated>
48
-
49
+ # => #<Chargify::Charge:0x007f80da97b6b8 @attributes={"amount"=>10.00, "memo"=>"Extra service", "id"=>43010382, "amount_in_cents"=>1000, "component_id"=>nil, "created_at"=>2013-11-08 21:16:03 UTC, "ending_balance_in_cents"=>1000, "kind"=>"one_time", "payment_id"=>410383, "product_id"=>153, "starting_balance_in_cents"=>0, "success"=>true, "tax_id"=>nil, "type"=>"Charge", "transaction_type"=>"charge", "gateway_transaction_id"=>nil, "statement_id"=>25179695, "customer_id"=>40110}, @prefix_options={:subscription_id=>41630}, @persisted=true, @remote_errors=nil, @validation_context=nil, @errors=#<ActiveResource::Errors:0x007f80da97b0f0 @base=#<Chargify::Charge:0x007f80da97b6b8 ...>, @messages={}>>
49
50
 
50
51
  # Cancel a subscription
51
52
  subscription.cancel
@@ -1,10 +1,12 @@
1
1
  require 'active_resource'
2
2
  require 'chargify_api_ares/config'
3
3
  require 'chargify_api_ares/resources/base'
4
+ require 'chargify_api_ares/resources/charge'
4
5
  require 'chargify_api_ares/resources/component'
5
6
  require 'chargify_api_ares/resources/coupon'
6
7
  require 'chargify_api_ares/resources/customer'
7
8
  require 'chargify_api_ares/resources/event'
9
+ require 'chargify_api_ares/resources/migration'
8
10
  require 'chargify_api_ares/resources/payment_profile'
9
11
  require 'chargify_api_ares/resources/product'
10
12
  require 'chargify_api_ares/resources/product_family'
@@ -0,0 +1,5 @@
1
+ module Chargify
2
+ class Charge < Base
3
+ self.prefix = '/subscriptions/:subscription_id/'
4
+ end
5
+ end
@@ -0,0 +1,43 @@
1
+ module Chargify
2
+ class Migration < Base
3
+ self.prefix = "/subscriptions/:subscription_id/"
4
+
5
+ def self.preview(attrs = {})
6
+ Chargify::Migration::Preview.create(attrs)
7
+ end
8
+
9
+ def subscription
10
+ self.attributes["id"].present? ? Chargify::Subscription.new(self.attributes) : nil
11
+ end
12
+
13
+ private
14
+
15
+ # Chargify returns a non-standard XML error response for Migration. Since the API wants to maintain
16
+ # backwards compatibility, we will work around that when we parse errors here by overriding the
17
+ # framework's `load_remote_errors` with our own for just XML
18
+ def load_remote_errors(remote_errors, save_cache = false)
19
+ case self.class.format
20
+ when ActiveResource::Formats[:xml]
21
+ array = [Hash.from_xml(remote_errors.response.body)["errors"]] rescue []
22
+ errors.from_array array, save_cache
23
+ else
24
+ super
25
+ end
26
+ end
27
+
28
+ class Preview < Base
29
+ self.prefix = "/subscriptions/:subscription_id/migrations/"
30
+
31
+ def create
32
+ response = post(:preview, {}, attributes.send("to_#{self.class.format.extension}", :root => :migration, :dasherize => false))
33
+ load_attributes_from_response(response)
34
+ end
35
+
36
+ private
37
+
38
+ def custom_method_new_element_url(method_name, options = {})
39
+ "#{self.class.prefix(prefix_options)}#{method_name}.#{self.class.format.extension}#{self.class.__send__(:query_string, options)}"
40
+ end
41
+ end
42
+ end
43
+ end
@@ -39,7 +39,7 @@ module Chargify
39
39
  # For more information, please see the one-time charge API docs available
40
40
  # at: http://support.chargify.com/faqs/api/api-charges
41
41
  def charge(attrs = {})
42
- post :charges, {}, attrs.to_xml(:root => :charge)
42
+ Chargify::Charge.create(attrs.merge(:subscription_id => self.id))
43
43
  end
44
44
 
45
45
  def credit(attrs = {})
@@ -59,7 +59,7 @@ module Chargify
59
59
  end
60
60
 
61
61
  def migrate(attrs = {})
62
- post :migrations, :migration => attrs
62
+ Chargify::Migration.create(attrs.merge(:subscription_id => self.id))
63
63
  end
64
64
 
65
65
  def statement(id)
@@ -251,6 +251,145 @@ describe "Remote" do
251
251
  end
252
252
  end
253
253
 
254
+ describe "failing to add a one time charge" do
255
+ before(:all) do
256
+ @subscription = Chargify::Subscription.create(
257
+ :product_handle => basic_plan.handle,
258
+ :customer_reference => johnadoe.reference,
259
+ :payment_profile_attributes => declined_payment_profile_attributes)
260
+
261
+ @charge = @subscription.charge(:amount => 7, :memo => 'One Time Charge')
262
+ end
263
+
264
+ it "is not valid when creating a charge fails" do
265
+ expect(@charge).to_not be_valid
266
+ end
267
+
268
+ it "has errors when creating a charge fails" do
269
+ expect(@charge.errors.full_messages.first).to eql "Bogus Gateway: Forced failure"
270
+ end
271
+ end
272
+
273
+ describe "migrating a subscription to a valid product" do
274
+ before(:all) do
275
+ @subscription = Chargify::Subscription.create(
276
+ :product_handle => basic_plan.handle,
277
+ :customer_reference => johnadoe.reference,
278
+ :payment_profile_attributes => good_payment_profile_attributes)
279
+
280
+ @migration = @subscription.migrate(:product_handle => pro_plan.handle)
281
+ end
282
+
283
+ it "is valid when the migration is successful" do
284
+ expect(@migration).to be_valid
285
+ end
286
+
287
+ it "migrates the product" do
288
+ expect(@migration.subscription.product.handle).to eql "pro"
289
+ end
290
+
291
+ it "has a subscription" do
292
+ expect(@migration.subscription).to_not be_nil
293
+ end
294
+ end
295
+
296
+ describe "migrating a subscription to an invalid product" do
297
+ before(:all) do
298
+ @subscription = Chargify::Subscription.create(
299
+ :product_handle => basic_plan.handle,
300
+ :customer_reference => johnadoe.reference,
301
+ :payment_profile_attributes => good_payment_profile_attributes)
302
+
303
+ @migration = @subscription.migrate(:product_handle => "a-bad-handle")
304
+ end
305
+
306
+ it "is invalid when the migration is not successful" do
307
+ expect(@migration).to_not be_valid
308
+ end
309
+
310
+ it "is has errors when the migration is not successful" do
311
+ expect(@migration.errors.full_messages.first).to eql "Invalid Product"
312
+ end
313
+
314
+ it "will not have a subscription" do
315
+ expect(@migration.subscription).to be_nil
316
+ end
317
+ end
318
+
319
+ describe "previewing a valid migration via Chargify::Migration" do
320
+ before(:all) do
321
+ @subscription = Chargify::Subscription.create(
322
+ :product_handle => basic_plan.handle,
323
+ :customer_reference => johnadoe.reference,
324
+ :payment_profile_attributes => good_payment_profile_attributes)
325
+ @preview = Chargify::Migration.preview(:subscription_id => @subscription.id, :product_handle => pro_plan.handle)
326
+ end
327
+
328
+ it "is valid when the migration preview is successful" do
329
+ expect(@preview).to be_valid
330
+ end
331
+
332
+ it "is a proper preview" do
333
+ expect(@preview.charge_in_cents).to eql "5000"
334
+ end
335
+ end
336
+
337
+ describe "previewing a valid migration via Chargify::Migration::Preview" do
338
+ before(:all) do
339
+ @subscription = Chargify::Subscription.create(
340
+ :product_handle => basic_plan.handle,
341
+ :customer_reference => johnadoe.reference,
342
+ :payment_profile_attributes => good_payment_profile_attributes)
343
+ @preview = Chargify::Migration::Preview.create(:subscription_id => @subscription.id, :product_handle => pro_plan.handle)
344
+ end
345
+
346
+ it "is valid when the migration preview is successful" do
347
+ expect(@preview).to be_valid
348
+ end
349
+
350
+ it "is a proper preview" do
351
+ expect(@preview.charge_in_cents).to eql "5000"
352
+ end
353
+ end
354
+
355
+ describe "previewing an invalid migration via Chargify::Migration" do
356
+ before(:all) do
357
+ @subscription = Chargify::Subscription.create(
358
+ :product_handle => basic_plan.handle,
359
+ :customer_reference => johnadoe.reference,
360
+ :payment_profile_attributes => good_payment_profile_attributes)
361
+
362
+ @preview = Chargify::Migration.preview(:subscription_id => @subscription.id, :product_id => 9999999)
363
+ end
364
+
365
+ it "is invalid when the migration preview is invalid" do
366
+ expect(@preview).to_not be_valid
367
+ end
368
+
369
+ it "has errors when the migration preview is invalid" do
370
+ expect(@preview.errors.full_messages.first).to eql "Product must be specified"
371
+ end
372
+ end
373
+
374
+ describe "previewing an invalid migration via Chargify::Migration::Preview" do
375
+ before(:all) do
376
+ @subscription = Chargify::Subscription.create(
377
+ :product_handle => basic_plan.handle,
378
+ :customer_reference => johnadoe.reference,
379
+ :payment_profile_attributes => good_payment_profile_attributes)
380
+
381
+ @preview = Chargify::Migration::Preview.create(:subscription_id => @subscription.id, :product_id => 9999999)
382
+ end
383
+
384
+ it "is invalid when the migration preview is invalid" do
385
+ expect(@preview).to_not be_valid
386
+ end
387
+
388
+ it "has errors when the migration preview is invalid" do
389
+ expect(@preview.errors.full_messages.first).to eql "Product must be specified"
390
+ end
391
+ end
392
+
254
393
  describe "adding a credit" do
255
394
  before(:all) do
256
395
  @subscription = Chargify::Subscription.create(
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ describe Chargify::Charge, :fake_resource do
4
+ context '#create' do
5
+ it 'creates a one-time charge' do
6
+ id = generate(:subscription_id)
7
+ subscription = build(:subscription, :id => id)
8
+ expected_response = {:charge => {:amount_in_cents => 1000, :memo => "one-time charge", :success => true}}.to_xml
9
+
10
+ FakeWeb.register_uri(:post, "#{test_domain}/subscriptions/#{id}/charges.xml", :status => 201, :body => expected_response)
11
+
12
+ response = Chargify::Charge.create(:subscription_id => subscription.id, :amount => "10.00", :memo => "one-time charge")
13
+
14
+ expect(response.valid?).to be_true
15
+ expect(response).to be_a(Chargify::Charge)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Chargify::Migration::Preview, :fake_resource do
4
+ context "#create" do
5
+ it 'migrates the subscription' do
6
+ id = generate(:subscription_id)
7
+ subscription = build(:subscription, :id => id)
8
+ subscription.stub!(:persisted?).and_return(true)
9
+ expected_response = {:migration => {:prorated_adjustment_in_cents => -12500, :charge_in_cents => 90000, :payment_due_in_cents => 77500, :credit_applied_in_cents => 0 }}.to_xml
10
+
11
+ FakeWeb.register_uri(:post, "#{test_domain}/subscriptions/#{id}/migrations/preview.xml?product_handle=upgraded-plan", :status => 201, :body => expected_response)
12
+
13
+ response = Chargify::Migration::Preview.create(:subscription_id => subscription.id, :product_handle => 'upgraded-plan')
14
+
15
+ expect(response.valid?).to be_true
16
+ expect(response.errors.any?).to be_false
17
+ expect(response).to be_a(Chargify::Migration::Preview)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,20 @@
1
+ require 'spec_helper'
2
+
3
+ describe Chargify::Migration, :fake_resource do
4
+ context "#create" do
5
+ it 'migrates the subscription' do
6
+ id = generate(:subscription_id)
7
+ subscription = build(:subscription, :id => id)
8
+ subscription.stub!(:persisted?).and_return(true)
9
+ expected_response = [subscription.attributes].to_xml(:root => 'subscription')
10
+
11
+ FakeWeb.register_uri(:post, "#{test_domain}/subscriptions/#{id}/migrations.xml?migration%5Bproduct_handle%5D=upgraded-plan", :status => 201, :body => expected_response)
12
+
13
+ response = Chargify::Migration.create(:subscription_id => subscription.id, :product_handle => 'upgraded-plan')
14
+
15
+ expect(response.valid?).to be_true
16
+ expect(response.errors.any?).to be_false
17
+ expect(response).to be_a(Chargify::Migration)
18
+ end
19
+ end
20
+ end
@@ -41,8 +41,8 @@ describe Chargify::Subscription, :fake_resource do
41
41
 
42
42
  response = subscription.charge(:amount => "10.00", "memo" => "one-time charge")
43
43
 
44
- response.body.should == expected_response
45
- response.should be_a(Net::HTTPCreated)
44
+ expect(response.valid?).to be_true
45
+ expect(response).to be_a(Chargify::Charge)
46
46
  end
47
47
 
48
48
  it 'finds by customer reference' do
@@ -76,7 +76,8 @@ describe Chargify::Subscription, :fake_resource do
76
76
 
77
77
  response = subscription.migrate(:product_handle => 'upgraded-plan')
78
78
 
79
- response.body.should == expected_response
80
- response.should be_a(Net::HTTPCreated)
79
+ expect(response.valid?).to be_true
80
+ expect(response.errors.any?).to be_false
81
+ expect(response).to be_a(Chargify::Migration)
81
82
  end
82
83
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chargify_api_ares
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Michael Klett
@@ -11,31 +10,29 @@ authors:
11
10
  - Jeremy W. Rowe
12
11
  - Rodrigo Franco
13
12
  - Shay Frendt
13
+ - Eric Farkas
14
14
  autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
- date: 2013-02-26 00:00:00.000000000 Z
17
+ date: 2013-11-19 00:00:00.000000000 Z
18
18
  dependencies:
19
19
  - !ruby/object:Gem::Dependency
20
20
  name: activeresource
21
21
  requirement: !ruby/object:Gem::Requirement
22
- none: false
23
22
  requirements:
24
- - - ! '>='
23
+ - - '>='
25
24
  - !ruby/object:Gem::Version
26
25
  version: 3.0.0
27
26
  type: :runtime
28
27
  prerelease: false
29
28
  version_requirements: !ruby/object:Gem::Requirement
30
- none: false
31
29
  requirements:
32
- - - ! '>='
30
+ - - '>='
33
31
  - !ruby/object:Gem::Version
34
32
  version: 3.0.0
35
33
  - !ruby/object:Gem::Dependency
36
34
  name: rake
37
35
  requirement: !ruby/object:Gem::Requirement
38
- none: false
39
36
  requirements:
40
37
  - - ~>
41
38
  - !ruby/object:Gem::Version
@@ -43,7 +40,6 @@ dependencies:
43
40
  type: :development
44
41
  prerelease: false
45
42
  version_requirements: !ruby/object:Gem::Requirement
46
- none: false
47
43
  requirements:
48
44
  - - ~>
49
45
  - !ruby/object:Gem::Version
@@ -51,7 +47,6 @@ dependencies:
51
47
  - !ruby/object:Gem::Dependency
52
48
  name: rspec
53
49
  requirement: !ruby/object:Gem::Requirement
54
- none: false
55
50
  requirements:
56
51
  - - ~>
57
52
  - !ruby/object:Gem::Version
@@ -59,7 +54,6 @@ dependencies:
59
54
  type: :development
60
55
  prerelease: false
61
56
  version_requirements: !ruby/object:Gem::Requirement
62
- none: false
63
57
  requirements:
64
58
  - - ~>
65
59
  - !ruby/object:Gem::Version
@@ -67,7 +61,6 @@ dependencies:
67
61
  - !ruby/object:Gem::Dependency
68
62
  name: factory_girl
69
63
  requirement: !ruby/object:Gem::Requirement
70
- none: false
71
64
  requirements:
72
65
  - - ~>
73
66
  - !ruby/object:Gem::Version
@@ -75,7 +68,6 @@ dependencies:
75
68
  type: :development
76
69
  prerelease: false
77
70
  version_requirements: !ruby/object:Gem::Requirement
78
- none: false
79
71
  requirements:
80
72
  - - ~>
81
73
  - !ruby/object:Gem::Version
@@ -83,7 +75,6 @@ dependencies:
83
75
  - !ruby/object:Gem::Dependency
84
76
  name: fakeweb
85
77
  requirement: !ruby/object:Gem::Requirement
86
- none: false
87
78
  requirements:
88
79
  - - ~>
89
80
  - !ruby/object:Gem::Version
@@ -91,7 +82,6 @@ dependencies:
91
82
  type: :development
92
83
  prerelease: false
93
84
  version_requirements: !ruby/object:Gem::Requirement
94
- none: false
95
85
  requirements:
96
86
  - - ~>
97
87
  - !ruby/object:Gem::Version
@@ -99,7 +89,6 @@ dependencies:
99
89
  - !ruby/object:Gem::Dependency
100
90
  name: faker
101
91
  requirement: !ruby/object:Gem::Requirement
102
- none: false
103
92
  requirements:
104
93
  - - ~>
105
94
  - !ruby/object:Gem::Version
@@ -107,7 +96,6 @@ dependencies:
107
96
  type: :development
108
97
  prerelease: false
109
98
  version_requirements: !ruby/object:Gem::Requirement
110
- none: false
111
99
  requirements:
112
100
  - - ~>
113
101
  - !ruby/object:Gem::Version
@@ -115,7 +103,6 @@ dependencies:
115
103
  - !ruby/object:Gem::Dependency
116
104
  name: guard-rspec
117
105
  requirement: !ruby/object:Gem::Requirement
118
- none: false
119
106
  requirements:
120
107
  - - ~>
121
108
  - !ruby/object:Gem::Version
@@ -123,7 +110,6 @@ dependencies:
123
110
  type: :development
124
111
  prerelease: false
125
112
  version_requirements: !ruby/object:Gem::Requirement
126
- none: false
127
113
  requirements:
128
114
  - - ~>
129
115
  - !ruby/object:Gem::Version
@@ -131,7 +117,6 @@ dependencies:
131
117
  - !ruby/object:Gem::Dependency
132
118
  name: growl
133
119
  requirement: !ruby/object:Gem::Requirement
134
- none: false
135
120
  requirements:
136
121
  - - ~>
137
122
  - !ruby/object:Gem::Version
@@ -139,7 +124,6 @@ dependencies:
139
124
  type: :development
140
125
  prerelease: false
141
126
  version_requirements: !ruby/object:Gem::Requirement
142
- none: false
143
127
  requirements:
144
128
  - - ~>
145
129
  - !ruby/object:Gem::Version
@@ -147,7 +131,6 @@ dependencies:
147
131
  - !ruby/object:Gem::Dependency
148
132
  name: rb-fsevent
149
133
  requirement: !ruby/object:Gem::Requirement
150
- none: false
151
134
  requirements:
152
135
  - - ~>
153
136
  - !ruby/object:Gem::Version
@@ -155,7 +138,6 @@ dependencies:
155
138
  type: :development
156
139
  prerelease: false
157
140
  version_requirements: !ruby/object:Gem::Requirement
158
- none: false
159
141
  requirements:
160
142
  - - ~>
161
143
  - !ruby/object:Gem::Version
@@ -163,7 +145,6 @@ dependencies:
163
145
  - !ruby/object:Gem::Dependency
164
146
  name: pry
165
147
  requirement: !ruby/object:Gem::Requirement
166
- none: false
167
148
  requirements:
168
149
  - - ~>
169
150
  - !ruby/object:Gem::Version
@@ -171,7 +152,6 @@ dependencies:
171
152
  type: :development
172
153
  prerelease: false
173
154
  version_requirements: !ruby/object:Gem::Requirement
174
- none: false
175
155
  requirements:
176
156
  - - ~>
177
157
  - !ruby/object:Gem::Version
@@ -187,23 +167,28 @@ files:
187
167
  - Gemfile
188
168
  - Gemfile.lock
189
169
  - Guardfile
170
+ - HISTORY.md
190
171
  - LICENSE.txt
191
172
  - README.md
192
173
  - Rakefile
193
174
  - chargify_api_ares.gemspec
175
+ - examples/charges.rb
194
176
  - examples/coupons.rb
195
177
  - examples/customers.rb
196
178
  - examples/metered_components.rb
179
+ - examples/migrations.rb
197
180
  - examples/products.rb
198
181
  - examples/subscriptions.rb
199
182
  - examples/transactions.rb
200
183
  - lib/chargify_api_ares.rb
201
184
  - lib/chargify_api_ares/config.rb
202
185
  - lib/chargify_api_ares/resources/base.rb
186
+ - lib/chargify_api_ares/resources/charge.rb
203
187
  - lib/chargify_api_ares/resources/component.rb
204
188
  - lib/chargify_api_ares/resources/coupon.rb
205
189
  - lib/chargify_api_ares/resources/customer.rb
206
190
  - lib/chargify_api_ares/resources/event.rb
191
+ - lib/chargify_api_ares/resources/migration.rb
207
192
  - lib/chargify_api_ares/resources/payment_profile.rb
208
193
  - lib/chargify_api_ares/resources/product.rb
209
194
  - lib/chargify_api_ares/resources/product_family.rb
@@ -219,8 +204,11 @@ files:
219
204
  - spec/remote/remote_helper.rb
220
205
  - spec/remote/remote_spec.rb
221
206
  - spec/resources/base_spec.rb
207
+ - spec/resources/charge_spec.rb
222
208
  - spec/resources/coupon_spec.rb
223
209
  - spec/resources/customer_spec.rb
210
+ - spec/resources/migration_preview_spec.rb
211
+ - spec/resources/migration_spec.rb
224
212
  - spec/resources/product_family_component_spec.rb
225
213
  - spec/resources/product_family_spec.rb
226
214
  - spec/resources/product_spec.rb
@@ -232,28 +220,24 @@ files:
232
220
  - spec/support/fake_resource.rb
233
221
  homepage: http://github.com/chargify/chargify_api_ares
234
222
  licenses: []
223
+ metadata: {}
235
224
  post_install_message:
236
225
  rdoc_options: []
237
226
  require_paths:
238
227
  - lib
239
228
  required_ruby_version: !ruby/object:Gem::Requirement
240
- none: false
241
229
  requirements:
242
- - - ! '>='
230
+ - - '>='
243
231
  - !ruby/object:Gem::Version
244
232
  version: '0'
245
- segments:
246
- - 0
247
- hash: 4368782760728078099
248
233
  required_rubygems_version: !ruby/object:Gem::Requirement
249
- none: false
250
234
  requirements:
251
- - - ! '>='
235
+ - - '>='
252
236
  - !ruby/object:Gem::Version
253
237
  version: '0'
254
238
  requirements: []
255
239
  rubyforge_project:
256
- rubygems_version: 1.8.23
240
+ rubygems_version: 2.0.6
257
241
  signing_key:
258
242
  specification_version: 3
259
243
  summary: A Chargify API wrapper for Ruby using ActiveResource
@@ -263,8 +247,11 @@ test_files:
263
247
  - spec/remote/remote_helper.rb
264
248
  - spec/remote/remote_spec.rb
265
249
  - spec/resources/base_spec.rb
250
+ - spec/resources/charge_spec.rb
266
251
  - spec/resources/coupon_spec.rb
267
252
  - spec/resources/customer_spec.rb
253
+ - spec/resources/migration_preview_spec.rb
254
+ - spec/resources/migration_spec.rb
268
255
  - spec/resources/product_family_component_spec.rb
269
256
  - spec/resources/product_family_spec.rb
270
257
  - spec/resources/product_spec.rb