chargebee 2.48.0 → 2.50.0
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/CHANGELOG.md +49 -0
- data/Gemfile.lock +2 -6
- data/README.md +0 -1
- data/Rakefile +13 -0
- data/chargebee.gemspec +5 -3
- data/lib/chargebee/environment.rb +8 -1
- data/lib/chargebee/list_result.rb +9 -5
- data/lib/chargebee/models/addon.rb +23 -7
- data/lib/chargebee/models/address.rb +6 -2
- data/lib/chargebee/models/attached_item.rb +16 -6
- data/lib/chargebee/models/business_entity.rb +6 -2
- data/lib/chargebee/models/card.rb +15 -5
- data/lib/chargebee/models/comment.rb +12 -4
- data/lib/chargebee/models/configuration.rb +3 -1
- data/lib/chargebee/models/coupon.rb +40 -10
- data/lib/chargebee/models/coupon_code.rb +12 -4
- data/lib/chargebee/models/coupon_set.rb +23 -7
- data/lib/chargebee/models/credit_note.rb +44 -16
- data/lib/chargebee/models/currency.rb +18 -6
- data/lib/chargebee/models/customer.rb +83 -25
- data/lib/chargebee/models/customer_entitlement.rb +3 -1
- data/lib/chargebee/models/differential_price.rb +19 -6
- data/lib/chargebee/models/entitlement.rb +6 -2
- data/lib/chargebee/models/entitlement_override.rb +6 -2
- data/lib/chargebee/models/estimate.rb +64 -20
- data/lib/chargebee/models/event.rb +7 -3
- data/lib/chargebee/models/export.rb +54 -18
- data/lib/chargebee/models/feature.rb +24 -8
- data/lib/chargebee/models/gift.rb +23 -7
- data/lib/chargebee/models/hosted_page.rb +68 -23
- data/lib/chargebee/models/in_app_subscription.rb +12 -4
- data/lib/chargebee/models/invoice.rb +129 -44
- data/lib/chargebee/models/invoice_estimate.rb +5 -1
- data/lib/chargebee/models/item.rb +18 -6
- data/lib/chargebee/models/item_entitlement.rb +12 -4
- data/lib/chargebee/models/item_family.rb +17 -6
- data/lib/chargebee/models/item_price.rb +24 -8
- data/lib/chargebee/models/non_subscription.rb +3 -1
- data/lib/chargebee/models/omnichannel_subscription.rb +9 -3
- data/lib/chargebee/models/order.rb +36 -12
- data/lib/chargebee/models/payment_intent.rb +9 -3
- data/lib/chargebee/models/payment_schedule_scheme.rb +9 -3
- data/lib/chargebee/models/payment_source.rb +57 -16
- data/lib/chargebee/models/payment_voucher.rb +12 -4
- data/lib/chargebee/models/plan.rb +23 -7
- data/lib/chargebee/models/portal_session.rb +12 -4
- data/lib/chargebee/models/price_variant.rb +16 -6
- data/lib/chargebee/models/pricing_page_session.rb +6 -2
- data/lib/chargebee/models/promotional_credit.rb +15 -5
- data/lib/chargebee/models/purchase.rb +8 -2
- data/lib/chargebee/models/quote.rb +60 -20
- data/lib/chargebee/models/ramp.rb +15 -5
- data/lib/chargebee/models/recorded_purchase.rb +6 -2
- data/lib/chargebee/models/resource_migration.rb +3 -1
- data/lib/chargebee/models/rule.rb +17 -0
- data/lib/chargebee/models/site_migration_detail.rb +3 -1
- data/lib/chargebee/models/subscription.rb +129 -37
- data/lib/chargebee/models/subscription_entitlement.rb +6 -2
- data/lib/chargebee/models/time_machine.rb +9 -3
- data/lib/chargebee/models/transaction.rb +33 -11
- data/lib/chargebee/models/unbilled_charge.rb +18 -6
- data/lib/chargebee/models/usage.rb +15 -5
- data/lib/chargebee/models/usage_event.rb +24 -0
- data/lib/chargebee/models/virtual_bank_account.rb +18 -6
- data/lib/chargebee/nativeRequest.rb +138 -0
- data/lib/chargebee/request.rb +11 -11
- data/lib/chargebee/result.rb +25 -10
- data/lib/chargebee/util.rb +8 -5
- data/lib/chargebee.rb +4 -2
- data/spec/chargebee/list_result_spec.rb +1 -1
- data/spec/chargebee_spec.rb +5 -6
- metadata +5 -22
@@ -0,0 +1,138 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'net/http'
|
3
|
+
require 'uri'
|
4
|
+
require 'stringio'
|
5
|
+
|
6
|
+
module ChargeBee
|
7
|
+
module NativeRequest
|
8
|
+
|
9
|
+
def self.request(method, url, env, params = nil, headers = {}, subdomain = nil, isJsonRequest = false)
|
10
|
+
raise Error.new('No environment configured.') unless env
|
11
|
+
api_key = env.api_key
|
12
|
+
|
13
|
+
uri = URI(env.api_url(url, subdomain))
|
14
|
+
|
15
|
+
case method.to_s.downcase.to_sym
|
16
|
+
when :get, :head, :delete
|
17
|
+
uri.query = URI.encode_www_form(params) if params
|
18
|
+
payload = nil
|
19
|
+
else
|
20
|
+
payload = isJsonRequest ? params : URI.encode_www_form(params || {})
|
21
|
+
end
|
22
|
+
user_agent = ChargeBee.user_agent
|
23
|
+
content_type_header = isJsonRequest ? "application/json;charset=UTF-8" : "application/x-www-form-urlencoded"
|
24
|
+
headers = {
|
25
|
+
"User-Agent" => user_agent,
|
26
|
+
"Accept" => "application/json",
|
27
|
+
"Lang-Version" => RUBY_VERSION,
|
28
|
+
"OS-Version" => RUBY_PLATFORM,
|
29
|
+
"Content-Type" => content_type_header
|
30
|
+
}.merge(headers)
|
31
|
+
|
32
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
33
|
+
http.use_ssl = true
|
34
|
+
http.open_timeout=env.connect_timeout
|
35
|
+
http.read_timeout=env.read_timeout
|
36
|
+
if ChargeBee.verify_ca_certs?
|
37
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
38
|
+
http.ca_file = ChargeBee.ca_cert_path
|
39
|
+
else
|
40
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
41
|
+
end
|
42
|
+
|
43
|
+
request_class = case method.to_s.downcase.to_sym
|
44
|
+
when :get then Net::HTTP::Get
|
45
|
+
when :post then Net::HTTP::Post
|
46
|
+
when :put then Net::HTTP::Put
|
47
|
+
when :delete then Net::HTTP::Delete
|
48
|
+
else raise Error.new("Unsupported HTTP method: #{method}")
|
49
|
+
end
|
50
|
+
|
51
|
+
request = request_class.new(uri, headers)
|
52
|
+
request.body = payload if payload
|
53
|
+
|
54
|
+
request.basic_auth(api_key, nil)
|
55
|
+
|
56
|
+
begin
|
57
|
+
response = http.request(request)
|
58
|
+
rescue => e
|
59
|
+
raise IOError.new("IO Exception when trying to connect to ChargeBee with URL #{uri} . Reason: #{e}", e)
|
60
|
+
end
|
61
|
+
handle_response(response, headers)
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.handle_response(response, headers)
|
65
|
+
rcode = response.code.to_i
|
66
|
+
rbody = response.body
|
67
|
+
|
68
|
+
# converting headers to rest-client format previously we were using rest-client,
|
69
|
+
# and mapping headers to that format to support backward compatability
|
70
|
+
rheaders = beautify_headers(response.to_hash)
|
71
|
+
|
72
|
+
# When a custom 'Accept-Encoding' header is set to gzip, Net::HTTP will not automatically
|
73
|
+
# decompress the response. Therefore, we need to manually handle decompression
|
74
|
+
# based on the 'Content-Encoding' header in the response.
|
75
|
+
# https://github.com/ruby/ruby/blob/19c1f0233eb5202403c52b196f1d573893eacab7/lib/net/http/generic_request.rb#L82
|
76
|
+
if headers.keys.any? { |k| k.downcase == 'accept-encoding' } && rheaders[:content_encoding] == 'gzip' && rbody && !rbody.empty?
|
77
|
+
rbody = Zlib::GzipReader.new(StringIO.new(rbody)).read
|
78
|
+
end
|
79
|
+
|
80
|
+
if rcode >= 200 && rcode < 300
|
81
|
+
begin
|
82
|
+
resp = JSON.parse(rbody)
|
83
|
+
rescue JSON::ParserError => e
|
84
|
+
raise handle_json_error(rbody, e)
|
85
|
+
end
|
86
|
+
return Util.symbolize_keys(resp), rheaders, rcode
|
87
|
+
else
|
88
|
+
raise handle_for_error(rcode, rbody)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def self.handle_json_error(rbody, e)
|
93
|
+
if rbody.include?("503")
|
94
|
+
raise Error.new("Sorry, the server is currently unable to handle the request due to a temporary overload or scheduled maintenance. Please retry after sometime. \n type: internal_temporary_error, \n http_status_code: 503, \n error_code: internal_temporary_error,\n content: #{rbody.inspect}",e)
|
95
|
+
elsif rbody.include?("504")
|
96
|
+
raise Error.new("The server did not receive a timely response from an upstream server, request aborted. If this problem persists, contact us at support@chargebee.com. \n type: gateway_timeout, \n http_status_code: 504, \n error_code: gateway_timeout,\n content: #{rbody.inspect}",e)
|
97
|
+
else
|
98
|
+
raise Error.new("Sorry, something went wrong when trying to process the request. If this problem persists, contact us at support@chargebee.com. \n type: internal_error, \n http_status_code: 500, \n error_code: internal_error,\n content: #{rbody.inspect}",e)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.handle_for_error(rcode, rbody)
|
103
|
+
return Error.new("No response returned by ChargeBee API. HTTP status code: #{rcode}") if rcode == 204
|
104
|
+
begin
|
105
|
+
error_obj = JSON.parse(rbody)
|
106
|
+
error_obj = Util.symbolize_keys(error_obj)
|
107
|
+
rescue Exception => e
|
108
|
+
raise Error.new("Error response not in JSON format. The http status code is #{rcode} \n #{rbody.inspect}",e)
|
109
|
+
end
|
110
|
+
type = error_obj[:type]
|
111
|
+
case type
|
112
|
+
when "payment"
|
113
|
+
raise PaymentError.new(rcode, error_obj)
|
114
|
+
when "operation_failed"
|
115
|
+
raise OperationFailedError.new(rcode, error_obj)
|
116
|
+
when "invalid_request"
|
117
|
+
raise InvalidRequestError.new(rcode, error_obj)
|
118
|
+
else
|
119
|
+
raise APIError.new(rcode, error_obj)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
# directly copying headers formatting from rest-client to support backward compatability for rest-client
|
123
|
+
def self.beautify_headers(headers)
|
124
|
+
headers.inject({}) do |out, (key, value)|
|
125
|
+
key_sym = key.tr('-', '_').downcase.to_sym
|
126
|
+
|
127
|
+
# Handle Set-Cookie specially since it cannot be joined by comma.
|
128
|
+
if key.downcase == 'set-cookie'
|
129
|
+
out[key_sym] = value
|
130
|
+
else
|
131
|
+
out[key_sym] = value.join(', ')
|
132
|
+
end
|
133
|
+
|
134
|
+
out
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
data/lib/chargebee/request.rb
CHANGED
@@ -1,27 +1,27 @@
|
|
1
1
|
module ChargeBee
|
2
|
-
class Request
|
2
|
+
class Request
|
3
3
|
|
4
|
-
def self.send_list_request(method, url, params={}, env=nil, headers={})
|
4
|
+
def self.send_list_request(method, url, params={}, env=nil, headers={}, sub_domain=nil, isJsonRequest=nil, jsonKeys={})
|
5
5
|
serialized = {}
|
6
6
|
params.each do |k, v|
|
7
7
|
if(v.kind_of? Array)
|
8
8
|
v = v.to_json
|
9
9
|
end
|
10
10
|
serialized["#{k}"] = v
|
11
|
-
end
|
12
|
-
self.send(method, url, serialized, env, headers)
|
11
|
+
end
|
12
|
+
self.send(method, url, serialized, env, headers, sub_domain, isJsonRequest=nil, jsonKeys={})
|
13
13
|
end
|
14
14
|
|
15
|
-
def self.send(method, url, params={}, env=nil, headers={})
|
15
|
+
def self.send(method, url, params={}, env=nil, headers={}, sub_domain=nil, isJsonRequest=nil, jsonKeys={})
|
16
16
|
env ||= ChargeBee.default_env
|
17
|
-
ser_params = Util.serialize(params)
|
18
|
-
resp, rheaders =
|
17
|
+
ser_params = isJsonRequest ? params.to_json : Util.serialize(params, nil, nil, jsonKeys)
|
18
|
+
resp, rheaders, rcode = NativeRequest.request(method, url, env, ser_params||={}, headers, sub_domain, isJsonRequest)
|
19
19
|
if resp.has_key?(:list)
|
20
|
-
ListResult.new(resp[:list], resp[:next_offset], rheaders)
|
21
|
-
else
|
22
|
-
Result.new(resp, rheaders)
|
20
|
+
ListResult.new(resp[:list], resp[:next_offset], rheaders, rcode)
|
21
|
+
else
|
22
|
+
Result.new(resp, rheaders, rcode)
|
23
23
|
end
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
end
|
27
27
|
end
|
data/lib/chargebee/result.rb
CHANGED
@@ -3,15 +3,24 @@ module ChargeBee
|
|
3
3
|
|
4
4
|
IDEMPOTENCY_REPLAYED_HEADER = :chargebee_idempotency_replayed
|
5
5
|
|
6
|
-
def initialize(response, rheaders = nil)
|
6
|
+
def initialize(response, rheaders = nil, http_status_code=nil)
|
7
7
|
@response = response
|
8
8
|
@rheaders = rheaders
|
9
|
+
@http_status_code = http_status_code
|
9
10
|
end
|
10
11
|
|
11
12
|
def get_response_headers()
|
12
13
|
@rheaders
|
13
14
|
end
|
14
15
|
|
16
|
+
def get_raw_response()
|
17
|
+
@response
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_http_status_code()
|
21
|
+
@http_status_code
|
22
|
+
end
|
23
|
+
|
15
24
|
def is_idempotency_replayed()
|
16
25
|
replayed_header = get_response_headers[IDEMPOTENCY_REPLAYED_HEADER]
|
17
26
|
if replayed_header != nil
|
@@ -97,7 +106,7 @@ module ChargeBee
|
|
97
106
|
|
98
107
|
def invoice()
|
99
108
|
invoice = get(:invoice, Invoice,
|
100
|
-
{:line_items => Invoice::LineItem, :discounts => Invoice::Discount, :line_item_discounts => Invoice::LineItemDiscount, :taxes => Invoice::Tax, :line_item_taxes => Invoice::LineItemTax, :line_item_tiers => Invoice::LineItemTier, :linked_payments => Invoice::LinkedPayment, :dunning_attempts => Invoice::DunningAttempt, :applied_credits => Invoice::AppliedCredit, :adjustment_credit_notes => Invoice::AdjustmentCreditNote, :issued_credit_notes => Invoice::IssuedCreditNote, :linked_orders => Invoice::LinkedOrder, :notes => Invoice::Note, :shipping_address => Invoice::ShippingAddress, :statement_descriptor => Invoice::StatementDescriptor, :billing_address => Invoice::BillingAddress, :einvoice => Invoice::Einvoice, :site_details_at_creation => Invoice::SiteDetailsAtCreation, :tax_origin => Invoice::TaxOrigin});
|
109
|
+
{:line_items => Invoice::LineItem, :discounts => Invoice::Discount, :line_item_discounts => Invoice::LineItemDiscount, :taxes => Invoice::Tax, :line_item_taxes => Invoice::LineItemTax, :line_item_credits => Invoice::LineItemCredit, :line_item_tiers => Invoice::LineItemTier, :linked_payments => Invoice::LinkedPayment, :dunning_attempts => Invoice::DunningAttempt, :applied_credits => Invoice::AppliedCredit, :adjustment_credit_notes => Invoice::AdjustmentCreditNote, :issued_credit_notes => Invoice::IssuedCreditNote, :linked_orders => Invoice::LinkedOrder, :notes => Invoice::Note, :shipping_address => Invoice::ShippingAddress, :statement_descriptor => Invoice::StatementDescriptor, :billing_address => Invoice::BillingAddress, :einvoice => Invoice::Einvoice, :site_details_at_creation => Invoice::SiteDetailsAtCreation, :tax_origin => Invoice::TaxOrigin});
|
101
110
|
return invoice;
|
102
111
|
end
|
103
112
|
|
@@ -158,13 +167,13 @@ module ChargeBee
|
|
158
167
|
estimate.init_dependant(@response[:estimate], :subscription_estimate,
|
159
168
|
{:shipping_address => SubscriptionEstimate::ShippingAddress, :contract_term => SubscriptionEstimate::ContractTerm});
|
160
169
|
estimate.init_dependant(@response[:estimate], :invoice_estimate,
|
161
|
-
{:line_items => InvoiceEstimate::LineItem, :discounts => InvoiceEstimate::Discount, :taxes => InvoiceEstimate::Tax, :line_item_taxes => InvoiceEstimate::LineItemTax, :line_item_tiers => InvoiceEstimate::LineItemTier, :line_item_discounts => InvoiceEstimate::LineItemDiscount});
|
170
|
+
{:line_items => InvoiceEstimate::LineItem, :discounts => InvoiceEstimate::Discount, :taxes => InvoiceEstimate::Tax, :line_item_taxes => InvoiceEstimate::LineItemTax, :line_item_tiers => InvoiceEstimate::LineItemTier, :line_item_credits => InvoiceEstimate::LineItemCredit, :line_item_discounts => InvoiceEstimate::LineItemDiscount});
|
162
171
|
estimate.init_dependant(@response[:estimate], :next_invoice_estimate,
|
163
|
-
{:line_items => InvoiceEstimate::LineItem, :discounts => InvoiceEstimate::Discount, :taxes => InvoiceEstimate::Tax, :line_item_taxes => InvoiceEstimate::LineItemTax, :line_item_tiers => InvoiceEstimate::LineItemTier, :line_item_discounts => InvoiceEstimate::LineItemDiscount});
|
172
|
+
{:line_items => InvoiceEstimate::LineItem, :discounts => InvoiceEstimate::Discount, :taxes => InvoiceEstimate::Tax, :line_item_taxes => InvoiceEstimate::LineItemTax, :line_item_tiers => InvoiceEstimate::LineItemTier, :line_item_credits => InvoiceEstimate::LineItemCredit, :line_item_discounts => InvoiceEstimate::LineItemDiscount});
|
164
173
|
estimate.init_dependant_list(@response[:estimate], :subscription_estimates,
|
165
174
|
{:shipping_address => SubscriptionEstimate::ShippingAddress, :contract_term => SubscriptionEstimate::ContractTerm});
|
166
175
|
estimate.init_dependant_list(@response[:estimate], :invoice_estimates,
|
167
|
-
{:line_items => InvoiceEstimate::LineItem, :discounts => InvoiceEstimate::Discount, :taxes => InvoiceEstimate::Tax, :line_item_taxes => InvoiceEstimate::LineItemTax, :line_item_tiers => InvoiceEstimate::LineItemTier, :line_item_discounts => InvoiceEstimate::LineItemDiscount});
|
176
|
+
{:line_items => InvoiceEstimate::LineItem, :discounts => InvoiceEstimate::Discount, :taxes => InvoiceEstimate::Tax, :line_item_taxes => InvoiceEstimate::LineItemTax, :line_item_tiers => InvoiceEstimate::LineItemTier, :line_item_credits => InvoiceEstimate::LineItemCredit, :line_item_discounts => InvoiceEstimate::LineItemDiscount});
|
168
177
|
estimate.init_dependant_list(@response[:estimate], :payment_schedule_estimates,
|
169
178
|
{:schedule_entries => PaymentScheduleEstimate::ScheduleEntry});
|
170
179
|
estimate.init_dependant_list(@response[:estimate], :credit_note_estimates,
|
@@ -461,6 +470,16 @@ module ChargeBee
|
|
461
470
|
return recorded_purchase;
|
462
471
|
end
|
463
472
|
|
473
|
+
def rule()
|
474
|
+
rule = get(:rule, Rule);
|
475
|
+
return rule;
|
476
|
+
end
|
477
|
+
|
478
|
+
def usage_event()
|
479
|
+
usage_event = get(:usage_event, UsageEvent);
|
480
|
+
return usage_event;
|
481
|
+
end
|
482
|
+
|
464
483
|
def advance_invoice_schedules()
|
465
484
|
advance_invoice_schedules = get_list(:advance_invoice_schedules, AdvanceInvoiceSchedule,
|
466
485
|
{:fixed_interval_schedule => AdvanceInvoiceSchedule::FixedIntervalSchedule, :specific_dates_schedule => AdvanceInvoiceSchedule::SpecificDatesSchedule});
|
@@ -475,7 +494,7 @@ module ChargeBee
|
|
475
494
|
|
476
495
|
def invoices()
|
477
496
|
invoices = get_list(:invoices, Invoice,
|
478
|
-
{:line_items => Invoice::LineItem, :discounts => Invoice::Discount, :line_item_discounts => Invoice::LineItemDiscount, :taxes => Invoice::Tax, :line_item_taxes => Invoice::LineItemTax, :line_item_tiers => Invoice::LineItemTier, :linked_payments => Invoice::LinkedPayment, :dunning_attempts => Invoice::DunningAttempt, :applied_credits => Invoice::AppliedCredit, :adjustment_credit_notes => Invoice::AdjustmentCreditNote, :issued_credit_notes => Invoice::IssuedCreditNote, :linked_orders => Invoice::LinkedOrder, :notes => Invoice::Note, :shipping_address => Invoice::ShippingAddress, :statement_descriptor => Invoice::StatementDescriptor, :billing_address => Invoice::BillingAddress, :einvoice => Invoice::Einvoice, :site_details_at_creation => Invoice::SiteDetailsAtCreation, :tax_origin => Invoice::TaxOrigin});
|
497
|
+
{:line_items => Invoice::LineItem, :discounts => Invoice::Discount, :line_item_discounts => Invoice::LineItemDiscount, :taxes => Invoice::Tax, :line_item_taxes => Invoice::LineItemTax, :line_item_credits => Invoice::LineItemCredit, :line_item_tiers => Invoice::LineItemTier, :linked_payments => Invoice::LinkedPayment, :dunning_attempts => Invoice::DunningAttempt, :applied_credits => Invoice::AppliedCredit, :adjustment_credit_notes => Invoice::AdjustmentCreditNote, :issued_credit_notes => Invoice::IssuedCreditNote, :linked_orders => Invoice::LinkedOrder, :notes => Invoice::Note, :shipping_address => Invoice::ShippingAddress, :statement_descriptor => Invoice::StatementDescriptor, :billing_address => Invoice::BillingAddress, :einvoice => Invoice::Einvoice, :site_details_at_creation => Invoice::SiteDetailsAtCreation, :tax_origin => Invoice::TaxOrigin});
|
479
498
|
return invoices;
|
480
499
|
end
|
481
500
|
|
@@ -520,10 +539,6 @@ module ChargeBee
|
|
520
539
|
JSON.pretty_generate(@response)
|
521
540
|
end
|
522
541
|
|
523
|
-
def get_raw_response()
|
524
|
-
@response;
|
525
|
-
end
|
526
|
-
|
527
542
|
private
|
528
543
|
def get_list(type, klass, sub_types = {}, dependant_types = {}, dependant_sub_types = {})
|
529
544
|
if(@response[type] == nil)
|
data/lib/chargebee/util.rb
CHANGED
@@ -1,15 +1,18 @@
|
|
1
1
|
module ChargeBee
|
2
2
|
module Util
|
3
3
|
|
4
|
-
def self.serialize(value, prefix = nil, idx = nil)
|
4
|
+
def self.serialize(value, prefix = nil, idx = nil, json_keys = nil, level = 0)
|
5
5
|
serialized = {}
|
6
6
|
case value
|
7
7
|
when Hash
|
8
8
|
value.each do |k, v|
|
9
|
-
|
10
|
-
|
9
|
+
should_json_encode = json_keys[k] && json_keys[k] == level
|
10
|
+
if should_json_encode
|
11
|
+
key = "#{prefix || ''}#{prefix ? "[#{k}]" : k}#{idx ? "[#{idx}]" : ''}"
|
12
|
+
serialized.merge!({key.to_s => v.to_json})
|
11
13
|
elsif(v.kind_of? Hash or v.kind_of? Array)
|
12
|
-
|
14
|
+
temp_prefix = prefix!=nil ? "#{prefix}[#{k}]" : k
|
15
|
+
serialized.merge!(serialize(v, temp_prefix, nil , json_keys, level+1))
|
13
16
|
else
|
14
17
|
key = "#{(prefix!=nil) ? prefix:''}#{(prefix!=nil) ? '['+k.to_s+']' : k}#{(idx != nil) ? '['+idx.to_s+']':''}"
|
15
18
|
serialized.merge!({key => as_str(v)})
|
@@ -17,7 +20,7 @@ module ChargeBee
|
|
17
20
|
end
|
18
21
|
when Array
|
19
22
|
value.each_with_index do |v, i|
|
20
|
-
serialized.merge!(serialize(v, prefix, i))
|
23
|
+
serialized.merge!(serialize(v, prefix, i, json_keys, level))
|
21
24
|
end
|
22
25
|
else
|
23
26
|
if(idx != nil and prefix != nil)
|
data/lib/chargebee.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/chargebee/environment'
|
2
|
-
require File.dirname(__FILE__) + '/chargebee/
|
2
|
+
require File.dirname(__FILE__) + '/chargebee/nativeRequest'
|
3
3
|
require File.dirname(__FILE__) + '/chargebee/util'
|
4
4
|
require File.dirname(__FILE__) + '/chargebee/request'
|
5
5
|
require File.dirname(__FILE__) + '/chargebee/result'
|
@@ -83,11 +83,13 @@ require File.dirname(__FILE__) + '/chargebee/models/omnichannel_transaction'
|
|
83
83
|
require File.dirname(__FILE__) + '/chargebee/models/recorded_purchase'
|
84
84
|
require File.dirname(__FILE__) + '/chargebee/models/omnichannel_subscription_item'
|
85
85
|
require File.dirname(__FILE__) + '/chargebee/models/configuration'
|
86
|
+
require File.dirname(__FILE__) + '/chargebee/models/usage_event'
|
87
|
+
require File.dirname(__FILE__) + '/chargebee/models/rule'
|
86
88
|
|
87
89
|
|
88
90
|
module ChargeBee
|
89
91
|
|
90
|
-
VERSION = '2.
|
92
|
+
VERSION = '2.50.0'
|
91
93
|
|
92
94
|
@@default_env = nil
|
93
95
|
@@verify_ca_certs = true
|
data/spec/chargebee_spec.rb
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'rest_client'
|
3
2
|
require 'sample_response'
|
4
3
|
|
5
4
|
describe "chargebee" do
|
6
5
|
|
7
6
|
before(:all) do
|
8
|
-
@request =
|
7
|
+
@request = ChargeBee::NativeRequest
|
9
8
|
end
|
10
9
|
|
11
10
|
it "serialize should convert the hash to acceptable format" do
|
@@ -55,7 +54,7 @@ describe "chargebee" do
|
|
55
54
|
end
|
56
55
|
|
57
56
|
it "should properly convert the response json into proper object" do
|
58
|
-
@request.expects(:
|
57
|
+
@request.expects(:request).once.returns([simple_subscription, headers])
|
59
58
|
result = ChargeBee::Subscription.retrieve("simple_subscription")
|
60
59
|
h = result.get_response_headers
|
61
60
|
expect(h).to eq(headers)
|
@@ -68,7 +67,7 @@ describe "chargebee" do
|
|
68
67
|
end
|
69
68
|
|
70
69
|
it "should properly convert the nested response json into proper object with sub types" do
|
71
|
-
@request.expects(:
|
70
|
+
@request.expects(:request).once.returns([nested_subscription, headers])
|
72
71
|
result = ChargeBee::Subscription.retrieve("nested_subscription")
|
73
72
|
s = result.subscription
|
74
73
|
expect(s.id).to eq("nested_subscription")
|
@@ -80,7 +79,7 @@ describe "chargebee" do
|
|
80
79
|
end
|
81
80
|
|
82
81
|
it "should properly convert the list response json into proper result object" do
|
83
|
-
@request.expects(:
|
82
|
+
@request.expects(:request).once.returns([list_subscriptions, headers])
|
84
83
|
result = ChargeBee::Subscription.list({:limit => 2})
|
85
84
|
expect(result.length).to eq(2)
|
86
85
|
result.each do |i|
|
@@ -89,7 +88,7 @@ describe "chargebee" do
|
|
89
88
|
end
|
90
89
|
|
91
90
|
it "should parse event api response and provide the content properly" do
|
92
|
-
@request.expects(:
|
91
|
+
@request.expects(:request).once.returns([sample_event, headers])
|
93
92
|
result = ChargeBee::Event.retrieve("sample_event")
|
94
93
|
event = result.event
|
95
94
|
s = event.content.subscription
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chargebee
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.50.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rajaraman S
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2025-02-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json_pure
|
@@ -25,26 +25,6 @@ dependencies:
|
|
25
25
|
- - ~>
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '2.1'
|
28
|
-
- !ruby/object:Gem::Dependency
|
29
|
-
name: rest-client
|
30
|
-
requirement: !ruby/object:Gem::Requirement
|
31
|
-
requirements:
|
32
|
-
- - '>='
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version: '1.8'
|
35
|
-
- - <=
|
36
|
-
- !ruby/object:Gem::Version
|
37
|
-
version: 2.0.2
|
38
|
-
type: :runtime
|
39
|
-
prerelease: false
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
requirements:
|
42
|
-
- - '>='
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
version: '1.8'
|
45
|
-
- - <=
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 2.0.2
|
48
28
|
- !ruby/object:Gem::Dependency
|
49
29
|
name: cgi
|
50
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -186,6 +166,7 @@ files:
|
|
186
166
|
- lib/chargebee/models/ramp.rb
|
187
167
|
- lib/chargebee/models/recorded_purchase.rb
|
188
168
|
- lib/chargebee/models/resource_migration.rb
|
169
|
+
- lib/chargebee/models/rule.rb
|
189
170
|
- lib/chargebee/models/site_migration_detail.rb
|
190
171
|
- lib/chargebee/models/subscription.rb
|
191
172
|
- lib/chargebee/models/subscription_entitlement.rb
|
@@ -197,7 +178,9 @@ files:
|
|
197
178
|
- lib/chargebee/models/transaction.rb
|
198
179
|
- lib/chargebee/models/unbilled_charge.rb
|
199
180
|
- lib/chargebee/models/usage.rb
|
181
|
+
- lib/chargebee/models/usage_event.rb
|
200
182
|
- lib/chargebee/models/virtual_bank_account.rb
|
183
|
+
- lib/chargebee/nativeRequest.rb
|
201
184
|
- lib/chargebee/request.rb
|
202
185
|
- lib/chargebee/rest.rb
|
203
186
|
- lib/chargebee/result.rb
|