easypost 1.0.0 → 1.0.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.
data/lib/easypost.rb CHANGED
@@ -1,5 +1,58 @@
1
- class EasyPost
2
- def self.hi
3
- puts "Hello, World!"
1
+ require 'typhoeus'
2
+ require 'base64'
3
+ require 'json'
4
+
5
+ module EasyPost
6
+ @@api_key = "cueqNZUb3ldeWTNX7MU3Mel8UXtaAMUi"
7
+ @@api_base = 'https://www.easypost.co/api/'
8
+
9
+ def self.api_url(args={})
10
+ raise ArgumentError unless args.keys.eql?([:type, :action])
11
+ return "#{@@api_base}#{args[:type]}/#{args[:action]}"
4
12
  end
13
+
14
+ def self.api_key=(api_key)
15
+ @@api_key = api_key
16
+ end
17
+
18
+ def self.api_key
19
+ @@api_key
20
+ end
21
+
22
+ def self.symbolize_keys(hash={})
23
+ hash.keys.each do |key|
24
+ hash[(key.to_sym rescue key) || key] = hash.delete(key)
25
+ end
26
+ return hash
27
+ end
28
+
29
+ def self.symbolize_keys_recursive(hash={})
30
+ hash.keys.each do |key|
31
+ keysym = (key.to_sym rescue key) || key
32
+ hash[keysym] = hash.delete(key)
33
+ if hash[keysym].is_a?(Hash)
34
+ hash[keysym] = symbolize_keys_recursive(hash[keysym])
35
+ end
36
+ end
37
+ return hash
38
+ end
39
+
40
+ def self.get(url, params={})
41
+ params = {:userpwd => @@api_key, :params => params}
42
+ @response = Typhoeus::Request.get(url, params)
43
+ return EasyPost.symbolize_keys_recursive(JSON.parse(@response.body))
44
+ end
45
+
46
+ def self.post(url, params={})
47
+ params = {:userpwd => @@api_key, :params => params}
48
+ @response = Typhoeus::Request.post(url, params)
49
+ return EasyPost.symbolize_keys_recursive(JSON.parse(@response.body))
50
+ end
51
+
5
52
  end
53
+
54
+ require 'easypost/address'
55
+ require 'easypost/postage'
56
+ require 'easypost/errors/easypost_error'
57
+ require 'easypost/errors/authentication_error'
58
+
@@ -0,0 +1,14 @@
1
+ module EasyPost
2
+ class Address
3
+ @@type = "address"
4
+
5
+ def self.test
6
+ puts EasyPost.api_url("verify")
7
+ end
8
+
9
+ def self.verify(address={})
10
+ @verified_address = EasyPost.get(EasyPost.api_url(:type => @@type, :action => "verify"), :address => address)
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,4 @@
1
+ module EasyPost
2
+ class AuthenticationError < EasyPostError
3
+ end
4
+ end
@@ -0,0 +1,20 @@
1
+ module EasyPost
2
+ class EasyPostError < StandardError
3
+ attr_reader :message
4
+ attr_reader :http_status
5
+ attr_reader :http_body
6
+ attr_reader :json_body
7
+
8
+ def initialize(message=nil, http_status=nil, http_body=nil, json_body=nil)
9
+ @message = message
10
+ @http_status = http_status
11
+ @http_body = http_body
12
+ @json_body = json_body
13
+ end
14
+
15
+ def to_s
16
+ status_string = @http_status.nil? ? "" : "(Status #{@http_status}) "
17
+ "#{status_string}#{@message}"
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,52 @@
1
+ module EasyPost
2
+ class Postage
3
+ @@type = "postage"
4
+ @@usps_package_types = %w(
5
+ Card
6
+ Letter
7
+ Flat
8
+ Parcel
9
+ LargeParcel
10
+ IrregularParcel
11
+ FlatRateEnvelope
12
+ FlatRateLegalEnvelope
13
+ FlatRatePaddedEnvelope
14
+ FlatRateGiftCardEnvelope
15
+ FlatRateWindowEnvelope
16
+ FlatRateCardboardEnvelope
17
+ SmallFlatRateEnvelope
18
+ SmallFlatRateBox
19
+ MediumFlatRateBox
20
+ LargeFlatRateBox
21
+ RegionalRateBoxA
22
+ RegionalRateBoxB
23
+ RegionalRateBoxC
24
+ LargeFlatRateBoardGameBox
25
+ )
26
+
27
+ def self.usps_package_types
28
+ return @@usps_package_types
29
+ end
30
+
31
+ def self.rates(data={})
32
+ @rates = EasyPost.get(EasyPost.api_url(:type => @@type, :action => "rates"), data)
33
+ end
34
+
35
+ def self.compare(data={})
36
+ return rates(data)
37
+ end
38
+
39
+ def self.buy(data={})
40
+ @rates = EasyPost.post(EasyPost.api_url(:type => @@type, :action => "buy"), data)
41
+ end
42
+
43
+ def self.get(filename)
44
+ @rates = EasyPost.get(EasyPost.api_url(:type => @@type, :action => "get"), :label_file_name => filename)
45
+ end
46
+
47
+ def self.list()
48
+ @rates = EasyPost.get(EasyPost.api_url(:type => @@type, :action => "list"))
49
+ end
50
+
51
+ end
52
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: easypost
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,39 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
  date: 2012-10-30 00:00:00.000000000 Z
13
- dependencies: []
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: typhoeus
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: json
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
14
46
  description: Client library for accessing the EasyPost Shipping API via Ruby
15
47
  email: contact@easypost.co
16
48
  executables: []
@@ -18,6 +50,10 @@ extensions: []
18
50
  extra_rdoc_files: []
19
51
  files:
20
52
  - lib/easypost.rb
53
+ - lib/easypost/address.rb
54
+ - lib/easypost/postage.rb
55
+ - lib/easypost/errors/easypost_error.rb
56
+ - lib/easypost/errors/authentication_error.rb
21
57
  homepage: https://www.easypost.co/docs
22
58
  licenses: []
23
59
  post_install_message: