recurly 0.4.16 → 2.0.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.

Files changed (78) hide show
  1. data/README.markdown +118 -0
  2. data/bin/recurly +78 -0
  3. data/lib/rails/generators/recurly/config_generator.rb +16 -0
  4. data/lib/rails/recurly.rb +13 -0
  5. data/lib/recurly.rb +64 -139
  6. data/lib/recurly/account.rb +52 -111
  7. data/lib/recurly/add_on.rb +20 -0
  8. data/lib/recurly/adjustment.rb +51 -0
  9. data/lib/recurly/api.rb +73 -0
  10. data/lib/recurly/api/errors.rb +205 -0
  11. data/lib/recurly/api/net_http.rb +77 -0
  12. data/lib/recurly/billing_info.rb +45 -42
  13. data/lib/recurly/coupon.rb +63 -8
  14. data/lib/recurly/helper.rb +39 -0
  15. data/lib/recurly/invoice.rb +38 -16
  16. data/lib/recurly/js.rb +113 -0
  17. data/lib/recurly/money.rb +105 -0
  18. data/lib/recurly/plan.rb +26 -15
  19. data/lib/recurly/redemption.rb +34 -0
  20. data/lib/recurly/resource.rb +925 -0
  21. data/lib/recurly/resource/pager.rb +210 -0
  22. data/lib/recurly/subscription.rb +90 -67
  23. data/lib/recurly/subscription/add_ons.rb +73 -0
  24. data/lib/recurly/transaction.rb +65 -53
  25. data/lib/recurly/transaction/errors.rb +98 -0
  26. data/lib/recurly/version.rb +16 -2
  27. data/lib/recurly/xml.rb +85 -0
  28. data/lib/recurly/xml/nokogiri.rb +49 -0
  29. data/lib/recurly/xml/rexml.rb +50 -0
  30. metadata +76 -165
  31. data/LICENSE +0 -21
  32. data/README.md +0 -104
  33. data/init.rb +0 -1
  34. data/lib/patches/rails2/active_resource/base.rb +0 -35
  35. data/lib/patches/rails2/active_resource/connection.rb +0 -10
  36. data/lib/patches/rails3/active_model/serializers/xml.rb +0 -28
  37. data/lib/patches/rails3/active_resource/connection.rb +0 -10
  38. data/lib/recurly/account_base.rb +0 -35
  39. data/lib/recurly/base.rb +0 -195
  40. data/lib/recurly/charge.rb +0 -39
  41. data/lib/recurly/config_parser.rb +0 -31
  42. data/lib/recurly/credit.rb +0 -28
  43. data/lib/recurly/exceptions.rb +0 -32
  44. data/lib/recurly/formats/xml_with_errors.rb +0 -132
  45. data/lib/recurly/formats/xml_with_pagination.rb +0 -47
  46. data/lib/recurly/rails2/compatibility.rb +0 -8
  47. data/lib/recurly/rails3/railtie.rb +0 -21
  48. data/lib/recurly/rails3/recurly.rake +0 -28
  49. data/lib/recurly/transparent.rb +0 -148
  50. data/lib/recurly/verification.rb +0 -83
  51. data/spec/config/recurly.yml +0 -6
  52. data/spec/config/test1.yml +0 -4
  53. data/spec/config/test2.yml +0 -7
  54. data/spec/integration/account_spec.rb +0 -286
  55. data/spec/integration/add_on_spec.rb +0 -84
  56. data/spec/integration/billing_info_spec.rb +0 -148
  57. data/spec/integration/charge_spec.rb +0 -176
  58. data/spec/integration/coupon_spec.rb +0 -49
  59. data/spec/integration/credit_spec.rb +0 -106
  60. data/spec/integration/invoice_spec.rb +0 -86
  61. data/spec/integration/plan_spec.rb +0 -87
  62. data/spec/integration/subscription_spec.rb +0 -221
  63. data/spec/integration/transaction_spec.rb +0 -154
  64. data/spec/integration/transparent_spec.rb +0 -99
  65. data/spec/spec_helper.rb +0 -34
  66. data/spec/support/factory.rb +0 -211
  67. data/spec/support/vcr.rb +0 -11
  68. data/spec/unit/account_spec.rb +0 -19
  69. data/spec/unit/billing_info_spec.rb +0 -39
  70. data/spec/unit/charge_spec.rb +0 -20
  71. data/spec/unit/config_spec.rb +0 -42
  72. data/spec/unit/coupon_spec.rb +0 -13
  73. data/spec/unit/credit_spec.rb +0 -20
  74. data/spec/unit/plan_spec.rb +0 -18
  75. data/spec/unit/subscription_spec.rb +0 -25
  76. data/spec/unit/transaction_spec.rb +0 -32
  77. data/spec/unit/transparent_spec.rb +0 -152
  78. data/spec/unit/verification_spec.rb +0 -82
