freight_kit 0.1.20 → 0.1.22

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 (466) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +0 -2
  3. data/README.md +6 -5
  4. data/Rakefile +4 -0
  5. data/VERSION +1 -1
  6. data/configuration/locations/amazon_warehouses.yml +3330 -0
  7. data/freight_kit-0.1.21.gem +0 -0
  8. data/freight_kit.gemspec +11 -22
  9. data/lib/freight_kit/address_normalizer.rb +24 -0
  10. data/lib/freight_kit/amazon_warehouse.rb +33 -0
  11. data/lib/freight_kit/api_clients/soap_client.rb +33 -10
  12. data/lib/freight_kit/carrier.rb +248 -302
  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 +475 -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 +31 -0
  29. data/lib/freight_kit/carriers/amado_trucking.rb +31 -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 +474 -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 +31 -0
  67. data/lib/freight_kit/carriers/crosby_trucking_service.rb +29 -0
  68. data/lib/freight_kit/carriers/cross_country_freight_solutions.rb +408 -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 +573 -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 +781 -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 +555 -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 +206 -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 +669 -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 +456 -362
  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 +441 -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 +605 -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 +339 -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 +265 -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 +415 -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 +331 -34
  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/rate_limit_error.rb +12 -0
  342. data/lib/freight_kit/errors/response_error.rb +0 -2
  343. data/lib/freight_kit/errors/shipment_not_found_error.rb +0 -2
  344. data/lib/freight_kit/errors/unserviceable_accessorials_error.rb +1 -5
  345. data/lib/freight_kit/errors/unserviceable_error.rb +0 -2
  346. data/lib/freight_kit/helpers/documentable.rb +0 -2
  347. data/lib/freight_kit/helpers/pickupable.rb +3 -14
  348. data/lib/freight_kit/helpers/rateable.rb +0 -2
  349. data/lib/freight_kit/helpers/trackable.rb +0 -2
  350. data/lib/freight_kit/http_client/cache_store.rb +2 -4
  351. data/lib/freight_kit/http_client/httpi_adapter.rb +37 -0
  352. data/lib/freight_kit/http_client/log_device.rb +0 -2
  353. data/lib/freight_kit/http_client/response.rb +0 -2
  354. data/lib/freight_kit/http_client/revalidation.rb +0 -2
  355. data/lib/freight_kit/http_client/safe_retries.rb +17 -3
  356. data/lib/freight_kit/http_client/zstd.rb +2 -4
  357. data/lib/freight_kit/http_client.rb +21 -21
  358. data/lib/freight_kit/model.rb +1 -3
  359. data/lib/freight_kit/models/address.rb +15 -0
  360. data/lib/freight_kit/models/contact.rb +3 -4
  361. data/lib/freight_kit/models/country.rb +20 -0
  362. data/lib/freight_kit/models/credential.rb +3 -18
  363. data/lib/freight_kit/models/date_time.rb +0 -2
  364. data/lib/freight_kit/models/document_response.rb +0 -2
  365. data/lib/freight_kit/models/label.rb +0 -2
  366. data/lib/freight_kit/models/location.rb +10 -25
  367. data/lib/freight_kit/models/pickup_response.rb +0 -2
  368. data/lib/freight_kit/models/price.rb +0 -2
  369. data/lib/freight_kit/models/rate.rb +0 -2
  370. data/lib/freight_kit/models/rate_response.rb +0 -2
  371. data/lib/freight_kit/models/region.rb +19 -0
  372. data/lib/freight_kit/models/response.rb +0 -2
  373. data/lib/freight_kit/models/shipment.rb +5 -14
  374. data/lib/freight_kit/models/shipment_event.rb +0 -2
  375. data/lib/freight_kit/models/terminal.rb +10 -0
  376. data/lib/freight_kit/models/tracking_response.rb +0 -2
  377. data/lib/freight_kit/package.rb +52 -64
  378. data/lib/freight_kit/package_item.rb +14 -14
  379. data/lib/freight_kit/packaging.rb +6 -26
  380. data/lib/freight_kit/platform.rb +0 -32
  381. data/lib/freight_kit/platforms/carrier_logistics.rb +326 -345
  382. data/lib/freight_kit/platforms/dsdc.rb +82 -0
  383. data/lib/freight_kit/platforms/next_tms/graphql_client/mutation/quote_create.rb +32 -0
  384. data/lib/freight_kit/platforms/next_tms/graphql_client/mutation/shipment_create.rb +29 -0
  385. data/lib/freight_kit/platforms/next_tms/graphql_client/query/broker_carrier.rb +37 -0
  386. data/lib/freight_kit/platforms/next_tms/graphql_client/query/broker_carriers.rb +45 -0
  387. data/lib/freight_kit/platforms/next_tms/graphql_client/query/broker_customer.rb +54 -0
  388. data/lib/freight_kit/platforms/next_tms/graphql_client/query/broker_customers.rb +62 -0
  389. data/lib/freight_kit/platforms/next_tms/graphql_client/query/carrier.rb +22 -0
  390. data/lib/freight_kit/platforms/next_tms/graphql_client/query/carriers.rb +30 -0
  391. data/lib/freight_kit/platforms/next_tms/graphql_client/query/customer.rb +20 -0
  392. data/lib/freight_kit/platforms/next_tms/graphql_client/query/customers.rb +28 -0
  393. data/lib/freight_kit/platforms/next_tms/graphql_client/query/invoice.rb +31 -0
  394. data/lib/freight_kit/platforms/next_tms/graphql_client/query/invoices.rb +39 -0
  395. data/lib/freight_kit/platforms/next_tms/graphql_client/query/shipment.rb +102 -0
  396. data/lib/freight_kit/platforms/next_tms/graphql_client/query/shipment_documents.rb +29 -0
  397. data/lib/freight_kit/platforms/next_tms/graphql_client/query/shipments.rb +110 -0
  398. data/lib/freight_kit/platforms/next_tms/graphql_client.rb +22 -0
  399. data/lib/freight_kit/platforms/next_tms/orm/address.rb +22 -0
  400. data/lib/freight_kit/platforms/next_tms/orm/base.rb +120 -0
  401. data/lib/freight_kit/platforms/next_tms/orm/broker_carrier.rb +18 -0
  402. data/lib/freight_kit/platforms/next_tms/orm/broker_customer.rb +22 -0
  403. data/lib/freight_kit/platforms/next_tms/orm/carrier.rb +14 -0
  404. data/lib/freight_kit/platforms/next_tms/orm/collection.rb +335 -0
  405. data/lib/freight_kit/platforms/next_tms/orm/customer.rb +12 -0
  406. data/lib/freight_kit/platforms/next_tms/orm/invoice.rb +21 -0
  407. data/lib/freight_kit/platforms/next_tms/orm/record_not_found_error.rb +9 -0
  408. data/lib/freight_kit/platforms/next_tms/orm/shipment.rb +50 -0
  409. data/lib/freight_kit/platforms/next_tms/orm.rb +38 -0
  410. data/lib/freight_kit/platforms/next_tms.rb +452 -0
  411. data/lib/freight_kit/platforms/the_great_information_factory.rb +492 -425
  412. data/lib/freight_kit/regions.rb +27 -0
  413. data/lib/freight_kit/shipment_packer.rb +36 -38
  414. data/lib/freight_kit/tariff/overlength_rule.rb +1 -5
  415. data/lib/freight_kit/tariff.rb +0 -2
  416. data/lib/freight_kit.rb +103 -11
  417. data/schemas/next_tms.json +110710 -0
  418. metadata +443 -55
  419. data/configuration/carriers/abfs.yml +0 -124
  420. data/configuration/carriers/btvp.yml +0 -84
  421. data/configuration/carriers/ccyq.yml +0 -121
  422. data/configuration/carriers/clni.yml +0 -113
  423. data/configuration/carriers/cnwy.yml +0 -113
  424. data/configuration/carriers/ctbv.yml +0 -117
  425. data/configuration/carriers/dcha.yml +0 -105
  426. data/configuration/carriers/dlds.yml +0 -111
  427. data/configuration/carriers/dphe.yml +0 -130
  428. data/configuration/carriers/drrq.yml +0 -131
  429. data/configuration/carriers/fcsy.yml +0 -102
  430. data/configuration/carriers/fwda.yml +0 -137
  431. data/configuration/carriers/jfj_transportation.yml +0 -2
  432. data/configuration/carriers/mtvl.yml +0 -12
  433. data/configuration/carriers/numk.yml +0 -14
  434. data/configuration/carriers/otcl.yml +0 -124
  435. data/configuration/carriers/pens.yml +0 -22
  436. data/configuration/carriers/rdfs.yml +0 -142
  437. data/configuration/carriers/saia.yml +0 -129
  438. data/configuration/carriers/sefl.yml +0 -115
  439. data/configuration/carriers/totl.yml +0 -111
  440. data/configuration/carriers/tqyl.yml +0 -28
  441. data/configuration/carriers/wrds.yml +0 -20
  442. data/configuration/platforms/carrier_logistics.yml +0 -25
  443. data/configuration/platforms/next.yml +0 -12
  444. data/configuration/platforms/the_great_information_factory.yml +0 -122
  445. data/lib/freight_kit/carriers/abfs.rb +0 -421
  446. data/lib/freight_kit/carriers/btvp.rb +0 -29
  447. data/lib/freight_kit/carriers/ccyq.rb +0 -310
  448. data/lib/freight_kit/carriers/clni.rb +0 -396
  449. data/lib/freight_kit/carriers/cnwy.rb +0 -327
  450. data/lib/freight_kit/carriers/ctbv.rb +0 -53
  451. data/lib/freight_kit/carriers/dcha.rb +0 -76
  452. data/lib/freight_kit/carriers/dlds.rb +0 -49
  453. data/lib/freight_kit/carriers/dphe.rb +0 -472
  454. data/lib/freight_kit/carriers/drrq.rb +0 -580
  455. data/lib/freight_kit/carriers/fcsy.rb +0 -57
  456. data/lib/freight_kit/carriers/fwda.rb +0 -744
  457. data/lib/freight_kit/carriers/mtvl.rb +0 -34
  458. data/lib/freight_kit/carriers/numk.rb +0 -58
  459. data/lib/freight_kit/carriers/otcl.rb +0 -520
  460. data/lib/freight_kit/carriers/pens.rb +0 -204
  461. data/lib/freight_kit/carriers/rdfs.rb +0 -521
  462. data/lib/freight_kit/carriers/sefl.rb +0 -342
  463. data/lib/freight_kit/carriers/totl.rb +0 -172
  464. data/lib/freight_kit/carriers/tqyl.rb +0 -337
  465. data/lib/freight_kit/carriers/wrds.rb +0 -246
  466. data/lib/freight_kit/platforms/next.rb +0 -101
