freight_kit 0.1.19 → 0.1.21

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 (439) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -2
  3. data/Gemfile.lock +51 -52
  4. data/README.md +37 -2
  5. data/Rakefile +6 -0
  6. data/VERSION +1 -1
  7. data/configuration/locations/amazon_warehouses.yml +3330 -0
  8. data/freight_kit.gemspec +21 -18
  9. data/lib/freight_kit/address_normalizer.rb +26 -0
  10. data/lib/freight_kit/amazon_warehouse.rb +33 -0
  11. data/lib/freight_kit/api_clients/soap_client.rb +7 -9
  12. data/lib/freight_kit/carrier.rb +250 -303
  13. data/lib/freight_kit/carriers/a1_express.rb +25 -0
  14. data/lib/freight_kit/carriers/a_duie_pyle.rb +30 -0
  15. data/lib/freight_kit/carriers/aaa_cooper.rb +11 -0
  16. data/lib/freight_kit/carriers/aaa_expedited_services.rb +10 -0
  17. data/lib/freight_kit/carriers/ab_brothers_usa_inc.rb +12 -0
  18. data/lib/freight_kit/carriers/aberdeen_express_inc.rb +28 -0
  19. data/lib/freight_kit/carriers/abf_freight_system.rb +492 -0
  20. data/lib/freight_kit/carriers/access_transport.rb +10 -0
  21. data/lib/freight_kit/carriers/action_express.rb +10 -0
  22. data/lib/freight_kit/carriers/adams_and_companies.rb +10 -0
  23. data/lib/freight_kit/carriers/advance_distribution.rb +28 -0
  24. data/lib/freight_kit/carriers/alcon_transport.rb +10 -0
  25. data/lib/freight_kit/carriers/all_freight.rb +10 -0
  26. data/lib/freight_kit/carriers/alliance_transportation_group.rb +10 -0
  27. data/lib/freight_kit/carriers/allstate_transport.rb +10 -0
  28. data/lib/freight_kit/carriers/aloha_freight_forwarders.rb +35 -0
  29. data/lib/freight_kit/carriers/amado_trucking.rb +35 -0
  30. data/lib/freight_kit/carriers/american_fast_freight.rb +28 -0
  31. data/lib/freight_kit/carriers/amigos_service_transportation.rb +10 -0
  32. data/lib/freight_kit/carriers/anderson_towing_and_transport.rb +10 -0
  33. data/lib/freight_kit/carriers/apex_transporting.rb +10 -0
  34. data/lib/freight_kit/carriers/archer_cargo.rb +35 -0
  35. data/lib/freight_kit/carriers/armstrong_transport_group.rb +10 -0
  36. data/lib/freight_kit/carriers/autobahn_logistics.rb +10 -0
  37. data/lib/freight_kit/carriers/averitt_express.rb +30 -0
  38. data/lib/freight_kit/carriers/ba_transportation.rb +10 -0
  39. data/lib/freight_kit/carriers/balkin_express.rb +10 -0
  40. data/lib/freight_kit/carriers/bay_area_express.rb +10 -0
  41. data/lib/freight_kit/carriers/bc_freightways.rb +11 -0
  42. data/lib/freight_kit/carriers/benjamin_best_freight_inc.rb +37 -0
  43. data/lib/freight_kit/carriers/bennett_trucking.rb +10 -0
  44. data/lib/freight_kit/carriers/best_overnite_express.rb +78 -0
  45. data/lib/freight_kit/carriers/best_trucking.rb +10 -0
  46. data/lib/freight_kit/carriers/bestway_transport.rb +10 -0
  47. data/lib/freight_kit/carriers/bryan_systems.rb +10 -0
  48. data/lib/freight_kit/carriers/c_and_w_express.rb +10 -0
  49. data/lib/freight_kit/carriers/campbell_trucking.rb +10 -0
  50. data/lib/freight_kit/carriers/carde_transportation.rb +10 -0
  51. data/lib/freight_kit/carriers/cardinal_logistics.rb +28 -0
  52. data/lib/freight_kit/carriers/cdc_transport.rb +10 -0
  53. data/lib/freight_kit/carriers/cdo_express_diversified.rb +10 -0
  54. data/lib/freight_kit/carriers/cedar_supply_trucking.rb +10 -0
  55. data/lib/freight_kit/carriers/central_freight_lines.rb +12 -0
  56. data/lib/freight_kit/carriers/central_transport.rb +12 -0
  57. data/lib/freight_kit/carriers/chicago_suburban_express.rb +28 -0
  58. data/lib/freight_kit/carriers/city_logistics.rb +11 -0
  59. data/lib/freight_kit/carriers/clear_lane_freight_systems.rb +483 -0
  60. data/lib/freight_kit/carriers/cleopatra_trucking.rb +10 -0
  61. data/lib/freight_kit/carriers/clifford_transportation.rb +10 -0
  62. data/lib/freight_kit/carriers/cms_domestic.rb +25 -0
  63. data/lib/freight_kit/carriers/cnd_logistics.rb +10 -0
  64. data/lib/freight_kit/carriers/coast_to_coast_transport.rb +27 -0
  65. data/lib/freight_kit/carriers/countrywide_carriers.rb +10 -0
  66. data/lib/freight_kit/carriers/cpl_express.rb +35 -0
  67. data/lib/freight_kit/carriers/crosby_trucking_service.rb +29 -0
  68. data/lib/freight_kit/carriers/cross_country_freight_solutions.rb +419 -0
  69. data/lib/freight_kit/carriers/crowley.rb +10 -0
  70. data/lib/freight_kit/carriers/csa_transportation.rb +40 -0
  71. data/lib/freight_kit/carriers/csx_transportation.rb +40 -0
  72. data/lib/freight_kit/carriers/custom_global_logistics.rb +14 -0
  73. data/lib/freight_kit/carriers/d_and_a_transport.rb +10 -0
  74. data/lib/freight_kit/carriers/dak_transport.rb +10 -0
  75. data/lib/freight_kit/carriers/dash_courier_and_logistics_north_carolina.rb +10 -0
  76. data/lib/freight_kit/carriers/daylight_transport.rb +29 -0
  77. data/lib/freight_kit/carriers/dayton_freight_lines.rb +30 -0
  78. data/lib/freight_kit/carriers/dbr_logistics.rb +10 -0
  79. data/lib/freight_kit/carriers/deep_south_freight.rb +27 -0
  80. data/lib/freight_kit/carriers/delta_express.rb +10 -0
  81. data/lib/freight_kit/carriers/delta_transport.rb +10 -0
  82. data/lib/freight_kit/carriers/delta_trucking_logistics.rb +10 -0
  83. data/lib/freight_kit/carriers/demco_express.rb +10 -0
  84. data/lib/freight_kit/carriers/dependable_global_express.rb +10 -0
  85. data/lib/freight_kit/carriers/dependable_hawaiian_express.rb +24 -0
  86. data/lib/freight_kit/carriers/dependable_highway_express.rb +585 -0
  87. data/lib/freight_kit/carriers/desert_coastal_transport.rb +10 -0
  88. data/lib/freight_kit/carriers/dhl.rb +11 -0
  89. data/lib/freight_kit/carriers/diamond_line_delivery.rb +174 -0
  90. data/lib/freight_kit/carriers/ding_tai_trucking.rb +10 -0
  91. data/lib/freight_kit/carriers/diversified_transfer_and_storage.rb +29 -0
  92. data/lib/freight_kit/carriers/dohrn_transfer_company.rb +30 -0
  93. data/lib/freight_kit/carriers/dot_line_transportation.rb +29 -0
  94. data/lib/freight_kit/carriers/drt_transportation.rb +13 -0
  95. data/lib/freight_kit/carriers/dugan_truck_line.rb +29 -0
  96. data/lib/freight_kit/carriers/dupont.rb +10 -0
  97. data/lib/freight_kit/carriers/e_transport_carriers.rb +29 -0
  98. data/lib/freight_kit/carriers/echo_global_logistics.rb +13 -0
  99. data/lib/freight_kit/carriers/ecklund_logistics.rb +10 -0
  100. data/lib/freight_kit/carriers/el_emplumado_transport.rb +10 -0
  101. data/lib/freight_kit/carriers/elite_carriers.rb +28 -0
  102. data/lib/freight_kit/carriers/emerald_express.rb +10 -0
  103. data/lib/freight_kit/carriers/era_transport.rb +10 -0
  104. data/lib/freight_kit/carriers/estes_express_lines.rb +25 -0
  105. data/lib/freight_kit/carriers/euro_kam.rb +28 -0
  106. data/lib/freight_kit/carriers/ew_riverside_trucking.rb +10 -0
  107. data/lib/freight_kit/carriers/express_2000_inc.rb +12 -0
  108. data/lib/freight_kit/carriers/express_services_international.rb +10 -0
  109. data/lib/freight_kit/carriers/f_and_a_express.rb +27 -0
  110. data/lib/freight_kit/carriers/fairmont_logistics.rb +13 -0
  111. data/lib/freight_kit/carriers/fargo_cargo.rb +10 -0
  112. data/lib/freight_kit/carriers/fast_freight_transportation.rb +10 -0
  113. data/lib/freight_kit/carriers/fast_load_transport.rb +10 -0
  114. data/lib/freight_kit/carriers/fed_ex_express.rb +30 -0
  115. data/lib/freight_kit/carriers/fed_ex_ground.rb +24 -0
  116. data/lib/freight_kit/carriers/fed_ex_ltl_economy.rb +11 -0
  117. data/lib/freight_kit/carriers/fed_ex_ltl_priority.rb +11 -0
  118. data/lib/freight_kit/carriers/first_trucking_express.rb +10 -0
  119. data/lib/freight_kit/carriers/flash_trucking.rb +10 -0
  120. data/lib/freight_kit/carriers/fort_transportation_and_service_company_inc.rb +37 -0
  121. data/lib/freight_kit/carriers/forward_air.rb +789 -0
  122. data/lib/freight_kit/carriers/frahtex.rb +10 -0
  123. data/lib/freight_kit/carriers/frozen_food_express.rb +10 -0
  124. data/lib/freight_kit/carriers/gholia_bros_trucking.rb +36 -0
  125. data/lib/freight_kit/carriers/global_cargo.rb +10 -0
  126. data/lib/freight_kit/carriers/global_logistics_and_transportation.rb +10 -0
  127. data/lib/freight_kit/carriers/gls_freight.rb +32 -0
  128. data/lib/freight_kit/carriers/go_trucking_services.rb +10 -0
  129. data/lib/freight_kit/carriers/gold_eagle_transportation.rb +11 -0
  130. data/lib/freight_kit/carriers/golden_drop_trucking.rb +10 -0
  131. data/lib/freight_kit/carriers/gonzalez_transportation.rb +10 -0
  132. data/lib/freight_kit/carriers/gps_transport.rb +10 -0
  133. data/lib/freight_kit/carriers/greene_enterprise.rb +10 -0
  134. data/lib/freight_kit/carriers/gsa_international.rb +10 -0
  135. data/lib/freight_kit/carriers/gsp_express.rb +24 -0
  136. data/lib/freight_kit/carriers/gsv_transportation.rb +10 -0
  137. data/lib/freight_kit/carriers/gta_transportation.rb +10 -0
  138. data/lib/freight_kit/carriers/guam_freight_services.rb +10 -0
  139. data/lib/freight_kit/carriers/harrah_transportation.rb +23 -0
  140. data/lib/freight_kit/carriers/her_trucking.rb +10 -0
  141. data/lib/freight_kit/carriers/hercules_freight.rb +20 -0
  142. data/lib/freight_kit/carriers/highlander_xpress.rb +36 -0
  143. data/lib/freight_kit/carriers/hn_transport.rb +10 -0
  144. data/lib/freight_kit/carriers/honolulu_freight_service.rb +10 -0
  145. data/lib/freight_kit/carriers/hot_line_freight_system_inc.rb +12 -0
  146. data/lib/freight_kit/carriers/hotshot_freight_of_texas.rb +13 -0
  147. data/lib/freight_kit/carriers/houser_transport.rb +27 -0
  148. data/lib/freight_kit/carriers/infiniti_freight_logistics.rb +28 -0
  149. data/lib/freight_kit/carriers/infinity_trucking.rb +10 -0
  150. data/lib/freight_kit/carriers/interstate_tma.rb +10 -0
  151. data/lib/freight_kit/carriers/intrade_industries.rb +10 -0
  152. data/lib/freight_kit/carriers/jasper_trucking.rb +28 -0
  153. data/lib/freight_kit/carriers/jb_hunt.rb +11 -0
  154. data/lib/freight_kit/carriers/jfj_transportation.rb +8 -8
  155. data/lib/freight_kit/carriers/jkb_express.rb +10 -0
  156. data/lib/freight_kit/carriers/jlm_transport.rb +10 -0
  157. data/lib/freight_kit/carriers/johansson_transport.rb +10 -0
  158. data/lib/freight_kit/carriers/jones_express.rb +10 -0
  159. data/lib/freight_kit/carriers/jp_logistics.rb +41 -0
  160. data/lib/freight_kit/carriers/just_in_time_cargo.rb +29 -0
  161. data/lib/freight_kit/carriers/kengkok_times.rb +10 -0
  162. data/lib/freight_kit/carriers/kings_express.rb +10 -0
  163. data/lib/freight_kit/carriers/klc_transportation.rb +10 -0
  164. data/lib/freight_kit/carriers/km_trucking.rb +10 -0
  165. data/lib/freight_kit/carriers/kma_logistics.rb +10 -0
  166. data/lib/freight_kit/carriers/krc_logistics.rb +10 -0
  167. data/lib/freight_kit/carriers/ktx.rb +10 -0
  168. data/lib/freight_kit/carriers/landstar.rb +25 -0
  169. data/lib/freight_kit/carriers/lanter_distributing_llc.rb +30 -0
  170. data/lib/freight_kit/carriers/ld_trucking.rb +10 -0
  171. data/lib/freight_kit/carriers/legacy_logistics_solutions.rb +10 -0
  172. data/lib/freight_kit/carriers/leonards_express.rb +10 -0
  173. data/lib/freight_kit/carriers/liberty_linehaul_west.rb +28 -0
  174. data/lib/freight_kit/carriers/liberty_transport.rb +10 -0
  175. data/lib/freight_kit/carriers/lightning_express.rb +10 -0
  176. data/lib/freight_kit/carriers/lj_express.rb +24 -0
  177. data/lib/freight_kit/carriers/lkp_enterprises.rb +10 -0
  178. data/lib/freight_kit/carriers/ltl_pros.rb +28 -0
  179. data/lib/freight_kit/carriers/m_and_m_and_sons.rb +10 -0
  180. data/lib/freight_kit/carriers/mag_lines_transport.rb +10 -0
  181. data/lib/freight_kit/carriers/magic_messenger.rb +24 -0
  182. data/lib/freight_kit/carriers/majors_transit.rb +10 -0
  183. data/lib/freight_kit/carriers/map_global_logistics.rb +10 -0
  184. data/lib/freight_kit/carriers/matths_trucking.rb +11 -0
  185. data/lib/freight_kit/carriers/mav_canadian_transport.rb +13 -0
  186. data/lib/freight_kit/carriers/mc_systems.rb +35 -0
  187. data/lib/freight_kit/carriers/mega_fleet.rb +10 -0
  188. data/lib/freight_kit/carriers/mega_trans_group.rb +28 -0
  189. data/lib/freight_kit/carriers/meta_express.rb +10 -0
  190. data/lib/freight_kit/carriers/mia_transportation.rb +10 -0
  191. data/lib/freight_kit/carriers/midwest_motor_express.rb +14 -0
  192. data/lib/freight_kit/carriers/midwest_transport_and_trucking.rb +10 -0
  193. data/lib/freight_kit/carriers/mikade_delivery_service.rb +10 -0
  194. data/lib/freight_kit/carriers/mohoff_freight_lines.rb +23 -0
  195. data/lib/freight_kit/carriers/montata_travelers_express.rb +10 -0
  196. data/lib/freight_kit/carriers/morgan_van_lines.rb +29 -0
  197. data/lib/freight_kit/carriers/moto_transportation.rb +24 -0
  198. data/lib/freight_kit/carriers/mountain_valley_express.rb +197 -0
  199. data/lib/freight_kit/carriers/ms_freight.rb +27 -0
  200. data/lib/freight_kit/carriers/mvg_transport.rb +10 -0
  201. data/lib/freight_kit/carriers/n_and_m_transfer_co_inc.rb +29 -0
  202. data/lib/freight_kit/carriers/nabot_transport_solutions.rb +10 -0
  203. data/lib/freight_kit/carriers/national_freight_xpress.rb +10 -0
  204. data/lib/freight_kit/carriers/navigation_group.rb +10 -0
  205. data/lib/freight_kit/carriers/nelson_trucking.rb +10 -0
  206. data/lib/freight_kit/carriers/network_1_transportation.rb +10 -0
  207. data/lib/freight_kit/carriers/new_century_transport.rb +28 -0
  208. data/lib/freight_kit/carriers/new_penn_motor_express.rb +11 -0
  209. data/lib/freight_kit/carriers/nieves_transportation.rb +10 -0
  210. data/lib/freight_kit/carriers/nolan_transportation_group.rb +26 -0
  211. data/lib/freight_kit/carriers/northland_trucking.rb +10 -0
  212. data/lib/freight_kit/carriers/northwest_carrier_logistics.rb +27 -0
  213. data/lib/freight_kit/carriers/nt_usa.rb +10 -0
  214. data/lib/freight_kit/carriers/nu_line_transportation.rb +10 -0
  215. data/lib/freight_kit/carriers/numark_transportation.rb +80 -0
  216. data/lib/freight_kit/carriers/nvk_transport.rb +10 -0
  217. data/lib/freight_kit/carriers/ny_transport.rb +10 -0
  218. data/lib/freight_kit/carriers/oak_harbor.rb +28 -0
  219. data/lib/freight_kit/carriers/oakline_transportation.rb +10 -0
  220. data/lib/freight_kit/carriers/old_dominion_freight_line.rb +30 -0
  221. data/lib/freight_kit/carriers/on_trac.rb +573 -0
  222. data/lib/freight_kit/carriers/one_hundred_one_transport.rb +10 -0
  223. data/lib/freight_kit/carriers/one_way_delivery.rb +10 -0
  224. data/lib/freight_kit/carriers/oracle_transportation_solutions.rb +10 -0
  225. data/lib/freight_kit/carriers/orange_courier.rb +27 -0
  226. data/lib/freight_kit/carriers/ortas_trucking.rb +10 -0
  227. data/lib/freight_kit/carriers/pac_trux_transportation.rb +10 -0
  228. data/lib/freight_kit/carriers/pacer.rb +10 -0
  229. data/lib/freight_kit/carriers/pacific_logistics.rb +10 -0
  230. data/lib/freight_kit/carriers/pacific_states_truck_lines.rb +10 -0
  231. data/lib/freight_kit/carriers/paradise_distributing.rb +10 -0
  232. data/lib/freight_kit/carriers/paramount_freight_systems.rb +10 -0
  233. data/lib/freight_kit/carriers/peninsula_truck_lines.rb +222 -0
  234. data/lib/freight_kit/carriers/pg_transport.rb +10 -0
  235. data/lib/freight_kit/carriers/pgs_360.rb +10 -0
  236. data/lib/freight_kit/carriers/pilot_freight_services.rb +10 -0
  237. data/lib/freight_kit/carriers/pious_trans.rb +27 -0
  238. data/lib/freight_kit/carriers/pitt_ohio_express.rb +30 -0
  239. data/lib/freight_kit/carriers/pki_logistics.rb +12 -0
  240. data/lib/freight_kit/carriers/plana_transportation.rb +28 -0
  241. data/lib/freight_kit/carriers/prestige.rb +10 -0
  242. data/lib/freight_kit/carriers/pro_trans_solutions.rb +28 -0
  243. data/lib/freight_kit/carriers/puma_logistics.rb +10 -0
  244. data/lib/freight_kit/carriers/pwc_international.rb +10 -0
  245. data/lib/freight_kit/carriers/quality_logistics.rb +10 -0
  246. data/lib/freight_kit/carriers/queen_star_trucking.rb +27 -0
  247. data/lib/freight_kit/carriers/r_and_l_carriers.rb +11 -0
  248. data/lib/freight_kit/carriers/rac_transport.rb +10 -0
  249. data/lib/freight_kit/carriers/re_logistics.rb +23 -0
  250. data/lib/freight_kit/carriers/reddaway.rb +11 -0
  251. data/lib/freight_kit/carriers/reefer_van_network.rb +13 -0
  252. data/lib/freight_kit/carriers/refrigerated_trucking_and_ltl_transportation_services.rb +10 -0
  253. data/lib/freight_kit/carriers/ridgeline_express.rb +10 -0
  254. data/lib/freight_kit/carriers/rist_transport.rb +29 -0
  255. data/lib/freight_kit/carriers/river_city_transport.rb +10 -0
  256. data/lib/freight_kit/carriers/roadrunner_transportation_services.rb +675 -0
  257. data/lib/freight_kit/carriers/roadtex.rb +13 -0
  258. data/lib/freight_kit/carriers/ronald_transport_services.rb +10 -0
  259. data/lib/freight_kit/carriers/rose_trucking.rb +24 -0
  260. data/lib/freight_kit/carriers/rp_and_j_transport.rb +24 -0
  261. data/lib/freight_kit/carriers/rpm_transportation.rb +11 -0
  262. data/lib/freight_kit/carriers/rude_transportation.rb +30 -0
  263. data/lib/freight_kit/carriers/s_and_s_logistics.rb +10 -0
  264. data/lib/freight_kit/carriers/saia.rb +470 -363
  265. data/lib/freight_kit/carriers/sb_transportation.rb +27 -0
  266. data/lib/freight_kit/carriers/schneider_national.rb +29 -0
  267. data/lib/freight_kit/carriers/schwarz_trucking.rb +10 -0
  268. data/lib/freight_kit/carriers/sewell_motor_express.rb +29 -0
  269. data/lib/freight_kit/carriers/shawnee_trucking.rb +28 -0
  270. data/lib/freight_kit/carriers/shi_logistics.rb +10 -0
  271. data/lib/freight_kit/carriers/sinbad_transport.rb +10 -0
  272. data/lib/freight_kit/carriers/skyway.rb +10 -0
  273. data/lib/freight_kit/carriers/smith_cargo_transportation_services.rb +23 -0
  274. data/lib/freight_kit/carriers/sna_transportation.rb +10 -0
  275. data/lib/freight_kit/carriers/solid_group.rb +10 -0
  276. data/lib/freight_kit/carriers/solution_carrier_express.rb +10 -0
  277. data/lib/freight_kit/carriers/southeastern_freight_lines.rb +450 -0
  278. data/lib/freight_kit/carriers/southwestern_motor_transport.rb +30 -0
  279. data/lib/freight_kit/carriers/span_alaska.rb +10 -0
  280. data/lib/freight_kit/carriers/specialize_transportation.rb +27 -0
  281. data/lib/freight_kit/carriers/ssi_refrigerated_express.rb +10 -0
  282. data/lib/freight_kit/carriers/standard_forwarding_llc.rb +28 -0
  283. data/lib/freight_kit/carriers/star_american_enterprise.rb +10 -0
  284. data/lib/freight_kit/carriers/sterling_transportation.rb +10 -0
  285. data/lib/freight_kit/carriers/stg.rb +163 -0
  286. data/lib/freight_kit/carriers/supervan_service.rb +10 -0
  287. data/lib/freight_kit/carriers/sutton_transport_inc.rb +12 -0
  288. data/lib/freight_kit/carriers/swift_transportation.rb +28 -0
  289. data/lib/freight_kit/carriers/t_force_worldwide.rb +617 -0
  290. data/lib/freight_kit/carriers/tax_airfreight_inc.rb +35 -0
  291. data/lib/freight_kit/carriers/tforce_freight_inc.rb +30 -0
  292. data/lib/freight_kit/carriers/the_custom_companies.rb +162 -0
  293. data/lib/freight_kit/carriers/thk_trucking.rb +28 -0
  294. data/lib/freight_kit/carriers/tiger_cool_express.rb +11 -0
  295. data/lib/freight_kit/carriers/tili_logistics.rb +10 -0
  296. data/lib/freight_kit/carriers/tmt_industries.rb +10 -0
  297. data/lib/freight_kit/carriers/top_ten_express.rb +28 -0
  298. data/lib/freight_kit/carriers/total_quality_logistics.rb +338 -0
  299. data/lib/freight_kit/carriers/total_transportation.rb +258 -0
  300. data/lib/freight_kit/carriers/trans_international_trucking.rb +29 -0
  301. data/lib/freight_kit/carriers/treasure_transportation.rb +10 -0
  302. data/lib/freight_kit/carriers/tri_state_services.rb +10 -0
  303. data/lib/freight_kit/carriers/tritex_freighters.rb +10 -0
  304. data/lib/freight_kit/carriers/triways.rb +10 -0
  305. data/lib/freight_kit/carriers/tsi_kansas.rb +29 -0
  306. data/lib/freight_kit/carriers/u_and_r_transportation.rb +23 -0
  307. data/lib/freight_kit/carriers/union_pacific.rb +11 -0
  308. data/lib/freight_kit/carriers/united_freight_logistics.rb +10 -0
  309. data/lib/freight_kit/carriers/unlimited_distance_transportation.rb +10 -0
  310. data/lib/freight_kit/carriers/up_streamline.rb +10 -0
  311. data/lib/freight_kit/carriers/ups_freight.rb +12 -0
  312. data/lib/freight_kit/carriers/us_freightways.rb +10 -0
  313. data/lib/freight_kit/carriers/usa_truck.rb +28 -0
  314. data/lib/freight_kit/carriers/usf_holland.rb +11 -0
  315. data/lib/freight_kit/carriers/valley_cartage.rb +11 -0
  316. data/lib/freight_kit/carriers/vc_transport.rb +10 -0
  317. data/lib/freight_kit/carriers/vision_express.rb +11 -0
  318. data/lib/freight_kit/carriers/vision_logistics_group.rb +10 -0
  319. data/lib/freight_kit/carriers/vmg_transportation_group.rb +10 -0
  320. data/lib/freight_kit/carriers/volpe_express.rb +10 -0
  321. data/lib/freight_kit/carriers/ward_trucking.rb +29 -0
  322. data/lib/freight_kit/carriers/wdwb.rb +10 -0
  323. data/lib/freight_kit/carriers/western_flyer_express.rb +28 -0
  324. data/lib/freight_kit/carriers/western_regional_delivery_service.rb +271 -0
  325. data/lib/freight_kit/carriers/western_specialized_trucking.rb +22 -0
  326. data/lib/freight_kit/carriers/win_distribution.rb +28 -0
  327. data/lib/freight_kit/carriers/wlb_transport.rb +10 -0
  328. data/lib/freight_kit/carriers/x_trux.rb +29 -0
  329. data/lib/freight_kit/carriers/xpo_logistics.rb +427 -0
  330. data/lib/freight_kit/carriers/xpress_global_systems.rb +30 -0
  331. data/lib/freight_kit/carriers/xylo_trucking.rb +10 -0
  332. data/lib/freight_kit/carriers/yrc_freight.rb +24 -0
  333. data/lib/freight_kit/carriers/zentner_transportation.rb +28 -0
  334. data/lib/freight_kit/carriers.rb +332 -36
  335. data/lib/freight_kit/countries.rb +22 -0
  336. data/lib/freight_kit/error.rb +0 -2
  337. data/lib/freight_kit/errors/document_not_found_error.rb +0 -2
  338. data/lib/freight_kit/errors/expired_credentials_error.rb +0 -2
  339. data/lib/freight_kit/errors/http_error.rb +0 -2
  340. data/lib/freight_kit/errors/invalid_credentials_error.rb +0 -2
  341. data/lib/freight_kit/errors/response_error.rb +1 -3
  342. data/lib/freight_kit/errors/shipment_not_found_error.rb +0 -2
  343. data/lib/freight_kit/errors/unserviceable_accessorials_error.rb +2 -4
  344. data/lib/freight_kit/errors/unserviceable_error.rb +0 -2
  345. data/lib/freight_kit/helpers/documentable.rb +0 -2
  346. data/lib/freight_kit/helpers/pickupable.rb +3 -5
  347. data/lib/freight_kit/helpers/rateable.rb +0 -2
  348. data/lib/freight_kit/helpers/trackable.rb +0 -2
  349. data/lib/freight_kit/http_client/cache_store.rb +59 -0
  350. data/lib/freight_kit/http_client/log_device.rb +13 -0
  351. data/lib/freight_kit/http_client/response.rb +38 -0
  352. data/lib/freight_kit/http_client/revalidation.rb +25 -0
  353. data/lib/freight_kit/http_client/safe_retries.rb +23 -0
  354. data/lib/freight_kit/http_client/zstd.rb +28 -0
  355. data/lib/freight_kit/http_client.rb +76 -0
  356. data/lib/freight_kit/model.rb +1 -3
  357. data/lib/freight_kit/models/address.rb +15 -0
  358. data/lib/freight_kit/models/contact.rb +3 -4
  359. data/lib/freight_kit/models/country.rb +20 -0
  360. data/lib/freight_kit/models/credential.rb +14 -16
  361. data/lib/freight_kit/models/date_time.rb +0 -2
  362. data/lib/freight_kit/models/document_response.rb +0 -2
  363. data/lib/freight_kit/models/label.rb +0 -2
  364. data/lib/freight_kit/models/location.rb +10 -25
  365. data/lib/freight_kit/models/pickup_response.rb +0 -2
  366. data/lib/freight_kit/models/price.rb +0 -2
  367. data/lib/freight_kit/models/rate.rb +0 -2
  368. data/lib/freight_kit/models/rate_response.rb +0 -2
  369. data/lib/freight_kit/models/region.rb +19 -0
  370. data/lib/freight_kit/models/response.rb +0 -2
  371. data/lib/freight_kit/models/shipment.rb +4 -6
  372. data/lib/freight_kit/models/shipment_event.rb +0 -2
  373. data/lib/freight_kit/models/terminal.rb +10 -0
  374. data/lib/freight_kit/models/tracking_response.rb +0 -2
  375. data/lib/freight_kit/package.rb +52 -54
  376. data/lib/freight_kit/package_item.rb +15 -15
  377. data/lib/freight_kit/packaging.rb +21 -26
  378. data/lib/freight_kit/platform.rb +0 -32
  379. data/lib/freight_kit/platforms/carrier_logistics.rb +331 -345
  380. data/lib/freight_kit/platforms/next_tms.rb +93 -0
  381. data/lib/freight_kit/platforms/the_great_information_factory.rb +500 -426
  382. data/lib/freight_kit/regions.rb +27 -0
  383. data/lib/freight_kit/shipment_packer.rb +36 -38
  384. data/lib/freight_kit/tariff/overlength_rule.rb +1 -5
  385. data/lib/freight_kit/tariff.rb +0 -2
  386. data/lib/freight_kit.rb +89 -25
  387. metadata +454 -84
  388. data/configuration/carriers/abfs.yml +0 -124
  389. data/configuration/carriers/btvp.yml +0 -84
  390. data/configuration/carriers/ccyq.yml +0 -121
  391. data/configuration/carriers/clni.yml +0 -113
  392. data/configuration/carriers/cnwy.yml +0 -113
  393. data/configuration/carriers/ctbv.yml +0 -117
  394. data/configuration/carriers/dcha.yml +0 -105
  395. data/configuration/carriers/dlds.yml +0 -111
  396. data/configuration/carriers/dphe.yml +0 -130
  397. data/configuration/carriers/drrq.yml +0 -131
  398. data/configuration/carriers/fcsy.yml +0 -102
  399. data/configuration/carriers/fwda.yml +0 -137
  400. data/configuration/carriers/jfj_transportation.yml +0 -2
  401. data/configuration/carriers/mtvl.yml +0 -12
  402. data/configuration/carriers/numk.yml +0 -14
  403. data/configuration/carriers/otcl.yml +0 -124
  404. data/configuration/carriers/pens.yml +0 -22
  405. data/configuration/carriers/rdfs.yml +0 -142
  406. data/configuration/carriers/saia.yml +0 -129
  407. data/configuration/carriers/sefl.yml +0 -115
  408. data/configuration/carriers/totl.yml +0 -111
  409. data/configuration/carriers/tqyl.yml +0 -28
  410. data/configuration/carriers/wrds.yml +0 -20
  411. data/configuration/platforms/carrier_logistics.yml +0 -25
  412. data/configuration/platforms/next.yml +0 -12
  413. data/configuration/platforms/the_great_information_factory.yml +0 -122
  414. data/freight_kit-0.1.18.gem +0 -0
  415. data/lib/freight_kit/api_clients.rb +0 -3
  416. data/lib/freight_kit/carriers/abfs.rb +0 -421
  417. data/lib/freight_kit/carriers/btvp.rb +0 -29
  418. data/lib/freight_kit/carriers/ccyq.rb +0 -317
  419. data/lib/freight_kit/carriers/clni.rb +0 -396
  420. data/lib/freight_kit/carriers/cnwy.rb +0 -327
  421. data/lib/freight_kit/carriers/ctbv.rb +0 -53
  422. data/lib/freight_kit/carriers/dcha.rb +0 -76
  423. data/lib/freight_kit/carriers/dlds.rb +0 -49
  424. data/lib/freight_kit/carriers/dphe.rb +0 -474
  425. data/lib/freight_kit/carriers/drrq.rb +0 -580
  426. data/lib/freight_kit/carriers/fcsy.rb +0 -57
  427. data/lib/freight_kit/carriers/fwda.rb +0 -744
  428. data/lib/freight_kit/carriers/mtvl.rb +0 -34
  429. data/lib/freight_kit/carriers/numk.rb +0 -58
  430. data/lib/freight_kit/carriers/otcl.rb +0 -528
  431. data/lib/freight_kit/carriers/pens.rb +0 -204
  432. data/lib/freight_kit/carriers/rdfs.rb +0 -521
  433. data/lib/freight_kit/carriers/sefl.rb +0 -342
  434. data/lib/freight_kit/carriers/totl.rb +0 -172
  435. data/lib/freight_kit/carriers/tqyl.rb +0 -339
  436. data/lib/freight_kit/carriers/wrds.rb +0 -246
  437. data/lib/freight_kit/helpers.rb +0 -6
  438. data/lib/freight_kit/platforms/next.rb +0 -101
  439. data/lib/freight_kit/platforms.rb +0 -5