@@ -1,68 +1,80 @@
1
1
  module Recurly
2
- class Transaction < Base
3
- self.element_name = "transaction"
2
+ class Transaction < Resource
3
+ require 'recurly/transaction/errors'
4
4
 
5
- def self.known_attributes
6
- [
7
- "description",
8
- "amount_in_cents",
9
- "account_code",
10
- "type",
11
- "action",
12
- "date",
13
- "status",
14
- "message",
15
- "reference",
16
- "ccv_result",
17
- "avs_result",
18
- "avs_result_street",
19
- "avs_result_postal",
20
- "test",
21
- "voidable",
22
- "refundable"
23
- ]
24
- end
5
+ # @macro [attach] scope
6
+ # @scope class
7
+ # @return [Pager] a pager that yields +$1+ transactions.
8
+ scope :authorizations, :type => 'authorization'
9
+ scope :purchases, :type => 'purchase'
10
+ scope :refunds, :type => 'refund'
25
11
 
26
- # initialize fields with blank data
27
- def initialize(attributes = {}, persisted = false)
28
- # initialize embedded attributes
29
- attributes = attributes.with_indifferent_access
30
- attributes[:account] ||= {}
31
- super
32
- end
12
+ scope :successful, :state => 'successful'
13
+ scope :failed, :state => 'failed'
14
+ scope :voided, :state => 'voided'
33
15
 
34
- def self.list(status = :all)
16
+ # @return [Account]
17
+ belongs_to :account
35
18
 
36
- options = {}
37
- if status != :all
38
- options[:params] = {:show => status.to_s}
39
- end
40
-
41
- find(:all, options)
42
- end
19
+ define_attribute_methods %w(
20
+ uuid
21
+ action
22
+ amount_in_cents
23
+ tax_in_cents
24
+ currency
25
+ status
26
+ reference
27
+ recurring
28
+ test
29
+ voidable
30
+ refundable
31
+ cvv_result
32
+ avs_result
33
+ avs_result_street
34
+ created_at
35
+ details
36
+ )
37
+ alias to_param uuid
43
38
 
44
- def self.list_for_account(account_code, status = :all)
45
- results = find(:all, :from => "/accounts/#{CGI::escape(account_code.to_s)}/transactions")
39
+ # @return ["credit", "charge", nil] The type of transaction.
40
+ attr_reader :type
46
41
 
47
- # filter by status
48
- if status != :all
49
- results = results.select{|t| t.status == status.to_s }
50
- end
51
-
52
- results
42
+ # @see Resource#initialize
43
+ def initialize attributes = {}
44
+ super({ :currency => Recurly.default_currency }.merge attributes)
53
45
  end
54
46
 
55
- def self.lookup(account_code, id)
56
- find(id, :params => { :account_code => account_code })
47
+ # Saves new records only.
48
+ #
49
+ # @return [true, false]
50
+ # @raise [Recurly::Error] For persisted transactions.
51
+ # @see Resource#save
52
+ def save
53
+ return super if new_record?
54
+ raise Recurly::Error, "#{self.class.collection_name} cannot be updated"
57
55
  end
58
56
 
59
- def void
60
- connection.delete(element_path(:action => "void"), self.class.headers)
57
+ # Refunds the transaction.
58
+ #
59
+ # @return [Transaction, false] The refund when successful, false otherwise.
60
+ # @raise [Error] If the refund fails.
61
+ # @param amount_in_cents [Integer, nil] The amount (in cents) to refund
62
+ # (refunds fully if nil).
63
+ # @see Transaction#void
64
+ def refund amount_in_cents = nil
65
+ return false unless self[:refund]
66
+ self.class.from_response(
67
+ self[:refund].call :params => { :amount_in_cents => amount_in_cents }
68
+ )
61
69
  end
