postmen 0.1.0 → 1.0.0.pre.alpha.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.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -1
  3. data/lib/postmen/collection_proxy.rb +22 -0
  4. data/lib/postmen/connection.rb +44 -0
  5. data/lib/postmen/label.rb +15 -0
  6. data/lib/postmen/label_collection.rb +19 -0
  7. data/lib/postmen/manifest.rb +38 -0
  8. data/lib/postmen/manifest_collection.rb +39 -0
  9. data/lib/postmen/parcel.rb +12 -0
  10. data/lib/postmen/query/create_label_query.rb +6 -1
  11. data/lib/postmen/query/create_manifest_query.rb +23 -0
  12. data/lib/postmen/query/create_rate_query.rb +27 -0
  13. data/lib/postmen/query/create_shipper_account_query.rb +22 -0
  14. data/lib/postmen/query/label_query.rb +7 -1
  15. data/lib/postmen/query/manifest_query.rb +50 -0
  16. data/lib/postmen/query/rate_query.rb +41 -0
  17. data/lib/postmen/query/shipper_account_query.rb +29 -0
  18. data/lib/postmen/query/shipper_account_update_credentials_query.rb +20 -0
  19. data/lib/postmen/query/shipper_account_update_query.rb +30 -0
  20. data/lib/postmen/rate.rb +35 -0
  21. data/lib/postmen/rate_collection.rb +39 -0
  22. data/lib/postmen/rate_object.rb +19 -0
  23. data/lib/postmen/response.rb +20 -0
  24. data/lib/postmen/shipment.rb +18 -0
  25. data/lib/postmen/shipper_account.rb +68 -0
  26. data/lib/postmen/shipper_account_collection.rb +39 -0
  27. data/lib/postmen/types/address.rb +31 -0
  28. data/lib/postmen/types/aes.rb +11 -0
  29. data/lib/postmen/types/billing.rb +9 -0
  30. data/lib/postmen/types/brief_shipper_account.rb +12 -0
  31. data/lib/postmen/types/customs.rb +16 -0
  32. data/lib/postmen/types/customs_billing.rb +13 -0
  33. data/lib/postmen/types/detailed_charges.rb +10 -0
  34. data/lib/postmen/types/dimension.rb +12 -0
  35. data/lib/postmen/types/invoice.rb +9 -0
  36. data/lib/postmen/types/item.rb +24 -0
  37. data/lib/postmen/types/money.rb +10 -0
  38. data/lib/postmen/types/no_eei.rb +11 -0
  39. data/lib/postmen/types/passport.rb +21 -0
  40. data/lib/postmen/types/payment_method.rb +13 -0
  41. data/lib/postmen/types/reference.rb +9 -0
  42. data/lib/postmen/types/uuid.rb +10 -0
  43. data/lib/postmen/types/weight.rb +10 -0
  44. data/lib/postmen/types.rb +113 -8
  45. data/lib/postmen/version.rb +2 -1
  46. data/lib/postmen.rb +36 -1
  47. metadata +71 -9
@@ -0,0 +1,39 @@
1
+ class Postmen
2
+ # This class wraps the array of Rate models
3
+ class RateCollection
4
+ include CollectionProxy
5
+
6
+ model Rate
7
+ key :rates
8
+
9
+ # Fetch all rates.
10
+ #
11
+ # @param options [Hash] Options for the query.
12
+ # @see https://docs.postmen.com/api.html#rates-list-all-rates API documentation
13
+ # @example
14
+ # .all # Returns all rates, default query.
15
+ # .all(status: :failed) # Returns only failed rates
16
+ def self.all(options = {})
17
+ new(Connection.new.get('/rates', RateQuery.new(options).to_query).parsed_response)
18
+ end
19
+
20
+ # Fetch single rate
21
+ #
22
+ # @param id [UUID] Rate UUID
23
+ # @see https://docs.postmen.com/api.html#rates-calculate-rates API documentation
24
+ # @return [Rate]
25
+ # @raise ResourceNotFound if Rate with given id was not found
26
+ def self.find(id)
27
+ get(Connection.new.get("/rates/#{id}").parsed_response)
28
+ end
29
+
30
+ # Creates a Rate
31
+ #
32
+ # @param params [Hash] Rate params
33
+ # @see https://docs.postmen.com/api.html#labels-create-a-label API documentation
34
+ # @return [Rate]
35
+ def self.create(params)
36
+ Rate.new(Connection.new.post('/rates', CreateRateQuery.new(params).to_query).parsed_response[:data])
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,19 @@
1
+ class Postmen
2
+ # Rate record object
3
+ #
4
+ # @see https://docs.postmen.com/api.html#rates API documentation
5
+ class RateObject < Dry::Struct
6
+ attribute :shipper_account, Types::BriefShipperAccount
7
+ attribute :service_type, Types::String
8
+ attribute :service_name, Types::String
9
+ attribute :charge_weight, Types::Weight
10
+ attribute :total_charge, Types::Money
11
+ attribute :pickup_deadline, Types::String
12
+ attribute :booking_cut_off, Types::Date
13
+ attribute :delivery_date, Types::String
14
+ attribute :transit_time, Types::String
15
+ attribute :detailed_charges, Types::Array.member(Types::DetailedCharges)
16
+ attribute :info_message, Types::String
17
+ attribute :error_message, Types::String
18
+ end
19
+ end
@@ -1,44 +1,64 @@
1
1
  class Postmen