@@ -0,0 +1,23 @@
1
+ module FreightKit
2
+ class HTTPClient
3
+ # HTTPX plugin keeping connections open (HTTPX's persistent plugin) without risking duplicate
4
+ # rates, pickups or tenders.
5
+ #
6
+ # The persistent plugin retries any request failing with a connection error, but a POST may
7
+ # already have been processed by then, so only idempotent requests are retried.
8
+ # Streams refused by an HTTP/2 GOAWAY are resent by HTTPX itself, independently of retries.
9
+ module SafeRetries
10
+ IDEMPOTENT_METHODS = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'PUT'].freeze
11
+
12
+ module InstanceMethods
13
+ private
14
+
15
+ def retryable_request?(request, *) = super && IDEMPOTENT_METHODS.include?(request.verb)
16
+ end
17
+
18
+ class << self
19
+ def load_dependencies(klass) = klass.plugin(:persistent)
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,28 @@
1
+ module FreightKit
2
+ class HTTPClient
3
+ # HTTPX plugin decoding Zstandard ("zstd") response bodies, modeled on HTTPX's brotli plugin.
4
+ module Zstd
5
+ class Inflater
6
+ def initialize = @inflater = ::Zstd::StreamingDecompress.new
7
+
8
+ def call(chunk) = @inflater.decompress(chunk)
9
+ end
10
+
11
+ module ResponseBodyClassMethods
12
+ def initialize_inflater_by_encoding(encoding, response, **) = encoding == 'zstd' ? Inflater.new : super
13
+ end
14
+
15
+ class << self
16
+ def extra_options(options)
17
+ supported_compression_formats = (['zstd'] + options.supported_compression_formats).freeze
18
+
19
+ headers = options.headers.merge('accept-encoding' => supported_compression_formats)
20
+
21
+ options.merge(headers: options.headers_class.new(headers), supported_compression_formats:)
22
+ end
23
+
24
+ def load_dependencies(*) = require('zstd-ruby')
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,76 @@
1
+ module FreightKit
2
+ # Thin wrapper around HTTPX that negotiates Brotli/Zstandard compression, keeps connections
3
+ # open between requests and revalidates cached responses with conditional requests (ETag/Last-Modified).
4
+ #
5
+ # The cache and logger are hookable; they default to the host Rails/Hanami app's logger:
6
+ #
7
+ # FreightKit::HTTPClient.cache = Rails.cache
8
+ # FreightKit::HTTPClient.logger = Rails.logger
9
+ class HTTPClient
10
+ USER_AGENT = "freight_kit/#{VERSION} #{HTTPX::Options::USER_AGENT}".freeze
11
+
12
+ @sessions = Concurrent::Map.new
13
+
14
+ class << self
15
+ def cache = @cache ||= ActiveSupport::Cache::MemoryStore.new
16
+
17
+ def cache=(store)
18
+ @cache = store
19
+ @sessions.clear
20
+ end
21
+
22
+ def get(url, **) = request(:get, url, **)
23
+ def logger = @logger || framework_logger || ::Logger.new($stdout, level: ENV.fetch('LOG_LEVEL', 'info'))
24
+
25
+ def logger=(logger)
26
+ @logger = logger
27
+ @sessions.clear
28
+ end
29
+
30
+ def post(url, **) = request(:post, url, **)
31
+
32
+ def request(verb, url, body: nil, headers: {}, proxy: nil, query: nil)
33
+ options = { headers: }
34
+ options[:params] = query if query.present?
35
+
36
+ # Like HTTParty, hashes are form-encoded regardless of the Content-Type header
37
+ if body.is_a?(Hash)
38
+ options[:form] = body if body.present?
39
+ elsif body.present?
40
+ options[:body] = body
41
+ end
42
+
43
+ response = session(proxy.presence).request(verb.to_s.upcase, url, **options)
44
+ raise response.error if response.is_a?(HTTPX::ErrorResponse)
45
+
46
+ Response.new(response)
47
+ end
48
+
49
+ private
50
+
51
+ def framework_logger
52
+ if defined?(::Rails) && ::Rails.respond_to?(:logger)
53
+ ::Rails.logger
54
+ elsif defined?(::Hanami) && ::Hanami.respond_to?(:app?) && ::Hanami.app?
55
+ ::Hanami.app['logger']
56
+ end
57
+ end
58
+
59
+ # Sessions own their connection pool, so they are built once (per proxy) and reused
60
+ def session(proxy)
61
+ @sessions.compute_if_absent(proxy) do
62
+ session = HTTPX.plugin(:brotli).plugin(Zstd).plugin(:follow_redirects)
63
+ .plugin(:response_cache, response_cache_store: CacheStore.new(cache))
64
+ .plugin(Revalidation)
65
+ .plugin(SafeRetries)
66
+ .with(close_on_fork: true, headers: { 'user-agent' => USER_AGENT })
67
+
68
+ logger = self.logger
69
+ session = session.with(debug: LogDevice.new(logger), debug_level: 2) if logger.level <= ::Logger::DEBUG
70
+
71
+ proxy ? session.plugin(:proxy).with(proxy: { uri: proxy }) : session
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  class Model
5
3
  include ActiveModel::AttributeAssignment
@@ -12,6 +10,6 @@ module FreightKit
12
10
  def attributes
13
11
  instance_values.with_indifferent_access
14
12
  end
15
- alias_method :to_hash, :attributes
13
+ alias to_hash attributes
16
14
  end
17
15
  end
@@ -0,0 +1,15 @@
1
+ module FreightKit
2
+ # Class representing a real, deliverable mailing address.
3
+ #
4
+ # @!attribute id [String, nil] Permanent UUID of a carrier's address. Applications store it, so never change it.
5
+ class Address < Model
6
+ attr_accessor :city, :id, :postal_code, :region_abbreviation, :street, :street2
7
+ attr_reader :country
8
+
9
+ def country=(country)
10
+ raise ArgumentError, 'country must be a FreightKit::Country' unless country.blank? || country.is_a?(Country)
11
+
12
+ @country = country.presence
13
+ end
14
+ end
15
+ end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  # Contact is the abstract base class for all contacts.
5
3
  #
@@ -7,11 +5,12 @@ module FreightKit
7
5
  # @!attribute department_name [String] Department name (like "Shipping Dept").
8
6
  # @!attribute email [String] Email.
9
7
  # @!attribute fax [String] E164 formatted fax number.
8
+ # @!attribute id [String, nil] Permanent UUID of a carrier's contact. Applications store it, so never change it.
10
9
  # @!attribute name [String] Name of person.