62
70
 
63
- def refund(amount_in_cents)
64
- connection.delete(element_path(:action => "refund", :amount_in_cents => amount_in_cents), self.class.headers)
71
+ # @return [String]
72
+ def inspect
73
+ attributes = self.class.attribute_names
74
+ unless type == 'credit_card'
75
+ attributes -= %w(cvv_result avs_result avs_result_street)
76
+ end
77
+ super attributes
65
78
  end
66
-
67
79
  end
68
- end
80
+ end
@@ -0,0 +1,98 @@
1
+ module Recurly
2
+ class Transaction < Resource
3
+ # The base error class for transaction errors, raised when a transaction
4
+ # fails.
5
+ #
6
+ # Error messages are customer-friendly, though only {DeclinedError}
7
+ # messages should be a part of the normal API flow (a {ConfigurationError},
8
+ # for example, is a problem that a customer cannot solve and requires your
9
+ # attention).
10
+ #
11
+ # If a record of the transaction was stored in Recurly, it will be
12
+ # accessible via {Error#transaction}.
13
+ #
14
+ # @example
15
+ # begin
16
+ # subscription.save!
17
+ # rescue Recurly::Resource::Invalid => e
18
+ # # Display e.record.errors...
19
+ # rescue Recurly::Transaction::DeclinedError => e
20
+ # # Display e.message and/or subscription (and associated) errors...
21
+ # rescue Recurly::Transaction::RetryableError => e
22
+ # # You should be able to attempt to save this again later.
23
+ # rescue Recurly::Transaction::Error => e
24
+ # # Alert yourself of the issue (i.e., log e.transaction).
25
+ # # Display a generic error message.
26
+ # end
27
+ class Error < API::UnprocessableEntity
28
+ # @return [Transaction] The transaction as returned (or updated) by
29
+ # Recurly.
30
+ attr_reader :transaction
31
+
32
+ def initialize request, response, transaction
33
+ super request, response
34
+ update_transaction transaction
35
+ end
36
+
37
+ # @return [String] A customer-friendly error message.
38
+ def to_s
39
+ xml.text '/errors/transaction_error/customer_message'
40
+ end
41
+
42
+ private
43
+
44
+ def update_transaction transaction
45
+ return unless transaction_xml = xml['/errors/transaction']
46
+
47
+ @transaction = transaction
48
+ transaction = Transaction.from_xml transaction_xml
49
+ if @transaction.nil?
50
+ @transaction = transaction
51
+ else
52
+ @transaction.instance_variable_get(:@attributes).update(
53
+ transaction.attributes
54
+ )
55
+ end
56
+ @transaction.persist!
57
+ end
58
+ end
59
+
60
+ # Raised when a transaction fails for a temporary reason. The transaction
61
+ # should be retried later.
62
+ class RetryableError < Error
63
+ end
64
+
65
+ # Raised when a transaction fails due to a misconfiguration, e.g. if the
66
+ # gateway hasn't been configured.
67
+ class ConfigurationError < Error
68
+ end
69
+
70
+ # Raised when a transaction fails because the billing information was
71
+ # invalid.
72
+ class DeclinedError < Error
73
+ end
74
+
75
+ # Raised when the gateway believes this transaction to be a duplicate.
76
+ class DuplicateError < DeclinedError
77
+ end
78
+
79
+ class << Error
80
+ CATEGORY_MAP = Hash.new DeclinedError
81
+ CATEGORY_MAP.update(
82
+ 'communication' => RetryableError,
83
+ 'configuration' => ConfigurationError,
84
+ 'duplicate' => DuplicateError
85
+ )
86
+
87
+ def validate! exception, transaction
88
+ return unless exception.is_a? API::UnprocessableEntity
89
+
90
+ category = exception.send(:xml).text(
91
+ '/errors/transaction_error/error_category'
92
+ ) and raise CATEGORY_MAP[category].new(
93
+ exception.request, exception.response, transaction
94
+ )
95
+ end
96
+ end
97
+ end
98
+ end
@@ -1,3 +1,17 @@
1
- module Recurly #:nodoc
2
- VERSION = "0.4.16"
1
+ module Recurly
2
+ module Version
3
+ MAJOR = 2
4
+ MINOR = 0
5
+ PATCH = 0
6
+ PRE = nil
7
+
8
+ VERSION = [MAJOR, MINOR, PATCH, PRE].compact.join('.').freeze
9
+
10
+ class << self
11
+ def inspect
12
+ VERSION.dup
13
+ end
14
+ alias to_s inspect
15
+ end
16
+ end
3
17
  end
