freight_kit 0.1.20 → 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 (434) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -2
  3. data/README.md +1 -2
  4. data/Rakefile +6 -0
  5. data/VERSION +1 -1
  6. data/configuration/locations/amazon_warehouses.yml +3330 -0
  7. data/freight_kit.gemspec +13 -13
  8. data/lib/freight_kit/address_normalizer.rb +26 -0
  9. data/lib/freight_kit/amazon_warehouse.rb +33 -0
  10. data/lib/freight_kit/api_clients/soap_client.rb +7 -9
  11. data/lib/freight_kit/carrier.rb +250 -303
  12. data/lib/freight_kit/carriers/a1_express.rb +25 -0
  13. data/lib/freight_kit/carriers/a_duie_pyle.rb +30 -0
  14. data/lib/freight_kit/carriers/aaa_cooper.rb +11 -0
  15. data/lib/freight_kit/carriers/aaa_expedited_services.rb +10 -0
  16. data/lib/freight_kit/carriers/ab_brothers_usa_inc.rb +12 -0
  17. data/lib/freight_kit/carriers/aberdeen_express_inc.rb +28 -0
  18. data/lib/freight_kit/carriers/abf_freight_system.rb +492 -0
  19. data/lib/freight_kit/carriers/access_transport.rb +10 -0
  20. data/lib/freight_kit/carriers/action_express.rb +10 -0
  21. data/lib/freight_kit/carriers/adams_and_companies.rb +10 -0
  22. data/lib/freight_kit/carriers/advance_distribution.rb +28 -0
  23. data/lib/freight_kit/carriers/alcon_transport.rb +10 -0
  24. data/lib/freight_kit/carriers/all_freight.rb +10 -0
  25. data/lib/freight_kit/carriers/alliance_transportation_group.rb +10 -0
  26. data/lib/freight_kit/carriers/allstate_transport.rb +10 -0
  27. data/lib/freight_kit/carriers/aloha_freight_forwarders.rb +35 -0
  28. data/lib/freight_kit/carriers/amado_trucking.rb +35 -0
  29. data/lib/freight_kit/carriers/american_fast_freight.rb +28 -0
  30. data/lib/freight_kit/carriers/amigos_service_transportation.rb +10 -0
  31. data/lib/freight_kit/carriers/anderson_towing_and_transport.rb +10 -0
  32. data/lib/freight_kit/carriers/apex_transporting.rb +10 -0
  33. data/lib/freight_kit/carriers/archer_cargo.rb +35 -0
  34. data/lib/freight_kit/carriers/armstrong_transport_group.rb +10 -0
  35. data/lib/freight_kit/carriers/autobahn_logistics.rb +10 -0
  36. data/lib/freight_kit/carriers/averitt_express.rb +30 -0
  37. data/lib/freight_kit/carriers/ba_transportation.rb +10 -0
  38. data/lib/freight_kit/carriers/balkin_express.rb +10 -0
  39. data/lib/freight_kit/carriers/bay_area_express.rb +10 -0
  40. data/lib/freight_kit/carriers/bc_freightways.rb +11 -0
  41. data/lib/freight_kit/carriers/benjamin_best_freight_inc.rb +37 -0
  42. data/lib/freight_kit/carriers/bennett_trucking.rb +10 -0
  43. data/lib/freight_kit/carriers/best_overnite_express.rb +78 -0
  44. data/lib/freight_kit/carriers/best_trucking.rb +10 -0
  45. data/lib/freight_kit/carriers/bestway_transport.rb +10 -0
  46. data/lib/freight_kit/carriers/bryan_systems.rb +10 -0
  47. data/lib/freight_kit/carriers/c_and_w_express.rb +10 -0
  48. data/lib/freight_kit/carriers/campbell_trucking.rb +10 -0
  49. data/lib/freight_kit/carriers/carde_transportation.rb +10 -0
  50. data/lib/freight_kit/carriers/cardinal_logistics.rb +28 -0
  51. data/lib/freight_kit/carriers/cdc_transport.rb +10 -0
  52. data/lib/freight_kit/carriers/cdo_express_diversified.rb +10 -0
  53. data/lib/freight_kit/carriers/cedar_supply_trucking.rb +10 -0
  54. data/lib/freight_kit/carriers/central_freight_lines.rb +12 -0
  55. data/lib/freight_kit/carriers/central_transport.rb +12 -0
  56. data/lib/freight_kit/carriers/chicago_suburban_express.rb +28 -0
  57. data/lib/freight_kit/carriers/city_logistics.rb +11 -0
  58. data/lib/freight_kit/carriers/clear_lane_freight_systems.rb +483 -0
  59. data/lib/freight_kit/carriers/cleopatra_trucking.rb +10 -0
  60. data/lib/freight_kit/carriers/clifford_transportation.rb +10 -0
  61. data/lib/freight_kit/carriers/cms_domestic.rb +25 -0
  62. data/lib/freight_kit/carriers/cnd_logistics.rb +10 -0
  63. data/lib/freight_kit/carriers/coast_to_coast_transport.rb +27 -0
  64. data/lib/freight_kit/carriers/countrywide_carriers.rb +10 -0
  65. data/lib/freight_kit/carriers/cpl_express.rb +35 -0
  66. data/lib/freight_kit/carriers/crosby_trucking_service.rb +29 -0
  67. data/lib/freight_kit/carriers/cross_country_freight_solutions.rb +419 -0
  68. data/lib/freight_kit/carriers/crowley.rb +10 -0
  69. data/lib/freight_kit/carriers/csa_transportation.rb +40 -0
  70. data/lib/freight_kit/carriers/csx_transportation.rb +40 -0
  71. data/lib/freight_kit/carriers/custom_global_logistics.rb +14 -0
  72. data/lib/freight_kit/carriers/d_and_a_transport.rb +10 -0
  73. data/lib/freight_kit/carriers/dak_transport.rb +10 -0
  74. data/lib/freight_kit/carriers/dash_courier_and_logistics_north_carolina.rb +10 -0
  75. data/lib/freight_kit/carriers/daylight_transport.rb +29 -0
  76. data/lib/freight_kit/carriers/dayton_freight_lines.rb +30 -0
  77. data/lib/freight_kit/carriers/dbr_logistics.rb +10 -0
  78. data/lib/freight_kit/carriers/deep_south_freight.rb +27 -0
  79. data/lib/freight_kit/carriers/delta_express.rb +10 -0
  80. data/lib/freight_kit/carriers/delta_transport.rb +10 -0
  81. data/lib/freight_kit/carriers/delta_trucking_logistics.rb +10 -0
  82. data/lib/freight_kit/carriers/demco_express.rb +10 -0
  83. data/lib/freight_kit/carriers/dependable_global_express.rb +10 -0
  84. data/lib/freight_kit/carriers/dependable_hawaiian_express.rb +24 -0
  85. data/lib/freight_kit/carriers/dependable_highway_express.rb +585 -0
  86. data/lib/freight_kit/carriers/desert_coastal_transport.rb +10 -0
  87. data/lib/freight_kit/carriers/dhl.rb +11 -0
  88. data/lib/freight_kit/carriers/diamond_line_delivery.rb +174 -0
  89. data/lib/freight_kit/carriers/ding_tai_trucking.rb +10 -0
  90. data/lib/freight_kit/carriers/diversified_transfer_and_storage.rb +29 -0
  91. data/lib/freight_kit/carriers/dohrn_transfer_company.rb +30 -0
  92. data/lib/freight_kit/carriers/dot_line_transportation.rb +29 -0
  93. data/lib/freight_kit/carriers/drt_transportation.rb +13 -0
  94. data/lib/freight_kit/carriers/dugan_truck_line.rb +29 -0
  95. data/lib/freight_kit/carriers/dupont.rb +10 -0
  96. data/lib/freight_kit/carriers/e_transport_carriers.rb +29 -0
  97. data/lib/freight_kit/carriers/echo_global_logistics.rb +13 -0
  98. data/lib/freight_kit/carriers/ecklund_logistics.rb +10 -0
  99. data/lib/freight_kit/carriers/el_emplumado_transport.rb +10 -0
  100. data/lib/freight_kit/carriers/elite_carriers.rb +28 -0
  101. data/lib/freight_kit/carriers/emerald_express.rb +10 -0
  102. data/lib/freight_kit/carriers/era_transport.rb +10 -0
  103. data/lib/freight_kit/carriers/estes_express_lines.rb +25 -0
  104. data/lib/freight_kit/carriers/euro_kam.rb +28 -0
  105. data/lib/freight_kit/carriers/ew_riverside_trucking.rb +10 -0
  106. data/lib/freight_kit/carriers/express_2000_inc.rb +12 -0
  107. data/lib/freight_kit/carriers/express_services_international.rb +10 -0
  108. data/lib/freight_kit/carriers/f_and_a_express.rb +27 -0
  109. data/lib/freight_kit/carriers/fairmont_logistics.rb +13 -0
  110. data/lib/freight_kit/carriers/fargo_cargo.rb +10 -0
  111. data/lib/freight_kit/carriers/fast_freight_transportation.rb +10 -0
  112. data/lib/freight_kit/carriers/fast_load_transport.rb +10 -0
  113. data/lib/freight_kit/carriers/fed_ex_express.rb +30 -0
  114. data/lib/freight_kit/carriers/fed_ex_ground.rb +24 -0
  115. data/lib/freight_kit/carriers/fed_ex_ltl_economy.rb +11 -0
  116. data/lib/freight_kit/carriers/fed_ex_ltl_priority.rb +11 -0
  117. data/lib/freight_kit/carriers/first_trucking_express.rb +10 -0
  118. data/lib/freight_kit/carriers/flash_trucking.rb +10 -0
  119. data/lib/freight_kit/carriers/fort_transportation_and_service_company_inc.rb +37 -0
  120. data/lib/freight_kit/carriers/forward_air.rb +789 -0
  121. data/lib/freight_kit/carriers/frahtex.rb +10 -0
  122. data/lib/freight_kit/carriers/frozen_food_express.rb +10 -0
  123. data/lib/freight_kit/carriers/gholia_bros_trucking.rb +36 -0
  124. data/lib/freight_kit/carriers/global_cargo.rb +10 -0
  125. data/lib/freight_kit/carriers/global_logistics_and_transportation.rb +10 -0
  126. data/lib/freight_kit/carriers/gls_freight.rb +32 -0
  127. data/lib/freight_kit/carriers/go_trucking_services.rb +10 -0
  128. data/lib/freight_kit/carriers/gold_eagle_transportation.rb +11 -0
  129. data/lib/freight_kit/carriers/golden_drop_trucking.rb +10 -0
  130. data/lib/freight_kit/carriers/gonzalez_transportation.rb +10 -0
  131. data/lib/freight_kit/carriers/gps_transport.rb +10 -0
  132. data/lib/freight_kit/carriers/greene_enterprise.rb +10 -0
  133. data/lib/freight_kit/carriers/gsa_international.rb +10 -0
  134. data/lib/freight_kit/carriers/gsp_express.rb +24 -0
  135. data/lib/freight_kit/carriers/gsv_transportation.rb +10 -0
  136. data/lib/freight_kit/carriers/gta_transportation.rb +10 -0
  137. data/lib/freight_kit/carriers/guam_freight_services.rb +10 -0
  138. data/lib/freight_kit/carriers/harrah_transportation.rb +23 -0
  139. data/lib/freight_kit/carriers/her_trucking.rb +10 -0
  140. data/lib/freight_kit/carriers/hercules_freight.rb +20 -0
  141. data/lib/freight_kit/carriers/highlander_xpress.rb +36 -0
  142. data/lib/freight_kit/carriers/hn_transport.rb +10 -0
  143. data/lib/freight_kit/carriers/honolulu_freight_service.rb +10 -0
  144. data/lib/freight_kit/carriers/hot_line_freight_system_inc.rb +12 -0
  145. data/lib/freight_kit/carriers/hotshot_freight_of_texas.rb +13 -0
  146. data/lib/freight_kit/carriers/houser_transport.rb +27 -0
  147. data/lib/freight_kit/carriers/infiniti_freight_logistics.rb +28 -0
  148. data/lib/freight_kit/carriers/infinity_trucking.rb +10 -0
  149. data/lib/freight_kit/carriers/interstate_tma.rb +10 -0
  150. data/lib/freight_kit/carriers/intrade_industries.rb +10 -0
  151. data/lib/freight_kit/carriers/jasper_trucking.rb +28 -0
  152. data/lib/freight_kit/carriers/jb_hunt.rb +11 -0
  153. data/lib/freight_kit/carriers/jfj_transportation.rb +8 -8
  154. data/lib/freight_kit/carriers/jkb_express.rb +10 -0
  155. data/lib/freight_kit/carriers/jlm_transport.rb +10 -0
  156. data/lib/freight_kit/carriers/johansson_transport.rb +10 -0
  157. data/lib/freight_kit/carriers/jones_express.rb +10 -0
  158. data/lib/freight_kit/carriers/jp_logistics.rb +41 -0
  159. data/lib/freight_kit/carriers/just_in_time_cargo.rb +29 -0
  160. data/lib/freight_kit/carriers/kengkok_times.rb +10 -0
  161. data/lib/freight_kit/carriers/kings_express.rb +10 -0
  162. data/lib/freight_kit/carriers/klc_transportation.rb +10 -0
  163. data/lib/freight_kit/carriers/km_trucking.rb +10 -0
  164. data/lib/freight_kit/carriers/kma_logistics.rb +10 -0
  165. data/lib/freight_kit/carriers/krc_logistics.rb +10 -0
  166. data/lib/freight_kit/carriers/ktx.rb +10 -0
  167. data/lib/freight_kit/carriers/landstar.rb +25 -0
  168. data/lib/freight_kit/carriers/lanter_distributing_llc.rb +30 -0
  169. data/lib/freight_kit/carriers/ld_trucking.rb +10 -0
  170. data/lib/freight_kit/carriers/legacy_logistics_solutions.rb +10 -0
  171. data/lib/freight_kit/carriers/leonards_express.rb +10 -0
  172. data/lib/freight_kit/carriers/liberty_linehaul_west.rb +28 -0
  173. data/lib/freight_kit/carriers/liberty_transport.rb +10 -0
  174. data/lib/freight_kit/carriers/lightning_express.rb +10 -0
  175. data/lib/freight_kit/carriers/lj_express.rb +24 -0
  176. data/lib/freight_kit/carriers/lkp_enterprises.rb +10 -0
  177. data/lib/freight_kit/carriers/ltl_pros.rb +28 -0
  178. data/lib/freight_kit/carriers/m_and_m_and_sons.rb +10 -0
  179. data/lib/freight_kit/carriers/mag_lines_transport.rb +10 -0
  180. data/lib/freight_kit/carriers/magic_messenger.rb +24 -0
  181. data/lib/freight_kit/carriers/majors_transit.rb +10 -0
  182. data/lib/freight_kit/carriers/map_global_logistics.rb +10 -0
  183. data/lib/freight_kit/carriers/matths_trucking.rb +11 -0
  184. data/lib/freight_kit/carriers/mav_canadian_transport.rb +13 -0
  185. data/lib/freight_kit/carriers/mc_systems.rb +35 -0
  186. data/lib/freight_kit/carriers/mega_fleet.rb +10 -0
  187. data/lib/freight_kit/carriers/mega_trans_group.rb +28 -0
  188. data/lib/freight_kit/carriers/meta_express.rb +10 -0
  189. data/lib/freight_kit/carriers/mia_transportation.rb +10 -0
  190. data/lib/freight_kit/carriers/midwest_motor_express.rb +14 -0
  191. data/lib/freight_kit/carriers/midwest_transport_and_trucking.rb +10 -0
  192. data/lib/freight_kit/carriers/mikade_delivery_service.rb +10 -0
  193. data/lib/freight_kit/carriers/mohoff_freight_lines.rb +23 -0
  194. data/lib/freight_kit/carriers/montata_travelers_express.rb +10 -0
  195. data/lib/freight_kit/carriers/morgan_van_lines.rb +29 -0
  196. data/lib/freight_kit/carriers/moto_transportation.rb +24 -0
  197. data/lib/freight_kit/carriers/mountain_valley_express.rb +197 -0
  198. data/lib/freight_kit/carriers/ms_freight.rb +27 -0
  199. data/lib/freight_kit/carriers/mvg_transport.rb +10 -0
  200. data/lib/freight_kit/carriers/n_and_m_transfer_co_inc.rb +29 -0
  201. data/lib/freight_kit/carriers/nabot_transport_solutions.rb +10 -0
  202. data/lib/freight_kit/carriers/national_freight_xpress.rb +10 -0
  203. data/lib/freight_kit/carriers/navigation_group.rb +10 -0
  204. data/lib/freight_kit/carriers/nelson_trucking.rb +10 -0
  205. data/lib/freight_kit/carriers/network_1_transportation.rb +10 -0
  206. data/lib/freight_kit/carriers/new_century_transport.rb +28 -0
  207. data/lib/freight_kit/carriers/new_penn_motor_express.rb +11 -0
  208. data/lib/freight_kit/carriers/nieves_transportation.rb +10 -0
  209. data/lib/freight_kit/carriers/nolan_transportation_group.rb +26 -0
  210. data/lib/freight_kit/carriers/northland_trucking.rb +10 -0
  211. data/lib/freight_kit/carriers/northwest_carrier_logistics.rb +27 -0
  212. data/lib/freight_kit/carriers/nt_usa.rb +10 -0
  213. data/lib/freight_kit/carriers/nu_line_transportation.rb +10 -0
  214. data/lib/freight_kit/carriers/numark_transportation.rb +80 -0
  215. data/lib/freight_kit/carriers/nvk_transport.rb +10 -0
  216. data/lib/freight_kit/carriers/ny_transport.rb +10 -0
  217. data/lib/freight_kit/carriers/oak_harbor.rb +28 -0
  218. data/lib/freight_kit/carriers/oakline_transportation.rb +10 -0
  219. data/lib/freight_kit/carriers/old_dominion_freight_line.rb +30 -0
  220. data/lib/freight_kit/carriers/on_trac.rb +573 -0
  221. data/lib/freight_kit/carriers/one_hundred_one_transport.rb +10 -0
  222. data/lib/freight_kit/carriers/one_way_delivery.rb +10 -0
  223. data/lib/freight_kit/carriers/oracle_transportation_solutions.rb +10 -0
  224. data/lib/freight_kit/carriers/orange_courier.rb +27 -0
  225. data/lib/freight_kit/carriers/ortas_trucking.rb +10 -0
  226. data/lib/freight_kit/carriers/pac_trux_transportation.rb +10 -0
  227. data/lib/freight_kit/carriers/pacer.rb +10 -0
  228. data/lib/freight_kit/carriers/pacific_logistics.rb +10 -0
  229. data/lib/freight_kit/carriers/pacific_states_truck_lines.rb +10 -0
  230. data/lib/freight_kit/carriers/paradise_distributing.rb +10 -0
  231. data/lib/freight_kit/carriers/paramount_freight_systems.rb +10 -0
  232. data/lib/freight_kit/carriers/peninsula_truck_lines.rb +222 -0
  233. data/lib/freight_kit/carriers/pg_transport.rb +10 -0
  234. data/lib/freight_kit/carriers/pgs_360.rb +10 -0
  235. data/lib/freight_kit/carriers/pilot_freight_services.rb +10 -0
  236. data/lib/freight_kit/carriers/pious_trans.rb +27 -0
  237. data/lib/freight_kit/carriers/pitt_ohio_express.rb +30 -0
  238. data/lib/freight_kit/carriers/pki_logistics.rb +12 -0
  239. data/lib/freight_kit/carriers/plana_transportation.rb +28 -0
  240. data/lib/freight_kit/carriers/prestige.rb +10 -0
  241. data/lib/freight_kit/carriers/pro_trans_solutions.rb +28 -0
  242. data/lib/freight_kit/carriers/puma_logistics.rb +10 -0
  243. data/lib/freight_kit/carriers/pwc_international.rb +10 -0
  244. data/lib/freight_kit/carriers/quality_logistics.rb +10 -0
  245. data/lib/freight_kit/carriers/queen_star_trucking.rb +27 -0
  246. data/lib/freight_kit/carriers/r_and_l_carriers.rb +11 -0
  247. data/lib/freight_kit/carriers/rac_transport.rb +10 -0
  248. data/lib/freight_kit/carriers/re_logistics.rb +23 -0
  249. data/lib/freight_kit/carriers/reddaway.rb +11 -0
  250. data/lib/freight_kit/carriers/reefer_van_network.rb +13 -0
  251. data/lib/freight_kit/carriers/refrigerated_trucking_and_ltl_transportation_services.rb +10 -0
  252. data/lib/freight_kit/carriers/ridgeline_express.rb +10 -0
  253. data/lib/freight_kit/carriers/rist_transport.rb +29 -0
  254. data/lib/freight_kit/carriers/river_city_transport.rb +10 -0
  255. data/lib/freight_kit/carriers/roadrunner_transportation_services.rb +675 -0
  256. data/lib/freight_kit/carriers/roadtex.rb +13 -0
  257. data/lib/freight_kit/carriers/ronald_transport_services.rb +10 -0
  258. data/lib/freight_kit/carriers/rose_trucking.rb +24 -0
  259. data/lib/freight_kit/carriers/rp_and_j_transport.rb +24 -0
  260. data/lib/freight_kit/carriers/rpm_transportation.rb +11 -0
  261. data/lib/freight_kit/carriers/rude_transportation.rb +30 -0
  262. data/lib/freight_kit/carriers/s_and_s_logistics.rb +10 -0
  263. data/lib/freight_kit/carriers/saia.rb +470 -361
  264. data/lib/freight_kit/carriers/sb_transportation.rb +27 -0
  265. data/lib/freight_kit/carriers/schneider_national.rb +29 -0
  266. data/lib/freight_kit/carriers/schwarz_trucking.rb +10 -0
  267. data/lib/freight_kit/carriers/sewell_motor_express.rb +29 -0
  268. data/lib/freight_kit/carriers/shawnee_trucking.rb +28 -0
  269. data/lib/freight_kit/carriers/shi_logistics.rb +10 -0
  270. data/lib/freight_kit/carriers/sinbad_transport.rb +10 -0
  271. data/lib/freight_kit/carriers/skyway.rb +10 -0
  272. data/lib/freight_kit/carriers/smith_cargo_transportation_services.rb +23 -0
  273. data/lib/freight_kit/carriers/sna_transportation.rb +10 -0
  274. data/lib/freight_kit/carriers/solid_group.rb +10 -0
  275. data/lib/freight_kit/carriers/solution_carrier_express.rb +10 -0
  276. data/lib/freight_kit/carriers/southeastern_freight_lines.rb +450 -0
  277. data/lib/freight_kit/carriers/southwestern_motor_transport.rb +30 -0
  278. data/lib/freight_kit/carriers/span_alaska.rb +10 -0
  279. data/lib/freight_kit/carriers/specialize_transportation.rb +27 -0
  280. data/lib/freight_kit/carriers/ssi_refrigerated_express.rb +10 -0
  281. data/lib/freight_kit/carriers/standard_forwarding_llc.rb +28 -0
  282. data/lib/freight_kit/carriers/star_american_enterprise.rb +10 -0
  283. data/lib/freight_kit/carriers/sterling_transportation.rb +10 -0
  284. data/lib/freight_kit/carriers/stg.rb +163 -0
  285. data/lib/freight_kit/carriers/supervan_service.rb +10 -0
  286. data/lib/freight_kit/carriers/sutton_transport_inc.rb +12 -0
  287. data/lib/freight_kit/carriers/swift_transportation.rb +28 -0
  288. data/lib/freight_kit/carriers/t_force_worldwide.rb +617 -0
  289. data/lib/freight_kit/carriers/tax_airfreight_inc.rb +35 -0
  290. data/lib/freight_kit/carriers/tforce_freight_inc.rb +30 -0
  291. data/lib/freight_kit/carriers/the_custom_companies.rb +162 -0
  292. data/lib/freight_kit/carriers/thk_trucking.rb +28 -0
  293. data/lib/freight_kit/carriers/tiger_cool_express.rb +11 -0
  294. data/lib/freight_kit/carriers/tili_logistics.rb +10 -0
  295. data/lib/freight_kit/carriers/tmt_industries.rb +10 -0
  296. data/lib/freight_kit/carriers/top_ten_express.rb +28 -0
  297. data/lib/freight_kit/carriers/total_quality_logistics.rb +338 -0
  298. data/lib/freight_kit/carriers/total_transportation.rb +258 -0
  299. data/lib/freight_kit/carriers/trans_international_trucking.rb +29 -0
  300. data/lib/freight_kit/carriers/treasure_transportation.rb +10 -0
  301. data/lib/freight_kit/carriers/tri_state_services.rb +10 -0
  302. data/lib/freight_kit/carriers/tritex_freighters.rb +10 -0
  303. data/lib/freight_kit/carriers/triways.rb +10 -0
  304. data/lib/freight_kit/carriers/tsi_kansas.rb +29 -0
  305. data/lib/freight_kit/carriers/u_and_r_transportation.rb +23 -0
  306. data/lib/freight_kit/carriers/union_pacific.rb +11 -0
  307. data/lib/freight_kit/carriers/united_freight_logistics.rb +10 -0
  308. data/lib/freight_kit/carriers/unlimited_distance_transportation.rb +10 -0
  309. data/lib/freight_kit/carriers/up_streamline.rb +10 -0
  310. data/lib/freight_kit/carriers/ups_freight.rb +12 -0
  311. data/lib/freight_kit/carriers/us_freightways.rb +10 -0
  312. data/lib/freight_kit/carriers/usa_truck.rb +28 -0
  313. data/lib/freight_kit/carriers/usf_holland.rb +11 -0
  314. data/lib/freight_kit/carriers/valley_cartage.rb +11 -0
  315. data/lib/freight_kit/carriers/vc_transport.rb +10 -0
  316. data/lib/freight_kit/carriers/vision_express.rb +11 -0
  317. data/lib/freight_kit/carriers/vision_logistics_group.rb +10 -0
  318. data/lib/freight_kit/carriers/vmg_transportation_group.rb +10 -0
  319. data/lib/freight_kit/carriers/volpe_express.rb +10 -0
  320. data/lib/freight_kit/carriers/ward_trucking.rb +29 -0
  321. data/lib/freight_kit/carriers/wdwb.rb +10 -0
  322. data/lib/freight_kit/carriers/western_flyer_express.rb +28 -0
  323. data/lib/freight_kit/carriers/western_regional_delivery_service.rb +271 -0
  324. data/lib/freight_kit/carriers/western_specialized_trucking.rb +22 -0
  325. data/lib/freight_kit/carriers/win_distribution.rb +28 -0
  326. data/lib/freight_kit/carriers/wlb_transport.rb +10 -0
  327. data/lib/freight_kit/carriers/x_trux.rb +29 -0
  328. data/lib/freight_kit/carriers/xpo_logistics.rb +427 -0
  329. data/lib/freight_kit/carriers/xpress_global_systems.rb +30 -0
  330. data/lib/freight_kit/carriers/xylo_trucking.rb +10 -0
  331. data/lib/freight_kit/carriers/yrc_freight.rb +24 -0
  332. data/lib/freight_kit/carriers/zentner_transportation.rb +28 -0
  333. data/lib/freight_kit/carriers.rb +331 -34
  334. data/lib/freight_kit/countries.rb +22 -0
  335. data/lib/freight_kit/error.rb +0 -2
  336. data/lib/freight_kit/errors/document_not_found_error.rb +0 -2
  337. data/lib/freight_kit/errors/expired_credentials_error.rb +0 -2
  338. data/lib/freight_kit/errors/http_error.rb +0 -2
  339. data/lib/freight_kit/errors/invalid_credentials_error.rb +0 -2
  340. data/lib/freight_kit/errors/response_error.rb +0 -2
  341. data/lib/freight_kit/errors/shipment_not_found_error.rb +0 -2
  342. data/lib/freight_kit/errors/unserviceable_accessorials_error.rb +2 -4
  343. data/lib/freight_kit/errors/unserviceable_error.rb +0 -2
  344. data/lib/freight_kit/helpers/documentable.rb +0 -2
  345. data/lib/freight_kit/helpers/pickupable.rb +3 -5
  346. data/lib/freight_kit/helpers/rateable.rb +0 -2
  347. data/lib/freight_kit/helpers/trackable.rb +0 -2
  348. data/lib/freight_kit/http_client/cache_store.rb +2 -4
  349. data/lib/freight_kit/http_client/log_device.rb +0 -2
  350. data/lib/freight_kit/http_client/response.rb +0 -2
  351. data/lib/freight_kit/http_client/revalidation.rb +0 -2
  352. data/lib/freight_kit/http_client/safe_retries.rb +0 -2
  353. data/lib/freight_kit/http_client/zstd.rb +2 -4
  354. data/lib/freight_kit/http_client.rb +8 -12
  355. data/lib/freight_kit/model.rb +1 -3
  356. data/lib/freight_kit/models/address.rb +15 -0
  357. data/lib/freight_kit/models/contact.rb +3 -4
  358. data/lib/freight_kit/models/country.rb +20 -0
  359. data/lib/freight_kit/models/credential.rb +14 -16
  360. data/lib/freight_kit/models/date_time.rb +0 -2
  361. data/lib/freight_kit/models/document_response.rb +0 -2
  362. data/lib/freight_kit/models/label.rb +0 -2
  363. data/lib/freight_kit/models/location.rb +10 -25
  364. data/lib/freight_kit/models/pickup_response.rb +0 -2
  365. data/lib/freight_kit/models/price.rb +0 -2
  366. data/lib/freight_kit/models/rate.rb +0 -2
  367. data/lib/freight_kit/models/rate_response.rb +0 -2
  368. data/lib/freight_kit/models/region.rb +19 -0
  369. data/lib/freight_kit/models/response.rb +0 -2
  370. data/lib/freight_kit/models/shipment.rb +4 -6
  371. data/lib/freight_kit/models/shipment_event.rb +0 -2
  372. data/lib/freight_kit/models/terminal.rb +10 -0
  373. data/lib/freight_kit/models/tracking_response.rb +0 -2
  374. data/lib/freight_kit/package.rb +51 -53
  375. data/lib/freight_kit/package_item.rb +14 -14
  376. data/lib/freight_kit/packaging.rb +21 -26
  377. data/lib/freight_kit/platform.rb +0 -32
  378. data/lib/freight_kit/platforms/carrier_logistics.rb +331 -345
  379. data/lib/freight_kit/platforms/next_tms.rb +93 -0
  380. data/lib/freight_kit/platforms/the_great_information_factory.rb +500 -425
  381. data/lib/freight_kit/regions.rb +27 -0
  382. data/lib/freight_kit/shipment_packer.rb +36 -38
  383. data/lib/freight_kit/tariff/overlength_rule.rb +1 -5
  384. data/lib/freight_kit/tariff.rb +0 -2
  385. data/lib/freight_kit.rb +84 -11
  386. metadata +361 -51
  387. data/configuration/carriers/abfs.yml +0 -124
  388. data/configuration/carriers/btvp.yml +0 -84
  389. data/configuration/carriers/ccyq.yml +0 -121
  390. data/configuration/carriers/clni.yml +0 -113
  391. data/configuration/carriers/cnwy.yml +0 -113
  392. data/configuration/carriers/ctbv.yml +0 -117
  393. data/configuration/carriers/dcha.yml +0 -105
  394. data/configuration/carriers/dlds.yml +0 -111
  395. data/configuration/carriers/dphe.yml +0 -130
  396. data/configuration/carriers/drrq.yml +0 -131
  397. data/configuration/carriers/fcsy.yml +0 -102
  398. data/configuration/carriers/fwda.yml +0 -137
  399. data/configuration/carriers/jfj_transportation.yml +0 -2
  400. data/configuration/carriers/mtvl.yml +0 -12
  401. data/configuration/carriers/numk.yml +0 -14
  402. data/configuration/carriers/otcl.yml +0 -124
  403. data/configuration/carriers/pens.yml +0 -22
  404. data/configuration/carriers/rdfs.yml +0 -142
  405. data/configuration/carriers/saia.yml +0 -129
  406. data/configuration/carriers/sefl.yml +0 -115
  407. data/configuration/carriers/totl.yml +0 -111
  408. data/configuration/carriers/tqyl.yml +0 -28
  409. data/configuration/carriers/wrds.yml +0 -20
  410. data/configuration/platforms/carrier_logistics.yml +0 -25
  411. data/configuration/platforms/next.yml +0 -12
  412. data/configuration/platforms/the_great_information_factory.yml +0 -122
  413. data/lib/freight_kit/carriers/abfs.rb +0 -421
  414. data/lib/freight_kit/carriers/btvp.rb +0 -29
  415. data/lib/freight_kit/carriers/ccyq.rb +0 -310
  416. data/lib/freight_kit/carriers/clni.rb +0 -396
  417. data/lib/freight_kit/carriers/cnwy.rb +0 -327
  418. data/lib/freight_kit/carriers/ctbv.rb +0 -53
  419. data/lib/freight_kit/carriers/dcha.rb +0 -76
  420. data/lib/freight_kit/carriers/dlds.rb +0 -49
  421. data/lib/freight_kit/carriers/dphe.rb +0 -472
  422. data/lib/freight_kit/carriers/drrq.rb +0 -580
  423. data/lib/freight_kit/carriers/fcsy.rb +0 -57
  424. data/lib/freight_kit/carriers/fwda.rb +0 -744
  425. data/lib/freight_kit/carriers/mtvl.rb +0 -34
  426. data/lib/freight_kit/carriers/numk.rb +0 -58
  427. data/lib/freight_kit/carriers/otcl.rb +0 -520
  428. data/lib/freight_kit/carriers/pens.rb +0 -204
  429. data/lib/freight_kit/carriers/rdfs.rb +0 -521
  430. data/lib/freight_kit/carriers/sefl.rb +0 -342
  431. data/lib/freight_kit/carriers/totl.rb +0 -172
  432. data/lib/freight_kit/carriers/tqyl.rb +0 -337
  433. data/lib/freight_kit/carriers/wrds.rb +0 -246
  434. data/lib/freight_kit/platforms/next.rb +0 -101