11
10
  # @!attribute phone [String] E164 formatted phone number.
12
11
  class Contact < Model
13
- attr_accessor :company_name, :department, :email, :fax, :name, :phone
12
+ attr_accessor :company_name, :department, :email, :fax, :id, :name, :phone
14
13
 
15
- alias_method :company, :company_name
14
+ alias company company_name
16
15
  end
17
16
  end
@@ -0,0 +1,20 @@
1
+ module FreightKit
2
+ class Country
3
+ attr_reader :iso31661_alpha2, :iso31661_alpha3, :name, :un_code
4
+
5
+ def initialize(iso31661_alpha2:, iso31661_alpha3:, name:, un_code: nil)
6
+ @iso31661_alpha2 = iso31661_alpha2
7
+ @iso31661_alpha3 = iso31661_alpha3
8
+ @name = name
9
+ @un_code = un_code
10
+ end
11
+
12
+ def ==(other) = other.is_a?(Country) && other.id == id
13
+ alias eql? ==
14
+
15
+ def hash = [self.class, id].hash
16
+ def id = iso31661_alpha2
17
+ def inspect = "#<#{self.class.name} #{iso31661_alpha2}>"
18
+ def regions = FreightKit::Regions.all.select { |region| region.country == self }
19
+ end
20
+ end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  # Class representing credentials.
5
3
  #