@@ -0,0 +1,85 @@
1
+ module Recurly
2
+ class XML
3
+ class << self
4
+ def cast el
5
+ return if el.attribute 'nil'
6
+
7
+ if el.attribute 'type'
8
+ type = el.attribute('type').value
9
+ end
10
+
11
+ case type
12
+ when 'array' then el.elements.map { |e| { e.name => XML.cast(e) } }
13
+ when 'boolean' then el.text == 'true'
14
+ when 'date' then Date.parse el.text
15
+ when 'datetime' then DateTime.parse el.text
16
+ when 'float' then el.text.to_f
17
+ when 'integer' then el.text.to_i
18
+ else
19
+ # FIXME: Move some of this logic to Resource.from_xml?
20
+ if type and resource_name = Helper.classify(type)
21
+ if Recurly.const_defined? resource_name
22
+ resource_class = Recurly.const_get(Helper.classify(type))
23
+ return resource_class.new resource_class.from_xml(el)
24
+ end
25
+ end
26
+ if el.elements.empty?
27
+ el.text
28
+ else
29
+ Hash[el.elements.map { |e| [e.name, XML.cast(e)] }]
30
+ end
31
+ end
32
+ end
33
+
34
+ def filter text
35
+ xml = XML.new text
36
+ xml.each do |el|
37
+ el = XML.new el
38
+ case el.name
39
+ when /number/
40
+ text = el.text
41
+ last = text[-4, 4]
42
+ el.text = "#{text[0, text.length - 4].gsub(/\d/, '*')}#{last}"
43
+ when /verification_value/
44
+ el.text = el.text.gsub(/\d/, '*')
45
+ end
46
+ end
47
+ xml.to_s
48
+ end
49
+ end
50
+
51
+ attr_reader :root
52
+
53
+ def initialize xml
54
+ @root = xml.is_a?(String) ? super : xml
55
+ end
56
+
57
+ # Adds an element to the root.
58
+ def add_element name, value = nil
59
+ value = value.respond_to?(:xmlschema) ? value.xmlschema : value.to_s
60
+ XML.new super(name, value)
61
+ end
62
+
63
+ # Iterates over the root's elements.
64
+ def each_element xpath = nil
65
+ return enum_for :each_element unless block_given?
66
+ super
67
+ end
68
+
69
+ # Returns the root's name.
70
+ def name
71
+ super
72
+ end
73
+
74
+ # Returns an XML string.
75
+ def to_s
76
+ super
77
+ end
78
+ end
79
+ end
80
+
81
+ if defined? Nokogiri
82
+ require 'recurly/xml/nokogiri'
83
+ else
84
+ require 'recurly/xml/rexml'
85
+ end
@@ -0,0 +1,49 @@
1
+ module Recurly
2
+ class XML
3
+ module NokogiriAdapter
4
+ def initialize xml
5
+ @root = Nokogiri(xml).root
6
+ end
7
+
8
+ def add_element name, value = nil
9
+ root.add_child(node = ::Nokogiri::XML::Element.new(name, root))
10
+ node << value if value
11
+ node
12
+ end
13
+
14
+ def each_element xpath = nil
15
+ elements = xpath.nil? ? root.children : root.xpath(xpath)
16
+ elements.each { |el| yield el }
17
+ end
18
+
19
+ def each element = root
20
+ element.elements.each do |el|
21
+ yield el
22
+ each el, &Proc.new
23
+ end
24
+ end
25
+
26
+ def name
27
+ root.name
28
+ end
29
+
30
+ def [] xpath
31
+ root.at_xpath xpath
32
+ end
33
+
34
+ def text xpath = nil
35
+ node = root.at_xpath(xpath) and node.text
36
+ end
37
+
38
+ def text= text
39
+ root.content = text
40
+ end
41
+
42
+ def to_s
43
+ root.to_xml(:indent => 0).gsub(/$\n/, '')
44
+ end
45
+ end
46
+
47
+ include NokogiriAdapter
48
+ end
49
+ end
@@ -0,0 +1,50 @@
1
+ require 'rexml/document'
2
+
3
+ module Recurly
4
+ class XML
5
+ module REXMLAdapter
6
+ def initialize xml
7
+ @root = ::REXML::Document.new(xml).root
8
+ end
9
+
10
+ def add_element name, value = nil
11
+ node = root.add_element name
12
+ node.text = value if value
13
+ node
14
+ end
15
+
16
+ def each_element xpath = nil
17
+ root.each_element(xpath) { |el| yield el }
18
+ end
19
+
20
+ def each element = root
21
+ element.each_element do |el|
22
+ yield el
23
+ each el, &Proc.new
24
+ end
25
+ end
26
+
27
+ def name
28
+ root.name
29
+ end
30
+
31
+ def [] xpath
32
+ root.get_elements(xpath).first
33
+ end
34
+
35
+ def text xpath = nil
36
+ text = root.get_text(xpath) and text.to_s
37
+ end
38
+
39
+ def text= text
40
+ root.text = text
41
+ end
42
+
43
+ def to_s
44
+ root.to_s
45
+ end
46
+ end
47
+
48
+ include REXMLAdapter
49
+ end
50
+ end
metadata CHANGED
@@ -1,198 +1,137 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: recurly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.16
4
+ version: 2.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
- - Isaac Hall
9
- - Jacques Crocker
8
+ - Recurly
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-01-11 00:00:00.000000000 Z
12
+ date: 2011-10-25 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
- name: activeresource
17
- requirement: !ruby/object:Gem::Requirement
15
+ name: rake
16
+ requirement: &70168118224900 !ruby/object:Gem::Requirement
18
17
  none: false