2
+ # This class parses the HTTP response and checks if it was successfull.
2
3
  class Response < SimpleDelegator
4
+ # Parses response.
5
+ # Ensures that rate limit was not exceeded,
6
+ # and checks if resource was found
3
7
  def parse_response!
4
8
  ensure_rate_limit!
5
9
  ensure_resource_found!
6
10
  end
7
11
 
12
+ # Holds the meta data
13
+ # @see https://docs.postmen.com/#meta API Documentation
14
+ # @return [Hash]
8
15
  def meta
9
16
  @meta ||= parsed_response[:meta]
10
17
  end
11
18
 
19
+ # Parses the json response
20
+ # @return [Hash]
12
21
  def parsed_response
13
22
  @parsed_response ||= JSON.parse(body, symbolize_names: true)
14
23
  end
15
24
 
25
+ # Checks if rate limit was exceeded
16
26
  def rate_limit_exceeded?
17
27
  code == 429
18
28
  end
19
29
 
30
+ # Returns number of remaining API calls
20
31
  def remaining_api_calls
21
32
  Integer(headers['X-RateLimit-Remaining'])
22
33
  end
23
34
 
35
+ # Returns current API rate limit
24
36
  def api_rate_limit
25
37
  Integer(headers['X-RateLimit-Limit'])
26
38
  end
27
39
 
40
+ # Returns Unix timestamp when rate limit will be reset.
41
+ # @return [Integer] timestamp
28
42
  def api_rate_limit_reset
29
43
  Integer(headers['X-RateLimit-Reset'])
30
44
  end
31
45
 
46
+ # Return time when rate limit will be reset.
47
+ # @return [Time]
32
48
  def api_rate_limit_reset_at
33
49
  Time.at(api_rate_limit_reset)
34
50
  end
35
51
 
36
52
  private
37
53
 
54
+ # Guard method, checking if rate limit was not exceeded
55
+ # @api private
38
56
  def ensure_rate_limit!
39
57
  raise RateLimitExceeded, self if rate_limit_exceeded?
40
58
  end
41
59
 
60
+ # Guard method, checking if resource was found.
61
+ # @api private
42
62
  def ensure_resource_found!
43
63
  raise ResourceNotFound, self if meta[:code] == 4153
44
64
  end
