chargebee 2.48.0 → 2.49.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f35c3629f938f3db764288c1d2c9912bf8a09f04
4
- data.tar.gz: 73bb6f3da742431e15568e749ac4504b217339a9
3
+ metadata.gz: a52725486531b040a5d430e9889b0b33b3953ba8
4
+ data.tar.gz: a66b2838d48287dae8fe2fd6b7c3d874ac5cd84f
5
5
  SHA512:
6
- metadata.gz: 4e5f6ab315172e433117dcac5f3abe73383df3821fb2133e2fbe3eaf0c5eb6d248f489c5750938f13ea7792de1e64c78ef5992566d62644a98030ba7483c817b
7
- data.tar.gz: 611845925d8b5d050d1ba30e6987d190f5724549ccaa9cb5f4d5b6d6ef9c0bf5221cbc8a4b1c47dbb4ed8dca9ddbb76e1364ac8712d729da521a0b2e3fe0b8c1
6
+ metadata.gz: 6df1cd531937cc375146bdfc1b1d1e0432cfbe811c50a2c5204bd72ea5035053f1a058eedefaad9acafca5d7d469feeaa165b87517d88133178708ca3efa25ac
7
+ data.tar.gz: 75910fe9baf6ff616fd80f33f5c5ee561b65eac8bd2ab39ed3407d17af4b799c429a2f1a39db5c02001285ca4d773026d97e05e747560db07fface445e1e5277
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ### v2.49.0 (2025-01-16)
2
+
3
+ #### New Feature
4
+ * Net::HTTP has been used as a dependency.
5
+ * All instances of rest-client have been replaced with Net::HTTP for making HTTP requests.
6
+ * Updated error handling and response parsing to match the behavior of rest-client.
7
+ * Adjusted headers and request options for compatibility with Net::HTTP.
8
+
1
9
  ### v2.48.0 (2024-12-19)
2
10
  * * *
3
11
 
data/Gemfile.lock CHANGED
@@ -1,10 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- chargebee (2.48.0)
4
+ chargebee (2.49.0)
5
5
  cgi (>= 0.1.0, < 1.0.0)
6
6
  json_pure (~> 2.1)
7
- rest-client (>= 1.8, <= 2.0.2)
8
7
 
9
8
  GEM
10
9
  remote: https://rubygems.org/
@@ -21,10 +20,6 @@ GEM
21
20
  mime-types-data (3.2022.0105)
22
21
  mocha (1.13.0)
23
22
  netrc (0.11.0)
24
- rest-client (2.0.2)
25
- http-cookie (>= 1.0.2, < 2.0)
26
- mime-types (>= 1.16, < 4.0)
27
- netrc (~> 0.8)
28
23
  rspec (3.0.0)
29
24
  rspec-core (~> 3.0.0)
30
25
  rspec-expectations (~> 3.0.0)
@@ -43,6 +38,7 @@ GEM
43
38
 
44
39
  PLATFORMS
45
40
  arm64-darwin-21
41
+ arm64-darwin-23
46
42
  x86_64-darwin-20
47
43
  x86_64-linux
48
44
 
data/Rakefile CHANGED
@@ -148,3 +148,16 @@ task :validate do
148
148
  exit!
149
149
  end
150
150
  end
151
+
152
+ desc "Create tag v#{version} and build and push #{gem_file} to Rubygems for Beta version."
153
+ task :release_beta => :build do
154
+ unless `git branch` =~ /^\* next$/
155
+ puts "You must be on the next branch to release beta!"
156
+ exit!
157
+ end
158
+ sh "git commit --allow-empty -a -m 'Release #{version}'"
159
+ sh "git tag v#{version}"
160
+ sh "git push origin next"
161
+ sh "git push origin v#{version}"
162
+ sh "gem push pkg/#{name}-#{version}.gem"
163
+ end
data/chargebee.gemspec CHANGED
@@ -4,8 +4,8 @@ Gem::Specification.new do |s|
4
4
  s.rubygems_version = '1.3.5'
5
5
  s.required_ruby_version = '>= 1.9.3'
6
6
  s.name = 'chargebee'
7
- s.version = '2.48.0'
8
- s.date = '2024-12-19'
7
+ s.version = '2.49.0'
8
+ s.date = '2025-01-16'
9
9
  s.summary = "Ruby client for Chargebee API."
10
10
  s.description = "Subscription Billing - Simple. Secure. Affordable. More details at www.chargebee.com."
11
11
  s.metadata = {
@@ -23,7 +23,6 @@ Gem::Specification.new do |s|
23
23
  s.extra_rdoc_files = %w[README.md LICENSE]
24
24
 
25
25
  s.add_dependency('json_pure', '~> 2.1')
26
- s.add_dependency('rest-client', '>=1.8', '<=2.0.2')
27
26
  s.add_dependency('cgi', '>=0.1.0', '<1.0.0')
28
27
  s.add_development_dependency('rspec', '~> 3.0.0')
29
28
  s.add_development_dependency('mocha')
@@ -125,6 +124,7 @@ Gem::Specification.new do |s|
125
124
  lib/chargebee/models/unbilled_charge.rb
126
125
  lib/chargebee/models/usage.rb
127
126
  lib/chargebee/models/virtual_bank_account.rb
127
+ lib/chargebee/nativeRequest.rb
128
128
  lib/chargebee/request.rb
129
129
  lib/chargebee/rest.rb
130
130
  lib/chargebee/result.rb
@@ -0,0 +1,136 @@
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 = {})
10
+ raise Error.new('No environment configured.') unless env
11
+ api_key = env.api_key
12
+
13
+ uri = URI(env.api_url(url))
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 = URI.encode_www_form(params || {})
21
+ end
22
+ user_agent = ChargeBee.user_agent
23
+ headers = {
24
+ "User-Agent" => user_agent,
25
+ "Accept" => "application/json",
26
+ "Lang-Version" => RUBY_VERSION,
27
+ "OS-Version" => RUBY_PLATFORM,
28
+ "Content-Type" => "application/x-www-form-urlencoded"
29
+ }.merge(headers)
30
+
31
+ http = Net::HTTP.new(uri.host, uri.port)
32
+ http.use_ssl = true
33
+ http.open_timeout=env.connect_timeout
34
+ http.read_timeout=env.read_timeout
35
+ if ChargeBee.verify_ca_certs?
36
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
37
+ http.ca_file = ChargeBee.ca_cert_path
38
+ else
39
+ http.verify_mode = OpenSSL::SSL::VERIFY_NONE
40
+ end
41
+
42
+ request_class = case method.to_s.downcase.to_sym
43
+ when :get then Net::HTTP::Get
44
+ when :post then Net::HTTP::Post
45
+ when :put then Net::HTTP::Put
46
+ when :delete then Net::HTTP::Delete
47
+ else raise Error.new("Unsupported HTTP method: #{method}")
48
+ end
49
+
50
+ request = request_class.new(uri, headers)
51
+ request.body = payload if payload
52
+
53
+ request.basic_auth(api_key, nil)
54
+ begin
55
+ response = http.request(request)
56
+ rescue => e
57
+ raise IOError.new("IO Exception when trying to connect to ChargeBee with URL #{uri} . Reason: #{e}", e)
58
+ end
59
+ handle_response(response, headers)
60
+ end
61
+
62
+ def self.handle_response(response, headers)
63
+ rcode = response.code.to_i
64
+ rbody = response.body
65
+
66
+ # converting headers to rest-client format previously we were using rest-client,
67
+ # and mapping headers to that format to support backward compatability
68
+ rheaders = beautify_headers(response.to_hash)
69
+
70
+ # When a custom 'Accept-Encoding' header is set to gzip, Net::HTTP will not automatically
71
+ # decompress the response. Therefore, we need to manually handle decompression
72
+ # based on the 'Content-Encoding' header in the response.
73
+ # https://github.com/ruby/ruby/blob/19c1f0233eb5202403c52b196f1d573893eacab7/lib/net/http/generic_request.rb#L82
74
+ if headers.keys.any? { |k| k.downcase == 'accept-encoding' } && rheaders[:content_encoding] == 'gzip' && rbody && !rbody.empty?
75
+ rbody = Zlib::GzipReader.new(StringIO.new(rbody)).read
76
+ end
77
+
78
+ if rcode >= 200 && rcode < 300
79
+ begin
80
+ resp = JSON.parse(rbody)
81
+ rescue JSON::ParserError => e
82
+ raise handle_json_error(rbody, e)
83
+ end
84
+ return Util.symbolize_keys(resp), rheaders
85
+ else
86
+ raise handle_for_error(rcode, rbody)
87
+ end
88
+ end
89
+
90
+ def self.handle_json_error(rbody, e)
91
+ if rbody.include?("503")
92
+ 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)
93
+ elsif rbody.include?("504")
94
+ 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)
95
+ else
96
+ 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)
97
+ end
98
+ end
99
+
100
+ def self.handle_for_error(rcode, rbody)
101
+ return Error.new("No response returned by ChargeBee API. HTTP status code: #{rcode}") if rcode == 204
102
+ begin
103
+ error_obj = JSON.parse(rbody)
104
+ error_obj = Util.symbolize_keys(error_obj)
105
+ rescue Exception => e
106
+ raise Error.new("Error response not in JSON format. The http status code is #{rcode} \n #{rbody.inspect}",e)
107
+ end
108
+ type = error_obj[:type]
109
+ case type
110
+ when "payment"
111
+ raise PaymentError.new(rcode, error_obj)
112
+ when "operation_failed"
113
+ raise OperationFailedError.new(rcode, error_obj)
114
+ when "invalid_request"
115
+ raise InvalidRequestError.new(rcode, error_obj)
116
+ else
117
+ raise APIError.new(rcode, error_obj)
118
+ end
119
+ end
120
+ # directly copying headers formatting from rest-client to support backward compatability for rest-client
121
+ def self.beautify_headers(headers)
122
+ headers.inject({}) do |out, (key, value)|
123
+ key_sym = key.tr('-', '_').downcase.to_sym
124
+
125
+ # Handle Set-Cookie specially since it cannot be joined by comma.
126
+ if key.downcase == 'set-cookie'
127
+ out[key_sym] = value
128
+ else
129
+ out[key_sym] = value.join(', ')
130
+ end
131
+
132
+ out
133
+ end
134
+ end
135
+ end
136
+ end
@@ -15,7 +15,7 @@ module ChargeBee
15
15
  def self.send(method, url, params={}, env=nil, headers={})