@@ -70,7 +68,7 @@ module FreightKit
70
68
  end
71
69
  end
72
70
 
73
- hash.each do |k, _v|
71
+ hash.each_key do |k|
74
72
  next if k == :type
75
73
 
76
74
  singleton_class.class_eval { attr_accessor(k.to_s) } unless singleton_class.respond_to?(k)
@@ -99,19 +97,19 @@ module FreightKit
99
97
  url = url.to_s
100
98
 
101
99
  @watir_args = [
102
- browser,
103
- {
104
- options: {
105
- prefs: {
106
- download: {
107
- directory_upgrade: true,
108
- prompt_for_download: false
109
- }
110
- }
111
- },
112
- url:
113
- },
114
- ]
100
+ browser,
101
+ {
102
+ options: {
103
+ prefs: {
104
+ download: {
105
+ directory_upgrade: true,
106
+ prompt_for_download: false
107
+ }
108
+ }
109
+ },
110
+ url:
111
+ }
112
+ ]
115
113
  end
116
114
  end
117
115
  end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  # Represent dates and times in varous formats.
5
3
  #
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  # Represents the response to calls:
5
3
  # - {FreightKit::Carrier#bol}
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  # Class representing a shipping option with estimated price.
5
3
  #
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  # Class representing a location.
5
3
  #