@@ -0,0 +1,408 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class CrossCountryFreightSolutions < FreightKit::Carrier
4
+ class << self
5
+ def check_mailing_addresses
6
+ [
7
+ Address.new(
8
+ city: 'Bismarck',
9
+ country: Countries.find_by(iso31661_alpha2: 'US'),
10
+ id: 'bc2db4c6-b4c8-4082-adfc-4a3e764510a7',
11
+ postal_code: '58502',
12
+ region_abbreviation: 'ND',
13
+ street: 'PO Box 4030'
14
+ )
15
+ ]
16
+ end
17
+
18
+ def contacts
19
+ [Contact.new(department: 'Main', id: '2336a4d3-4f04-4eab-9e38-d0afb74dce62', phone: '+17012228498')]
20
+ end
21
+
22
+ def headquarters
23
+ Address.new(
24
+ city: 'Bismarck',
25
+ country: Countries.find_by(iso31661_alpha2: 'US'),
26
+ id: 'f78d1f2e-1299-405b-a0a2-45c99b4d7a14',
27
+ postal_code: '58501',
28
+ region_abbreviation: 'ND',
29
+ street: '1841 Hancock Drive'
30
+ )
31
+ end
32
+
33
+ def id = '08c02bcf-11fb-40a7-950a-58e6503f540f'
34
+ def legal_name = 'CrossCountry Freight Solutions Inc'
35
+
36
+ # Per carrier at 2022-12-16T02:31:00Z
37
+ def mappable_accessorials
38
+ {
39
+ afterhours_delivery: 'AFTERHRS',
40
+ afterhours_pickup: 'AFTERHRS',
41
+ airport_delivery: 'AIRPORT PD',
42
+ airport_pickup: 'AIRPORT PD',
43
+ amusement_park_delivery: 'LIMITEDACC',
44
+ amusement_park_pickup: 'LIMITEDACC',
45
+ appointment_delivery: 'APPT_NOTIF',
46
+ appointment_pickup: 'APPT_NOTIF',
47
+ athletic_facility_delivery: 'LIMITEDACC',
48
+ athletic_facility_pickup: 'LIMITEDACC',
49
+ brewery_delivery: 'LIMITEDACC',
50
+ brewery_pickup: 'LIMITEDACC',
51
+ cemetery_delivery: 'LIMITEDACC',
52
+ cemetery_pickup: 'LIMITEDACC',
53
+ church_delivery: 'LIMITEDACC',
54
+ church_pickup: 'LIMITEDACC',
55
+ construction_delivery: 'LIMITEDACC',
56
+ construction_pickup: 'LIMITEDACC',
57
+ convention_delivery: 'LIMITEDACC',
58
+ convention_pickup: 'LIMITEDACC',
59
+ corrected_bol: 'BOL_CORR',
60
+ driver_assist: 'EXTRA LBR',
61
+ early_morning_delivery: 'AFTERHRS',
62
+ fair_delivery: 'LIMITEDACC',
63
+ fair_pickup: 'LIMITEDACC',
64
+ farm_delivery: 'LIMITEDACC',
65
+ farm_pickup: 'LIMITEDACC',
66
+ fitness_center_delivery: 'LIMITEDACC',
67
+ fitness_center_pickup: 'LIMITEDACC',
68
+ golf_course_delivery: 'LIMITEDACC',
69
+ golf_course_pickup: 'LIMITEDACC',
70
+ government_delivery: 'LIMITEDACC',
71
+ government_pickup: 'LIMITEDACC',
72
+ grocery_store_delivery: 'LIMITEDACC',
73
+ grocery_store_pickup: 'LIMITEDACC',
74
+ grocery_warehouse_delivery: 'FOODWREHSE',
75
+ grocery_warehouse_pickup: 'FOODWREHSE',
76
+ hospital_delivery: 'LIMITEDACC',
77
+ hospital_pickup: 'LIMITEDACC',
78
+ hotel_delivery: 'LIMITEDACC',
79
+ hotel_pickup: 'LIMITEDACC',
80
+ inside_delivery: 'INSIDE',
81
+ inside_pickup: 'INSIDE',
82
+ inspection_site_delivery: 'LIMITEDACC',
83
+ inspection_site_pickup: 'LIMITEDACC',
84
+ jobsite_delivery: 'LIMITEDACC',
85
+ jobsite_pickup: 'LIMITEDACC',
86
+ liftgate_delivery: 'LIFTGT',
87
+ liftgate_pickup: 'LIFTGT',
88
+ mall_delivery: 'MALL',
89
+ mall_pickup: 'MALL',
90
+ marina_delivery: 'LIMITEDACC',
91
+ marina_pickup: 'LIMITEDACC',
92
+ military_site_delivery: 'LIMITEDACC',
93
+ military_site_pickup: 'LIMITEDACC',
94
+ mine_site_pickup: 'LIMITEDACC',
95
+ motel_delivery: 'LIMITEDACC',
96
+ motel_pickup: 'LIMITEDACC',
97
+ nursing_home_delivery: 'LIMITEDACC',
98
+ nursing_home_pickup: 'LIMITEDACC',
99
+ park_delivery: 'LIMITEDACC',
100
+ park_pickup: 'LIMITEDACC',
101
+ prison_delivery: 'LIMITEDACC',
102
+ prison_pickup: 'LIMITEDACC',
103
+ ranch_delivery: 'LIMITEDACC',
104
+ ranch_pickup: 'LIMITEDACC',
105
+ reservation_delivery: 'APPT_NOTIF',
106
+ reservation_pickup: 'APPT_NOTIF',
107
+ residential_delivery: 'RESIDENT',
108
+ residential_pickup: 'RESIDENT',
109
+ resort_delivery: 'LIMITEDACC',
110
+ resort_pickup: 'LIMITEDACC',
111
+ restaurant_delivery: 'LIMITEDACC',
112
+ restaurant_pickup: 'LIMITEDACC',
113
+ school_delivery: 'LIMITEDACC',
114
+ school_pickup: 'LIMITEDACC',
115
+ steel_mill_delivery: 'LIMITEDACC',
116
+ steel_mill_pickup: 'LIMITEDACC',
117
+ storage_facility_delivery: 'LIMITEDACC',
118
+ storage_facility_pickup: 'LIMITEDACC',
119
+ university_delivery: 'LIMITEDACC',
120
+ university_pickup: 'LIMITEDACC',
121
+ utility_site_delivery: 'LIMITEDACC',
122
+ utility_site_pickup: 'LIMITEDACC',
123
+ winery_delivery: 'LIMITEDACC',
124
+ winery_pickup: 'LIMITEDACC'
125
+ }
126
+ end
127
+
128
+ def minimum_length_for_overlength_fees = Measured::Length.new(6, :feet)
129
+ def name = 'CrossCountry Freight Solutions'
130
+ def overlength_fees_require_tariff? = false
131
+ def required_credential_types = %i[api_key]
132
+ def requirements = %i[credentials]
133
+ def scac = 'CCYQ'
134
+ def unquotable_accessorials = %i[athletic_facility_delivery dock_dropoff dock_pickup]
135
+
136
+ def unserviceable_accessorials
137
+ %i[
138
+ customs_brokerage
139
+ flatbed_delivery
140
+ flatbed_pickup
141
+ guaranteed_delivery
142
+ guaranteed_delivery_am
143
+ guaranteed_delivery_pm
144
+ ]
145
+ end
146
+
147
+ def us_dot_number = 313_378
148
+ def us_mc_number = 209_657
149
+ def website_url = 'https://www.ccfs.com'
150
+ end
151
+
152
+ include FreightKit::Rateable
153
+ include FreightKit::Trackable
154
+ include FreightKit::Documentable
155
+ include FreightKit::Pickupable
156
+
157
+ API = {
158
+ domain: 'ccfs.com/api/public',
159
+ endpoints: { bol: '/Image', pod: '/Image', rates: '/Quote', track: '/Track', pickup: '/Pickup' },
160
+ methods: { bol: :get, pod: :get, rates: :post, track: :get, pickup: :post }
161
+ }.freeze
162
+ JSON_HEADERS = { Accept: 'application/json', charset: 'utf-8', 'Content-Type' => 'application/json' }.freeze
163
+
164
+ protected
165
+
166
+ def build_accessorials(shipment:)
167
+ accessorials = []
168
+ serviceable_accessorials?(shipment.accessorials)
169
+
170
+ accessorials << { Code: 'HAZMAT', Factor: 1 } if shipment.hazmat?
171
+
172
+ shipment.packages.each do |package|
173
+ longest_dimension = [package.width(:inches), package.length(:inches)].max.ceil
174
+
175
+ next if longest_dimension < 96
176
+
177
+ package.quantity.times { accessorials << { Code: 'EXLEN', Factor: longest_dimension } }
178
+ end
179
+
180
+ shipment.accessorials.map do |accessorial|
181
+ next if unquotable_accessorials.include?(accessorial)
182
+
183
+ accessorials << { Code: mappable_accessorials[accessorial.to_sym], Factor: 1 }
184
+ end
185
+
186
+ accessorials
187
+ end
188
+
189
+ def build_pickup_request(
190
+ delivery_from:,
191
+ delivery_to:,
192
+ dispatcher:,
193
+ pickup_from:,
194
+ pickup_to:,
195
+ scac:,
196
+ service:,
197
+ shipment:
198
+ )
199
+ dispatcher_phone = dispatcher.phone.delete('^0-9')
200
+ receiver = shipment.destination.contact
201
+ receiver_phone = receiver.phone.delete('^0-9')
202
+
203
+ build_request(
204
+ :pickup,
205
+ body: {
206
+ PickupAddress: {
207
+ Name: shipment.origin.contact.company_name || shipment.destination.origin.name,
208
+ Address1: shipment.origin.address1,
209
+ Address2: '',
210
+ City: shipment.origin.city,
211
+ State: shipment.origin.province,
212
+ Zip: shipment.origin.postal_code.to_s,
213
+ Phone: dispatcher_phone.presence || '',
214
+ Contact: shipment.origin.contact.name,
215
+ Country: shipment.origin.country.code(:alpha2).value
216
+ },
217
+ DeliveryAddress: {
218
+ Name: receiver.company_name || receiver.name,
219
+ Address1: shipment.destination.address1,
220
+ Address2: '',
221
+ City: shipment.destination.city,
222
+ State: shipment.destination.province,
223
+ Zip: shipment.destination.postal_code.to_s,
224
+ Phone: receiver_phone || '',
225
+ Contact: shipment.destination.contact.name,
226
+ Country: shipment.destination.country.code(:alpha2).value
227
+ },
228
+ PickupSchedule: {
229
+ After: pickup_from.iso8601,
230
+ Before: pickup_to.iso8601,
231
+ AppointmentRequired: false,
232
+ AppointmentMade: false
233
+ },
234
+ TotalWeight: shipment.packages.sum { |p| p.pounds(:total).ceil },
235
+ TotalUnits: shipment.packages.sum(&:quantity),
236
+ TotalBills: 1,
237
+ # TODO: Update with actual value: TotalBills desc =>
238
+ # Total number of freight bills that will be picked up
239
+ TestFlag: false
240
+ }.to_json
241
+ )
242
+ end
243
+
244
+ def build_rate_request(shipment:)
245
+ build_request(
246
+ :rates,
247
+ body: {
248
+ Orig: shipment.origin.postal_code,
249
+ Dest: shipment.destination.postal_code,
250
+ Accessorials: build_accessorials(shipment:),
251
+ Details: shipment.packages.map do |package|
252
+ {
253
+ Height: package.inches(:height).ceil.to_f,
254
+ Length: package.inches(:length).ceil.to_f,
255
+ Width: package.inches(:width).ceil.to_f,
256
+ Units: package.quantity.to_i,
257
+ Class: package.freight_class.to_f,
258
+ Weight: package.pounds(:total).ceil.to_f
259
+ }
260
+ end
261
+ }.to_json
262
+ )
263
+ end
264
+
265
+ def build_request(action, body: {}, query: {})
266
+ api_key = fetch_credential(:api_key).api_key
267
+
268
+ request = { url: build_url(action), headers: { APIKEY: api_key }, method: API.dig(:methods, action), body:, query: }.compact
269
+
270
+ save_request(request)
271
+ request
272
+ end
273
+
274
+ def build_tracking_request(tracking_number) = build_request(:track, query: { ReferenceNum: tracking_number })
275
+ def build_url(action) = "https://#{API[:domain]}#{API.dig(:endpoints, action)}"
276
+
277
+ def commit(_action, request)
278
+ response = HTTPClient.request(
279
+ request[:method],
280
+ request[:url],
281
+ headers: request[:headers].merge(JSON_HEADERS),
282
+ body: request[:body],
283
+ query: request[:query],
284
+ proxy_url:
285
+ )
286
+
287
+ unless response.code == 200
288
+ message = begin
289
+ JSON.parse(response.body)['Message'] || "HTTP #{response.code}"
290
+ rescue JSON::ParserError
291
+ "HTTP #{response.code}"
292
+ end
293
+
294
+ raise FreightKit::InvalidCredentialsError, message if message == 'API key is inactive'
295
+
296
+ raise FreightKit::ResponseError, message
297
+ end
298
+
299
+ JSON.parse(response.body)
300
+ end
301
+
302
+ def parse_document_response(type, tracking_number)
303
+ # Tracking Endpoint returns Images for the Shipment
304
+ request = build_request(:track, query: { ReferenceNum: tracking_number })
305
+ response = commit(type, request)
306
+
307
+ document_response = DocumentResponse.new
308
+
309
+ unless response
310
+ document_response.error = DocumentNotFoundError.new
311
+ return document_response
312
+ end
313
+
314
+ # API response sometimes returns an array
315
+ response = response.first if response.is_a?(Array)
316
+
317
+ unless response
318
+ document_response.error = DocumentNotFoundError.new
319
+ return document_response
320
+ end
321
+
322
+ document = response['Images']&.find { |image| image['DocumentType'] == type.upcase }
323
+
324
+ unless document
325
+ document_response.error = DocumentNotFoundError.new
326
+ return document_response
327
+ end
328
+
329
+ decoded_pdf_data = Base64.decode64(document['Content'])
330
+ document_response.assign_attributes(content_type: 'application/pdf', data: decoded_pdf_data)
331
+
332
+ document_response
333
+ end
334
+
335
+ def parse_pickup_response(response)
336
+ pickup_response = PickupResponse.new(request: last_request, response:)
337
+ pickup_number = response['FreightBillNum']
338
+
339
+ if pickup_number.blank?
340
+ pickup_response.error = FreightKit::ResponseError.new('Unknown response')
341
+ return pickup_response
342
+ end
343
+
344
+ pickup_response.pickup_number = pickup_number
345
+ pickup_response
346
+ end
347
+
348
+ def parse_rate_response(shipment:, response:)
349
+ rate_response = RateResponse.new(request: last_request, response:)
350
+
351
+ if response.blank?
352
+ rate_response.error = ResponseError.new('API Error: Unknown response')
353
+ return rate_response
354
+ end
355
+
356
+ if response['Message'].include?('Quotes between these points are not available')
357
+ rate_response.error = UnserviceableError.new(response['Message'])
358
+ return rate_response
359
+ end
360
+
361
+ if response['TotalCharge'].blank?
362
+ rate_response.error = ResponseError.new('Cost is blank')
363
+ return rate_response
364
+ end
365
+
366
+ estimate_reference = response['QuoteNum']
367
+ expires_at = ::Time.iso8601(response['QuoteExpiryDate'])
368
+
369
+ transit_days = (
370
+ ::Time.iso8601(response['EarliestDeliveryDate']).to_date - ::Time.iso8601(response['PickupDate']).to_date
371
+ ).to_i
372
+
373
+ prices = []
374
+
375
+ ['AccessorialCharge', 'FuelCharge', 'HighCostCharge', 'MinCharge'].each do |charge_line_key|
376
+ charge_line = response[charge_line_key]
377
+ next unless charge_line
378
+
379
+ cents = (charge_line.to_f * 100).to_i
380
+ prices << Price.new(blame: :api, cents:, description: charge_line_key)
381
+ end
382
+
383
+ rate = Rate.new(
384
+ carrier: self,
385
+ carrier_name: name,
386
+ currency: 'USD',
387
+ estimate_reference:,
388
+ expires_at:,
389
+ scac:,
390
+ service_name: :standard,
391
+ shipment:,
392
+ prices:,
393
+ transit_days:,
394
+ with_excessive_length_fees: rates_with_excessive_length_fees?
395
+ )
396
+
397
+ rate_response.rates = [rate]
398
+ rate_response
399
+ end
400
+
401
+ def parse_tracking_response(response)
402
+ TrackingResponse.new(carrier: self, request: last_request, response:)
403
+
404
+ # TODO
405
+ end
406
+ end
407
+ end
408
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class Crowley < Carrier
4
+ class << self
5
+ def id = 'f8bee282-bf3a-47d1-9137-86d59276b37a'
6
+ def name = 'Crowley'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,40 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class CSATransportation < Carrier
4
+ class << self
5
+ def contacts
6
+ [
7
+ Contact.new(
8
+ department: 'Dispatch - Los Angeles, CA',
9
+ email: 'la@csatransportation.com',
10
+ id: '5fb9d67e-df34-4320-842a-16a34a018e87'
11
+ ),
12
+ Contact.new(
13
+ department: 'Customer Service - Vancouver, BC, Canada',
14
+ id: 'aa12aaa2-d1e9-46a0-9925-00943a140fe0',
15
+ phone: '+16042140006'
16
+ )
17
+ ]
18
+ end
19
+
20
+ def headquarters
21
+ Address.new(
22
+ city: 'Toronto',
23
+ country: Countries.find_by(iso31661_alpha2: 'CA'),
24
+ id: '7251a46e-5e7c-4c9f-81cf-1b9ff1061587',
25
+ postal_code: 'M8W 1Z7',
26
+ region_abbreviation: 'ON',
27
+ street: '355 Horner Ave'
28
+ )
29
+ end
30
+
31
+ def id = 'd90c6453-9f49-471b-afe4-18c79e5e9c98'
32
+ def legal_name = '669779 Ontario Ltd'
33
+ def name = 'CSA Transportation'
34
+ def us_dot_number = 1_526_989
35
+ def us_mc_number = 569_538
36
+ def website_url = 'https://www.csatransportation.com'
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,40 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class CSXTransportation < Carrier
4
+ class << self
5
+ def check_mailing_addresses
6
+ [
7
+ Address.new(
8
+ city: 'Atlanta',
9
+ country: Countries.find_by(iso31661_alpha2: 'US'),
10
+ id: 'c9210256-1316-41e9-8ff6-23b94f52f6a9',
11
+ postal_code: '30353',
12
+ region_abbreviation: 'GA',
13
+ street: 'PO Box 532601'
14
+ )
15
+ ]
16
+ end
17
+
18
+ def contacts
19
+ [Contact.new(department: 'Main', id: '46196ba3-6636-414d-8b07-cc83c99ce960', phone: '+18002320144')]
20
+ end
21
+
22
+ def headquarters
23
+ Address.new(
24
+ city: 'Jacksonville',
25
+ country: Countries.find_by(iso31661_alpha2: 'US'),
26
+ id: 'd720e677-7499-4c8e-af96-3163ccf248f5',
27
+ postal_code: '32202-4423',
28
+ region_abbreviation: 'FL',
29
+ street: '500 Water St'
30
+ )
31
+ end
32
+
33
+ def id = '0d9f649c-c591-4d49-b50d-b1029dd67086'
34
+ def legal_name = 'CSX Transportation Inc'
35
+ def name = 'CSX Transportation'
36
+ def us_dot_number = 29_619
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,14 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class CustomGlobalLogistics < Carrier
4
+ class << self
5
+ def id = 'a1a410c9-0a21-41f6-8dfe-28aa43930b45'
6
+ def legal_name = 'Custom Global Logistics, LLC'
7
+ def name = 'Custom Global Logistics'
8
+ def scac = 'CGLA'
9
+ def us_dot_number = 2_227_976
10
+ def us_mc_number = 410_857
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class DAndATransport < Carrier
4
+ class << self
5
+ def id = '9430b06d-18f0-460f-868f-c6cb7d914687'
6
+ def name = 'D&A Transport'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class DAKTransport < Carrier
4
+ class << self
5
+ def id = 'b5e8e4c0-5f8a-4e82-ba06-4195402ced16'
6
+ def name = 'DAK Transport'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class DashCourierAndLogisticsNorthCarolina < Carrier
4
+ class << self
5
+ def id = '6036027d-2ea4-47e7-aab8-1d2eba12d77c'
6
+ def name = 'Dash Courier & Logistics (North Carolina)'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,29 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class DaylightTransport < Carrier
4
+ class << self
5
+ def contacts
6
+ [Contact.new(department: 'Main', id: '5a5258d8-4353-4e94-bde2-105cc3143099', phone: '+18004689999')]
7
+ end
8
+
9
+ def headquarters
10
+ Address.new(
11
+ city: 'Cypress',
12
+ country: Countries.find_by(iso31661_alpha2: 'US'),
13
+ id: 'abb2048d-eef6-472c-b6a0-be0567f1203f',
14
+ postal_code: '90630',
15
+ region_abbreviation: 'CA',
16
+ street: '5660 Katella Ave Suite 250'
17
+ )
18
+ end
19
+
20
+ def id = '1ae7d8cc-725c-4043-bb7a-3e61821dbe10'
21
+ def legal_name = 'Daylight Transport LLC'
22
+ def name = 'Daylight Transport'
23
+ def scac = 'DYLT'
24
+ def us_dot_number = 898_079
25
+ def us_mc_number = 390_739
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,30 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class DaytonFreightLines < Carrier
4
+ class << self
5
+ def contacts
6
+ [Contact.new(department: 'Main', id: 'cb9c576e-e525-4254-90e0-190057a9d5eb', phone: '+19372644060')]
7
+ end
8
+
9
+ def headquarters
10
+ Address.new(
11
+ city: 'Dayton',
12
+ country: Countries.find_by(iso31661_alpha2: 'US'),
13
+ id: '619636dd-3364-462b-a71c-a243f37b430a',
14
+ postal_code: '45414',
15
+ region_abbreviation: 'OH',
16
+ street: '6450 Poe Ave Suite 311'
17
+ )
18
+ end
19
+
20
+ def id = '5b843d67-3fb7-4758-8f57-67f499f1d084'
21
+ def legal_name = 'Dayton Freight Lines Inc'
22
+ def name = 'Dayton Freight Lines'
23
+ def scac = 'DAFG'
24
+ def us_dot_number = 273_301
25
+ def us_mc_number = 189_528
26
+ def website_url = 'https://daytonfreight.com'
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class DBRLogistics < Carrier
4
+ class << self
5
+ def id = '51051ff4-d370-4b94-9e8e-6d2eb0a56ce8'
6
+ def name = 'DBR Logistics'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,27 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class DeepSouthFreight < Carrier
4
+ class << self
5
+ def contacts
6
+ [Contact.new(department: 'Main', id: '5058bfcb-9d63-405a-8563-edc8de55df0a', phone: '+12053260490')]
7
+ end
8
+
9
+ def headquarters
10
+ Address.new(
11
+ city: 'Birmingham',
12
+ country: Countries.find_by(iso31661_alpha2: 'US'),
13
+ id: 'c796119c-02d6-4a82-9de6-e3b8ba80b310',
14
+ postal_code: '35204',
15
+ region_abbreviation: 'AL',
16
+ street: '2221 17th Street North'
17
+ )
18
+ end
19
+
20
+ def id = 'f5d46839-6f1d-43be-94ef-1fda3e0b2b22'
21
+ def legal_name = 'Tvs Inc'
22
+ def name = 'Deep South Freight'
23
+ def us_dot_number = 273_403
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class DeltaExpress < Carrier
4
+ class << self
5
+ def id = 'd302e108-0beb-4048-a39f-4f13810b379b'
6
+ def name = 'Delta Express'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class DeltaTransport < Carrier
4
+ class << self
5
+ def id = 'ae0e1479-e59b-4874-8179-6891f0c17e16'
6
+ def name = 'Delta Transport'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class DeltaTruckingLogistics < Carrier
4
+ class << self
5
+ def id = '7c7dd6fc-0c0b-48ca-bfc0-8a475286d713'
6
+ def name = 'Delta Trucking Logistics'
7
+ end
8
+ end
9
+ end
10
+ end