16
16
  env ||= ChargeBee.default_env
17
17
  ser_params = Util.serialize(params)
18
- resp, rheaders = Rest.request(method, url, env, ser_params||={}, headers)
18
+ resp, rheaders = NativeRequest.request(method, url, env, ser_params||={}, headers)
19
19
  if resp.has_key?(:list)
20
20
  ListResult.new(resp[:list], resp[:next_offset], rheaders)
21
21
  else
data/lib/chargebee.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require File.dirname(__FILE__) + '/chargebee/environment'
2
- require File.dirname(__FILE__) + '/chargebee/rest'
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'
@@ -87,7 +87,7 @@ require File.dirname(__FILE__) + '/chargebee/models/configuration'
87
87
 
88
88
  module ChargeBee
89
89
 
90
- VERSION = '2.48.0'
90
+ VERSION = '2.49.0'
91
91
 
92
92
  @@default_env = nil
93
93
  @@verify_ca_certs = true
@@ -43,7 +43,7 @@ describe ChargeBee::ListResult do
43
43
  end
44
44
 
45
45
  before do
46
- ChargeBee::Rest.stubs(:request).returns(response)
46
+ ChargeBee::NativeRequest.stubs(:request).returns(response)
47
47
  end
48
48
 
49
49
  it "returns list object, with next offset attribute" do
@@ -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 = RestClient::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(:execute).once.returns(mock_response(simple_subscription, headers))
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(:execute).once.returns(mock_response(nested_subscription, headers))
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(:execute).once.returns(mock_response(list_subscriptions, headers))
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(:execute).once.returns(mock_response(sample_event, headers))
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.48.0
4
+ version: 2.49.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: 2024-12-19 00:00:00.000000000 Z
12
+ date: 2025-01-16 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
@@ -198,6 +178,7 @@ files:
198
178
  - lib/chargebee/models/unbilled_charge.rb
199
179
  - lib/chargebee/models/usage.rb
200
180
  - lib/chargebee/models/virtual_bank_account.rb
181
+ - lib/chargebee/nativeRequest.rb
201
182
  - lib/chargebee/request.rb
202
183
  - lib/chargebee/rest.rb
203
184
  - lib/chargebee/result.rb