19
18
  requirements:
20
- - - ! '>='
19
+ - - ~>
21
20
  - !ruby/object:Gem::Version
22
- version: '2.3'
23
- type: :runtime
21
+ version: 0.9.2
22
+ type: :development
24
23
  prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
- requirements:
28
- - - ! '>='
29
- - !ruby/object:Gem::Version
30
- version: '2.3'
24
+ version_requirements: *70168118224900
31
25
  - !ruby/object:Gem::Dependency
32
- name: activesupport
33
- requirement: !ruby/object:Gem::Requirement
26
+ name: bundler
27
+ requirement: &70168118239400 !ruby/object:Gem::Requirement
34
28
  none: false
35
29
  requirements:
36
- - - ! '>='
30
+ - - ~>
37
31
  - !ruby/object:Gem::Version
38
- version: '2.3'
39
- type: :runtime
32
+ version: 1.1.pre.10
33
+ type: :development
40
34
  prerelease: false
41
- version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
- requirements:
44
- - - ! '>='
45
- - !ruby/object:Gem::Version
46
- version: '2.3'
35
+ version_requirements: *70168118239400
47
36
  - !ruby/object:Gem::Dependency
48
- name: addressable
49
- requirement: !ruby/object:Gem::Requirement
37
+ name: minitest
38
+ requirement: &70168118236700 !ruby/object:Gem::Requirement
50
39
  none: false
51
40
  requirements:
52
- - - ! '>='
41
+ - - ~>
53
42
  - !ruby/object:Gem::Version
54
- version: '2.2'
55
- type: :runtime
43
+ version: 2.6.1
44
+ type: :development
56
45
  prerelease: false
57
- version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
- requirements:
60
- - - ! '>='
61
- - !ruby/object:Gem::Version
62
- version: '2.2'
46
+ version_requirements: *70168118236700
63
47
  - !ruby/object:Gem::Dependency
64
- name: nokogiri
65
- requirement: !ruby/object:Gem::Requirement
48
+ name: webmock
49
+ requirement: &70168118235440 !ruby/object:Gem::Requirement
66
50
  none: false
67
51
  requirements:
68
- - - ! '>='
52
+ - - ~>
69
53
  - !ruby/object:Gem::Version
70
- version: '1.4'
71
- type: :runtime
54
+ version: 1.7.6
55
+ type: :development
72
56
  prerelease: false
73
- version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
- requirements:
76
- - - ! '>='
77
- - !ruby/object:Gem::Version
78
- version: '1.4'
57
+ version_requirements: *70168118235440
79
58
  - !ruby/object:Gem::Dependency