@@ -57,38 +55,27 @@ module FreightKit
57
55
  attr_reader :contact, :country, :lat, :lng, :type
58
56
 
59
57
  def contact=(contact)
60
- return @contact = nil if contact.blank?
61
-
62
- raise ArgumentError, 'contact must be a Contact' unless contact.is_a?(FreightKit::Contact)
58
+ raise ArgumentError, 'contact must be a Contact' unless contact.blank? || contact.is_a?(FreightKit::Contact)
63
59
 
64
- @contact = contact
60
+ @contact = contact.presence
65
61
  end
66
62
 
67
63
  def country=(country)
68
- return country = nil if country.blank?
69
-
70
- if country.is_a?(ActiveUtils::Country)
71
- @country = country
72
- return country
73
- end
64
+ raise ArgumentError, 'country must be an ActiveUtils::Country' unless country.blank? || country.is_a?(ActiveUtils::Country)
74
65
 
75
- raise ArgumentError, 'country must be an ActiveUtils::Country'
66
+ @country = country.presence
76
67
  end
77
68
 
78
69
  def lat=(num)
79
- return @lat = nil if num.blank?
70
+ raise ArgumentError, 'lat must be a BigNum' unless num.blank? || num.is_a?(BigNum)
80
71
 
81
- return @lat = num if num.is_a?(BigNum)
82
-
83
- raise ArgumentError, 'lat must be a BigNum'
72
+ @lat = num.presence
84
73
  end
