easyship-rates-ruby-api 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +11 -0
- data/.travis.yml +5 -0
- data/Gemfile +4 -0
- data/README.md +67 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/easyship-rates-ruby-api.gemspec +29 -0
- data/lib/easyship/rates/ruby/api/api.rb +6 -0
- data/lib/easyship/rates/ruby/api/api/query_helpers.rb +15 -0
- data/lib/easyship/rates/ruby/api/api/rates.rb +46 -0
- data/lib/easyship/rates/ruby/api/client.rb +19 -0
- data/lib/easyship/rates/ruby/api/errors.rb +32 -0
- data/lib/easyship/rates/ruby/api/helpers.rb +6 -0
- data/lib/easyship/rates/ruby/api/helpers/authorization.rb +45 -0
- data/lib/easyship/rates/ruby/api/helpers/request.rb +66 -0
- data/lib/easyship/rates/ruby/api/mash.rb +17 -0
- data/lib/easyship/rates/ruby/api/version.rb +9 -0
- data/lib/easyship_rates_ruby_api.rb +34 -0
- metadata +160 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 175eacb565636cc6b781053822beecfa8e7fb274
|
4
|
+
data.tar.gz: e0c738c96f7c98ece8dae119033803340beea7a2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 726b84aa0df2a24ee31e0588bba6c2f354c2b1f15a823d6d5390c7d4fd66e72c0c66e0f35a6f5d281db9ee9f7ea7e4aeb98bd6a99041fd1847713f41d949e960
|
7
|
+
data.tar.gz: 7314dff470e1d06684f6377257c7a795617ada837ef8f4a6e38aef55f3a629ac2ea55cb13decc259acad149042b6ac456713043f3bbe2c2626ddbe615647e041
|
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# EasyshipRatesRubyApi
|
2
|
+
|
3
|
+
## Installation
|
4
|
+
|
5
|
+
Add this line to your application's Gemfile:
|
6
|
+
|
7
|
+
```ruby
|
8
|
+
gem 'easyship-rates-ruby-api'
|
9
|
+
```
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install easyship-rates-ruby-api
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
Create a file:
|
22
|
+
|
23
|
+
**config/initializers/easyship_rate_ruby_api.rb**
|
24
|
+
|
25
|
+
```ruby
|
26
|
+
require 'easyship_rates_ruby_api'
|
27
|
+
EasyshipRatesRubyApi.configure do |config|
|
28
|
+
config.uid = 'RATE_CALCULATOR_APPID'
|
29
|
+
config.secret = 'RATE_CALCULATOR_SECRET'
|
30
|
+
end
|
31
|
+
```
|
32
|
+
|
33
|
+
### Get Rate
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
client = EasyshipRatesRubyApi::Client.new
|
37
|
+
client.get_token
|
38
|
+
client.get_rate(length: 1, width: 1, height: 1, origin_country_id: 96, destination_country_id: 199, total_actual_weight: 1)
|
39
|
+
```
|
40
|
+
|
41
|
+
|
42
|
+
### Get All Rates
|
43
|
+
|
44
|
+
```ruby
|
45
|
+
client = EasyshipRatesRubyApi::Client.new
|
46
|
+
client.get_token
|
47
|
+
params = {
|
48
|
+
origin_country_id: 96,
|
49
|
+
destination_country_id: 199,
|
50
|
+
is_insured: true,
|
51
|
+
items: [
|
52
|
+
{ category_id: 1, actual_weight: 30, length: 1, width: 1, height: 1, declared_customs_value: 100, declared_currency: 'HKD' }
|
53
|
+
]
|
54
|
+
}
|
55
|
+
client.get_all_rates(params)
|
56
|
+
```
|
57
|
+
|
58
|
+
## Development
|
59
|
+
|
60
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
61
|
+
|
62
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
63
|
+
|
64
|
+
## Contributing
|
65
|
+
|
66
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/easyship/easyship-rates-ruby-api.
|
67
|
+
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "easyship/rates/ruby/api"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start
|
data/bin/setup
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'easyship/rates/ruby/api/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'easyship-rates-ruby-api'
|
8
|
+
spec.version = EasyshipRatesRubyApi::Version::STRING
|
9
|
+
spec.authors = ['aloha']
|
10
|
+
spec.email = ['y.alohac@gmail.com']
|
11
|
+
|
12
|
+
spec.summary = 'Ruby API for Rate Calculator'
|
13
|
+
spec.description = 'Ruby API for Rate Calculator'
|
14
|
+
spec.homepage = 'https://github.com/easyship/easyship-rates-ruby-api'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
17
|
+
spec.bindir = 'exe'
|
18
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
19
|
+
spec.require_paths = ['lib']
|
20
|
+
|
21
|
+
spec.add_dependency 'oauth2', '~> 1.2'
|
22
|
+
spec.add_dependency 'hashie', '~> 3.4'
|
23
|
+
spec.add_dependency 'multi_json', '~> 1.11'
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.12'
|
26
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
27
|
+
spec.add_development_dependency 'minitest', '~> 5.0'
|
28
|
+
spec.add_development_dependency 'pry', '~> 0.10'
|
29
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module EasyshipRatesRubyApi
|
2
|
+
module Api
|
3
|
+
module QueryHelpers
|
4
|
+
private
|
5
|
+
|
6
|
+
def simple_query(path, options = {})
|
7
|
+
headers = options.delete(:headers) || {}
|
8
|
+
params = to_query(options)
|
9
|
+
path += "#{path.include?('?') ? '&' : '?'}#{params}" if !params.empty?
|
10
|
+
|
11
|
+
Mash.from_json(get(path, headers))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module EasyshipRatesRubyApi
|
2
|
+
module Api
|
3
|
+
# Rate API
|
4
|
+
#
|
5
|
+
# @see https://github.com/easyship/easyship-rates Rate API
|
6
|
+
#
|
7
|
+
# [(contribute here)](https://github.com/easyship/easyship-rates-ruby-api)
|
8
|
+
module Rates
|
9
|
+
# Retrieve a Rate
|
10
|
+
#
|
11
|
+
# @param [Hash] options the options to get rate.
|
12
|
+
# @option options [String] :length length
|
13
|
+
# @option options [String] :width width
|
14
|
+
# @option options [String] :height height
|
15
|
+
# @option options [String] :origin_country_id origin_country_id
|
16
|
+
# @option options [String] :destination_country_id destination_country_id
|
17
|
+
# @option options [String] :total_actual_weight total_actual_weight
|
18
|
+
# @return [Easyship::Rates::Ruby::Mash]
|
19
|
+
def get_rate(options = {})
|
20
|
+
path = '/get_rates'
|
21
|
+
simple_query(path, options)
|
22
|
+
end
|
23
|
+
|
24
|
+
# Retrieve all detailed Rate
|
25
|
+
# @param [Hash] options the options to get rate.
|
26
|
+
# @option options [String] :origin_country_id
|
27
|
+
# @option options [String] :destination_country_id
|
28
|
+
# @option options [String] :is_insured
|
29
|
+
# @option options [Array<Hash>] :items
|
30
|
+
# @param [Hash] items the options to item detail.
|
31
|
+
# @option items [String] :category_id
|
32
|
+
# @option items [String] :actual_weight
|
33
|
+
# @option items [String] :length
|
34
|
+
# @option items [String] :width
|
35
|
+
# @option items [String] :height
|
36
|
+
# @option items [String] :declared_customs_value
|
37
|
+
# @option items [String] :declared_currency
|
38
|
+
# @return [Easyship::Rates::Ruby::Mash]
|
39
|
+
def get_all_rates(options = {})
|
40
|
+
path = '/get_all_rates'
|
41
|
+
defaults = {}
|
42
|
+
Mash.from_json(post(path, defaults.merge(options)).body)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
module EasyshipRatesRubyApi
|
4
|
+
class Client
|
5
|
+
include Helpers::Request
|
6
|
+
include Helpers::Authorization
|
7
|
+
include Api::QueryHelpers
|
8
|
+
include Api::Rates
|
9
|
+
|
10
|
+
attr_reader :client_token, :client_secret, :client_options
|
11
|
+
|
12
|
+
def initialize(cuid = EasyshipRatesRubyApi.uid, csecret = EasyshipRatesRubyApi.secret, options = {})
|
13
|
+
@client_uid = cuid
|
14
|
+
@client_secret = csecret
|
15
|
+
raise EasyshipRatesRubyApi::Errors::ArgumentMissingError.new('please provide uid and secret') unless @client_uid && @client_secret
|
16
|
+
@client_options = options
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module EasyshipRatesRubyApi
|
2
|
+
module Errors
|
3
|
+
class RateCalculatorError < StandardError
|
4
|
+
attr_reader :data
|
5
|
+
def initialize(data)
|
6
|
+
@data = data
|
7
|
+
super
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
class ArgumentMissingError < StandardError; end
|
13
|
+
|
14
|
+
# Raised when a 401 response status code is received
|
15
|
+
class UnauthorizedError < RateCalculatorError; end
|
16
|
+
|
17
|
+
# Raised when a 400 response status code is received
|
18
|
+
class GeneralError < RateCalculatorError; end
|
19
|
+
|
20
|
+
# Raised when a 403 response status code is received
|
21
|
+
class AccessDeniedError < RateCalculatorError; end
|
22
|
+
|
23
|
+
# Raised when a 404 response status code is received
|
24
|
+
class NotFoundError < StandardError; end
|
25
|
+
|
26
|
+
# Raised when a 500 response status code is received
|
27
|
+
class InformRateCalculatorError < StandardError; end
|
28
|
+
|
29
|
+
# Raised when a 502 or 503 response status code is received
|
30
|
+
class UnavailableError < StandardError; end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module EasyshipRatesRubyApi
|
2
|
+
module Helpers
|
3
|
+
module Authorization
|
4
|
+
|
5
|
+
DEFAULT_OAUTH_OPTIONS = {
|
6
|
+
staging_api_host: 'http://52.71.247.119',
|
7
|
+
production_api_host: '',
|
8
|
+
token_url: '/oauth2/token'
|
9
|
+
}
|
10
|
+
|
11
|
+
def client
|
12
|
+
@client ||= ::OAuth2::Client.new(@client_uid, @client_secret, parse_oauth_options)
|
13
|
+
end
|
14
|
+
|
15
|
+
def get_token(params = {})
|
16
|
+
@access_token ||= client.assertion.get_token(build_param(params))
|
17
|
+
end
|
18
|
+
|
19
|
+
def access_token
|
20
|
+
@access_token
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
# Since Rate Calculator using `/oauth2/token` instead of `/oauth/token`
|
26
|
+
def parse_oauth_options
|
27
|
+
{
|
28
|
+
site: @client_options[:site] || @client_options[:api_host] || (EasyshipRatesRubyApi.sandbox ? DEFAULT_OAUTH_OPTIONS[:staging_api_host] : DEFAULT_OAUTH_OPTIONS[:production_api_host]),
|
29
|
+
token_url: @client_options[:token_url] || DEFAULT_OAUTH_OPTIONS[:token_url]
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
def build_param(client_params)
|
34
|
+
{
|
35
|
+
iss: @client_uid,
|
36
|
+
aud: 'https://www.easyship-rate-calculator.com/oauth2/token',
|
37
|
+
prn: @client_uid,
|
38
|
+
exp: Time.now.to_i + 3600,
|
39
|
+
private_key: OpenSSL::PKey::RSA.new(@client_secret),
|
40
|
+
scope: 'get_rate get_all_rate me'
|
41
|
+
}.merge(client_params)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module EasyshipRatesRubyApi
|
2
|
+
module Helpers
|
3
|
+
module Request
|
4
|
+
|
5
|
+
API_PATH = '/v1'
|
6
|
+
|
7
|
+
DEFAULT_HEADERS = {}
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
def get(path, options = {})
|
12
|
+
response = access_token.get("#{API_PATH}#{path}", DEFAULT_HEADERS.merge(options))
|
13
|
+
raise_errors(response)
|
14
|
+
response.body
|
15
|
+
end
|
16
|
+
|
17
|
+
def post(path, options = {})
|
18
|
+
response = access_token.post("#{API_PATH}#{path}", { body: options })
|
19
|
+
raise_errors(response)
|
20
|
+
response
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def raise_errors(response)
|
26
|
+
case response.status.to_i
|
27
|
+
when 401
|
28
|
+
data = Mash.from_json(response.body)
|
29
|
+
raise EasyshipRatesRubyApi::Errors::UnauthorizedError.new(data), "(#{data.status}): #{data.message}"
|
30
|
+
when 400
|
31
|
+
data = Mash.from_json(response.body)
|
32
|
+
raise EasyshipRatesRubyApi::Errors::GeneralError.new(data), "(#{data.status}): #{data.message}"
|
33
|
+
when 403
|
34
|
+
data = Mash.from_json(response.body)
|
35
|
+
raise EasyshipRatesRubyApi::Errors::AccessDeniedError.new(data), "(#{data.status}): #{data.message}"
|
36
|
+
when 404
|
37
|
+
raise EasyshipRatesRubyApi::Errors::NotFoundError, "(#{response.code}): #{response.message}"
|
38
|
+
when 500
|
39
|
+
raise EasyshipRatesRubyApi::Errors::InformRateCalculatorError, "Rate Calculator had an internal error. Please let them know in the forum. (#{response.code}): #{response.message}"
|
40
|
+
when 502..503
|
41
|
+
raise EasyshipRatesRubyApi::Errors::UnavailableError, "(#{response.code}): #{response.message}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Stolen from Rack::Util.build_query
|
46
|
+
def to_query(params)
|
47
|
+
params.map { |k, v|
|
48
|
+
if v.class == Array
|
49
|
+
to_query(v.map { |x| [k, x] })
|
50
|
+
else
|
51
|
+
v.nil? ? escape(k) : "#{CGI.escape(k.to_s)}=#{CGI.escape(v.to_s)}"
|
52
|
+
end
|
53
|
+
}.join('&')
|
54
|
+
end
|
55
|
+
|
56
|
+
def to_uri(path, options)
|
57
|
+
uri = URI.parse(path)
|
58
|
+
|
59
|
+
if options && options != {}
|
60
|
+
uri.query = to_query(options)
|
61
|
+
end
|
62
|
+
uri.to_s
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'hashie'
|
2
|
+
require 'multi_json'
|
3
|
+
|
4
|
+
module EasyshipRatesRubyApi
|
5
|
+
# The generalized pseudo-object that is returned for all query
|
6
|
+
# requests.
|
7
|
+
class Mash < ::Hashie::Mash
|
8
|
+
# Convert a json string to a Mash
|
9
|
+
#
|
10
|
+
# @param [String] json_string
|
11
|
+
# @return [Easyship::Rates::Ruby::Mash]
|
12
|
+
def self.from_json(json_string)
|
13
|
+
result_hash = ::MultiJson.decode(json_string)
|
14
|
+
new(result_hash)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'oauth2'
|
2
|
+
|
3
|
+
module EasyshipRatesRubyApi
|
4
|
+
class << self
|
5
|
+
attr_accessor :uid, :secret, :sandbox
|
6
|
+
|
7
|
+
# config/initializers/easyship_rate_ruby_api.rb (for instance)
|
8
|
+
#
|
9
|
+
# ```ruby
|
10
|
+
# EasyshipRatesRubyApi.configure do |config|
|
11
|
+
# config.uid = 'uid'
|
12
|
+
# config.secret = 'secret'
|
13
|
+
# config.sandbox = true
|
14
|
+
# end
|
15
|
+
# ```
|
16
|
+
# elsewhere
|
17
|
+
#
|
18
|
+
# ```ruby
|
19
|
+
# client = EasyshipRatesRubyApi::Client.new
|
20
|
+
# ```
|
21
|
+
def configure
|
22
|
+
self.sandbox = false
|
23
|
+
yield self
|
24
|
+
true
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
autoload :Api, 'easyship/rates/ruby/api/api'
|
29
|
+
autoload :Client, 'easyship/rates/ruby/api/client'
|
30
|
+
autoload :Errors, 'easyship/rates/ruby/api/errors'
|
31
|
+
autoload :Helpers, 'easyship/rates/ruby/api/helpers'
|
32
|
+
autoload :Mash, 'easyship/rates/ruby/api/mash'
|
33
|
+
autoload :Version, 'easyship/rates/ruby/api/version'
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,160 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: easyship-rates-ruby-api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- aloha
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-07-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: oauth2
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.2'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.2'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: hashie
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '3.4'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '3.4'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: multi_json
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.11'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.11'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.12'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.12'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '10.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '10.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: minitest
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '5.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '5.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: pry
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.10'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.10'
|
111
|
+
description: Ruby API for Rate Calculator
|
112
|
+
email:
|
113
|
+
- y.alohac@gmail.com
|
114
|
+
executables: []
|
115
|
+
extensions: []
|
116
|
+
extra_rdoc_files: []
|
117
|
+
files:
|
118
|
+
- ".gitignore"
|
119
|
+
- ".travis.yml"
|
120
|
+
- Gemfile
|
121
|
+
- README.md
|
122
|
+
- Rakefile
|
123
|
+
- bin/console
|
124
|
+
- bin/setup
|
125
|
+
- easyship-rates-ruby-api.gemspec
|
126
|
+
- lib/easyship/rates/ruby/api/api.rb
|
127
|
+
- lib/easyship/rates/ruby/api/api/query_helpers.rb
|
128
|
+
- lib/easyship/rates/ruby/api/api/rates.rb
|
129
|
+
- lib/easyship/rates/ruby/api/client.rb
|
130
|
+
- lib/easyship/rates/ruby/api/errors.rb
|
131
|
+
- lib/easyship/rates/ruby/api/helpers.rb
|
132
|
+
- lib/easyship/rates/ruby/api/helpers/authorization.rb
|
133
|
+
- lib/easyship/rates/ruby/api/helpers/request.rb
|
134
|
+
- lib/easyship/rates/ruby/api/mash.rb
|
135
|
+
- lib/easyship/rates/ruby/api/version.rb
|
136
|
+
- lib/easyship_rates_ruby_api.rb
|
137
|
+
homepage: https://github.com/easyship/easyship-rates-ruby-api
|
138
|
+
licenses: []
|
139
|
+
metadata: {}
|
140
|
+
post_install_message:
|
141
|
+
rdoc_options: []
|
142
|
+
require_paths:
|
143
|
+
- lib
|
144
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - ">="
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
150
|
+
requirements:
|
151
|
+
- - ">="
|
152
|
+
- !ruby/object:Gem::Version
|
153
|
+
version: '0'
|
154
|
+
requirements: []
|
155
|
+
rubyforge_project:
|
156
|
+
rubygems_version: 2.4.8
|
157
|
+
signing_key:
|
158
|
+
specification_version: 4
|
159
|
+
summary: Ruby API for Rate Calculator
|
160
|
+
test_files: []
|