80
- name: rspec
81
- requirement: !ruby/object:Gem::Requirement
59
+ name: guard-minitest
60
+ requirement: &70168118234400 !ruby/object:Gem::Requirement
82
61
  none: false
83
62
  requirements:
84
- - - ! '>='
63
+ - - ~>
85
64
  - !ruby/object:Gem::Version
86
- version: 2.0.0.beta.22
65
+ version: 0.4.0
87
66
  type: :development
88
67
  prerelease: false
89
- version_requirements: !ruby/object:Gem::Requirement
90
- none: false
91
- requirements:
92
- - - ! '>='
93
- - !ruby/object:Gem::Version
94
- version: 2.0.0.beta.22
68
+ version_requirements: *70168118234400
95
69
  - !ruby/object:Gem::Dependency
96
- name: webmock
97
- requirement: !ruby/object:Gem::Requirement
70
+ name: rb-fsevent
71
+ requirement: &70168118232720 !ruby/object:Gem::Requirement
98
72
  none: false
99
73
  requirements:
100
- - - ! '>='
74
+ - - ~>
101
75
  - !ruby/object:Gem::Version
102
- version: '0'
76
+ version: 0.4.3.1
103
77
  type: :development
104
78
  prerelease: false
105
- version_requirements: !ruby/object:Gem::Requirement
106
- none: false
107
- requirements:
108
- - - ! '>='
109
- - !ruby/object:Gem::Version
110
- version: '0'
79
+ version_requirements: *70168118232720
111
80
  - !ruby/object:Gem::Dependency
112
- name: vcr
113
- requirement: !ruby/object:Gem::Requirement
81
+ name: growl_notify
82
+ requirement: &70168122344800 !ruby/object:Gem::Requirement
114
83
  none: false
115
84
  requirements:
116
- - - ! '>='
85
+ - - ~>
117
86
  - !ruby/object:Gem::Version
118
- version: '0'
87
+ version: 0.0.1
119
88
  type: :development
120
89
  prerelease: false
121
- version_requirements: !ruby/object:Gem::Requirement
122
- none: false
123
- requirements:
124
- - - ! '>='
125
- - !ruby/object:Gem::Version
126
- version: '0'
127
- description: A Ruby API wrapper for Recurly. Super Simple Subscription billing.
128
- email:
129
- - support@recurly.com
130
- executables: []
90
+ version_requirements: *70168122344800
91
+ description: ! 'An API client library for Recurly: http://recurly.com'
92
+ email: support@recurly.com
93
+ executables:
94
+ - recurly
131
95
  extensions: []
132
- extra_rdoc_files: []
96
+ extra_rdoc_files:
97
+ - README.markdown
133
98
  files:
134
- - lib/patches/rails2/active_resource/base.rb
135
- - lib/patches/rails2/active_resource/connection.rb
136
- - lib/patches/rails3/active_model/serializers/xml.rb
137
- - lib/patches/rails3/active_resource/connection.rb
99
+ - lib/rails/generators/recurly/config_generator.rb
100
+ - lib/rails/recurly.rb
138
101
  - lib/recurly/account.rb
139
- - lib/recurly/account_base.rb
140
- - lib/recurly/base.rb
102
+ - lib/recurly/add_on.rb
103
+ - lib/recurly/adjustment.rb
104
+ - lib/recurly/api/errors.rb
105
+ - lib/recurly/api/net_http.rb
106
+ - lib/recurly/api.rb
141
107
  - lib/recurly/billing_info.rb
142
- - lib/recurly/charge.rb
143
- - lib/recurly/config_parser.rb
144
108
  - lib/recurly/coupon.rb
145
- - lib/recurly/credit.rb
146
- - lib/recurly/exceptions.rb
147
- - lib/recurly/formats/xml_with_errors.rb
148
- - lib/recurly/formats/xml_with_pagination.rb
109
+ - lib/recurly/helper.rb
149
110
  - lib/recurly/invoice.rb
111
+ - lib/recurly/js.rb
112
+ - lib/recurly/money.rb
150
113
  - lib/recurly/plan.rb