85
74
 
86
75
  def lng=(num)
87
- return @lng = nil if num.blank?
88
-
89
- return @lng = num if num.is_a?(BigNum)
76
+ raise ArgumentError, 'lng must be a BigNum' unless num.blank? || num.is_a?(BigNum)
90
77
 
91
- raise ArgumentError, 'lng must be a BigNum'
78
+ @lng = num.presence
92
79
  end
93
80
 
94
81
  def time_zone
@@ -98,11 +85,9 @@ module FreightKit
98
85
  end
99
86
 
100
87
  def type=(value)
101
- return @type = nil if value.blank?
102
-
103
- raise ArgumentError, "type must be one of :#{TYPES.join(", :")}" if TYPES.exclude?(value)
88
+ raise ArgumentError, "type must be one of :#{TYPES.join(', :')}" unless value.blank? || TYPES.include?(value)
104
89
 
105
- @type = value
90
+ @type = value.presence
106
91
  end
107
92
  end
108
93
  end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  # The `PickupResponse` object is returned by the {FreightKit::Carrier#create_pickup}
5
3
  # call. The most important method is {#pickup_number}, which will return the pickup reference
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  # Class representing a price.
5
3
  #
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  # Class representing a shipping option with estimated price.
5
3
  #
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  # The `RateResponse` object is returned by the {FreightKit::Carrier#find_rates}
5
3
  # call. The most important method is {#rates}, which will return a list of possible
@@ -0,0 +1,19 @@
1
+ module FreightKit
2
+ class Region
3
+ attr_reader :abbreviation, :country, :iso31662, :name
4
+
5
+ def initialize(abbreviation:, country:, iso31662:, name:)
6
+ @abbreviation = abbreviation
7
+ @country = country
8
+ @iso31662 = iso31662
9
+ @name = name
10
+ end
11
+
12
+ def ==(other) = other.is_a?(Region) && other.id == id
13
+ alias eql? ==
14
+
15
+ def hash = [self.class, id].hash
16
+ def id = iso31662
17
+ def inspect = "#<#{self.class.name} #{iso31662}>"
18
+ end
19
+ end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  # Basic Response class for requests against a carrier's API.
5
3
  #
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  # Shipment is the abstract base class for all rate requests.
5
3
  #
@@ -23,16 +21,16 @@ module FreightKit
23
21
  :pro
24
22
  attr_reader :pickup_at
25
23
 
24
+ def hazmat?
25
+ packages.map(&:hazmat?).any?(true)
26
+ end
27
+
26
28
  def loose?
27
29
  return false if @packages.blank?
28
30
 
29
31
  packages.map(&:packaging).map(&:pallet?).none?(true)
30
32
  end
31
33
 
32
- def hazmat?
33
- packages.map(&:hazmat?).any?(true)
34
- end
35
-
36
34
  def loose_and_palletized?
37
35
  !loose? && !palletized?
38
36
  end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  # `ShipmentEvent` is the abstract base class for all shipment events (usually
5
3
  # attached to `TrackingEresponse`).
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ # Class representing a carrier's terminal.
3
+ #
4
+ # @!attribute address [FreightKit::Address] Address.
5
+ # @!attribute id [String] Permanent UUID. Applications store it, so never change it.
6
+ # @!attribute phone [String] E164 formatted phone number.
7
+ class Terminal < Model
8
+ attr_accessor :address, :id, :phone
9
+ end
10
+ end
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit
4
2
  # Represents the response to a {FreightKit::Carrier#find_tracking_info} call.
5
3
  #
@@ -1,5 +1,3 @@
1
- # frozen_string_literal: true
2
-
3
1
  module FreightKit # :nodoc:
4
2
  class Package
5
3
  class << self
@@ -43,7 +41,7 @@ module FreightKit # :nodoc:
43
41
  [
44
42
  dimensions[:height].presence,
45
43
  dimensions[:width].presence,
46
- dimensions[:length].presence,
44
+ dimensions[:length].presence
47
45
  ]
48
46
  else
49
47
  dimensions
@@ -71,7 +69,7 @@ module FreightKit # :nodoc:
71
69
  Measured::Weight,
72
70
  @weight_unit_system,
73
71
  :grams,
74
- :ounces,
72
+ :ounces
75
73
  )
76
74
 
