recurly 2.20.3 → 3.0.0.beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +14 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +21 -0
- data/README.md +158 -110
- data/Rakefile +6 -0
- data/bin/bundle +105 -0
- data/bin/coderay +29 -0
- data/bin/console +14 -0
- data/bin/htmldiff +29 -0
- data/bin/ldiff +29 -0
- data/bin/pry +29 -0
- data/bin/rake +29 -0
- data/bin/rspec +29 -0
- data/bin/setup +8 -0
- data/bin/yard +29 -0
- data/bin/yardoc +29 -0
- data/bin/yri +29 -0
- data/lib/data/ca-certificates.crt +31 -0
- data/lib/recurly/client/operations.rb +935 -0
- data/lib/recurly/client.rb +198 -0
- data/lib/recurly/errors/api_errors.rb +35 -0
- data/lib/recurly/errors/network_errors.rb +8 -0
- data/lib/recurly/errors.rb +34 -0
- data/lib/recurly/pager.rb +119 -0
- data/lib/recurly/request.rb +30 -0
- data/lib/recurly/requests/account_acquisition_updatable.rb +22 -0
- data/lib/recurly/requests/account_create_only.rb +18 -0
- data/lib/recurly/requests/account_updatable.rb +50 -0
- data/lib/recurly/requests/add_on_create.rb +38 -0
- data/lib/recurly/requests/add_on_update.rb +38 -0
- data/lib/recurly/requests/address.rb +42 -0
- data/lib/recurly/requests/billing_info_create.rb +58 -0
- data/lib/recurly/requests/coupon_create_only.rb +66 -0
- data/lib/recurly/requests/coupon_updatable.rb +30 -0
- data/lib/recurly/requests/create_account.rb +62 -0
- data/lib/recurly/requests/create_coupon.rb +90 -0
- data/lib/recurly/requests/invoice_create.rb +42 -0
- data/lib/recurly/requests/invoice_refund.rb +30 -0
- data/lib/recurly/requests/line_item_create.rb +46 -0
- data/lib/recurly/requests/plan_create.rb +66 -0
- data/lib/recurly/requests/plan_update.rb +70 -0
- data/lib/recurly/requests/shipping_address_create.rb +58 -0
- data/lib/recurly/requests/shipping_address_update.rb +62 -0
- data/lib/recurly/requests/subscription_add_on_create.rb +22 -0
- data/lib/recurly/requests/subscription_change_create.rb +42 -0
- data/lib/recurly/requests/subscription_create.rb +86 -0
- data/lib/recurly/requests/subscription_update.rb +42 -0
- data/lib/recurly/requests/update_coupon.rb +30 -0
- data/lib/recurly/resource.rb +16 -1114
- data/lib/recurly/resources/account.rb +86 -0
- data/lib/recurly/resources/account_acquisition.rb +42 -0
- data/lib/recurly/resources/account_balance.rb +22 -0
- data/lib/recurly/resources/account_note.rb +30 -0
- data/lib/recurly/resources/add_on.rb +62 -0
- data/lib/recurly/resources/address.rb +42 -0
- data/lib/recurly/resources/billing_info.rb +62 -0
- data/lib/recurly/resources/coupon.rb +110 -0
- data/lib/recurly/resources/coupon_discount.rb +22 -0
- data/lib/recurly/resources/coupon_redemption.rb +46 -0
- data/lib/recurly/resources/credit_payment.rb +62 -0
- data/lib/recurly/resources/error.rb +18 -0
- data/lib/recurly/resources/error_may_have_transaction.rb +22 -0
- data/lib/recurly/resources/invoice.rb +138 -0
- data/lib/recurly/resources/invoice_collection.rb +18 -0
- data/lib/recurly/resources/line_item.rb +166 -0
- data/lib/recurly/resources/plan.rb +86 -0
- data/lib/recurly/resources/settings.rb +18 -0
- data/lib/recurly/resources/shipping_address.rb +74 -0
- data/lib/recurly/resources/site.rb +46 -0
- data/lib/recurly/resources/subscription.rb +134 -0
- data/lib/recurly/resources/subscription_add_on.rb +42 -0
- data/lib/recurly/resources/subscription_change.rb +54 -0
- data/lib/recurly/resources/tax_info.rb +18 -0
- data/lib/recurly/resources/transaction.rb +146 -0
- data/lib/recurly/resources/unique_coupon_code.rb +38 -0
- data/lib/recurly/resources/user.rb +38 -0
- data/lib/recurly/schema/json_deserializer.rb +53 -0
- data/lib/recurly/schema/json_parser.rb +71 -0
- data/lib/recurly/schema/request_caster.rb +66 -0
- data/lib/recurly/schema/schema_factory.rb +50 -0
- data/lib/recurly/schema/schema_validator.rb +125 -0
- data/lib/recurly/schema.rb +114 -0
- data/lib/recurly/version.rb +1 -10
- data/lib/recurly.rb +14 -167
- data/recurly.gemspec +32 -0
- data/scripts/build +4 -0
- data/scripts/clean +6 -0
- data/scripts/test +3 -0
- metadata +129 -196
- data/lib/recurly/account.rb +0 -230
- data/lib/recurly/account_acquisition.rb +0 -27
- data/lib/recurly/account_balance.rb +0 -23
- data/lib/recurly/add_on.rb +0 -52
- data/lib/recurly/address.rb +0 -25
- data/lib/recurly/adjustment.rb +0 -100
- data/lib/recurly/api/errors.rb +0 -208
- data/lib/recurly/api/net_http_adapter.rb +0 -111
- data/lib/recurly/api.rb +0 -110
- data/lib/recurly/billing_info.rb +0 -134
- data/lib/recurly/business_entity.rb +0 -35
- data/lib/recurly/coupon.rb +0 -136
- data/lib/recurly/credit_payment.rb +0 -32
- data/lib/recurly/currency_percentage_tier.rb +0 -17
- data/lib/recurly/custom_field.rb +0 -15
- data/lib/recurly/custom_field_definition.rb +0 -14
- data/lib/recurly/customer_permission.rb +0 -10
- data/lib/recurly/delivery.rb +0 -19
- data/lib/recurly/dunning_campaign.rb +0 -30
- data/lib/recurly/dunning_cycle.rb +0 -18
- data/lib/recurly/entitlement.rb +0 -19
- data/lib/recurly/error.rb +0 -13
- data/lib/recurly/external_account.rb +0 -17
- data/lib/recurly/external_charge.rb +0 -20
- data/lib/recurly/external_invoice.rb +0 -27
- data/lib/recurly/external_payment_phase.rb +0 -27
- data/lib/recurly/external_product.rb +0 -34
- data/lib/recurly/external_product_reference.rb +0 -18
- data/lib/recurly/external_subscription.rb +0 -62
- data/lib/recurly/gateway_attribute.rb +0 -10
- data/lib/recurly/general_ledger_account.rb +0 -16
- data/lib/recurly/gift_card.rb +0 -85
- data/lib/recurly/helper.rb +0 -51
- data/lib/recurly/invoice.rb +0 -354
- data/lib/recurly/invoice_collection.rb +0 -14
- data/lib/recurly/invoice_template.rb +0 -14
- data/lib/recurly/item.rb +0 -36
- data/lib/recurly/js.rb +0 -14
- data/lib/recurly/juris_detail.rb +0 -15
- data/lib/recurly/measured_unit.rb +0 -16
- data/lib/recurly/money.rb +0 -120
- data/lib/recurly/note.rb +0 -14
- data/lib/recurly/percentage_tier.rb +0 -17
- data/lib/recurly/performance_obligation.rb +0 -15
- data/lib/recurly/plan.rb +0 -59
- data/lib/recurly/plan_ramp_interval.rb +0 -10
- data/lib/recurly/purchase.rb +0 -239
- data/lib/recurly/redemption.rb +0 -46
- data/lib/recurly/resource/association.rb +0 -16
- data/lib/recurly/resource/errors.rb +0 -20
- data/lib/recurly/resource/pager.rb +0 -313
- data/lib/recurly/rev_rec.rb +0 -18
- data/lib/recurly/shipping_address.rb +0 -26
- data/lib/recurly/shipping_fee.rb +0 -17
- data/lib/recurly/shipping_method.rb +0 -13
- data/lib/recurly/sub_add_on_percentage_tier.rb +0 -17
- data/lib/recurly/subscription/add_ons.rb +0 -82
- data/lib/recurly/subscription.rb +0 -374
- data/lib/recurly/subscription_add_on.rb +0 -64
- data/lib/recurly/subscription_ramp_interval.rb +0 -12
- data/lib/recurly/tax_detail.rb +0 -18
- data/lib/recurly/tax_type.rb +0 -13
- data/lib/recurly/tier.rb +0 -18
- data/lib/recurly/transaction/errors.rb +0 -119
- data/lib/recurly/transaction.rb +0 -132
- data/lib/recurly/usage.rb +0 -29
- data/lib/recurly/verify.rb +0 -12
- data/lib/recurly/webhook/account_notification.rb +0 -13
- data/lib/recurly/webhook/billing_info_update_failed_notification.rb +0 -6
- data/lib/recurly/webhook/billing_info_updated_notification.rb +0 -6
- data/lib/recurly/webhook/canceled_account_notification.rb +0 -6
- data/lib/recurly/webhook/canceled_gift_card_notification.rb +0 -6
- data/lib/recurly/webhook/canceled_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/closed_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/closed_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/credit_payment_notification.rb +0 -12
- data/lib/recurly/webhook/deactivated_item_notification.rb +0 -6
- data/lib/recurly/webhook/deleted_shipping_address_notification.rb +0 -6
- data/lib/recurly/webhook/dunning_notification.rb +0 -14
- data/lib/recurly/webhook/expired_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/failed_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/failed_payment_notification.rb +0 -6
- data/lib/recurly/webhook/fraud_info_updated_notification.rb +0 -6
- data/lib/recurly/webhook/gift_card_notification.rb +0 -8
- data/lib/recurly/webhook/invoice_notification.rb +0 -12
- data/lib/recurly/webhook/item_notification.rb +0 -7
- data/lib/recurly/webhook/low_balance_gift_card_notification.rb +0 -6
- data/lib/recurly/webhook/new_account_notification.rb +0 -6
- data/lib/recurly/webhook/new_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/new_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/new_credit_payment_notification.rb +0 -6
- data/lib/recurly/webhook/new_dunning_event_notification.rb +0 -6
- data/lib/recurly/webhook/new_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/new_item_notification.rb +0 -6
- data/lib/recurly/webhook/new_shipping_address_notification.rb +0 -6
- data/lib/recurly/webhook/new_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/new_usage_notification.rb +0 -8
- data/lib/recurly/webhook/notification.rb +0 -18
- data/lib/recurly/webhook/paid_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/past_due_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/past_due_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/paused_subscription_renewal_notification.rb +0 -6
- data/lib/recurly/webhook/prerenewal_notification.rb +0 -6
- data/lib/recurly/webhook/processing_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/processing_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/processing_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/processing_payment_notification.rb +0 -6
- data/lib/recurly/webhook/purchased_gift_card_notification.rb +0 -7
- data/lib/recurly/webhook/reactivated_account_notification.rb +0 -6
- data/lib/recurly/webhook/reactivated_item_notification.rb +0 -6
- data/lib/recurly/webhook/redeemed_gift_card_notification.rb +0 -7
- data/lib/recurly/webhook/regenerated_gift_card_notification.rb +0 -6
- data/lib/recurly/webhook/renewed_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/reopened_charge_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/reopened_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/scheduled_payment_notification.rb +0 -6
- data/lib/recurly/webhook/scheduled_subscription_pause_notification.rb +0 -6
- data/lib/recurly/webhook/scheduled_subscription_update_notification.rb +0 -6
- data/lib/recurly/webhook/subscription_notification.rb +0 -12
- data/lib/recurly/webhook/subscription_pause_canceled_notification.rb +0 -6
- data/lib/recurly/webhook/subscription_pause_modified_notification.rb +0 -6
- data/lib/recurly/webhook/subscription_paused_notification.rb +0 -6
- data/lib/recurly/webhook/subscription_resumed_notification.rb +0 -6
- data/lib/recurly/webhook/successful_payment_notification.rb +0 -6
- data/lib/recurly/webhook/successful_refund_notification.rb +0 -6
- data/lib/recurly/webhook/transaction_authorized_notification.rb +0 -6
- data/lib/recurly/webhook/transaction_notification.rb +0 -12
- data/lib/recurly/webhook/transaction_status_updated_notification.rb +0 -6
- data/lib/recurly/webhook/updated_account_notification.rb +0 -6
- data/lib/recurly/webhook/updated_balance_gift_card_notification.rb +0 -7
- data/lib/recurly/webhook/updated_gift_card_notification.rb +0 -6
- data/lib/recurly/webhook/updated_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/updated_item_notification.rb +0 -6
- data/lib/recurly/webhook/updated_shipping_address_notification.rb +0 -6
- data/lib/recurly/webhook/updated_subscription_notification.rb +0 -6
- data/lib/recurly/webhook/void_payment_notification.rb +0 -6
- data/lib/recurly/webhook/voided_credit_invoice_notification.rb +0 -6
- data/lib/recurly/webhook/voided_credit_payment_notification.rb +0 -6
- data/lib/recurly/webhook.rb +0 -113
- data/lib/recurly/xml/nokogiri.rb +0 -60
- data/lib/recurly/xml/rexml.rb +0 -52
- data/lib/recurly/xml.rb +0 -122
@@ -0,0 +1,125 @@
|
|
1
|
+
module Recurly
|
2
|
+
class Schema
|
3
|
+
# This module is responsible for validating that the raw data
|
4
|
+
# passed in to *attributes* matches the schema belonging to this class.
|
5
|
+
# It should be mixed in to the Request class.
|
6
|
+
module SchemaValidator
|
7
|
+
# Validates the attributes and throws an error if something is wrong.
|
8
|
+
#
|
9
|
+
# @example
|
10
|
+
# Recurly::Requests::PlanCreate.new(code: 'plan123').validate!
|
11
|
+
# #=> {:code=>"plan123"}
|
12
|
+
# @example
|
13
|
+
# Recurly::Requests::PlanCreate.new(code: 3.14).validate!
|
14
|
+
# #=> ArgumentError: Attribute 'code' on the resource Recurly::Requests::PlanCreate is type Float but should be a String.
|
15
|
+
# @example
|
16
|
+
# Recurly::Requests::PlanCreate.new(kode: 'plan123').validate!
|
17
|
+
# #=> ArgumentError: Attribute 'kode' does not exist on request Recurly::Requests::PlanCreate. Did you mean 'code'?
|
18
|
+
#
|
19
|
+
# @raise [ArgumentError] if the attribute data does not match the schema.
|
20
|
+
def validate!
|
21
|
+
attributes.each do |attr_name, val|
|
22
|
+
schema_attr = schema.get_attribute(attr_name)
|
23
|
+
if schema_attr.nil?
|
24
|
+
err_msg = "Attribute '#{attr_name}' does not exist on request #{self.class.name}."
|
25
|
+
if did_you_mean = get_did_you_mean(schema, attr_name)
|
26
|
+
err_msg << " Did you mean '#{did_you_mean}'?"
|
27
|
+
raise ArgumentError, err_msg
|
28
|
+
end
|
29
|
+
elsif schema_attr.read_only?
|
30
|
+
raise ArgumentError, "Attribute '#{attr_name}' on resource #{self.class.name} is not writeable"
|
31
|
+
else
|
32
|
+
validate_attribute!(schema_attr, val)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# Validates an individual attribute
|
38
|
+
def validate_attribute!(schema_attr, val)
|
39
|
+
if !schema_attr.type.is_a?(Symbol) && val.class != schema_attr.type
|
40
|
+
expected = case schema_attr.type
|
41
|
+
when Array
|
42
|
+
"Array of #{schema_attr.type.item_type}s"
|
43
|
+
else
|
44
|
+
schema_attr.type
|
45
|
+
end
|
46
|
+
|
47
|
+
raise ArgumentError, "Attribute '#{schema_attr.name}' on the resource #{self.class.name} is type #{val.class} but should be a #{expected}"
|
48
|
+
end
|
49
|
+
|
50
|
+
# This is the convention for a recurly object
|
51
|
+
if schema_attr.type.is_a?(Symbol) && val.is_a?(Hash)
|
52
|
+
klazz = Schema.get_recurly_class(schema_attr.type)
|
53
|
+
# Using send because the initializer may be private
|
54
|
+
instance = klazz.send(:new, val)
|
55
|
+
instance.validate!
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# Gets the closest term to the misspelled attribute
|
60
|
+
def get_did_you_mean(schema, misspelled_attr)
|
61
|
+
closest = schema.attributes.map(&:name).sort_by do |v|
|
62
|
+
levenshtein_distance(v, misspelled_attr)
|
63
|
+
end.first
|
64
|
+
|
65
|
+
if closest && levenshtein_distance(closest, misspelled_attr) <= 4
|
66
|
+
closest
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
|
72
|
+
# This code is copied directly from the did_you mean gem which is based
|
73
|
+
# directly on the Text gem implementation.
|
74
|
+
#
|
75
|
+
# did_you_mean: Copyright (c) 2014-2016 Yuki Nishijima.
|
76
|
+
# Text: Copyright (c) 2006-2013 Paul Battley, Michael Neumann, Tim Fletcher.
|
77
|
+
#
|
78
|
+
# Returns a value representing the "cost" of transforming str1 into str2
|
79
|
+
def levenshtein_distance(str1, str2)
|
80
|
+
str1 = str1.to_s unless str1.is_a? String
|
81
|
+
str2 = str2.to_s unless str2.is_a? String
|
82
|
+
n = str1.length
|
83
|
+
m = str2.length
|
84
|
+
return m if n.zero?
|
85
|
+
return n if m.zero?
|
86
|
+
|
87
|
+
d = (0..m).to_a
|
88
|
+
x = nil
|
89
|
+
|
90
|
+
# to avoid duplicating an enumerable object, create it outside of the loop
|
91
|
+
str2_codepoints = str2.codepoints
|
92
|
+
|
93
|
+
str1.each_codepoint.with_index(1) do |char1, i|
|
94
|
+
j = 0
|
95
|
+
while j < m
|
96
|
+
cost = (char1 == str2_codepoints[j]) ? 0 : 1
|
97
|
+
x = min3(
|
98
|
+
d[j+1] + 1, # insertion
|
99
|
+
i + 1, # deletion
|
100
|
+
d[j] + cost # substitution
|
101
|
+
)
|
102
|
+
d[j] = i
|
103
|
+
i = x
|
104
|
+
|
105
|
+
j += 1
|
106
|
+
end
|
107
|
+
d[m] = x
|
108
|
+
end
|
109
|
+
|
110
|
+
x
|
111
|
+
end
|
112
|
+
|
113
|
+
def min3(a, b, c)
|
114
|
+
if a < b && a < c
|
115
|
+
a
|
116
|
+
elsif b < c
|
117
|
+
b
|
118
|
+
else
|
119
|
+
c
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
@@ -0,0 +1,114 @@
|
|
1
|
+
module Recurly
|
2
|
+
# The class responsible for describing a schema.
|
3
|
+
# This is used for requests and resources.
|
4
|
+
class Schema
|
5
|
+
# The attributes in the schema
|
6
|
+
# @return [Array<Attribute>]
|
7
|
+
attr_reader :attributes
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@attributes = []
|
11
|
+
end
|
12
|
+
|
13
|
+
# Adds an attribute to the schema definition
|
14
|
+
#
|
15
|
+
# @param name [Symbol] The name of the attribute
|
16
|
+
# @param type [Class,Symbol] The type of the attribute. Use capitalized symbol for Recurly class. Example: :Account.
|
17
|
+
# @param options [Hash] The attribute options. See {Attribute#options}
|
18
|
+
def add_attribute(name, type, options)
|
19
|
+
attribute = Attribute.new(name, type, options)
|
20
|
+
@attributes.push(attribute)
|
21
|
+
attribute
|
22
|
+
end
|
23
|
+
|
24
|
+
# Gets an attribute from this schema given a name
|
25
|
+
#
|
26
|
+
# @param name [String,Symbol] The name/key of the attribute
|
27
|
+
# @return [Attribute,nil] The found Attribute. nil if not found.
|
28
|
+
def get_attribute(name)
|
29
|
+
name = name.to_s
|
30
|
+
@attributes.find { |a| a.name.to_s == name }
|
31
|
+
end
|
32
|
+
|
33
|
+
# Gets a recurly class given a symbol name.
|
34
|
+
#
|
35
|
+
# @example
|
36
|
+
# Schema.get_recurly_class(:Account)
|
37
|
+
# #=> Recurly::Resources::Account
|
38
|
+
#
|
39
|
+
# @param type [Symbol] The name of the class you wish to find
|
40
|
+
# @return [Request,Resource]
|
41
|
+
# @raise ArgumentError If class can't be found.
|
42
|
+
def self.get_recurly_class(type)
|
43
|
+
raise ArgumentError, "#{type.inspect} must be a symbol but is a #{type.class}" unless type.is_a?(Symbol)
|
44
|
+
|
45
|
+
if Requests.const_defined?(type)
|
46
|
+
Requests.const_get(type)
|
47
|
+
elsif Resources.const_defined?(type)
|
48
|
+
Resources.const_get(type)
|
49
|
+
else
|
50
|
+
raise ArgumentError, "Recurly type '#{type}' is unknown"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Describes a list attribute type
|
55
|
+
class List
|
56
|
+
# The type of the elements of the list
|
57
|
+
# @return [Symbol]
|
58
|
+
attr_accessor :item_type
|
59
|
+
|
60
|
+
def initialize(item_type)
|
61
|
+
@item_type = item_type
|
62
|
+
end
|
63
|
+
|
64
|
+
def to_s
|
65
|
+
"List<#{item_type}>"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
# Describes and attribute for a schema.
|
70
|
+
class Attribute
|
71
|
+
# The name of the attribute.
|
72
|
+
# @return [Symbol]
|
73
|
+
attr_accessor :name
|
74
|
+
|
75
|
+
# The type of the attribute. Might be a class like `DateTime`
|
76
|
+
# or could be a Recurly object. In this case a symbol should be used.
|
77
|
+
# Example: :Account
|
78
|
+
# @return [Class,Symbol]
|
79
|
+
attr_accessor :type
|
80
|
+
|
81
|
+
# Options for the attribute.
|
82
|
+
# @return [Hash]
|
83
|
+
attr_accessor :options
|
84
|
+
|
85
|
+
# The description of the attribute for documentation.
|
86
|
+
# @return [String]
|
87
|
+
attr_accessor :description
|
88
|
+
|
89
|
+
def initialize(name, type, options={}, description=nil)
|
90
|
+
@name = name
|
91
|
+
@type = type
|
92
|
+
@options = options
|
93
|
+
@description = description
|
94
|
+
end
|
95
|
+
|
96
|
+
def read_only?
|
97
|
+
@options.fetch(:read_only, false)
|
98
|
+
end
|
99
|
+
|
100
|
+
def recurly_class
|
101
|
+
Schema.get_recurly_class(type == Array ? options[:item_type] : type)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
private_constant :List
|
106
|
+
private_constant :Attribute
|
107
|
+
end
|
108
|
+
|
109
|
+
|
110
|
+
require_relative './schema/schema_factory'
|
111
|
+
require_relative './schema/schema_validator'
|
112
|
+
require_relative './schema/json_deserializer'
|
113
|
+
require_relative './schema/request_caster'
|
114
|
+
end
|
data/lib/recurly/version.rb
CHANGED
data/lib/recurly.rb
CHANGED
@@ -1,169 +1,16 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
require 'recurly/add_on'
|
15
|
-
require 'recurly/address'
|
16
|
-
require 'recurly/business_entity'
|
17
|
-
require 'recurly/tax_detail'
|
18
|
-
require 'recurly/tax_type'
|
19
|
-
require 'recurly/juris_detail'
|
20
|
-
require 'recurly/adjustment'
|
21
|
-
require 'recurly/coupon'
|
22
|
-
require 'recurly/credit_payment'
|
23
|
-
require 'recurly/customer_permission'
|
24
|
-
require 'recurly/entitlement'
|
25
|
-
require 'recurly/external_account'
|
26
|
-
require 'recurly/external_charge'
|
27
|
-
require 'recurly/external_invoice'
|
28
|
-
require 'recurly/external_product'
|
29
|
-
require 'recurly/external_product_reference'
|
30
|
-
require 'recurly/external_payment_phase'
|
31
|
-
require 'recurly/external_subscription'
|
32
|
-
require 'recurly/helper'
|
33
|
-
require 'recurly/invoice'
|
34
|
-
require 'recurly/invoice_collection'
|
35
|
-
require 'recurly/item'
|
36
|
-
require 'recurly/js'
|
37
|
-
require 'recurly/money'
|
38
|
-
require 'recurly/measured_unit'
|
39
|
-
require 'recurly/note'
|
40
|
-
require 'recurly/plan'
|
41
|
-
require 'recurly/plan_ramp_interval'
|
42
|
-
require 'recurly/redemption'
|
43
|
-
require 'recurly/shipping_fee'
|
44
|
-
require 'recurly/shipping_method'
|
45
|
-
require 'recurly/subscription'
|
46
|
-
require 'recurly/subscription_add_on'
|
47
|
-
require 'recurly/subscription_ramp_interval'
|
48
|
-
require 'recurly/transaction'
|
49
|
-
require 'recurly/usage'
|
50
|
-
require 'recurly/version'
|
51
|
-
require 'recurly/xml'
|
52
|
-
require 'recurly/delivery'
|
53
|
-
require 'recurly/gift_card'
|
54
|
-
require 'recurly/purchase'
|
55
|
-
require 'recurly/webhook'
|
56
|
-
require 'recurly/verify'
|
57
|
-
require 'recurly/tier'
|
58
|
-
require 'recurly/dunning_campaign'
|
59
|
-
require 'recurly/dunning_cycle'
|
60
|
-
require 'recurly/invoice_template'
|
61
|
-
require 'recurly/percentage_tier'
|
62
|
-
require 'recurly/currency_percentage_tier'
|
63
|
-
require 'recurly/sub_add_on_percentage_tier'
|
64
|
-
require 'recurly/custom_field_definition'
|
65
|
-
require 'recurly/general_ledger_account'
|
66
|
-
require 'recurly/performance_obligation'
|
67
|
-
|
68
|
-
@subdomain = nil
|
69
|
-
|
70
|
-
# This exception is raised if Recurly has not been configured.
|
71
|
-
class ConfigurationError < Error
|
72
|
-
end
|
73
|
-
|
74
|
-
class << self
|
75
|
-
# Set a config based on current thread context.
|
76
|
-
# Any default set will say in effect unless overwritten in the config_params.
|
77
|
-
# Call this method with out any arguments to have it unset the thread context config values.
|
78
|
-
# @param config_params - Hash with the following keys: subdomain, api_key, default_currency
|
79
|
-
def config(config_params = nil)
|
80
|
-
Thread.current[:recurly_config] = config_params
|
81
|
-
end
|
82
|
-
|
83
|
-
# @return [String] A subdomain.
|
84
|
-
def subdomain
|
85
|
-
if Thread.current[:recurly_config] && Thread.current[:recurly_config][:subdomain]
|
86
|
-
return Thread.current[:recurly_config][:subdomain]
|
87
|
-
end
|
88
|
-
@subdomain || 'api'
|
89
|
-
end
|
90
|
-
attr_writer :subdomain
|
91
|
-
|
92
|
-
# @return [String] An API key.
|
93
|
-
# @raise [ConfigurationError] If not configured.
|
94
|
-
def api_key
|
95
|
-
if Thread.current[:recurly_config] && Thread.current[:recurly_config][:api_key]
|
96
|
-
return Thread.current[:recurly_config][:api_key]
|
97
|
-
end
|
98
|
-
|
99
|
-
defined? @api_key and @api_key or raise(
|
100
|
-
ConfigurationError, "Recurly.api_key not configured"
|
101
|
-
)
|
102
|
-
end
|
103
|
-
attr_writer :api_key
|
104
|
-
|
105
|
-
# @return [String, nil] A default currency.
|
106
|
-
def default_currency
|
107
|
-
if Thread.current[:recurly_config] && Thread.current[:recurly_config][:default_currency]
|
108
|
-
return Thread.current[:recurly_config][:default_currency]
|
109
|
-
end
|
1
|
+
require "recurly/version"
|
2
|
+
require "recurly/schema"
|
3
|
+
require "recurly/request"
|
4
|
+
require "recurly/resource"
|
5
|
+
require "recurly/pager"
|
6
|
+
# Include all request files
|
7
|
+
resources = File.join(File.dirname(__FILE__), 'recurly', 'requests', '*.rb')
|
8
|
+
Dir.glob(resources, &method(:require))
|
9
|
+
# Include all resource files
|
10
|
+
resources = File.join(File.dirname(__FILE__), 'recurly', 'resources', '*.rb')
|
11
|
+
Dir.glob(resources, &method(:require))
|
12
|
+
require "recurly/errors"
|
13
|
+
require "recurly/client"
|
110
14
|
|
111
|
-
|
112
|
-
@default_currency = 'USD'
|
113
|
-
end
|
114
|
-
attr_writer :default_currency
|
115
|
-
|
116
|
-
# @return [JS] The Recurly.js module.
|
117
|
-
def js
|
118
|
-
JS
|
119
|
-
end
|
120
|
-
|
121
|
-
# Assigns a logger to log requests/responses and more.
|
122
|
-
# The logger can only be set if the environment variable
|
123
|
-
# `RECURLY_INSECURE_DEBUG` equals `true`.
|
124
|
-
#
|
125
|
-
# @return [Logger, nil]
|
126
|
-
# @example
|
127
|
-
# require 'logger'
|
128
|
-
# Recurly.logger = Logger.new STDOUT
|
129
|
-
# @example Rails applications automatically log to the Rails log:
|
130
|
-
# Recurly.logger = Rails.logger
|
131
|
-
# @example Turn off logging entirely:
|
132
|
-
# Recurly.logger = nil # Or Recurly.logger = Logger.new nil
|
133
|
-
attr_accessor :logger
|
134
|
-
|
135
|
-
def logger=(logger)
|
136
|
-
if ENV['RECURLY_INSECURE_DEBUG'].to_s.downcase == 'true'
|
137
|
-
@logger = logger
|
138
|
-
puts <<-MSG
|
139
|
-
[WARNING] Recurly logger enabled. The logger has the potential to leak
|
140
|
-
PII and should never be used in production environments.
|
141
|
-
MSG
|
142
|
-
else
|
143
|
-
puts <<-MSG
|
144
|
-
[WARNING] Recurly logger has been disabled. If you wish to use it,
|
145
|
-
only do so in a non-production environment and make sure
|
146
|
-
the `RECURLY_INSECURE_DEBUG` environment variable is set to `true`.
|
147
|
-
MSG
|
148
|
-
end
|
149
|
-
end
|
150
|
-
|
151
|
-
# Convenience logging method includes a Logger#progname dynamically.
|
152
|
-
# @return [true, nil]
|
153
|
-
def log level, message
|
154
|
-
logger.send(level, name) { message }
|
155
|
-
end
|
156
|
-
|
157
|
-
if RUBY_VERSION <= "1.9.0"
|
158
|
-
def const_defined? sym, inherit = false
|
159
|
-
raise ArgumentError, "inherit must be false" if inherit
|
160
|
-
super sym
|
161
|
-
end
|
162
|
-
|
163
|
-
def const_get sym, inherit = false
|
164
|
-
raise ArgumentError, "inherit must be false" if inherit
|
165
|
-
super sym
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
15
|
+
module Recurly
|
169
16
|
end
|
data/recurly.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'recurly/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "recurly"
|
8
|
+
spec.version = Recurly::VERSION
|
9
|
+
spec.authors = ["Recurly"]
|
10
|
+
spec.email = ["support@recurly.com"]
|
11
|
+
|
12
|
+
spec.summary = "The ruby client for Recurly's Partner API"
|
13
|
+
spec.description = "The ruby client for Recurly's Partner API"
|
14
|
+
spec.homepage = "https://partner-docs.recurly.com"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
18
|
+
f.match(%r{^(test|spec|features)/})
|
19
|
+
end
|
20
|
+
# spec.bindir = "exe"
|
21
|
+
# spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ["lib"]
|
23
|
+
|
24
|
+
spec.add_dependency "faraday", "~> 0.13"
|
25
|
+
|
26
|
+
spec.add_development_dependency "bundler", "~> 1.14"
|
27
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
28
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
29
|
+
spec.add_development_dependency "yard", "~> 0.9"
|
30
|
+
spec.add_development_dependency "pry", "~> 0.10"
|
31
|
+
spec.add_development_dependency "simplecov", "~> 0.16"
|
32
|
+
end
|
data/scripts/build
ADDED
data/scripts/clean
ADDED
data/scripts/test
ADDED