recurly 2.1.12 → 2.2.0

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.

checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: bea20435713d70576e0ee1b03e289e5f24c8834c4b4b46fc77791c30a6a99fe9
4
- data.tar.gz: f8185173c9ab5cd1200ac31e75650d2ff1d219379d9416638a0a55b085822bab
2
+ SHA1:
3
+ metadata.gz: c791903258f0bd8ba1d9cb2826ec0fb030f119e2
4
+ data.tar.gz: 9f08ec8700651e5f1301ec295c1582c4600fed48
5
5
  SHA512:
6
- metadata.gz: 53319854fdd42314b0e31855ea0a8306468a4aa390ad00551986051e1dd646a7aa8b6825594a92a34e72e097a73e138053258b9dc4a58abe22ae31e837faf244
7
- data.tar.gz: 31cd770a748f8fee1b0cfe4c46ebaf7285d5d76a30a9b5cf17c512a6ad18df7207b693c58af081d427486f081680cbf44d03f95c5b161a9d4cafbba06036b709
6
+ metadata.gz: 747adc59314fdf0f54576463c186aece07c83a813535bc67c834bdf3370fe3c19de03fe1cb81f72a2300f396df38d26acffb4ceef004be8bf2759b91c81495ba
7
+ data.tar.gz: cb46b87109a2bd83fcaa46ea562d7c87c373b1a3f178cfcb34078be5a63655e7e344728fb1512a1e7862f2abe5ab1875e6532305671124ae825b5088f583621f
data/README.markdown CHANGED
@@ -12,7 +12,7 @@ Recurly is packaged as a Ruby gem. We recommend you install it with
12
12
  [Bundler](http://gembundler.com/) by adding the following line to your Gemfile:
13
13
 
14
14
  ``` ruby
15
- gem 'recurly', '~> 2.1.11'
15
+ gem 'recurly', '~> 2.2.0'
16
16
  ```
17
17
 
18
18
  Recurly will automatically use [Nokogiri](http://nokogiri.org/) (for a nice
@@ -62,7 +62,7 @@ Instructions and examples are available on
62
62
  [Recurly's documentation site](http://docs.recurly.com/api/basics).
63
63
 
64
64
  Recurly's gem API is available
65
- [here](http://rubydoc.info/gems/recurly/2.1.5/frames).
65
+ [here](http://rubydoc.info/gems/recurly/2.1.9/frames).
66
66
 
67
67
 
68
68
  ## Contributing
@@ -70,7 +70,7 @@ Recurly's gem API is available
70
70
  Developing for the Recurly gem is easy with [Bundler](http://gembundler.com/).
71
71
 
72
72
  Fork and clone the repository, `cd` into the directory, and, with a Ruby of
73
- your choice (1.8.7 is supported, but we suggest 1.9.2 or greater), set up your
73
+ your choice (1.9.3 or greater), set up your
74
74
  environment.
75
75
 
76
76
  If you don't have Bundler installed, install it with the following command:
data/lib/recurly.rb CHANGED
@@ -66,8 +66,6 @@ module Recurly
66
66
  end
67
67
 
68
68
  # Assigns a logger to log requests/responses and more.
69
- # The logger can only be set if the environment variable
70
- # `RECURLY_INSECURE_DEBUG` equals `true`.
71
69
  #
72
70
  # @return [Logger, nil]
73
71
  # @example
@@ -79,22 +77,6 @@ module Recurly
79
77
  # Recurly.logger = nil # Or Recurly.logger = Logger.new nil
80
78
  attr_accessor :logger
81
79
 
82
- def logger=(logger)
83
- if ENV['RECURLY_INSECURE_DEBUG'].to_s.downcase == 'true'
84
- @logger = logger
85
- puts <<-MSG
86
- [WARNING] Recurly logger enabled. The logger has the potential to leak
87
- PII and should never be used in production environments.
88
- MSG
89
- else
90
- puts <<-MSG
91
- [WARNING] Recurly logger has been disabled. If you wish to use it,
92
- only do so in a non-production environment and make sure
93
- the `RECURLY_INSECURE_DEBUG` environment variable is set to `true`.
94
- MSG
95
- end
96
- end
97
-
98
80
  # Convenience logging method includes a Logger#progname dynamically.
99
81
  # @return [true, nil]
100
82
  def log level, message
@@ -51,8 +51,8 @@ module Recurly
51
51
  # (e.g., the account is already opwn), and may raise an exception if the
52
52
  # attempt fails.
53
53
  def reopen
54
- return false unless self[:reopen]
55
- reload self[:reopen].call
54
+ return false unless link? :reopen
55
+ reload follow_link :reopen
56
56
  true
57
57
  end
58
58
 
data/lib/recurly/api.rb CHANGED
@@ -15,7 +15,6 @@ module Recurly
15
15
  require 'recurly/api/errors'
16
16
 
17
17
  @@base_uri = "https://api.recurly.com/v2/"
18
- @@valid_domains = [".recurly.com"]
19
18
 
20
19
  FORMATS = Helper.hash_with_indifferent_read_access(
21
20
  'pdf' => 'application/pdf',
@@ -42,13 +41,13 @@ module Recurly
42
41
  # @return [Net::HTTPOK, Net::HTTPResponse]
43
42
  # @raise [ResponseError] With a non-2xx status code.
44
43
  def head uri, params = {}, options = {}
45
- request :head, uri, { :params => params }.merge(options)
44
+ request :head, uri, { :params => params || {} }.merge(options)
46
45
  end
47
46
 
48
47
  # @return [Net::HTTPOK, Net::HTTPResponse]
49
48
  # @raise [ResponseError] With a non-2xx status code.
50
49
  def get uri, params = {}, options = {}
51
- request :get, uri, { :params => params }.merge(options)
50
+ request :get, uri, { :params => params || {} }.merge(options)
52
51
  end
53
52
 
54
53
  # @return [Net::HTTPCreated, Net::HTTPResponse]
@@ -65,7 +64,7 @@ module Recurly
65
64
 
66
65
  # @return [Net::HTTPNoContent, Net::HTTPResponse]
67
66
  # @raise [ResponseError] With a non-2xx status code.
68
- def delete uri, options = {}
67
+ def delete uri, body = nil, options = {}
69
68
  request :delete, uri, options
70
69
  end
71
70
 
@@ -74,13 +73,6 @@ module Recurly
74
73
  URI.parse @@base_uri.sub('api', Recurly.subdomain)
75
74
  end
76
75
 
77
- def validate_uri!(uri)
78
- domain = @@valid_domains.detect { |d| uri.host.end_with?(d) }
79
- unless domain
80
- raise ArgumentError, "URI #{uri} is invalid. You may only make requests to a Recurly domain."
81
- end
82
- end
83
-
84
76
  # @return [String]
85
77
  def user_agent
86
78
  "Recurly/#{Version}; #{RUBY_DESCRIPTION}"
@@ -36,14 +36,13 @@ module Recurly
36
36
  head = headers.dup
37
37
  head.update options[:head] if options[:head]
38
38
  head.delete_if { |_, value| value.nil? }
39
- uri = base_uri + uri
39
+ uri = base_uri + URI.escape(uri)
40
40
  if options[:params] && !options[:params].empty?
41
41
  pairs = options[:params].map { |key, value|
42
42
  "#{CGI.escape key.to_s}=#{CGI.escape value.to_s}"
43
43
  }
44
44
  uri += "?#{pairs.join '&'}"
45
45
  end
46
- self.validate_uri!(uri)
47
46
  request = METHODS[method].new uri.request_uri, head
48
47
  request.basic_auth(*[Recurly.api_key, nil].flatten[0, 2])
49
48
  if options[:body]
@@ -100,6 +99,8 @@ module Recurly
100
99
  when 200...300 then response
101
100
  else raise ERRORS[code].new request, response
102
101
  end
102
+ rescue Errno::ECONNREFUSED => e
103
+ raise Error, e.message
103
104
  end
104
105
  end
105
106
  end
@@ -51,7 +51,7 @@ module Recurly
51
51
  # account = Account.find account_code
52
52
  # coupon.redeem account
53
53
  def redeem account_or_code, currency = nil
54
- return false unless self[:redeem]
54
+ return false unless link? :redeem
55
55
 
56
56
  account_code = if account_or_code.is_a? Account
57
57
  account_or_code.account_code
@@ -59,7 +59,7 @@ module Recurly
59
59
  account_or_code
60
60
  end
61
61
 
62
- Redemption.from_response self[:redeem].call(
62
+ Redemption.from_response follow_link(:redeem,
63
63
  :body => (redemption = redemptions.new(
64
64
  :account_code => account_code,
65
65
  :currency => currency || Recurly.default_currency
@@ -40,8 +40,8 @@ module Recurly
40
40
  # @return [true, false] +true+ when successful, +false+ when unable to
41
41
  # (e.g., the invoice is no longer open).
42
42
  def mark_successful
43
- return false unless self[:mark_successful]
44
- reload self[:mark_successful].call
43
+ return false unless link? :mark_successful
44
+ reload follow_link :mark_successful
45
45
  true
46
46
  end
47
47
 
@@ -50,8 +50,8 @@ module Recurly
50
50
  # @return [true, false] +true+ when successful, +false+ when unable to
51
51
  # (e.g., the invoice is no longer open).
52
52
  def mark_failed
53
- return false unless self[:mark_failed]
54
- reload self[:mark_failed].call
53
+ return false unless link? :mark_failed
54
+ reload follow_link :mark_failed
55
55
  true
56
56
  end
57
57
 
@@ -1,5 +1,4 @@
1
1
  require 'date'
2
- require 'erb'
3
2
 
4
3
  module Recurly
5
4
  # The base class for all Recurly resources (e.g. {Account}, {Subscription},
@@ -185,7 +184,6 @@ module Recurly
185
184
  # Recurly::Account.member_path "code" # => "accounts/code"
186
185
  # Recurly::Account.member_path nil # => "accounts"
187
186
  def member_path uuid
188
- uuid = ERB::Util.url_encode(uuid) if uuid
189
187
  [collection_path, uuid].compact.join '/'
190
188
  end
191
189
 
@@ -321,8 +319,9 @@ module Recurly
321
319
  raise NotFound, "can't find a record with nil identifier"
322
320
  end
323
321
 
322
+ uri = uuid =~ /^http/ ? uuid : member_path(uuid)
324
323
  begin
325
- from_response API.get(member_path(uuid), {}, options)
324
+ from_response API.get(uri, {}, options)
326
325
  rescue API::NotFound => e
327
326
  raise NotFound, e.description
328
327
  end
@@ -394,13 +393,10 @@ module Recurly
394
393
 
395
394
  xml.each_element do |el|
396
395
  if el.name == 'a'
397
- name, uri = el.attribute('name').value, el.attribute('href').value
398
- record[name] = case el.attribute('method').to_s
399
- when 'get', '' then proc { |*opts| API.get uri, {}, *opts }
400
- when 'post' then proc { |*opts| API.post uri, nil, *opts }
401
- when 'put' then proc { |*opts| API.put uri, nil, *opts }
402
- when 'delete' then proc { |*opts| API.delete uri, *opts }
403
- end
396
+ record.links[el.attribute('name').value] = {
397
+ :method => el.attribute('method').to_s,
398
+ :href => el.attribute('href').value
399
+ }
404
400
  next
405
401
  end
406
402
 
@@ -408,17 +404,16 @@ module Recurly
408
404
  resource_class = Recurly.const_get(
409
405
  Helper.classify(el.attribute('type') || el.name), false
410
406
  )
411
- record[el.name] = case el.name
407
+ case el.name
412
408
  when *associations[:has_many]
413
- Pager.new resource_class, :uri => href.value, :parent => record
409
+ record[el.name] = Pager.new(
410
+ resource_class, :uri => href.value, :parent => record
411
+ )
414
412
  when *(associations[:has_one] + associations[:belongs_to])
415
- lambda {
416
- begin
417
- relation = resource_class.from_response API.get(href.value)
418
- relation.attributes[member_name] = record
419
- relation
420
- rescue Recurly::API::NotFound
421
- end
413
+ record.links[el.name] = {
414
+ :resource_class => resource_class,
415
+ :method => :get,
416
+ :href => href.value
422
417
  }
423
418
  end
424
419
  else
@@ -552,22 +547,15 @@ module Recurly
552
547
  yield self if block_given?
553
548
  end
554
549
 
555
- def to_param
556
- self[self.class.param_name]
557
- end
558
-
559
550
  # @return [self] Reloads the record from the server.
560
551
  def reload response = nil
561
552
  if response
562
553
  return if response.body.to_s.length.zero?
563
554
  fresh = self.class.from_response response
564
555
  else
565
- options = {:etag => (etag unless changed?)}
566
- fresh = if @href
567
- self.class.from_response API.get(@href, {}, options)
568
- else
569
- self.class.find(to_param, options)
570
- end
556
+ fresh = self.class.find(
557
+ @href || to_param, :etag => (etag unless changed?)
558
+ )
571
559
  end
572
560
  fresh and copy_from fresh
573
561
  persist! true
@@ -641,9 +629,11 @@ module Recurly
641
629
  # account[:last_name] # => "Beneke"
642
630
  # @see #write_attribute
643
631
  def read_attribute key
644
- value = attributes[key = key.to_s]
645
- if value.respond_to?(:call) && self.class.reflect_on_association(key)
646
- value = attributes[key] = value.call
632
+ key = key.to_s
633
+ if attributes.key? key
634
+ value = attributes[key]
635
+ elsif links.key?(key) && self.class.reflect_on_association(key)
636
+ value = attributes[key] = follow_link key
647
637
  end
648
638
  value
649
639
  end
@@ -685,6 +675,39 @@ module Recurly
685
675
  }
686
676
  end
687
677
 
678
+ # @return [Hash] The raw hash of record href links.
679
+ def links
680
+ @links ||= {}
681
+ end
682
+
683
+ # Whether a record has a link with the given name.
684
+ #
685
+ # @param key [Symbol, String] The name of the link to check for.
686
+ # @example
687
+ # account.link? :billing_info # => true
688
+ def link? key
689
+ links.key?(key.to_s)
690
+ end
691
+
692
+ # Fetch the value of a link by following the associated href.
693
+ #
694
+ # @param key [Symbol, String] The name of the link to be followed.
695
+ # @param options [Hash] A hash of API options.
696
+ # @example
697
+ # account.read_link :billing_info # => <Recurly::BillingInfo>
698
+ def follow_link key, options = {}
699
+ if link = links[key = key.to_s]
700
+ response = API.send link[:method], link[:href], nil, options
701
+ if resource_class = link[:resource_class]
702
+ response = resource_class.from_response response
703
+ response.attributes[self.class.member_name] = self
704
+ end
705
+ response
706
+ end
707
+ rescue Recurly::API::NotFound
708
+ raise unless resource_class
709
+ end
710
+
688
711
  # Serializes the record to XML.
689
712
  #
690
713
  # @return [String] An XML string.
@@ -769,9 +792,10 @@ module Recurly
769
792
  # account.save # => true
770
793
  # account.valid? # => true
771
794
  def valid?
772
- return true if persisted? && changed_attributes.empty?
773
- return if errors.empty? && changed_attributes?
774
- errors.empty?
795
+ return true if persisted? && !changed?
796
+ errors_empty = errors.values.flatten.empty?
797
+ return if errors_empty && changed?
798
+ errors_empty
775
799
  end
776
800
 
777
801
  # Update a record with a given hash of attributes.
@@ -808,7 +832,7 @@ module Recurly
808
832
  # account.errors # => {"account_code"=>["can't be blank"]}
809
833
  # account.errors[:account_code] # => ["can't be blank"]
810
834
  def errors
811
- @errors ||= Errors.new
835
+ @errors ||= Errors.new { |h, k| h[k] = [] }
812
836
  end
813
837
 
814
838
  # Marks a record as persisted, i.e. not a new or deleted record, resetting
@@ -872,8 +896,9 @@ module Recurly
872
896
  @href,
873
897
  changed_attributes,
874
898
  previous_changes,
899
+ response,
875
900
  etag,
876
- response
901
+ links
877
902
  ]
878
903
  end
879
904
 
@@ -886,7 +911,8 @@ module Recurly
886
911
  @changed_attributes,
887
912
  @previous_changes,
888
913
  @response,
889
- @etag = serialization
914
+ @etag,
915
+ @links = serialization
890
916
  end
891
917
 
892
918
  # @return [String]
@@ -913,12 +939,12 @@ module Recurly
913
939
 
914
940
  def invalid! attribute_path, error
915
941
  if attribute_path.length == 1
916
- (errors[attribute_path[0]] ||= []) << error
942
+ errors[attribute_path[0]] << error
917
943
  else
918
944
  child, k, v = attribute_path.shift.scan(/[^\[\]=]+/)
919
945
  if c = k ? self[child].find { |d| d[k] == v } : self[child]
920
946
  c.invalid! attribute_path, error
921
- (e = errors[child] ||= []) << 'is invalid' and e.uniq!
947
+ e = errors[child] << 'is invalid' and e.uniq!
922
948
  end
923
949
  end
924
950
  end
@@ -39,6 +39,9 @@ module Recurly
39
39
  subscription_add_ons
40
40
  coupon_code
41
41
  total_billing_cycles
42
+ net_terms
43
+ collection_method
44
+ po_number
42
45
  )
43
46
  alias to_param uuid
44
47
 
@@ -94,8 +97,8 @@ module Recurly
94
97
  # subscription = account.subscriptions.first
95
98
  # subscription.cancel # => true
96
99
  def cancel
97
- return false unless self[:cancel]
98
- reload self[:cancel].call
100
+ return false unless link? :cancel
101
+ reload follow_link :cancel
99
102
  true
100
103
  end
101
104
 
@@ -116,11 +119,11 @@ module Recurly
116
119
  # subscription = account.subscriptions.first
117
120
  # subscription.terminate(:partial) # => true
118
121
  def terminate refund_type = :none
119
- return false unless self[:terminate]
122
+ return false unless link? :terminate
120
123
  unless REFUND_TYPES.include? refund_type.to_s
121
124
  raise ArgumentError, "refund must be one of: #{REFUND_TYPES.join ', '}"
122
125
  end
123
- reload self[:terminate].call(:params => { :refund => refund_type })
126
+ reload follow_link(:terminate, :params => { :refund => refund_type })
124
127
  true
125
128
  end
126
129
  alias destroy terminate
@@ -131,8 +134,8 @@ module Recurly
131
134
  # (e.g., the subscription is already active), and may raise an exception
132
135
  # if the reactivation fails.
133
136
  def reactivate
134
- return false unless self[:reactivate]
135
- reload self[:reactivate].call
137
+ return false unless link? :reactivate
138
+ reload follow_link :reactivate
136
139
  true
137
140
  end
138
141
 
@@ -142,8 +145,8 @@ module Recurly
142
145
  # (e.g., the subscription is not active).
143
146
  # @param next_renewal_date [Time] when the subscription should renew.
144
147
  def postpone next_renewal_date
145
- return false unless self[:postpone]
146
- reload self[:postpone].call(
148
+ return false unless link? :postpone
149
+ reload follow_link(:postpone,
147
150
  :params => { :next_renewal_date => next_renewal_date }
148
151
  )
149
152
  true
@@ -13,6 +13,7 @@ module Recurly
13
13
 
14
14
  case add_on
15
15
  when AddOn, SubscriptionAddOn
16
+ @add_on = add_on if add_on.is_a? AddOn
16
17
  self.add_on_code = add_on.add_on_code
17
18
  self.quantity = add_on.quantity
18
19
  if add_on.unit_amount_in_cents
@@ -29,6 +30,10 @@ module Recurly
29
30
  @subscription = subscription
30
31
  end
31
32
 
33
+ def add_on
34
+ @add_on ||= subscription.plan.add_ons.find add_on_code
35
+ end
36
+
32
37
  def currency
33
38
  subscription.currency if subscription
34
39
  end
@@ -69,9 +69,9 @@ module Recurly
69
69
  # @param amount_in_cents [Integer, nil] The amount (in cents) to refund
70
70
  # (refunds fully if nil).
71
71
  def refund amount_in_cents = nil
72
- return false unless self[:refund]
72
+ return false unless link? :refund
73
73
  refund = self.class.from_response(
74
- self[:refund].call :params => { :amount_in_cents => amount_in_cents }
74
+ follow_link :refund, :params => { :amount_in_cents => amount_in_cents }
75
75
  )
76
76
  refund.uuid == uuid ? copy_from(refund) && self : refund
77
77
  end
@@ -1,8 +1,8 @@
1
1
  module Recurly
2
2
  module Version
3
3
  MAJOR = 2
4
- MINOR = 1
5
- PATCH = 12
4
+ MINOR = 2
5
+ PATCH = 0
6
6
  PRE = nil
7
7
 
8
8
  VERSION = [MAJOR, MINOR, PATCH, PRE].compact.join('.').freeze
metadata CHANGED
@@ -1,55 +1,55 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: recurly
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.12
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Recurly
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-09 00:00:00.000000000 Z
11
+ date: 2013-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: 0.9.2
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: 0.9.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: minitest
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: 2.6.1
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.6.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: webmock
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ~>
46
46
  - !ruby/object:Gem::Version
47
47
  version: 1.7.6
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ~>
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.7.6
55
55
  description: 'An API client library for Recurly: http://recurly.com'
@@ -60,19 +60,16 @@ extensions: []
60
60
  extra_rdoc_files:
61
61
  - README.markdown
62
62
  files:
63
- - README.markdown
64
- - bin/recurly
65
63
  - lib/ecurly.rb
66
64
  - lib/rails/generators/recurly/config_generator.rb
67
65
  - lib/rails/recurly.rb
68
- - lib/recurly.rb
69
66
  - lib/recurly/account.rb
70
67
  - lib/recurly/add_on.rb
71
68
  - lib/recurly/adjustment.rb
72
69
  - lib/recurly/all.rb
73
- - lib/recurly/api.rb
74
70
  - lib/recurly/api/errors.rb
75
71
  - lib/recurly/api/net_http_adapter.rb
72
+ - lib/recurly/api.rb
76
73
  - lib/recurly/billing_info.rb
77
74
  - lib/recurly/coupon.rb
78
75
  - lib/recurly/helper.rb
@@ -81,42 +78,46 @@ files:
81
78
  - lib/recurly/money.rb
82
79
  - lib/recurly/plan.rb
83
80
  - lib/recurly/redemption.rb
84
- - lib/recurly/resource.rb
85
81
  - lib/recurly/resource/errors.rb
86
82
  - lib/recurly/resource/pager.rb
87
- - lib/recurly/subscription.rb
83
+ - lib/recurly/resource.rb
88
84
  - lib/recurly/subscription/add_ons.rb
85
+ - lib/recurly/subscription.rb
89
86
  - lib/recurly/subscription_add_on.rb
90
- - lib/recurly/transaction.rb
91
87
  - lib/recurly/transaction/errors.rb
88
+ - lib/recurly/transaction.rb
92
89
  - lib/recurly/version.rb
93
- - lib/recurly/xml.rb
94
90
  - lib/recurly/xml/nokogiri.rb
95
91
  - lib/recurly/xml/rexml.rb
92
+ - lib/recurly/xml.rb
93
+ - lib/recurly.rb
94
+ - README.markdown
95
+ - bin/recurly
96
96
  homepage: https://github.com/recurly/recurly-client-ruby
97
97
  licenses:
98
98
  - MIT
99
99
  metadata: {}
100
100
  post_install_message:
101
101
  rdoc_options:
102
- - "--main"
102
+ - --main
103
103
  - README.markdown
104
104
  require_paths:
105
105
  - lib
106
106
  required_ruby_version: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  required_rubygems_version: !ruby/object:Gem::Requirement
112
112
  requirements:
113
- - - ">="
113
+ - - '>='
114
114
  - !ruby/object:Gem::Version
115
115
  version: '0'
116
116
  requirements: []
117
117
  rubyforge_project:
118
- rubygems_version: 2.7.6
118
+ rubygems_version: 2.1.10
119
119
  signing_key:
120
120
  specification_version: 4
121
121
  summary: Recurly API Client
122
122
  test_files: []
123
+ has_rdoc: true