solidus_easypost 1.0.3 → 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. checksums.yaml +5 -5
  2. data/.circleci/config.yml +41 -0
  3. data/.gem_release.yml +5 -0
  4. data/.github/stale.yml +17 -0
  5. data/.github_changelog_generator +2 -0
  6. data/.gitignore +21 -0
  7. data/.rspec +2 -0
  8. data/.rubocop.yml +7 -0
  9. data/.rubocop_todo.yml +36 -0
  10. data/CHANGELOG.md +113 -0
  11. data/Gemfile +33 -0
  12. data/LICENSE +26 -0
  13. data/README.md +194 -0
  14. data/Rakefile +6 -0
  15. data/app/controllers/spree/admin/postage_labels_controller.rb +20 -0
  16. data/app/decorators/models/solidus_easypost/spree/carton_decorator.rb +38 -0
  17. data/app/decorators/models/solidus_easypost/spree/shipment_decorator.rb +47 -0
  18. data/app/decorators/models/solidus_easypost/spree/shipping_rate_decorator.rb +13 -0
  19. data/app/models/solidus_easypost/parcel_dimension.rb +34 -0
  20. data/app/models/solidus_easypost/return_authorization.rb +27 -0
  21. data/app/overrides/spree/admin/orders/_shipment/add_postage_label.html.erb.deface +10 -0
  22. data/bin/console +17 -0
  23. data/bin/rails +7 -0
  24. data/bin/rails-engine +13 -0
  25. data/bin/rails-sandbox +16 -0
  26. data/bin/rake +7 -0
  27. data/bin/sandbox +86 -0
  28. data/bin/setup +8 -0
  29. data/config/initializers/webhooks.rb +7 -0
  30. data/config/locales/en.yml +8 -0
  31. data/config/routes.rb +9 -0
  32. data/db/migrate/20140515024440_add_easy_post_fields_to_shipping_rate.rb +9 -0
  33. data/db/migrate/20201025110912_add_tracker_id_to_cartons.rb +6 -0
  34. data/lib/generators/solidus_easypost/install/install_generator.rb +28 -0
  35. data/lib/generators/solidus_easypost/install/templates/initializer.rb +26 -0
  36. data/lib/solidus_easypost/address_builder.rb +45 -0
  37. data/lib/solidus_easypost/calculator/base_dimension_calculator.rb +28 -0
  38. data/lib/solidus_easypost/calculator/weight_dimension_calculator.rb +22 -0
  39. data/lib/solidus_easypost/configuration.rb +34 -0
  40. data/lib/solidus_easypost/engine.rb +19 -0
  41. data/lib/solidus_easypost/errors/unknown_partial_resource_error.rb +11 -0
  42. data/lib/solidus_easypost/estimator.rb +37 -0
  43. data/lib/solidus_easypost/parcel_builder.rb +27 -0
  44. data/lib/solidus_easypost/shipment_builder.rb +32 -0
  45. data/lib/solidus_easypost/shipping_method_selector.rb +17 -0
  46. data/lib/solidus_easypost/shipping_rate_calculator.rb +9 -0
  47. data/lib/solidus_easypost/testing_support/factories/address_factory.rb +10 -0
  48. data/lib/solidus_easypost/testing_support/factories/product_factory.rb +7 -0
  49. data/lib/solidus_easypost/testing_support/factories/shipment_factory.rb +30 -0
  50. data/lib/solidus_easypost/testing_support/factories/shipping_method_factory.rb +8 -0
  51. data/lib/solidus_easypost/testing_support/factories/stock_location_factory.rb +10 -0
  52. data/lib/solidus_easypost/testing_support/factories/variant_factory.rb +7 -0
  53. data/lib/solidus_easypost/testing_support/factories.rb +3 -0
  54. data/lib/solidus_easypost/tracker_webhook_handler.rb +14 -0
  55. data/lib/solidus_easypost/version.rb +5 -0
  56. data/lib/solidus_easypost.rb +32 -0
  57. data/solidus_easypost.gemspec +41 -0
  58. data/spec/cassettes/address_builder/from_address.yml +65 -0
  59. data/spec/cassettes/address_builder/from_stock_location.yml +65 -0
  60. data/spec/cassettes/estimator.yml +269 -0
  61. data/spec/cassettes/integration/checkout.yml +377 -0
  62. data/spec/cassettes/integration/order_shipping/with_purchase_labels.yml +373 -0
  63. data/spec/cassettes/integration/order_shipping/without_purchase_labels.yml +251 -0
  64. data/spec/cassettes/parcel_builder/from_package.yml +63 -0
  65. data/spec/cassettes/parcel_builder/from_return_authorization.yml +63 -0
  66. data/spec/cassettes/postage_labels/show.yml +72 -0
  67. data/spec/cassettes/return_authorization.yml +310 -0
  68. data/spec/cassettes/shipment_builder/from_package.yml +251 -0
  69. data/spec/cassettes/shipment_builder/from_return_authorization.yml +251 -0
  70. data/spec/cassettes/shipment_builder/from_shipment.yml +250 -0
  71. data/spec/controllers/spree/admin/postage_labels_controller_spec.rb +18 -0
  72. data/spec/features/admin/postage_labels_spec.rb +18 -0
  73. data/spec/integration/checkout_spec.rb +45 -0
  74. data/spec/integration/order_shipping_spec.rb +33 -0
  75. data/spec/models/solidus_easypost/parcel_dimension_spec.rb +80 -0
  76. data/spec/models/solidus_easypost/return_authorization_spec.rb +17 -0
  77. data/spec/models/spree/carton_spec.rb +57 -0
  78. data/spec/models/spree/shipment_spec.rb +69 -0
  79. data/spec/models/spree/shipping_rate_spec.rb +23 -0
  80. data/spec/solidus_easypost/address_builder_spec.rb +17 -0
  81. data/spec/solidus_easypost/calculator/weight_dimension_calculator_spec.rb +39 -0
  82. data/spec/solidus_easypost/estimator_spec.rb +52 -0
  83. data/spec/solidus_easypost/parcel_builder_spec.rb +113 -0
  84. data/spec/solidus_easypost/shipment_builder_spec.rb +28 -0
  85. data/spec/solidus_easypost/shipping_method_selector_spec.rb +33 -0
  86. data/spec/solidus_easypost/shipping_rate_calculator_spec.rb +12 -0
  87. data/spec/solidus_easypost/tracker_webhook_handler_spec.rb +58 -0
  88. data/spec/solidus_easypost_spec.rb +19 -0
  89. data/spec/spec_helper.rb +31 -0
  90. data/spec/support/easypost.rb +5 -0
  91. data/spec/support/factory_bot.rb +3 -0
  92. data/spec/support/helpers/api_stubs.rb +40 -0
  93. data/spec/support/helpers/configuration.rb +28 -0
  94. data/spec/support/helpers/shipping_methods.rb +26 -0
  95. data/spec/support/solidus.rb +1 -0
  96. data/spec/support/vcr.rb +12 -0
  97. metadata +170 -142
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.modify do
4
+ factory :shipment do
5
+ transient do
6
+ inventory_units { 1 }
7
+ end
8
+
9
+ after(:create) do |shipment, e|
10
+ create_list(:inventory_unit, e.inventory_units, shipment: shipment)
11
+ end
12
+
13
+ trait :with_easypost do
14
+ transient do
15
+ easypost_shipment_id { 'sh_test' }
16
+ easypost_rate_id { 'rt_test' }
17
+ end
18
+
19
+ after(:create) do |shipment, evaluator|
20
+ create(
21
+ :shipping_rate,
22
+ shipment: shipment,
23
+ selected: true,
24
+ easy_post_shipment_id: evaluator.easypost_shipment_id,
25
+ easy_post_rate_id: evaluator.easypost_rate_id,
26
+ )
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.modify do
4
+ factory :shipping_method do
5
+ admin_name { 'Stuff' }
6
+ available_to_users { true }
7
+ end
8
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.modify do
4
+ factory :stock_location do
5
+ address1 { '131 S 8th Ave' }
6
+ city { 'Manville' }
7
+ association(:state, name: 'New Jersey', abbr: 'NJ')
8
+ zipcode { '08835' }
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.modify do
4
+ factory :variant do
5
+ weight { 10.0 }
6
+ end
7
+ end
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ Dir["#{__dir__}/factories/**/*.rb"].sort.each { |f| require f }
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusEasypost
4
+ class TrackerWebhookHandler
5
+ def self.call(payload)
6
+ return unless payload['description'] == 'tracker.updated'
7
+
8
+ carton = ::Spree::Carton.find_by(easy_post_tracker_id: payload['result']['id'])
9
+ return unless carton
10
+
11
+ ::Spree::Event.fire 'solidus_easypost.tracker.updated', carton: carton, payload: payload
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SolidusEasypost
4
+ VERSION = '3.0.0'
5
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'solidus_core'
4
+ require 'solidus_support'
5
+ require 'deface'
6
+ require 'easypost'
7
+
8
+ require 'solidus_easypost/version'
9
+ require 'solidus_easypost/engine'
10
+ require 'solidus_easypost/configuration'
11
+ require 'solidus_easypost/address_builder'
12
+ require 'solidus_easypost/parcel_builder'
13
+ require 'solidus_easypost/shipment_builder'
14
+ require 'solidus_easypost/estimator'
15
+ require 'solidus_easypost/shipping_rate_calculator'
16
+ require 'solidus_easypost/shipping_method_selector'
17
+ require 'solidus_easypost/calculator/base_dimension_calculator'
18
+ require 'solidus_easypost/calculator/weight_dimension_calculator'
19
+ require 'solidus_easypost/tracker_webhook_handler'
20
+ require 'solidus_easypost/errors/unknown_partial_resource_error'
21
+
22
+ module SolidusEasypost
23
+ class << self
24
+ def configuration
25
+ @configuration ||= Configuration.new
26
+ end
27
+
28
+ def configure
29
+ yield configuration
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'lib/solidus_easypost/version'
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = 'solidus_easypost'
7
+ spec.version = SolidusEasypost::VERSION
8
+ spec.authors = ['Brendan Deere']
9
+ spec.email = 'brendan@stembolt.com'
10
+
11
+ spec.summary = 'EasyPost integration for Solidus stores.'
12
+ spec.homepage = 'https://github.com/solidusio-contrib/solidus_easypost'
13
+ spec.license = 'BSD-3-Clause'
14
+
15
+ spec.metadata['homepage_uri'] = spec.homepage
16
+ spec.metadata['source_code_uri'] = 'https://github.com/solidusio-contrib/solidus_easypost'
17
+
18
+ spec.required_ruby_version = Gem::Requirement.new('>= 2.5')
19
+
20
+ # Specify which files should be added to the gem when it is released.
21
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
+ files = Dir.chdir(__dir__) { `git ls-files -z`.split("\x0") }
23
+
24
+ spec.files = files.grep_v(%r{^(test|spec|features)/})
25
+ spec.test_files = files.grep(%r{^(test|spec|features)/})
26
+ spec.bindir = "exe"
27
+ spec.executables = files.grep(%r{^exe/}) { |f| File.basename(f) }
28
+ spec.require_paths = ["lib"]
29
+
30
+ spec.add_dependency 'deface'
31
+ spec.add_dependency 'easypost'
32
+ spec.add_dependency 'solidus_core', ['>= 2.0.0', '< 4']
33
+ spec.add_dependency 'solidus_support', '~> 0.5'
34
+
35
+ spec.add_development_dependency 'solidus_dev_support', '~> 2.1'
36
+ spec.add_development_dependency 'vcr'
37
+ spec.add_development_dependency 'webmock'
38
+ spec.metadata = {
39
+ 'rubygems_mfa_required' => 'true'
40
+ }
41
+ end
@@ -0,0 +1,65 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.easypost.com/v2/addresses
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"address":{"street1":"215 N 7th Ave","street2":"Northwest","city":"Manville","zip":"08835","phone":"555-555-0199","company":"Company","name":"John
9
+ Doe","state":"NJ","country":"US"}}'
10
+ headers:
11
+ Accept-Encoding:
12
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
13
+ Accept:
14
+ - "*/*"
15
+ User-Agent:
16
+ - EasyPost/v2 RubyClient/3.1.3 Ruby/2.7.1-p83
17
+ Content-Type:
18
+ - application/json
19
+ Authorization:
20
+ - Basic Q3Z6WXR1ZGE2S1JJOUpqRzdTQUhiQTo=
21
+ response:
22
+ status:
23
+ code: 201
24
+ message: Created
25
+ headers:
26
+ X-Frame-Options:
27
+ - SAMEORIGIN
28
+ X-Xss-Protection:
29
+ - 1; mode=block
30
+ X-Content-Type-Options:
31
+ - nosniff
32
+ X-Ep-Request-Uuid:
33
+ - f168e8e35f6b556bee80bccb0003c274
34
+ Cache-Control:
35
+ - no-cache, no-store, must-revalidate, private
36
+ Pragma:
37
+ - no-cache
38
+ Expires:
39
+ - '0'
40
+ Location:
41
+ - "/api/v2/addresses/adr_67e48f267fee48c3b2175281b3e741ee"
42
+ Content-Type:
43
+ - application/json; charset=utf-8
44
+ X-Runtime:
45
+ - '0.046944'
46
+ Transfer-Encoding:
47
+ - chunked
48
+ X-Node:
49
+ - bigweb12sj
50
+ X-Version-Label:
51
+ - easypost-202009222104-7ce76ac125-master
52
+ X-Backend:
53
+ - easypost
54
+ X-Proxied:
55
+ - extlb2nuq a561deb64e
56
+ - intlb1nuq 8df81f0396
57
+ - intlb2sj 8df81f0396
58
+ Strict-Transport-Security:
59
+ - max-age=15768000; includeSubDomains; preload
60
+ body:
61
+ encoding: ASCII-8BIT
62
+ string: '{"id":"adr_67e48f267fee48c3b2175281b3e741ee","object":"Address","created_at":"2020-09-23T14:02:19Z","updated_at":"2020-09-23T14:02:19Z","name":"John
63
+ Doe","company":"Company","street1":"215 N 7th Ave","street2":"Northwest","city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"5555550199","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}}'
64
+ recorded_at: Wed, 23 Sep 2020 14:02:19 GMT
65
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,65 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.easypost.com/v2/addresses
6
+ body:
7
+ encoding: UTF-8
8
+ string: '{"address":{"street1":"131 S 8th Ave","city":"Manville","zip":"08835","phone":"(202)
9
+ 456-1111","name":"NY Warehouse","company":"NY Warehouse","state":"NJ","country":"US"}}'
10
+ headers:
11
+ Accept-Encoding:
12
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
13
+ Accept:
14
+ - "*/*"
15
+ User-Agent:
16
+ - EasyPost/v2 RubyClient/3.1.3 Ruby/2.7.1-p83
17
+ Content-Type:
18
+ - application/json
19
+ Authorization:
20
+ - Basic Q3Z6WXR1ZGE2S1JJOUpqRzdTQUhiQTo=
21
+ response:
22
+ status:
23
+ code: 201
24
+ message: Created
25
+ headers:
26
+ X-Frame-Options:
27
+ - SAMEORIGIN
28
+ X-Xss-Protection:
29
+ - 1; mode=block
30
+ X-Content-Type-Options:
31
+ - nosniff
32
+ X-Ep-Request-Uuid:
33
+ - 19e6c2535f6b556cee70c46e0003dc7e
34
+ Cache-Control:
35
+ - no-cache, no-store, must-revalidate, private
36
+ Pragma:
37
+ - no-cache
38
+ Expires:
39
+ - '0'
40
+ Location:
41
+ - "/api/v2/addresses/adr_7a8f051d63d3460089c55178ca01d207"
42
+ Content-Type:
43
+ - application/json; charset=utf-8
44
+ X-Runtime:
45
+ - '0.053314'
46
+ Transfer-Encoding:
47
+ - chunked
48
+ X-Node:
49
+ - bigweb6sj
50
+ X-Version-Label:
51
+ - easypost-202009222104-7ce76ac125-master
52
+ X-Backend:
53
+ - easypost
54
+ X-Proxied:
55
+ - extlb1nuq a561deb64e
56
+ - intlb1nuq 8df81f0396
57
+ - intlb2sj 8df81f0396
58
+ Strict-Transport-Security:
59
+ - max-age=15768000; includeSubDomains; preload
60
+ body:
61
+ encoding: ASCII-8BIT
62
+ string: '{"id":"adr_7a8f051d63d3460089c55178ca01d207","object":"Address","created_at":"2020-09-23T14:02:20Z","updated_at":"2020-09-23T14:02:20Z","name":"NY
63
+ Warehouse","company":"NY Warehouse","street1":"131 S 8th Ave","street2":null,"city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"2024561111","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}}'
64
+ recorded_at: Wed, 23 Sep 2020 14:02:20 GMT
65
+ recorded_with: VCR 6.0.0
@@ -0,0 +1,269 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: post
5
+ uri: https://api.easypost.com/v2/addresses
6
+ body:
7
+ encoding: UTF-8
8
+ string: address[street1]=A%20Different%20Road&address[street2]=Northwest&address[city]=Manville&address[zip]=08835&address[phone]=555-555-0199&address[company]=Company&address[name]=John%20Doe&address[state]=NJ&address[country]=US
9
+ headers:
10
+ Accept:
11
+ - "*/*"
12
+ User-Agent:
13
+ - EasyPost/v2 RubyClient/3.0.1
14
+ Authorization:
15
+ - Bearer CvzYtuda6KRI9JjG7SAHbA
16
+ Content-Type:
17
+ - application/x-www-form-urlencoded
18
+ Content-Length:
19
+ - '222'
20
+ Accept-Encoding:
21
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
22
+ Host:
23
+ - api.easypost.com
24
+ response:
25
+ status:
26
+ code: 201
27
+ message: Created
28
+ headers:
29
+ X-Frame-Options:
30
+ - SAMEORIGIN
31
+ X-Xss-Protection:
32
+ - 1; mode=block
33
+ X-Content-Type-Options:
34
+ - nosniff
35
+ X-Ep-Request-Uuid:
36
+ - 43c6543d5dca6f3cee61766d000110ba
37
+ Cache-Control:
38
+ - no-cache, no-store, must-revalidate, private
39
+ Pragma:
40
+ - no-cache
41
+ Expires:
42
+ - '0'
43
+ Location:
44
+ - "/api/v2/addresses/adr_5118f161c52c49cdb5667f4b4f5d18c8"
45
+ Content-Type:
46
+ - application/json; charset=utf-8
47
+ X-Runtime:
48
+ - '0.029223'
49
+ Transfer-Encoding:
50
+ - chunked
51
+ X-Node:
52
+ - bigweb9sj
53
+ X-Version-Label:
54
+ - easypost-201911120131-f5c72b1880-master
55
+ X-Backend:
56
+ - easypost
57
+ X-Proxied:
58
+ - extlb2wdc 2744487620
59
+ - intlb2sj ff5a2958df
60
+ - intlb2wdc ff5a2958df
61
+ Strict-Transport-Security:
62
+ - max-age=15768000; includeSubDomains; preload
63
+ body:
64
+ encoding: ASCII-8BIT
65
+ string: '{"id":"adr_5118f161c52c49cdb5667f4b4f5d18c8","object":"Address","created_at":"2019-11-12T08:37:16Z","updated_at":"2019-11-12T08:37:16Z","name":"John
66
+ Doe","company":"Company","street1":"A Different Road","street2":"Northwest","city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"5555550199","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}}'
67
+ http_version:
68
+ recorded_at: Tue, 12 Nov 2019 08:37:16 GMT
69
+ - request:
70
+ method: post
71
+ uri: https://api.easypost.com/v2/addresses
72
+ body:
73
+ encoding: UTF-8
74
+ string: address[street1]=131%20S%208th%20Ave&address[city]=Manville&address[zip]=08835&address[phone]=(202)%20456-1111&address[name]=NY%20Warehouse&address[company]=NY%20Warehouse&address[state]=NJ&address[country]=US
75
+ headers:
76
+ Accept:
77
+ - "*/*"
78
+ User-Agent:
79
+ - EasyPost/v2 RubyClient/3.0.1
80
+ Authorization:
81
+ - Bearer CvzYtuda6KRI9JjG7SAHbA
82
+ Content-Type:
83
+ - application/x-www-form-urlencoded
84
+ Content-Length:
85
+ - '209'
86
+ Accept-Encoding:
87
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
88
+ Host:
89
+ - api.easypost.com
90
+ response:
91
+ status:
92
+ code: 201
93
+ message: Created
94
+ headers:
95
+ X-Frame-Options:
96
+ - SAMEORIGIN
97
+ X-Xss-Protection:
98
+ - 1; mode=block
99
+ X-Content-Type-Options:
100
+ - nosniff
101
+ X-Ep-Request-Uuid:
102
+ - 43c6543d5dca6f3dee73798a000110c3
103
+ Cache-Control:
104
+ - no-cache, no-store, must-revalidate, private
105
+ Pragma:
106
+ - no-cache
107
+ Expires:
108
+ - '0'
109
+ Location:
110
+ - "/api/v2/addresses/adr_99f3a71054054336861fc0f6112aa514"
111
+ Content-Type:
112
+ - application/json; charset=utf-8
113
+ X-Runtime:
114
+ - '0.028232'
115
+ Transfer-Encoding:
116
+ - chunked
117
+ X-Node:
118
+ - bigweb8sj
119
+ X-Version-Label:
120
+ - easypost-201911120131-f5c72b1880-master
121
+ X-Backend:
122
+ - easypost
123
+ X-Proxied:
124
+ - extlb2wdc 2744487620
125
+ - intlb1wdc ff5a2958df
126
+ - intlb2sj ff5a2958df
127
+ Strict-Transport-Security:
128
+ - max-age=15768000; includeSubDomains; preload
129
+ body:
130
+ encoding: ASCII-8BIT
131
+ string: '{"id":"adr_99f3a71054054336861fc0f6112aa514","object":"Address","created_at":"2019-11-12T08:37:17Z","updated_at":"2019-11-12T08:37:17Z","name":"NY
132
+ Warehouse","company":"NY Warehouse","street1":"131 S 8th Ave","street2":null,"city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"2024561111","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}}'
133
+ http_version:
134
+ recorded_at: Tue, 12 Nov 2019 08:37:17 GMT
135
+ - request:
136
+ method: post
137
+ uri: https://api.easypost.com/v2/parcels
138
+ body:
139
+ encoding: UTF-8
140
+ string: parcel[weight]=10.0
141
+ headers:
142
+ Accept:
143
+ - "*/*"
144
+ User-Agent:
145
+ - EasyPost/v2 RubyClient/3.0.1
146
+ Authorization:
147
+ - Bearer CvzYtuda6KRI9JjG7SAHbA
148
+ Content-Type:
149
+ - application/x-www-form-urlencoded
150
+ Content-Length:
151
+ - '19'
152
+ Accept-Encoding:
153
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
154
+ Host:
155
+ - api.easypost.com
156
+ response:
157
+ status:
158
+ code: 201
159
+ message: Created
160
+ headers:
161
+ X-Frame-Options:
162
+ - SAMEORIGIN
163
+ X-Xss-Protection:
164
+ - 1; mode=block
165
+ X-Content-Type-Options:
166
+ - nosniff
167
+ X-Ep-Request-Uuid:
168
+ - 43c6543d5dca6f3dee824cd0000110d1
169
+ Cache-Control:
170
+ - no-cache, no-store, must-revalidate, private
171
+ Pragma:
172
+ - no-cache
173
+ Expires:
174
+ - '0'
175
+ Location:
176
+ - "/api/v2/parcels/prcl_d63162bf410e497cbe4a449cef86454d"
177
+ Content-Type:
178
+ - application/json; charset=utf-8
179
+ X-Runtime:
180
+ - '0.031562'
181
+ Transfer-Encoding:
182
+ - chunked
183
+ X-Node:
184
+ - bigweb2sj
185
+ X-Version-Label:
186
+ - easypost-201911120131-f5c72b1880-master
187
+ X-Backend:
188
+ - easypost
189
+ X-Proxied:
190
+ - extlb2wdc 2744487620
191
+ - intlb1sj ff5a2958df
192
+ - intlb1wdc ff5a2958df
193
+ Strict-Transport-Security:
194
+ - max-age=15768000; includeSubDomains; preload
195
+ body:
196
+ encoding: ASCII-8BIT
197
+ string: '{"id":"prcl_d63162bf410e497cbe4a449cef86454d","object":"Parcel","created_at":"2019-11-12T08:37:17Z","updated_at":"2019-11-12T08:37:17Z","length":null,"width":null,"height":null,"predefined_package":null,"weight":10.0,"mode":"test"}'
198
+ http_version:
199
+ recorded_at: Tue, 12 Nov 2019 08:37:18 GMT
200
+ - request:
201
+ method: post
202
+ uri: https://api.easypost.com/v2/shipments
203
+ body:
204
+ encoding: UTF-8
205
+ string: shipment[to_address][id]=adr_5118f161c52c49cdb5667f4b4f5d18c8&shipment[from_address][id]=adr_99f3a71054054336861fc0f6112aa514&shipment[parcel][id]=prcl_d63162bf410e497cbe4a449cef86454d
206
+ headers:
207
+ Accept:
208
+ - "*/*"
209
+ User-Agent:
210
+ - EasyPost/v2 RubyClient/3.0.1
211
+ Authorization:
212
+ - Bearer CvzYtuda6KRI9JjG7SAHbA
213
+ Content-Type:
214
+ - application/x-www-form-urlencoded
215
+ Content-Length:
216
+ - '184'
217
+ Accept-Encoding:
218
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
219
+ Host:
220
+ - api.easypost.com
221
+ response:
222
+ status:
223
+ code: 201
224
+ message: Created
225
+ headers:
226
+ X-Frame-Options:
227
+ - SAMEORIGIN
228
+ X-Xss-Protection:
229
+ - 1; mode=block
230
+ X-Content-Type-Options:
231
+ - nosniff
232
+ X-Ep-Request-Uuid:
233
+ - 43c6543d5dca6f3eee82dd74000110db
234
+ Cache-Control:
235
+ - no-cache, no-store, must-revalidate, private
236
+ Pragma:
237
+ - no-cache
238
+ Expires:
239
+ - '0'
240
+ Location:
241
+ - "/api/v2/shipments/shp_67ceeb526d544a5b9472dc54b1682366"
242
+ Content-Type:
243
+ - application/json; charset=utf-8
244
+ X-Runtime:
245
+ - '0.274373'
246
+ Transfer-Encoding:
247
+ - chunked
248
+ X-Node:
249
+ - bigweb3sj
250
+ X-Version-Label:
251
+ - easypost-201911120131-f5c72b1880-master
252
+ X-Backend:
253
+ - easypost
254
+ X-Proxied:
255
+ - extlb2wdc 2744487620
256
+ - intlb1wdc ff5a2958df
257
+ - intlb2sj ff5a2958df
258
+ Strict-Transport-Security:
259
+ - max-age=15768000; includeSubDomains; preload
260
+ body:
261
+ encoding: ASCII-8BIT
262
+ string: '{"created_at":"2019-11-12T08:37:18Z","is_return":false,"messages":[],"mode":"test","options":{"currency":"USD","payment":{"type":"SENDER"},"label_date":null,"date_advance":0},"reference":null,"status":"unknown","tracking_code":null,"updated_at":"2019-11-12T08:37:18Z","batch_id":null,"batch_status":null,"batch_message":null,"customs_info":null,"from_address":{"id":"adr_99f3a71054054336861fc0f6112aa514","object":"Address","created_at":"2019-11-12T08:37:17Z","updated_at":"2019-11-12T08:37:17Z","name":"NY
263
+ Warehouse","company":"NY Warehouse","street1":"131 S 8th Ave","street2":null,"city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"2024561111","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}},"insurance":null,"order_id":null,"parcel":{"id":"prcl_d63162bf410e497cbe4a449cef86454d","object":"Parcel","created_at":"2019-11-12T08:37:17Z","updated_at":"2019-11-12T08:37:17Z","length":null,"width":null,"height":null,"predefined_package":null,"weight":10.0,"mode":"test"},"postage_label":null,"rates":[{"id":"rate_1e5cb67fa6c44e949c8e44aa48649985","object":"Rate","created_at":"2019-11-12T08:37:18Z","updated_at":"2019-11-12T08:37:18Z","mode":"test","service":"First","carrier":"USPS","rate":"3.82","currency":"USD","retail_rate":"5.19","retail_currency":"USD","list_rate":"3.82","list_currency":"USD","delivery_days":2,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":2,"shipment_id":"shp_67ceeb526d544a5b9472dc54b1682366","carrier_account_id":"ca_mtb51Ve0"},{"id":"rate_1ecc048967d74f8a97475df4815ac91a","object":"Rate","created_at":"2019-11-12T08:37:18Z","updated_at":"2019-11-12T08:37:18Z","mode":"test","service":"ParcelSelect","carrier":"USPS","rate":"6.85","currency":"USD","retail_rate":"6.85","retail_currency":"USD","list_rate":"6.85","list_currency":"USD","delivery_days":2,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":2,"shipment_id":"shp_67ceeb526d544a5b9472dc54b1682366","carrier_account_id":"ca_mtb51Ve0"},{"id":"rate_102663caa0724d2fa02c5ac7cf679a6e","object":"Rate","created_at":"2019-11-12T08:37:18Z","updated_at":"2019-11-12T08:37:18Z","mode":"test","service":"Priority","carrier":"USPS","rate":"6.95","currency":"USD","retail_rate":"7.35","retail_currency":"USD","list_rate":"6.95","list_currency":"USD","delivery_days":1,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":1,"shipment_id":"shp_67ceeb526d544a5b9472dc54b1682366","carrier_account_id":"ca_mtb51Ve0"},{"id":"rate_da7a099f5e254e709dc5ceb86ba824a9","object":"Rate","created_at":"2019-11-12T08:37:18Z","updated_at":"2019-11-12T08:37:18Z","mode":"test","service":"Express","carrier":"USPS","rate":"22.74","currency":"USD","retail_rate":"25.60","retail_currency":"USD","list_rate":"22.74","list_currency":"USD","delivery_days":null,"delivery_date":null,"delivery_date_guaranteed":false,"est_delivery_days":null,"shipment_id":"shp_67ceeb526d544a5b9472dc54b1682366","carrier_account_id":"ca_mtb51Ve0"}],"refund_status":null,"scan_form":null,"selected_rate":null,"tracker":null,"to_address":{"id":"adr_5118f161c52c49cdb5667f4b4f5d18c8","object":"Address","created_at":"2019-11-12T08:37:16Z","updated_at":"2019-11-12T08:37:16Z","name":"John
264
+ Doe","company":"Company","street1":"A Different Road","street2":"Northwest","city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"5555550199","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}},"usps_zone":1,"return_address":{"id":"adr_99f3a71054054336861fc0f6112aa514","object":"Address","created_at":"2019-11-12T08:37:17Z","updated_at":"2019-11-12T08:37:17Z","name":"NY
265
+ Warehouse","company":"NY Warehouse","street1":"131 S 8th Ave","street2":null,"city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"2024561111","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}},"buyer_address":{"id":"adr_5118f161c52c49cdb5667f4b4f5d18c8","object":"Address","created_at":"2019-11-12T08:37:16Z","updated_at":"2019-11-12T08:37:16Z","name":"John
266
+ Doe","company":"Company","street1":"A Different Road","street2":"Northwest","city":"Manville","state":"NJ","zip":"08835","country":"US","phone":"5555550199","email":null,"mode":"test","carrier_facility":null,"residential":null,"federal_tax_id":null,"state_tax_id":null,"verifications":{}},"forms":[],"fees":[],"id":"shp_67ceeb526d544a5b9472dc54b1682366","object":"Shipment"}'
267
+ http_version:
268
+ recorded_at: Tue, 12 Nov 2019 08:37:19 GMT
269
+ recorded_with: VCR 5.0.0