@@ -1,25 +0,0 @@
1
- :api:
2
- :domain: tracking.carrierlogistics.com
3
- :endpoints:
4
- :bol: /scripts/@CARRIER_CODE@.pol/web-login.htm?
5
- :pod: /scripts/@CARRIER_CODE@.pol/web-login.htm?
6
- :rates: /scripts/@CARRIER_CODE@.pol/ratequote.xml?
7
- :track: /scripts/@CARRIER_CODE@.pol/protracexml.htm?
8
- :use_ssl:
9
- :bol: true
10
- :pod: true
11
- :rates: true
12
- :track: true
13
- :attributes:
14
- :rates:
15
- :with_excessive_length_fees: false
16
- :events:
17
- :types:
18
- :arrived_at_terminal: trailer arrived
19
- :delivered: delivered
20
- :departed: trailer departed
21
- :out_for_delivery: out for delivery
22
- :picked_up: picked up
23
- :pickup_scheduled: pickup request received
24
- :trailer_closed: loaded on trailer
25
- :trailer_unloaded: undisp
@@ -1,12 +0,0 @@
1
- :api:
2
- :endpoints:
3
- :authenticate: /authenticate
4
- :show: /shipments
5
- :methods:
6
- :authenticate: :post
7
- :show: :get
8
- :prefix: /api/v1
9
- :scopes:
10
- :broker: /broker
11
- :customer: /customer
12
- :use_ssl: true
@@ -1,122 +0,0 @@
1
- :accessorials:
2
- :mappable:
3
- :appointment_delivery: NOTFEE
4
- :inside_delivery: INSDEL
5
- :liftgate_delivery: LIFDEL
6
- :liftgate_pickup: LIFPIC
7
- :mall_delivery: INSDEL
8
- :residential_delivery: RESDEL
9
- :residential_pickup: RESPIC
10
- :restaurant_delivery: INSDEL
11
- # May be inaccurate
12
- :unquotable:
13
- - :athletic_facility_delivery
14
- - :athletic_facility_pickup
15
- - :cemetery_delivery
16
- - :cemetery_pickup
17
- - :church_delivery
18
- - :church_pickup
19
- - :construction_delivery
20
- - :construction_pickup
21
- - :dock_dropoff
22
- - :dock_pickup
23
- - :farm_delivery
24
- - :farm_pickup
25
- - :fitness_center_delivery
26
- - :fitness_center_pickup
27
- - :flatbed_delivery
28
- - :flatbed_pickup
29
- - :golf_course_delivery
30
- - :golf_course_pickup
31
- - :government_delivery
32
- - :government_pickup
33
- - :grocery_store_delivery
34
- - :grocery_store_pickup
35
- - :holiday_delivery
36
- - :holiday_pickup
37
- - :hospital_delivery
38
- - :hospital_pickup
39
- - :hotel_delivery
40
- - :hotel_pickup
41
- - :inspection_site_delivery
42
- - :inspection_site_pickup
43
- - :jobsite_delivery
44
- - :jobsite_pickup
45
- - :military_site_delivery
46
- - :military_site_pickup
47
- - :mine_site_delivery
48
- - :mine_site_pickup
49
- - :motel_delivery
50
- - :motel_pickup
51
- - :nursing_home_delivery
52
- - :nursing_home_pickup
53
- - :park_delivery
54
- - :park_pickup
55
- - :prison_delivery
56
- - :prison_pickup
57
- - :ranch_delivery
58
- - :ranch_pickup
59
- - :reservation_delivery
60
- - :reservation_pickup
61
- - :resort_delivery
62
- - :resort_pickup
63
- - :restaurant_pickup
64
- - :school_delivery
65
- - :school_pickup
66
- - :steel_mill_delivery
67
- - :steel_mill_pickup
68
- - :storage_facility_delivery
69
- - :storage_facility_pickup
70
- - :university_delivery
71
- - :university_pickup
72
- - :utility_site_delivery
73
- - :utility_site_pickup
74
- # May be inaccurate
75
- :unserviceable:
76
- - :afterhours_delivery
77
- - :airport_delivery
78
- - :airport_pickup
79
- - :amusement_park_delivery
80
- - :amusement_park_pickup
81
- - :appointment_pickup
82
- - :brewery_delivery
83
- - :brewery_pickup
84
- - :convention_delivery
85
- - :convention_pickup
86
- - :customs_brokerage
87
- - :driver_assist
88
- - :early_morning_delivery
89
- - :fair_delivery
90
- - :fair_pickup
91
- - :grocery_warehouse_delivery
92
- - :grocery_warehouse_pickup
93
- - :guaranteed_delivery
94
- - :guaranteed_delivery_am
95
- - :guaranteed_delivery_pm
96
- - :inside_pickup
97
- - :marina_delivery
98
- - :marina_pickup
99
- - :saturday_delivery
100
- - :saturday_pickup
101
- - :sunday_delivery
102
- - :sunday_pickup
103
- - :winery_delivery
104
- - :winery_pickup
105
- :api:
106
- :actions:
107
- :rates: :getquote
108
- :track: :tracktrace
109
- :pickup: :requestpickup
110
- :use_ssl:
111
- :rates: false
112
- :track: false
113
- :events:
114
- :types:
115
- :arrived_at_terminal: arrived
116
- :delivered: delivered
117
- :departed: departed
118
- :out_for_delivery: out for delvry
119
- :pickup_information_sent_to_carrier: p/u dispatched
120
- :services:
121
- :types:
122
- - :standard
@@ -1,421 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module FreightKit
4
- class ABFS < FreightKit::Carrier
5
- class << self
6
- def find_rates_with_declared_value?
7
- true
8
- end
9
-
10
- def maximum_height
11
- Measured::Length.new(105, :inches)
12
- end
13
-
14
- def maximum_weight
15
- Measured::Weight.new(150, :pounds)
16
- end
17
-
18
- def minimum_length_for_overlength_fees
19
- Measured::Length.new(6, :feet)
20
- end
21
-
22
- def overlength_fees_require_tariff?
23
- false
24
- end
25
-
26
- def pickup_number_is_tracking_number?
27
- true
28
- end
29
-
30
- def required_credential_types
31
- %i[api api_key]
32
- end
33
-
34
- def requirements
35
- %i[credentials]
36
- end
37
- end
38
-
39
- REACTIVE_FREIGHT_CARRIER = true
40
-
41
- class << self
42
- attr_reader :name, :scac
43
- end
44
- @name = 'ABF Freight System'
45
- @scac = 'ABFS'
46
-
47
- XML_HEADERS = {
48
- 'Accept' => 'application/xml',
49
- 'charset' => 'utf-8',
50
- 'Content-Type' => 'application/xml'
51
- }.freeze
52
-
53
- def serviceable_accessorials?(accessorials)
54
- unsupported_accessorials = conf.dig(:accessorials, :unserviceable).select do |key|
55
- accessorials.include?(key)
56
- end.sort!
57
-
58
- message = "#{unsupported_accessorials.join(", ")} unserviceable"
59
- raise FreightKit::UnserviceableError, message if unsupported_accessorials.any?
60
-
61
- true
62
- end
63
-
64
- def validate_packages(packages)
65
- # @note This doesn't refer to package quantities, instead it referes to maximum number of package-related URL
66
- # query params
67
- raise FreightKit::UnserviceableError, 'Too many packages' if packages.count > 15
68
-
69
- unsupported_packaging_types = packages.map(&:packaging).map(&:type).select do |type|
70
- conf.dig(:package_types).keys.exclude?(type)
71
- end.sort!
72
-
73
- raise FreightKit::UnserviceableError,
74
- "#{unsupported_packaging_types.join(", ").upcase_first} unserviceable" if unsupported_packaging_types.any?
75
-
76
- true
77
- end
78
-
79
- # Documents
80
-
81
- # Pickups
82
-
83
- # Rates
84
-
85
- def find_rates(shipment:)
86
- begin
87
- serviceable_accessorials?(shipment.accessorials)
88
- validate_packages(shipment.packages)
89
- rescue UnserviceableError => e
90
- return RateResponse.new(error: e)
91
- end
92
-
93
- request = build_rate_request(shipment:)
94
- # commit(request)
95
- parse_rate_response(shipment:, response: commit(request))
96
- end
97
-
98
- # Tracking
99
-
100
- protected
101
-
102
- def build_url(action, options = {})
103
- uri = URI.parse("https://#{@conf.dig(:api, :domain)}#{@conf.dig(:api, :endpoints, action)}")
104
- uri.query = options[:params].to_query if options[:params].present?
105
-
106
- uri.to_s
107
- end
108
-
109
- def build_request(action, options = {})
110
- request = {
111
- url: build_url(action, options),
112
- headers: XML_HEADERS,
113
- method: @conf.dig(:api, :methods, action)
114
- }
115
-
116
- save_request(request)
117
- request
118
- end
119
-
120
- def commit(request)
121
- body = request[:body]
122
- headers = request[:headers]
123
- method = request[:method]
124
- url = request[:url]
125
-
126
- response = if method == :post
127
- HTTPClient.post(url, headers:, body:)
128
- else
129
- HTTPClient.get(url, headers:)
130
- end
131
-
132
- response.deep_transform_keys! { |key| key.downcase.to_sym }[:abf] if response&.parsed_response
133
- end
134
-
135
- # Documents
136
-
137
- # Pickups
138
-
139
- # Rates
140
-
141
- def build_rate_request(shipment:)
142
- broker_credential = fetch_credential(:api)
143
- tms_credential = fetch_credential(:api_key)
144
-
145
- account = { 'ID' => broker_credential.username }
146
- account['APP_ID'] = tms_credential.api_key
147
-
148
- delivery = {}.tap do |builder|
149
- delivery_limited_access_type = shipment.accessorials.map do |key|
150
- conf.dig(:accessorials, :delivery_limited_access_types, key)
151
- end[0]
152
-
153
- if delivery_limited_access_type.present?
154
- builder['Acc_LAD'] = 'Y'
155
- builder['LADType'] = delivery_limited_access_type
156
- end
157
-
158
- builder['Acc_CSD'] = 'Y' if shipment.accessorials.include?(:construction_site_delivery)
159
- builder['Acc_GRD_DEL'] = 'Y' if shipment.accessorials.include?(:liftgate_delivery)
160
- builder['Acc_IDEL'] = 'Y' if shipment.accessorials.include?(:inside_delivery)
161
- builder['Acc_RDEL'] = 'Y' if shipment.accessorials.include?(:residential_delivery)
162
-
163
- if shipment.accessorials.include?(:convention_delivery)
164
- builder['Acc_TRDSHWD'] = 'Y'
165
- builder['TRDSHWDType'] = 'DTS' if shipment.accessorials.include?(:convention_delivery)
166
- end
167
- end
168
-
169
- pickup = {}.tap do |builder|
170
- pickup_limited_access_type = conf
171
- .dig(:accessorials, :pickup_limited_access_types)
172
- .values_at(*shipment.accessorials)
173
- .first
174
-
175
- if pickup_limited_access_type.present?
176
- builder['Acc_LAP'] = 'Y'
177
- builder['LAPType'] = pickup_limited_access_type
178
- end
179
-
180
- builder['Acc_GRD_PU'] = 'Y' if shipment.accessorials.include?(:liftgate_pickup)
181
- builder['Acc_IPU'] = 'Y' if shipment.accessorials.include?(:inside_pickup)
182
- builder['Acc_RPU'] = 'Y' if shipment.accessorials.include?(:residential_pickup)
183
- builder['Acc_TRDSHWO'] = 'DTS' if shipment.accessorials.include?(:convention_pickup)
184
- end
185
-
186
- shipper = {
187
- 'ShipCity' => shipment.origin.city,
188
- 'ShipState' => shipment.origin.province,
189
- 'ShipZip' => shipment.origin.postal_code,
190
- 'ShipCountry' => shipment.origin.country.code(:alpha2).value
191
- }
192
-
193
- consignee = {
194
- 'ConsCity' => shipment.destination.city,
195
- 'ConsState' => shipment.destination.province,
196
- 'ConsZip' => shipment.destination.postal_code,
197
- 'ConsCountry' => shipment.destination.country.code(:alpha2).value
198
- }
199
-
200
- third_party = {
201
- 'TPBAcct' => broker_credential.account,
202
- 'TPBAddr' => [customer_location.address1, customer_location.address2].compact.join(', '),
203
- 'TPBAff' => 'Y',
204
- 'TPBCity' => customer_location.city,
205
- 'TPBCountry' => customer_location.country.code(:alpha2).value,
206
- 'TPBName' => customer_location.contact&.company_name,
207
- 'TPBPay' => 'Y',
208
- 'TPBState' => customer_location.province,
209
- 'TPBZip' => customer_location.postal_code
210
- }
211
- .compact_blank!
212
-
213
- shipment.packages.map { |p| p.pounds(:total).ceil }.sum
214
-
215
- commodities = shipment.packages.map.with_index do |package, i|
216
- {
217
- "Class#{i + 1}" => package.freight_class,
218
- "FrtHght#{i + 1}" => package.inches(:height),
219
- "FrtLng#{i + 1}" => package.inches(:length),
220
- "FrtWdth#{i + 1}" => package.inches(:width),
221
- "UnitNo#{i + 1}" => package.quantity,
222
- "UnitType#{i + 1}" => conf.dig(:package_types, package.packaging.type),
223
- "Wgt#{i + 1}" => package.pounds(:total)
224
- }
225
- end
226
- commodities = commodities.reduce({}, :merge)
227
-
228
- # @note API won't accept any other date
229
- time = Time.current.in_time_zone('America/Chicago')
230
-
231
- specifics = {
232
- 'FrtLWHType' => 'IN',
233
- 'ShipMonth' => time.strftime('%m'),
234
- 'ShipDay' => time.strftime('%d'),
235
- 'ShipYear' => time.strftime('%Y')
236
- }
237
-
238
- if shipment.packages.map { |package| package.cubic_ft(:each) }.all?(&:present?)
239
- specifics['Cube'] = shipment.packages.sum { |package| package.cubic_ft(:each) }.ceil
240
- end
241
-
242
- other_options = {}.tap do |builder|
243
- alpha2_codes = [shipment.destination.country, shipment.origin.country].map do |country|
244
- country.code(:alpha2).value
245
- end
246
-
247
- builder['Acc_ARR'] = 'Y' if shipment.accessorials.include?(:appointment_delivery)
248
-
249
- if alpha2_codes.any? { |alpha2_code| alpha2_code == 'US' } &&
250
- alpha2_codes.any? { |alpha2_code| alpha2_code != 'US' }
251
- builder['Acc_BOND'] = 'Y'
252
- end
253
-
254
- unless shipment.accessorials.intersect?(%i[
255
- church_delivery
256
- inside_delivery
257
- liftgate_delivery
258
- residential_delivery
259
- restaurant_delivery
260
- ])
261
- builder['Acc_CUL'] = 'Y'
262
- end
263
-
264
- builder['Acc_HAZ'] = 'Y' if shipment.packages.any?(&:hazmat?)
265
- builder['Acc_PALLET'] = 'Y' if shipment.packages.map(&:packaging).all?(&:pallet?)
266
-
267
- unless shipment.accessorials.intersect?(%i[
268
- church_pickup
269
- inside_pickup
270
- liftgate_pickup
271
- residential_pickup
272
- restaurant_pickup
273
- ])
274
- builder['Acc_SL'] = 'Y'
275
- end
276
-
277
- builder['Acc_SS'] = 'Y'
278
-
279
- longest_dimension_in = if shipment.packages.all? do |package|
280
- package.length(:inch).present? && package.width(:inch).present?
281
- end
282
-
283
- shipment.packages.map do |package|
284
- [package.length(:in), package.width(:in)].max
285
- end.max.ceil
286
- end
287
-
288
- if longest_dimension_in.present?
289
- builder['ODLongestSide'] = longest_dimension_in
290
-
291
- if longest_dimension_in >= 96
292
- builder['Acc_OD'] = 'Y'
293
-
294
- if longest_dimension_in >= 336
295
- builder['Acc_CAP'] = 'Y'
296
- end
297
- end
298
- end
299
-
300
- if shipment.declared_value_cents.present? && shipment.declared_value_cents.positive?
301
- builder['Acc_ELC'] = 'Y'
302
- builder['DeclaredType'] = 'N'
303
- builder['DeclaredValue'] = (shipment.declared_value_cents / 100).ceil
304
- end
305
- end
306
-
307
- params = [
308
- account,
309
- commodities,
310
- consignee,
311
- delivery,
312
- other_options,
313
- pickup,
314
- shipper,
315
- specifics,
316
- third_party,
317
- ]
318
- .reduce({}, :merge)
319
-
320
- build_request(:rates, { params: })
321
- end
322
-
323
- def parse_rate_response(shipment:, response:)
324
- rate_response = RateResponse.new(request: last_request, response:)
325
-
326
- error_count = response[:numerrors].to_i
327
- if error_count.positive?
328
- # response.dig(:error, :errorcode).to_i
329
-
330
- message = response.dig(:error, :errormessage)
331
- rate_response.error = ResponseError.new(message)
332
- return rate_response
333
- end
334
-
335
- if response[:charge].blank?
336
- rate_response.error = ResponseError.new('Cost is blank')
337
- return rate_response
338
- end
339
-
340
- estimate_reference = response[:quoteid]
341
- included_charges = response[:includedcharges].compact_blank!.keys
342
- transit_days = response[:standard_service_days].to_i
343
-
344
- rates = [].tap do |builder|
345
- cents = (response[:charge].to_f * 100).to_i
346
- transit_days = parse_transit_duration(response[:shipdate], response[:advertisedduedate])
347
- with_excessive_length_fees = included_charges.include?(:overdimension)
348
-
349
- builder << Rate.new(
350
- carrier: self,
351
- carrier_name: self.class.name,
352
- currency: 'USD',
353
- estimate_reference:,
354
- scac: self.class.scac.upcase,
355
- service_name: :standard,
356
- shipment:,
357
- prices: [
358
- Price.new(
359
- blame: :api,
360
- cents:,
361
- description: 'Freight',
362
- ),
363
- ],
364
- transit_days:,
365
- with_excessive_length_fees:,
366
- )
367
-
368
- guaranteed_options = response.dig(:guaranteedoptions, :option)
369
-
370
- if guaranteed_options.is_a?(Array)
371
- guaranteed_options.each do |guaranteed_option|
372
- cents = (guaranteed_option[:guaranteedcharge].to_f * 100).to_i
373
- service_name = guaranteed_ltl_service(guaranteed_option[:guaranteedbytime])
374
- transit_days = parse_transit_duration(response[:shipdate], guaranteed_option[:guaranteeddeldate])
375
-
376
- builder << Rate.new(
377
- carrier: self,
378
- carrier_name: self.class.name,
379
- currency: 'USD',
380
- estimate_reference:,
381
- scac: self.class.scac.upcase,
382
- service_name:,
383
- shipment:,
384
- prices: [
385
- Price.new(
386
- blame: :api,
387
- cents:,
388
- description: 'Freight',
389
- ),
390
- ],
391
- transit_days:,
392
- with_excessive_length_fees:,
393
- )
394
- end
395
- end
396
- end
397
-
398
- rate_response.rates = rates
399
- rate_response
400
- end
401
-
402
- # Tracking
403
-
404
- private
405
-
406
- def guaranteed_ltl_service(hours)
407
- raise ArgumentError, 'Invalid hours' unless hours.match?(/^\d{4}$/)
408
-
409
- return :guaranteed_ltl_am if hours[0..1].to_i <= 12
410
-
411
- :guaranteed_ltl
412
- end
413
-
414
- def parse_transit_duration(from, to)
415
- from = ::Time.parse(from).in_time_zone('America/Chicago')
416
- to = ::Time.parse(to).in_time_zone('America/Chicago')
417
-
418
- (from.business_time_until(to) / 28_800.0).days
419
- end
420
- end
421
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module FreightKit
4
- class BTVP < TheGreatInformationFactory
5
- class << self
6
- def maximum_height
7
- Measured::Length.new(105, :inches)
8
- end
9
-
10
- def maximum_weight
11
- Measured::Weight.new(10_000, :pounds)
12
- end
13
-
14
- def minimum_length_for_overlength_fees
15
- Measured::Length.new(8, :feet)
16
- end
17
- end
18
-
19
- include FreightKit::Documentable
20
-
21
- REACTIVE_FREIGHT_CARRIER = true
22
-
23
- class << self
24
- attr_reader :name, :scac
25
- end
26
- @name = 'Best Overnite Express'
27
- @scac = 'BTVP'
28
- end
29
- end