77
75
  @each_weight = attribute_from_metric_or_imperial(
@@ -79,7 +77,7 @@ module FreightKit # :nodoc:
79
77
  Measured::Weight,
80
78
  @weight_unit_system,
81
79
  :grams,
82
- :ounces,
80
+ :ounces
83
81
  )
84
82
 
85
83
  if @dimensions.blank?
@@ -107,6 +105,10 @@ module FreightKit # :nodoc:
107
105
  @packaging = Packaging.new(packaging_type)
108
106
  end
109
107
 
108
+ def calculated_freight_class
109
+ sanitized_freight_class(density_to_freight_class(density))
110
+ end
111
+
110
112
  def cubic_ft(each_or_total)
111
113
  q = case each_or_total
112
114
  when :each then 1
@@ -123,39 +125,31 @@ module FreightKit # :nodoc:
123
125
  format('%0.2f', cubic_ft).to_f
124
126
  end
125
127
 
126
- def density
127
- return unless inches[..2].all?(&:present?) && pounds(:each)
128
-
129
- density = pounds(:each).to_f / cubic_ft(:each)
130
- format('%0.2f', density).to_f
131
- end
132
-
133
- def calculated_freight_class
134
- sanitized_freight_class(density_to_freight_class(density))
128
+ def cylinder?
129
+ @cylinder
135
130
  end
136
131
 
137
132
  def declared_freight_class
138
133
  @declared_freight_class || @options[:declared_freight_class]
139
134
  end
140
135
 
141
- def freight_class
142
- declared_freight_class.presence || calculated_freight_class
143
- end
136
+ def density
137
+ return unless inches[..2].all?(&:present?) && pounds(:each)
144
138
 
145
- def length(unit)
146
- @dimensions[2].convert_to(unit).value.to_f
139
+ density = pounds(:each).to_f / cubic_ft(:each)
140
+ format('%0.2f', density).to_f
147
141
  end
148
142
 
149
- def width(unit)
150
- @dimensions[1].convert_to(unit).value.to_f
143
+ def freight_class
144
+ declared_freight_class.presence || calculated_freight_class
151
145
  end
152
146
 
153
147
  def height(unit)
154
148
  @dimensions[0].convert_to(unit).value.to_f
155
149
  end
156
150
 
157
- def cylinder?
158
- @cylinder
151
+ def length(unit)
152
+ @dimensions[2].convert_to(unit).value.to_f
159
153
  end
160
154
 
161
155
  def oversized?
@@ -166,7 +160,11 @@ module FreightKit # :nodoc:
166
160
  @unpackaged
167
161
  end
168
162
 
169
- alias_method :tube?, :cylinder?
163
+ def width(unit)
164
+ @dimensions[1].convert_to(unit).value.to_f
165
+ end
166
+
167
+ alias tube? cylinder?
170
168
 
171
169
  def gift?
172
170
  @gift
@@ -179,36 +177,36 @@ module FreightKit # :nodoc:
179
177
  def ounces(options = {})
180
178
  weight(options).convert_to(:oz).value.to_f
181
179
  end
182
- alias_method :oz, :ounces
180
+ alias oz ounces
183
181
 
184
182
  def grams(options = {})
185
183
  weight(options).convert_to(:g).value.to_f
186
184
  end
187
- alias_method :g, :grams
185
+ alias g grams
188
186
 
189
187
  def pounds(args)
190
188
  weight(*args).convert_to(:lb).value.to_f
191
189
  end
192
- alias_method :lb, :pounds
193
- alias_method :lbs, :pounds
190
+ alias lb pounds
191
+ alias lbs pounds
194
192
 
195
193
  def kilograms(options = {})
196
194
  weight(options).convert_to(:kg).value.to_f
197
195
  end
198
- alias_method :kg, :kilograms
199
- alias_method :kgs, :kilograms
196
+ alias kg kilograms
197
+ alias kgs kilograms
200
198
 
201
199
  def inches(measurement = nil)
202
200
  @inches ||= @dimensions.map { |m| m.convert_to(:in).value.to_f }
203
201
  measurement.nil? ? @inches : measure(measurement, @inches)
204
202
  end
205
- alias_method :in, :inches
203
+ alias in inches
206
204
 
207
205
  def centimetres(measurement = nil)
208
206
  @centimetres ||= @dimensions.map { |m| m.convert_to(:cm).value.to_f }
209
207
  measurement.nil? ? @centimetres : measure(measurement, @centimetres)
210
208
  end
211
- alias_method :cm, :centimetres
209
+ alias cm centimetres
212
210
 
213
211
  def dim_weight
214
212
  return if inches(:length).blank? || inches(:width).blank? || inches(:height).blank? || pounds(:each).blank?
@@ -240,32 +238,22 @@ module FreightKit # :nodoc:
240
238
  return 60 if density > 30
241
239
 
242
240
  density_table = [
243
- [1, 2, 300],
244
- [2, 4, 250],
245
- [4, 6, 175],
246
- [6, 8, 125],
247
- [8, 10, 100],
248
- [10, 12, 92.5],
249
- [12, 15, 85],
250
- [15, 22.5, 70],
251
- [22.5, 30, 65],
252
- [30, 35, 60],
253
- ]
241
+ [1, 2, 300],
242
+ [2, 4, 250],
243
+ [4, 6, 175],
244
+ [6, 8, 125],
245
+ [8, 10, 100],
246
+ [10, 12, 92.5],
247
+ [12, 15, 85],
248
+ [15, 22.5, 70],
249
+ [22.5, 30, 65],
250
+ [30, 35, 60]
251
+ ]
254
252
  density_table.each do |density_row|
255
253
  return density_row[2] if (density >= density_row[0]) && (density < density_row[1])
256
254
  end
257
255
  end
258
256
 
259
- def sanitized_freight_class(freight_class)
260
- return if freight_class.blank?
261
-
262
- if VALID_FREIGHT_CLASSES.include?(freight_class)
263
- return freight_class.to_i == freight_class ? freight_class.to_i : freight_class
264
- end
265
-
266
- nil
267
- end
268
-
269
257
  def measure(measurement, ary)
270
258
  case measurement
271
259
  when Integer then ary[measurement]
@@ -291,6 +279,16 @@ module FreightKit # :nodoc:
291
279
  end
292
280
  end
293
281
 
282
+ def sanitized_freight_class(freight_class)
283
+ return if freight_class.blank?
284
+
285
+ if VALID_FREIGHT_CLASSES.include?(freight_class)
286
+ return freight_class.to_i == freight_class ? freight_class.to_i : freight_class
287
+ end
288
+
289
+ nil
290
+ end
291
+
294
292
  def weight(which_weight, options = {})
295
293
  weight = case which_weight
296
294
  when :each then @each_weight
@@ -304,7 +302,7 @@ module FreightKit # :nodoc:
304
302
  weight
305
303
  when :volumetric, :dimensional
306
304
  @volumetric_weight ||= begin
307
- m = Measured::Weight.new((centimetres(:box_volume) / 6.0), :grams)
305
+ m = Measured::Weight.new(centimetres(:box_volume) / 6.0, :grams)
308
306
  @weight_unit_system == :imperial ? m.convert_to(:oz) : m
309
307
  end
310
308
  when :billable