@@ -0,0 +1,18 @@
1
+ class Postmen
2
+ # Shipment object
3
+ #
4
+ # @see https://docs.postmen.com/api.html#shipment API documentation
5
+ class Shipment < Dry::Struct
6
+ constructor_type :strict_with_defaults
7
+
8
+ attribute :ship_from, Types::Address
9
+ attribute :ship_to, Types::Address
10
+ attribute :parcels, Types::Array.member(Parcel)
11
+
12
+ # Converts object to hash
13
+ # @return [Hash]
14
+ def to_hash
15
+ super.reject { |_k, v| v.nil? }
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,68 @@
1
+ class Postmen
2
+ # Shipper account object
3
+ # (brief information for rate and manifest responses)
4
+ # @see https://docs.postmen.com/api.html#shipper-account-information API Documentation
5
+ class ShipperAccount < Dry::Struct
6
+ attribute :id, Types::UUID
7
+ attribute :address, Types::Address
8
+ attribute :slug, Types::String
9
+ attribute :description, Types::String
10
+ attribute :type, Types::ShipperAccountTypes
11
+ attribute :timezone, Types::Timezone
12
+ attribute :created_at, Types::DateTime
13
+ attribute :updated_at, Types::DateTime
14
+
15
+ # Returns all ShipperAccounts
16
+ #
17
+ # @see ShipperAccountCollection#all
18
+ # @return [ShipperAccountCollection] Collection of ShipperAccounts
19
+ def self.all(options = {})
20
+ ShipperAccountCollection.all(options)
21
+ end
22
+
23
+ # Fetches single ShipperAccount
24
+ #
25
+ # @see ShipperAccountCollection#find
26
+ # @return [ShipperAccount]
27
+ def self.find(id)
28
+ ShipperAccountCollection.find(id)
29
+ end
30
+
31
+ # Creates an instance of ShipperAccount
32
+ #
33
+ # @see ShipperAccountCollection#create
34
+ # @return [ShipperAccount]
35
+ def self.create(params)
36
+ ShipperAccountCollection.create(params)
37
+ end
38
+
39
+ # Deletes given ShipperAccount
40
+ #
41
+ # @see https://docs.postmen.com/api.html#shipper-accounts-delete-a-shipper-account API Documentation
42
+ def destroy
43
+ Connection.new.delete("/shipper-accounts/#{@id}")
44
+ end
45
+
46
+ # Update a ShipperAccount credentials
47
+ #
48
+ # @see https://docs.postmen.com/api.html#shipper-accounts-update-a-shipper-account-credentials
49
+ # @return [ShipperAccount] Updated ShipperAccount resource
50
+ def update_credentials(params = {})
51
+ Connection.new.put(
52
+ "/shipper-accounts/#{@id}/credentials",
53
+ ShipperAccountUpdateCredentialsQuery.new(params).to_hash
54
+ )
55
+ end
56
+
57
+ # Update a shipper account information
58
+ #
59
+ # @see https://docs.postmen.com/api.html#shipper-accounts-update-a-shipper-account-information API Documentation
60
+ # @example
61
+ # .update(description: "Your new description")
62
+ # .update(address: {})
63
+ # @return [ShipperAccount] Updated ShipperAccount resource
64
+ def update(params = {})
65
+ Connection.new.put("/shipper-accounts/#{@id}/info", ShipperAccountUpdateQuery.new(params.merge(subject: self)).to_query)
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,39 @@
1
+ class Postmen
2
+ # This class wraps the array of ShipperAccount models
3
+ class ShipperAccountCollection
4
+ include CollectionProxy
5
+
6
+ model ShipperAccount
7
+ key :shipper_accounts
8
+
9
+ # Fetch all shipper accounts.
10
+ #
11
+ # @param options [Hash] Options for the query.
12
+ # @see https://docs.postmen.com/api.html#shipper-accounts-list-all-shipper-accounts API documentation
13
+ # @example
14
+ # .all # Returns all shipper accounts, default query.
15
+ # .all(slug: :aramex) # Returns only Shipper accounts from Aramex
16
+ def self.all(options = {})
17
+ new(Connection.new.get('/shipper-accounts', ShipperAccountQuery.new(options).to_query).parsed_response)
18
+ end
19
+
20
+ # Fetch single ShipperAccount
21
+ #
22
+ # @param id [UUID] ShipperAccount UUID
23
+ # @see https://docs.postmen.com/api.html#shipper-accounts-retrieve-a-shipper-account API documentation
24
+ # @return [ShipperAccount]
25
+ # @raise ResourceNotFound if ShipperAccount with given id was not found
26
+ def self.find(id)
27
+ get(Connection.new.get("/shipper-accounts/#{id}").parsed_response)
28
+ end
29
+
30
+ # Creates a ShipperAccount
31
+ #
32
+ # @param params [Hash] ShipperAccount params
33
+ # @see https://docs.postmen.com/api.html#shipper-accounts-create-a-shipper-account API documentation
34
+ # @return [ShipperAccount]
35
+ def self.create(params)
36
+ ShipperAccount.new(Connection.new.post('/shipper-accounts', CreateShipperAccountQuery.new(params).to_query).parsed_response[:data])
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,31 @@
1
+ class Postmen
2
+ module Types
3
+ # Address object
4
+ #
5
+ # @see https://docs.postmen.com/api.html#address API Documentation
6
+ class Address < Dry::Struct
7
+ constructor_type :strict_with_defaults
8
+
9
+ attribute :country, Types::Country
10
+ attribute :contact_name, Types::String.optional.default(nil)
11
+ attribute :phone, Types::String.optional.default(nil)
12
+ attribute :fax, Types::String.optional.default(nil)
13
+ attribute :email, Types::String.optional.default(nil)
14
+ attribute :company_name, Types::String.optional.default(nil)
15
+ attribute :street1, Types::String.optional.default(nil)
16
+ attribute :street2, Types::String.optional.default(nil)
17
+ attribute :street3, Types::String.optional.default(nil)
18
+ attribute :city, Types::String.optional.default(nil)
19
+ attribute :state, Types::String.optional.default(nil)
20
+ attribute :postal_code, Types::String.optional.default(nil)
21
+ attribute :type, Types::AddressType.optional.default(nil)
22
+ attribute :tax_id, Types::String.optional.default(nil)
23
+
24
+ # Converts object to hash
25
+ # @return [Hash]
26
+ def to_hash
27
+ super.reject { |_k, v| v.nil? }
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,11 @@
1
+ class Postmen
2
+ module Types
3
+ # EEI type - AES - used in Customs object
4
+ # @see Customs
5
+ # @see https://docs.postmen.com/api.html#aes API Documentation
6
+ class AES < Dry::Struct
7
+ attribute :type, Types::String
8
+ attribute :itn_number, Types::String
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,9 @@
1
+ class Postmen
2
+ module Types
3
+ # Billing object
4
+ #
5
+ # @see https://docs.postmen.com/api.html#billing API Documentation
6
+ class Billing < Dry::Struct
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,12 @@
1
+ class Postmen
2
+ module Types
3
+ # Shipper account object
4
+ # (brief information for rate and manifest responses)
5
+ # @see https://docs.postmen.com/api.html#shipper-account-information API Documentation
6
+ class BriefShipperAccount < Dry::Struct
7
+ attribute :id, Types::UUID
8
+ attribute :slug, Types::String
9
+ attribute :description, Types::String
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,16 @@
1
+ class Postmen
2
+ module Types
3
+ # Customs object
4
+ # @see https://docs.postmen.com/api.html#customs API Documentation
5
+ class Customs < Dry::Struct
6
+ constructor_type :schema
7
+
8
+ attribute :purpose, Types::CustomsPurpose
9
+ attribute :terms_of_trade, Types::TermsOfTrade
10
+ attribute :eei, Types::AES | Types::NoEEI
11
+ attribute :billing, Types::CustomsBilling
12
+ attribute :importer_address, Address
13
+ attribute :passport, Passport
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ class Postmen
2
+ module Types
3
+ # Customs billing
4
+ #
5
+ # @see https://docs.postmen.com/api.html#customs-billing API Documentation
6
+ class CustomsBilling < Dry::Struct
7
+ constructor_type :schema
8
+
9
+ attribute :paid_by, Types::PaidBy
10
+ attribute :method, Types::PaymentMethod
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ class Postmen
2
+ module Types
3
+ # Detailed Charges object
4
+ # @see https://docs.postmen.com/api.html#detailed-charges API Documentation
5
+ class DetailedCharges < Dry::Struct
6
+ attribute :type, Types::String
7
+ attribute :charge, Types::Money
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,12 @@
1
+ class Postmen
2
+ module Types
3
+ # Dimension
4
+ # @see https://docs.postmen.com/api.html#dimension API Documentation
5
+ class Dimension < Dry::Struct
6
+ attribute :width, Types::Float
7
+ attribute :height, Types::Float
8
+ attribute :depth, Types::Float
9
+ attribute :unit, Types::DimensionUnit
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,9 @@
1
+ class Postmen
2
+ module Types
3
+ # Invoice object
4
+ #
5
+ # @see https://docs.postmen.com/api.html#a-invoice-file-object
6
+ class Invoice < Dry::Struct
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,24 @@
1
+ class Postmen
2
+ module Types
3
+ # Item - element of shippment
4
+ # @see https://docs.postmen.com/api.html#item API Documentation
5
+ class Item < Dry::Struct
6
+ constructor_type :schema
7
+
8
+ attribute :description, Types::String
9
+ attribute :quantity, Types::Int
10
+ attribute :price, Types::Money
11
+ attribute :weight, Types::Weight
12
+ attribute :item_id, Types::String
13
+ attribute :origin_country, Types::Country
14
+ attribute :sku, Types::String
15
+ attribute :hs_code, Types::String
16
+
17
+ # Converts object to hash
18
+ # @return [Hash]
19
+ def to_hash
20
+ super.reject { |_k, v| v.nil? }
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,10 @@
1
+ class Postmen
2
+ module Types
3
+ # Money object
4
+ # @see https://docs.postmen.com/api.html#money API Documentation
5
+ class Money < Dry::Struct
6
+ attribute :amount, Types::Float
7
+ attribute :currency, Types::String
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,11 @@
1
+ class Postmen
2
+ module Types
3
+ # EEI type - no_eei - used in Customs object
4
+ # @see Customs
5
+ # @see https://docs.postmen.com/api.html#no_eei API Documentation
6
+ class NoEEI < Dry::Struct
7
+ attribute :type, Types::String
8
+ attribute :ftr_exemption, Types::FtrExemption
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,21 @@
1
+ class Postmen
2
+ module Types
3
+ # Passport object
4
+ #
5
+ # @see https://docs.postmen.com/api.html#passport API Documentation
6
+ class Passport < Dry::Struct
7
+ # Expected format for dates
8
+ # example value: 2017-01-19
9
+ DATE_FORMAT = '%F'.freeze
10
+
11
+ attribute :number, Types::String
12
+ attribute :issue_date, Types::Date
13
+
14
+ # Formats issue date to expected format
15
+ # @return [String]
16
+ def issue_date
17
+ super.strftime(DATE_FORMAT)
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ class Postmen
2
+ module Types
3
+ # Payment method.
4
+ #
5
+ # @see https://docs.postmen.com/api.html#payment-method---account API Documentation
6
+ class PaymentMethod < Dry::Struct
7
+ attribute :type, Types::String
8
+ attribute :account_number, Types::String
9
+ attribute :postal_code, Types::String
10
+ attribute :country, Country
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,9 @@
1
+ class Postmen
2
+ module Types
3
+ # Object reference
4
+ # @see https://docs.postmen.com/api.html#reference API Documentation
5
+ class Reference < Dry::Struct
6
+ attribute :id, Types::UUID
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,10 @@
1
+ class Postmen
2
+ module Types
3
+ # UUID Type
4
+ #
5
+ # @see https://en.wikipedia.org/wiki/Universally_unique_identifier Definition
6
+ UUID = Types::Strict::String.constrained(
7
+ format: /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i
8
+ )
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ class Postmen
2
+ module Types
3
+ # Weight
4
+ # @see https://docs.postmen.com/api.html#weight API Documentation
5
+ class Weight < Dry::Struct
6
+ attribute :unit, Types::WeightUnit
7
+ attribute :value, Types::Float
8
+ end
9
+ end
10
+ end
data/lib/postmen/types.rb CHANGED
@@ -1,14 +1,20 @@
1
+ # Load '.maybe' extension for DRY::Types
1
2
  Dry::Types.load_extensions(:maybe)
