recurly 2.1.5 → 2.1.7

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of recurly might be problematic. Click here for more details.

data/README.markdown CHANGED
@@ -1,6 +1,6 @@
1
- # Recurly
1
+ # Recurly [![Build Status](https://secure.travis-ci.org/recurly/recurly-client-ruby.png)](http://travis-ci.org/recurly/recurly-client-ruby)
2
2
 
3
- <http://github.com/recurly/recurly-ruby-client>
3
+ <https://github.com/recurly/recurly-client-ruby>
4
4
 
5
5
  [Recurly](http://recurly.com/)'s Ruby client library is an interface to its
6
6
  [REST API](http://docs.recurly.com/api/basics).
@@ -35,9 +35,8 @@ Recurly.api_key = ENV['RECURLY_API_KEY']
35
35
  Recurly.js.private_key = ENV['RECURLY_JS_PRIVATE_KEY']
36
36
  ```
37
37
 
38
- Configure the client library with the credentials you find at
39
- `https://{subdomain}.recurly.com/developer/api_access` (replace `{subdomain}`
40
- with your Recurly subdomain).
38
+ Configure the client library with
39
+ [your API credentials](https://app.recurly.com/go/developer/api_access).
41
40
 
42
41
  The default currency is USD. To override with a different code:
43
42
 
@@ -97,12 +96,6 @@ To run the suite using Nokogiri:
97
96
  $ XML=nokogiri bundle exec rake
98
97
  ```
99
98
 
100
- Or, if [Guard](https://github.com/guard/guard) is more your speed:
101
-
102
- ``` bash
103
- $ bundle exec guard
104
- ```
105
-
106
99
  If you plan on submitting a patch, please write tests for it (we use
107
100
  [MiniTest::Spec](http://bfts.rubyforge.org/minitest/MiniTest/Expectations.html)).
108
101
 
@@ -114,7 +107,7 @@ your changes.
114
107
 
115
108
  (The MIT License.)
116
109
 
117
- © 2011 Recurly Inc.
110
+ © 2009–2013 Recurly Inc.
118
111
 
119
112
  Permission is hereby granted, free of charge, to any person obtaining a copy
120
113
  of this software and associated documentation files (the "Software"), to deal
data/lib/ecurly.rb ADDED
@@ -0,0 +1 @@
1
+ require 'recurly'
data/lib/recurly.rb CHANGED
@@ -1,22 +1,23 @@
1
1
  # Recurly is a Ruby client for Recurly's REST API.
2
2
  module Recurly
3
- autoload :Account, 'recurly/account'
4
- autoload :AddOn, 'recurly/add_on'
5
- autoload :Adjustment, 'recurly/adjustment'
6
- autoload :API, 'recurly/api'
7
- autoload :BillingInfo, 'recurly/billing_info'
8
- autoload :Coupon, 'recurly/coupon'
9
- autoload :Helper, 'recurly/helper'
10
- autoload :Invoice, 'recurly/invoice'
11
- autoload :JS, 'recurly/js'
12
- autoload :Money, 'recurly/money'
13
- autoload :Plan, 'recurly/plan'
14
- autoload :Redemption, 'recurly/redemption'
15
- autoload :Resource, 'recurly/resource'
16
- autoload :Subscription, 'recurly/subscription'
17
- autoload :Transaction, 'recurly/transaction'
18
- autoload :Version, 'recurly/version'
19
- autoload :XML, 'recurly/xml'
3
+ autoload :Account, 'recurly/account'
4
+ autoload :AddOn, 'recurly/add_on'
5
+ autoload :Adjustment, 'recurly/adjustment'
6
+ autoload :API, 'recurly/api'
7
+ autoload :BillingInfo, 'recurly/billing_info'
8
+ autoload :Coupon, 'recurly/coupon'
9
+ autoload :Helper, 'recurly/helper'
10
+ autoload :Invoice, 'recurly/invoice'
11
+ autoload :JS, 'recurly/js'
12
+ autoload :Money, 'recurly/money'
13
+ autoload :Plan, 'recurly/plan'
14
+ autoload :Redemption, 'recurly/redemption'
15
+ autoload :Resource, 'recurly/resource'
16
+ autoload :Subscription, 'recurly/subscription'
17
+ autoload :SubscriptionAddOn, 'recurly/subscription_add_on'
18
+ autoload :Transaction, 'recurly/transaction'
19
+ autoload :Version, 'recurly/version'
20
+ autoload :XML, 'recurly/xml'
20
21
 
21
22
  # The exception class from which all Recurly exceptions inherit.
22
23
  class Error < StandardError
@@ -12,6 +12,7 @@ module Recurly
12
12
  created_at
13
13
  )
14
14
  alias to_param add_on_code
15
+ alias quantity default_quantity
15
16
 
16
17
  # Add-ons are only writeable and readable through {Plan} instances.
17
18
  embedded!
@@ -16,6 +16,9 @@ module Recurly
16
16
  # @return [Account]
17
17
  belongs_to :account
18
18
 
19
+ # @return [Redemption]
20
+ has_one :redemption
21
+
19
22
  define_attribute_methods %w(
20
23
  uuid
21
24
  state
@@ -53,7 +56,7 @@ module Recurly
53
56
  end
54
57
 
55
58
  def pdf
56
- find to_param, :format => 'pdf'
59
+ self.class.find to_param, :format => 'pdf'
57
60
  end
58
61
 
59
62
  private
data/lib/recurly/js.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'openssl'
2
2
  require 'base64'
3
+ require 'cgi'
3
4
 
4
5
  module Recurly
5
6
  # A collection of helper methods to use to verify
data/lib/recurly/money.rb CHANGED
@@ -14,15 +14,28 @@ module Recurly
14
14
  # Recurly.default_currency = 'USD'
15
15
  # Recurly::Money.new(49_00) # => #<Recurly::Money USD: 49_00>
16
16
  def initialize currencies = {}
17
- @currencies = Helper.hash_with_indifferent_read_access
17
+ @currencies = {}
18
18
 
19
19
  if currencies.respond_to? :each_pair
20
- currencies.each_pair { |key, value| @currencies[key.to_s] = value }
20
+ currencies.each_pair { |key, value| self[key] = value }
21
+ elsif Recurly.default_currency
22
+ self[Recurly.default_currency] = currencies
21
23
  else
22
- @currencies[Recurly.default_currency] = currencies
24
+ message = 'expected a Hash'
25
+ message << ' or Numeric' if Recurly.default_currency
26
+ message << " but received #{currencies.class}"
27
+ raise ArgumentError, message
23
28
  end
24
29
  end
25
30
 
31
+ def [] code
32
+ currencies[code.to_s]
33
+ end
34
+
35
+ def []= code, amount
36
+ currencies[code.to_s] = amount
37
+ end
38
+
26
39
  # @return [Hash] A hash of currency codes to amounts.
27
40
  def to_hash
28
41
  currencies.dup
@@ -16,6 +16,7 @@ module Recurly
16
16
  single_use
17
17
  total_discounted_in_cents
18
18
  currency
19
+ state
19
20
  created_at
20
21
  )
21
22
 
@@ -113,7 +113,8 @@ module Recurly
113
113
  #
114
114
  # Account.find_each { |account| p account }
115
115
  class Resource
116
- autoload :Pager, 'recurly/resource/pager'
116
+ autoload :Errors, 'recurly/resource/errors'
117
+ autoload :Pager, 'recurly/resource/pager'
117
118
 
118
119
  # Raised when a record cannot be found.
119
120
  #
@@ -256,6 +257,11 @@ module Recurly
256
257
  @scopes ||= Recurly::Helper.hash_with_indifferent_read_access
257
258
  end
258
259
 
260
+ # @return [Module] Module of scopes methods.
261
+ def scopes_helper
262
+ @scopes_helper ||= Module.new.tap { |helper| extend helper }
263
+ end
264
+
259
265
  # Defines a new resource scope.
260
266
  #
261
267
  # @return [Proc]
@@ -263,8 +269,7 @@ module Recurly
263
269
  # @param [Hash] params the scope params
264
270
  def scope name, params = {}
265
271
  scopes[name = name.to_s] = params
266
- extend const_set :Scopes, Module.new unless const_defined? :Scopes
267
- self::Scopes.send(:define_method, name) { paginate scopes[name] }
272
+ scopes_helper.send(:define_method, name) { paginate scopes[name] }
268
273
  end
269
274
 
270
275
  # Iterates through every record by automatically paging.
@@ -367,7 +372,7 @@ module Recurly
367
372
  # @see from_response
368
373
  def from_xml xml
369
374
  xml = XML.new xml
370
- if xml.name == member_name
375
+ if self != Resource || xml.name == member_name
371
376
  record = new
372
377
  elsif Recurly.const_defined?(
373
378
  class_name = Helper.classify(xml.name), false
@@ -426,13 +431,13 @@ module Recurly
426
431
 
427
432
  # @return [Hash] A list of association names for the current class.
428
433
  def associations
429
- @associations ||= begin
430
- unless constants.include? :Associations
431
- include const_set :Associations, Module.new
432
- end
434
+ @associations ||= {
435
+ :has_many => [], :has_one => [], :belongs_to => []
436
+ }
437
+ end
433
438
 
434
- { :has_many => [], :has_one => [], :belongs_to => [] }
435
- end
439
+ def associations_helper
440
+ @associations_helper ||= Module.new.tap { |helper| include helper }
436
441
  end
437
442
 
438
443
  # Establishes a has_many association.
@@ -443,16 +448,16 @@ module Recurly
443
448
  # @option options [true, false] :readonly Don't define a setter.
444
449
  def has_many collection_name, options = {}
445
450
  associations[:has_many] << collection_name.to_s
446
- self::Associations.module_eval {
447
- define_method(collection_name) {
451
+ associations_helper.module_eval do
452
+ define_method collection_name do
448
453
  self[collection_name] ||= []
449
- }
454
+ end
450
455
  if options.key?(:readonly) && options[:readonly] == false
451
- define_method("#{collection_name}=") { |collection|
456
+ define_method "#{collection_name}=" do |collection|
452
457
  self[collection_name] = collection
453
- }
458
+ end
454
459
  end
455
- }
460
+ end
456
461
  end
457
462
 
458
463
  # Establishes a has_one association.
@@ -463,11 +468,11 @@ module Recurly
463
468
  # @option options [true, false] :readonly Don't define a setter.
464
469
  def has_one member_name, options = {}
465
470
  associations[:has_one] << member_name.to_s
466
- self::Associations.module_eval {
471
+ associations_helper.module_eval do
467
472
  define_method(member_name) { self[member_name] }
468
473
  if options.key?(:readonly) && options[:readonly] == false
469
474
  associated = Recurly.const_get Helper.classify(member_name), false
470
- define_method("#{member_name}=") { |member|
475
+ define_method "#{member_name}=" do |member|
471
476
  associated_uri = "#{path}/#{member_name}"
472
477
  self[member_name] = case member
473
478
  when Hash
@@ -477,18 +482,18 @@ module Recurly
477
482
  else
478
483
  raise ArgumentError, "expected #{associated}"
479
484
  end
480
- }
481
- define_method("build_#{member_name}") { |*args|
485
+ end
486
+ define_method "build_#{member_name}" do |*args|
482
487
  attributes = args.shift || {}
483
488
  self[member_name] = associated.send(
484
489
  :new, attributes.merge(:uri => "#{path}/#{member_name}")
485
490
  ).tap { |child| child.attributes[self.class.member_name] = self }
486
- }
487
- define_method("create_#{member_name}") { |*args|
491
+ end
492
+ define_method "create_#{member_name}" do |*args|
488
493
  send("build_#{member_name}", *args).tap { |child| child.save }
489
- }
494
+ end
490
495
  end
491
- }
496
+ end
492
497
  end
493
498
 
494
499
  # Establishes a belongs_to association.
@@ -496,14 +501,14 @@ module Recurly
496
501
  # @return [Proc]
497
502
  def belongs_to parent_name, options = {}
498
503
  associations[:belongs_to] << parent_name.to_s
499
- self::Associations.module_eval {
504
+ associations_helper.module_eval do
500
505
  define_method(parent_name) { self[parent_name] }
501
506
  if options.key?(:readonly) && options[:readonly] == false
502
- define_method("#{parent_name}=") { |parent|
507
+ define_method "#{parent_name}=" do |parent|
503
508
  self[parent_name] = parent
504
- }
509
+ end
505
510
  end
506
- }
511
+ end
507
512
  end
508
513
 
509
514
  # @return [:has_many, :has_one, :belongs_to, nil] An association type.
@@ -658,7 +663,7 @@ module Recurly
658
663
  if self.class.associations.values.flatten.include? key
659
664
  value = fetch_association key, value
660
665
  # FIXME: More explicit; less magic.
661
- elsif key.end_with?('_in_cents') && !respond_to?(:currency)
666
+ elsif value && key.end_with?('_in_cents') && !respond_to?(:currency)
662
667
  value = Money.new value unless value.is_a? Money
663
668
  end
664
669
 
@@ -761,7 +766,7 @@ module Recurly
761
766
  # account.valid? # => true
762
767
  def valid?
763
768
  return true if persisted? && changed_attributes.empty?
764
- return if response.nil? || (errors.empty? && changed_attributes?)
769
+ return if errors.empty? && changed_attributes?
765
770
  errors.empty?
766
771
  end
767
772
 
@@ -799,7 +804,7 @@ module Recurly
799
804
  # account.errors # => {"account_code"=>["can't be blank"]}
800
805
  # account.errors[:account_code] # => ["can't be blank"]
801
806
  def errors
802
- @errors ||= Recurly::Helper.hash_with_indifferent_read_access
807
+ @errors ||= Errors.new
803
808
  end
804
809
 
805
810
  # Marks a record as persisted, i.e. not a new or deleted record, resetting
@@ -0,0 +1,20 @@
1
+ module Recurly
2
+ class Resource
3
+ class Errors < Hash
4
+ def [] key
5
+ super key.to_s
6
+ end
7
+
8
+ def []= key, value
9
+ super key.to_s, value
10
+ end
11
+
12
+ def full_messages
13
+ map { |attribute, messages|
14
+ attribute_name = attribute.capitalize.gsub('_', ' ')
15
+ messages.map { |message| "#{attribute_name} #{message}." }
16
+ }.flatten
17
+ end
18
+ end
19
+ end
20
+ end
@@ -75,7 +75,7 @@ module Recurly
75
75
 
76
76
  # @return [AddOns]
77
77
  def subscription_add_ons
78
- AddOns.new self, super
78
+ self[:subscription_add_ons] ||= AddOns.new self, super
79
79
  end
80
80
  alias add_ons subscription_add_ons
81
81
 
@@ -2,7 +2,7 @@ module Recurly
2
2
  class Subscription < Resource
3
3
  class AddOns
4
4
  instance_methods.each do |method|
5
- undef_method method if method !~ /^__|^(object_id|respond_to\?|send)$/
5
+ undef_method method if method !~ /^__|^(object_id|respond_to\?|send)$/
6
6
  end
7
7
 
8
8
  # @param subscription [Subscription]
@@ -23,35 +23,37 @@ module Recurly
23
23
  # {:add_on_code => "BONUS"}
24
24
  # ]
25
25
  def << add_on
26
- case add_on
27
- when AddOn then add_on = { :add_on_code => add_on.add_on_code }
28
- when String, Symbol then add_on = { :add_on_code => add_on.to_s }
29
- end
30
- add_on = Helper.hash_with_indifferent_read_access add_on
26
+ add_on = SubscriptionAddOn.new(add_on, @subscription)
31
27
 
32
- exist = @add_ons.find { |a| a[:add_on_code] == add_on[:add_on_code] }
28
+ exist = @add_ons.find { |a| a.add_on_code == add_on.add_on_code }
33
29
  if exist
34
- exist[:quantity] ||= 1 and exist[:quantity] += 1
30
+ exist.quantity ||= 1 and exist.quantity += 1
35
31
 
36
- if add_on[:unit_amount_in_cents]
37
- exist[:unit_amount_in_cents] = add_on[:unit_amount_in_cents]
32
+ if add_on.unit_amount_in_cents
33
+ exist.unit_amount_in_cents = add_on.unit_amount_in_cents
38
34
  end
39
35
  else
40
36
  @add_ons << add_on
41
37
  end
42
38
 
43
- @subscription[:subscription_add_ons] = to_a and self
39
+ self
44
40
  end
45
41
 
46
42
  def to_a
47
43
  @add_ons.dup
48
44
  end
49
45
 
46
+ def errors
47
+ @add_ons.map { |add_on| add_on.errors }
48
+ end
49
+
50
50
  def to_xml options = {}
51
51
  builder = options[:builder] || XML.new('<subscription_add_ons/>')
52
52
  @add_ons.each do |add_on|
53
53
  node = builder.add_element 'subscription_add_on'
54
- add_on.each_pair { |k, v| node.add_element k.to_s, v }
54
+ add_on.attributes.each_pair do |k, v|
55
+ node.add_element k.to_s, v if v
56
+ end
55
57
  end
56
58
  builder.to_s
57
59
  end
@@ -0,0 +1,36 @@
1
+ module Recurly
2
+ class SubscriptionAddOn < Resource
3
+ define_attribute_methods %w(
4
+ add_on_code
5
+ quantity
6
+ unit_amount_in_cents
7
+ )
8
+
9
+ attr_reader :subscription
10
+
11
+ def initialize add_on = nil, subscription = nil
12
+ super()
13
+
14
+ case add_on
15
+ when AddOn, SubscriptionAddOn
16
+ self.add_on_code = add_on.add_on_code
17
+ self.quantity = add_on.quantity
18
+ if add_on.unit_amount_in_cents
19
+ self.unit_amount_in_cents = add_on.unit_amount_in_cents.to_i
20
+ end
21
+ when Hash
22
+ self.attributes = add_on
23
+ when String, Symbol
24
+ self.add_on_code = add_on
25
+ end
26
+
27
+ self.add_on_code = add_on_code.to_s
28
+
29
+ @subscription = subscription
30
+ end
31
+
32
+ def currency
33
+ subscription.currency if subscription
34
+ end
35
+ end
36
+ end
@@ -37,6 +37,7 @@ module Recurly
37
37
  avs_result_street
38
38
  created_at
39
39
  details
40
+ transaction_error
40
41
  )
41
42
  alias to_param uuid
42
43
 
@@ -60,16 +61,18 @@ module Recurly
60
61
 
61
62
  # Refunds the transaction.
62
63
  #
63
- # @return [Transaction, false] The refund when successful, false otherwise.
64
+ # @return [Transaction, false] The updated original transaction if voided,
65
+ # a new refund transaction, false if the transaction isn't voidable or
66
+ # refundable.
64
67
  # @raise [Error] If the refund fails.
65
68
  # @param amount_in_cents [Integer, nil] The amount (in cents) to refund
66
69
  # (refunds fully if nil).
67
- # @see Transaction#void
68
70
  def refund amount_in_cents = nil
69
71
  return false unless self[:refund]
70
- self.class.from_response(
72
+ refund = self.class.from_response(
71
73
  self[:refund].call :params => { :amount_in_cents => amount_in_cents }
72
74
  )
75
+ refund.uuid == uuid ? copy_from(refund) && self : refund
73
76
  end
74
77
 
75
78
  def signable_attributes
@@ -39,6 +39,11 @@ module Recurly
39
39
  xml.text '/errors/transaction_error/customer_message'
40
40
  end
41
41
 
42
+ # @return [String] The transaction error code.
43
+ def transaction_error_code
44
+ xml.text '/errors/transaction_error/error_code'
45
+ end
46
+
42
47
  private
43
48
 
44
49
  def update_transaction transaction
@@ -2,7 +2,7 @@ module Recurly
2
2
  module Version
3
3
  MAJOR = 2
4
4
  MINOR = 1
5
- PATCH = 5
5
+ PATCH = 7
6
6
  PRE = nil
7
7
 
8
8
  VERSION = [MAJOR, MINOR, PATCH, PRE].compact.join('.').freeze
data/lib/recurly/xml.rb CHANGED
@@ -17,9 +17,12 @@ module Recurly
17
17
  when 'integer' then el.text.to_i
18
18
  else
19
19
  # FIXME: Move some of this logic to Resource.from_xml?
20
- resource_name = Helper.classify el.name
21
- if Recurly.const_defined? resource_name, false
22
- return Recurly.const_get(resource_name, false).from_xml el
20
+ [el.name, type].each do |name|
21
+ next unless name
22
+ resource_name = Helper.classify name
23
+ if Recurly.const_defined? resource_name, false
24
+ return Recurly.const_get(resource_name, false).from_xml el
25
+ end
23
26
  end
24
27
  if el.elements.empty?
25
28
  el.text
@@ -36,7 +36,7 @@ module Recurly
36
36
  if node.text?
37
37
  node.text
38
38
  else
39
- node.children.each { |e| return e.text if e.text? }
39
+ node.children.map { |e| e.text if e.text? }.compact.join
40
40
  end
41
41
  end
42
42
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: recurly
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.5
4
+ version: 2.1.7
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-05-30 00:00:00.000000000 Z
12
+ date: 2013-02-06 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70247119507640 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,62 +21,44 @@ dependencies:
21
21
  version: 0.9.2
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70247119507640
25
- - !ruby/object:Gem::Dependency
26
- name: minitest
27
- requirement: &70247119507140 !ruby/object:Gem::Requirement
24
+ version_requirements: !ruby/object:Gem::Requirement
28
25
  none: false
29
26
  requirements:
30
27
  - - ~>
31
28
  - !ruby/object:Gem::Version
32
- version: 2.6.1
33
- type: :development
34
- prerelease: false
35
- version_requirements: *70247119507140
29
+ version: 0.9.2
36
30
  - !ruby/object:Gem::Dependency
37
- name: webmock
38
- requirement: &70247119506680 !ruby/object:Gem::Requirement
31
+ name: minitest
32
+ requirement: !ruby/object:Gem::Requirement
39
33
  none: false
40
34
  requirements:
41
35
  - - ~>
42
36
  - !ruby/object:Gem::Version
43
- version: 1.7.6
37
+ version: 2.6.1
44
38
  type: :development
45
39
  prerelease: false
46
- version_requirements: *70247119506680
47
- - !ruby/object:Gem::Dependency
48
- name: guard-minitest
49
- requirement: &70247119506220 !ruby/object:Gem::Requirement
40
+ version_requirements: !ruby/object:Gem::Requirement
50
41
  none: false
51
42
  requirements:
52
43
  - - ~>
53
44
  - !ruby/object:Gem::Version
54
- version: 0.4.0
55
- type: :development
56
- prerelease: false
57
- version_requirements: *70247119506220
45
+ version: 2.6.1
58
46
  - !ruby/object:Gem::Dependency
59
- name: rb-fsevent
60
- requirement: &70247119505760 !ruby/object:Gem::Requirement
47
+ name: webmock
48
+ requirement: !ruby/object:Gem::Requirement
61
49
  none: false
62
50
  requirements:
63
51
  - - ~>
64
52
  - !ruby/object:Gem::Version
65
- version: 0.4.3.1
53
+ version: 1.7.6
66
54
  type: :development
67
55
  prerelease: false
68
- version_requirements: *70247119505760
69
- - !ruby/object:Gem::Dependency
70
- name: growl_notify
71
- requirement: &70247119505300 !ruby/object:Gem::Requirement
56
+ version_requirements: !ruby/object:Gem::Requirement
72
57
  none: false
73
58
  requirements:
74
59
  - - ~>
75
60
  - !ruby/object:Gem::Version
76
- version: 0.0.1
77
- type: :development
78
- prerelease: false
79
- version_requirements: *70247119505300
61
+ version: 1.7.6
80
62
  description: ! 'An API client library for Recurly: http://recurly.com'
81
63
  email: support@recurly.com
82
64
  executables:
@@ -85,6 +67,7 @@ extensions: []
85
67
  extra_rdoc_files:
86
68
  - README.markdown
87
69
  files:
70
+ - lib/ecurly.rb
88
71
  - lib/rails/generators/recurly/config_generator.rb
89
72
  - lib/rails/recurly.rb
90
73
  - lib/recurly/account.rb
@@ -102,10 +85,12 @@ files:
102
85
  - lib/recurly/money.rb
103
86
  - lib/recurly/plan.rb
104
87
  - lib/recurly/redemption.rb
88
+ - lib/recurly/resource/errors.rb
105
89
  - lib/recurly/resource/pager.rb
106
90
  - lib/recurly/resource.rb
107
91
  - lib/recurly/subscription/add_ons.rb
108
92
  - lib/recurly/subscription.rb
93
+ - lib/recurly/subscription_add_on.rb
109
94
  - lib/recurly/transaction/errors.rb
110
95
  - lib/recurly/transaction.rb
111
96
  - lib/recurly/version.rb
@@ -114,9 +99,8 @@ files:
114
99
  - lib/recurly/xml.rb
115
100
  - lib/recurly.rb
116
101
  - README.markdown
117
- - !binary |-
118
- YmluL3JlY3VybHk=
119
- homepage: http://github.com/recurly/recurly-client-ruby
102
+ - bin/recurly
103
+ homepage: https://github.com/recurly/recurly-client-ruby
120
104
  licenses:
121
105
  - MIT
122
106
  post_install_message:
@@ -139,9 +123,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
139
123
  version: '0'
140
124
  requirements: []
141
125
  rubyforge_project:
142
- rubygems_version: 1.8.11
126
+ rubygems_version: 1.8.23
143
127
  signing_key:
144
128
  specification_version: 3
145
129
  summary: Recurly API Client
146
130
  test_files: []
147
- has_rdoc: true