151
- - lib/recurly/rails2/compatibility.rb
152
- - lib/recurly/rails3/railtie.rb
153
- - lib/recurly/rails3/recurly.rake
114
+ - lib/recurly/redemption.rb
115
+ - lib/recurly/resource/pager.rb
116
+ - lib/recurly/resource.rb
117
+ - lib/recurly/subscription/add_ons.rb
154
118
  - lib/recurly/subscription.rb
119
+ - lib/recurly/transaction/errors.rb
155
120
  - lib/recurly/transaction.rb
156
- - lib/recurly/transparent.rb
157
- - lib/recurly/verification.rb
158
121
  - lib/recurly/version.rb
122
+ - lib/recurly/xml/nokogiri.rb
123
+ - lib/recurly/xml/rexml.rb
124
+ - lib/recurly/xml.rb
159
125
  - lib/recurly.rb
160
- - init.rb
161
- - LICENSE
162
- - README.md
163
- - spec/config/recurly.yml
164
- - spec/config/test1.yml
165
- - spec/config/test2.yml
166
- - spec/integration/account_spec.rb
167
- - spec/integration/add_on_spec.rb
168
- - spec/integration/billing_info_spec.rb
169
- - spec/integration/charge_spec.rb
170
- - spec/integration/coupon_spec.rb
171
- - spec/integration/credit_spec.rb
172
- - spec/integration/invoice_spec.rb
173
- - spec/integration/plan_spec.rb
174
- - spec/integration/subscription_spec.rb
175
- - spec/integration/transaction_spec.rb
176
- - spec/integration/transparent_spec.rb
177
- - spec/spec_helper.rb
178
- - spec/support/factory.rb
179
- - spec/support/vcr.rb
180
- - spec/unit/account_spec.rb
181
- - spec/unit/billing_info_spec.rb
182
- - spec/unit/charge_spec.rb
183
- - spec/unit/config_spec.rb
184
- - spec/unit/coupon_spec.rb
185
- - spec/unit/credit_spec.rb
186
- - spec/unit/plan_spec.rb
187
- - spec/unit/subscription_spec.rb
188
- - spec/unit/transaction_spec.rb
189
- - spec/unit/transparent_spec.rb
190
- - spec/unit/verification_spec.rb
126
+ - README.markdown
127
+ - bin/recurly
191
128
  homepage: http://github.com/recurly/recurly-client-ruby
192
- licenses: []
129
+ licenses:
130
+ - MIT
193
131
  post_install_message:
194
132
  rdoc_options:
195
- - --charset=UTF-8
133
+ - --main
134
+ - README.markdown
196
135
  require_paths:
197
136
  - lib
198
137
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -208,37 +147,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
208
147
  - !ruby/object:Gem::Version
209
148
  version: '0'
210
149
  requirements: []
211
- rubyforge_project: recurly
212
- rubygems_version: 1.8.23
150
+ rubyforge_project:
151
+ rubygems_version: 1.8.10
213
152
  signing_key:
214
153
  specification_version: 3
215
- summary: Ruby API wrapper for Recurly
216
- test_files:
217
- - spec/config/recurly.yml
218
- - spec/config/test1.yml
219
- - spec/config/test2.yml
220
- - spec/integration/account_spec.rb
221
- - spec/integration/add_on_spec.rb
222
- - spec/integration/billing_info_spec.rb
223
- - spec/integration/charge_spec.rb
224
- - spec/integration/coupon_spec.rb
225
- - spec/integration/credit_spec.rb
226
- - spec/integration/invoice_spec.rb
227
- - spec/integration/plan_spec.rb
228
- - spec/integration/subscription_spec.rb
229
- - spec/integration/transaction_spec.rb
230
- - spec/integration/transparent_spec.rb
231
- - spec/spec_helper.rb
232
- - spec/support/factory.rb
233
- - spec/support/vcr.rb
234
- - spec/unit/account_spec.rb
235
- - spec/unit/billing_info_spec.rb
236
- - spec/unit/charge_spec.rb
237
- - spec/unit/config_spec.rb
238
- - spec/unit/coupon_spec.rb
239
- - spec/unit/credit_spec.rb
240
- - spec/unit/plan_spec.rb
241
- - spec/unit/subscription_spec.rb
242
- - spec/unit/transaction_spec.rb
243
- - spec/unit/transparent_spec.rb
244
- - spec/unit/verification_spec.rb
154
+ summary: Recurly API Client
155
+ test_files: []