Module: EasyPost
- Defined in:
- lib/easypost.rb,
lib/easypost/version.rb
Defined Under Namespace
Modules: Util Classes: Address, ApiKey, Batch, Brand, CarrierAccount, CarrierType, CustomsInfo, CustomsItem, EasyPostObject, Error, Event, Insurance, Order, Parcel, Pickup, PickupRate, PostageLabel, Rate, Refund, Report, Resource, ScanForm, Shipment, TaxIdentifier, Tracker, User, Webhook
Constant Summary collapse
- VERSION =
File.open(File.('../../VERSION', __dir__)).read.strip
Class Method Summary collapse
-
.api_base ⇒ Object
Get the API base.
-
.api_base=(api_base) ⇒ Object
Set the API base.
-
.api_key ⇒ Object
Get the ApiKey.
-
.api_key=(api_key) ⇒ Object
Set the ApiKey.
-
.http_config ⇒ Object
Get the HTTP config.
-
.http_config=(http_config_params) ⇒ Object
Set the HTTP config.
-
.make_client(uri) ⇒ Object
Create an EasyPost Client.
-
.make_request(method, path, api_key = nil, body = nil) ⇒ Object
Make an HTTP request.
-
.reset_http_config ⇒ Object
Reset the HTTP config.
Class Method Details
.api_base ⇒ Object
Get the API base.
59 60 61 |
# File 'lib/easypost.rb', line 59 def self.api_base @api_base end |
.api_base=(api_base) ⇒ Object
Set the API base.
54 55 56 |
# File 'lib/easypost.rb', line 54 def self.api_base=(api_base) @api_base = api_base end |
.api_key ⇒ Object
Get the ApiKey.
49 50 51 |
# File 'lib/easypost.rb', line 49 def self.api_key @api_key end |
.api_key=(api_key) ⇒ Object
Set the ApiKey.
44 45 46 |
# File 'lib/easypost.rb', line 44 def self.api_key=(api_key) @api_key = api_key end |
.http_config ⇒ Object
Get the HTTP config.
82 83 84 |
# File 'lib/easypost.rb', line 82 def self.http_config @http_config ||= reset_http_config end |
.http_config=(http_config_params) ⇒ Object
Set the HTTP config.
87 88 89 |
# File 'lib/easypost.rb', line 87 def self.http_config=(http_config_params) http_config.merge!(http_config_params) end |
.make_client(uri) ⇒ Object
Create an EasyPost Client.
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# File 'lib/easypost.rb', line 92 def self.make_client(uri) client = if http_config[:proxy] proxy_uri = URI(http_config[:proxy]) Net::HTTP.new( uri.host, uri.port, proxy_uri.host, proxy_uri.port, proxy_uri.user, proxy_uri.password, ) else Net::HTTP.new(uri.host, uri.port) end client.use_ssl = true http_config.each do |name, value| # Discrepancies between RestClient and Net::HTTP. case name when :verify_ssl name = :verify_mode when :timeout name = :read_timeout end # Handled in the creation of the client. if name == :proxy next end client.send("#{name}=", value) end client end |
.make_request(method, path, api_key = nil, body = nil) ⇒ Object
Make an HTTP request.
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# File 'lib/easypost.rb', line 129 def self.make_request(method, path, api_key = nil, body = nil) client = make_client(URI(@api_base)) request = Net::HTTP.const_get(method.capitalize).new(path) if body request.body = JSON.dump(EasyPost::Util.objects_to_ids(body)) end request['Content-Type'] = 'application/json' request['User-Agent'] = "EasyPost/v2 RubyClient/#{VERSION} Ruby/#{RUBY_VERSION}-p#{RUBY_PATCHLEVEL}" if api_key ||= @api_key request['Authorization'] = "Basic #{Base64.strict_encode64("#{api_key}:")}" end response = client.request(request) if (400..599).include? response.code.to_i error = JSON.parse(response.body)['error'] raise EasyPost::Error.new(error['message'], response.code.to_i, error['code'], error['errors'], response.body) end if response['Content-Type'].include? 'application/json' JSON.parse(response.body) else response.body end rescue JSON::ParserError raise "Invalid response object from API, unable to decode.\n#{response.body}" end |
.reset_http_config ⇒ Object
Reset the HTTP config.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/easypost.rb', line 64 def self.reset_http_config @http_config = { timeout: 60, open_timeout: 30, verify_ssl: OpenSSL::SSL::VERIFY_PEER, } ruby_version = Gem::Version.new(RUBY_VERSION) if ruby_version >= Gem::Version.new('2.5.0') @http_config[:min_version] = OpenSSL::SSL::TLS1_2_VERSION else @http_config[:ssl_version] = :TLSv1_2 # rubocop:disable Naming/VariableNumber end @http_config end |