2
3
 
3
4
  class Postmen
5
+ # This module holds all definitions of simple types used in the API
4
6
  module Types
5
7
  include Dry::Types.module
6
8
 
7
- UUID = Types::Strict::String.constrained(
8
- format: /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i
9
+ # Possible statuses for Rates.
10
+ RateStatuses = Types::String.enum(
11
+ 'calculating',
12
+ 'calculated',
13
+ 'failed'
9
14
  )
10
15
 
11
- Statuses = Types::String.enum(
16
+ # Possible statuses for Labels.
17
+ LabelStatuses = Types::String.enum(
12
18
  'creating',
13
19
  'created',
14
20
  'cancelling',
@@ -18,8 +24,33 @@ class Postmen
18
24
  'failed'
19
25
  )
20
26
 
21
- Reference = Types::Hash.schema(id: Types::UUID)
22
- Shipment = Types::Hash
27
+ # Possible statuses for Manifest
28
+ ManifestStatuses = Types::String.enum(
29
+ 'manifesting',
30
+ 'manifested',
31
+ 'failed'
32
+ )
33
+
34
+ # Type of the address
35
+ # @see Address
36
+ AddressType = Types::String.enum(
37
+ 'business',
38
+ 'residential'
39
+ )
40
+
41
+ # List of possible Shipper Account Types
42
+ ShipperAccountTypes = Types::String.enum(
43
+ 'user',
44
+ 'user_prepaid'
45
+ )
46
+
47
+ # Timezone (use IANA name)
48
+ Timezone = Types::String
49
+
50
+ # Name of the country
51
+ Country = Types::String
52
+
53
+ # Paper size
23
54
  PaperSize = Types::String.enum(
24
55
  '4x4',
25
56
  '4x6',
@@ -30,8 +61,82 @@ class Postmen
30
61
  'default'
31
62
  )
32
63
 
33
- Invoice = Types::Hash
34
- Billing = Types::Hash
35
- Customs = Types::Hash
64
+ # Purpose used in customs object
65
+ #
66
+ # @see https://docs.postmen.com/api.html#customs API Documentation
67
+ CustomsPurpose = Types::String.enum(
68
+ 'gift',
69
+ 'merchandise',
70
+ 'sample',
71
+ 'return',
72
+ 'repair'
73
+ )
74
+
75
+ # Paid by, used in customs billing.
76
+ #
77
+ # @see CustomsBilling
78
+ # @see https://docs.postmen.com/api.html#customs-billing API Documentation
79
+ PaidBy = Types::String.enum(
80
+ 'shipper',
81
+ 'recipient',
82
+ 'third_party'
83
+ )
84
+
85
+ # Terms of trade - used in customs object
86
+ #
87
+ # @see Customs
88
+ # @see https://docs.postmen.com/api.html#customs API Documentation
89
+ TermsOfTrade = Types::String.enum(
90
+ 'dat',
91
+ 'ddu',
92
+ 'ddp',
93
+ 'dap'
94
+ )
95
+
96
+ # FTR Exemption - used in NoEEI object
97
+ # @see NoEEI
98
+ # @see https://docs.postmen.com/api.html#no_eei API Documentation
99
+ FtrExemption = Types::String.enum(
100
+ 'noeei_30_37_a',
101
+ 'noeei_30_37_h',
102
+ 'noeei_30_36'
103
+ )
104
+
105
+ # Unit of weight - used in Weight object
106
+ # @see Weight
107
+ WeightUnit = Types::String.enum(
108
+ 'lb',
109
+ 'kg',
110
+ 'oz',
111
+ 'g'
112
+ )
113
+
114
+ # Unit for dimension - used in Dimension object
115
+ # @see Dimension
116
+ DimensionUnit = Types::String.enum(
117
+ 'cm',
118
+ 'in',
119
+ 'mm',
120
+ 'm',
121
+ 'ft',
122
+ 'yd'
123
+ )
36
124
  end
37
125
  end
126
+ require_relative 'types/address'
127
+ require_relative 'types/invoice'
128
+ require_relative 'types/weight'
129
+ require_relative 'types/passport'
130
+ require_relative 'types/uuid'
131
+ require_relative 'types/reference'
132
+ require_relative 'types/payment_method'
133
+ require_relative 'types/brief_shipper_account'
134
+ require_relative 'types/dimension'
135
+ require_relative 'types/billing'
136
+ require_relative 'types/money'
137
+ require_relative 'types/item'
138
+ require_relative 'types/customs_billing'
139
+ require_relative 'types/aes'
140
+ require_relative 'types/no_eei'
141
+ require_relative 'types/customs'
142
+ require_relative 'types/detailed_charges'
@@ -1,3 +1,4 @@
1
1
  class Postmen
2
- VERSION = '0.1.0'.freeze
2
+ # SDK Version
3
+ VERSION = '1.0.0-alpha.1'.freeze
3
4
  end