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
@@ -0,0 +1,419 @@
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 api_proxy]
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 do
178
+ accessorials << { Code: 'EXLEN', Factor: longest_dimension }
179
+ end
180
+ end
181
+
182
+ shipment.accessorials.map do |accessorial|
183
+ next if unquotable_accessorials.include?(accessorial)
184
+
185
+ accessorials << { Code: mappable_accessorials[accessorial.to_sym], Factor: 1 }
186
+ end
187
+
188
+ accessorials
189
+ end
190
+
191
+ def build_pickup_request(
192
+ delivery_from:,
193
+ delivery_to:,
194
+ dispatcher:,
195
+ pickup_from:,
196
+ pickup_to:,
197
+ scac:,
198
+ service:,
199
+ shipment:
200
+ )
201
+ dispatcher_phone = dispatcher.phone.delete('^0-9')
202
+ receiver = shipment.destination.contact
203
+ receiver_phone = receiver.phone.delete('^0-9')
204
+
205
+ build_request(
206
+ :pickup,
207
+ body: {
208
+ PickupAddress: {
209
+ Name: shipment.origin.contact.company_name || shipment.destination.origin.name,
210
+ Address1: shipment.origin.address1,
211
+ Address2: '',
212
+ City: shipment.origin.city,
213
+ State: shipment.origin.province,
214
+ Zip: shipment.origin.postal_code.to_s,
215
+ Phone: dispatcher_phone.presence || '',
216
+ Contact: shipment.origin.contact.name,
217
+ Country: shipment.origin.country.code(:alpha2).value
218
+ },
219
+ DeliveryAddress: {
220
+ Name: receiver.company_name || receiver.name,
221
+ Address1: shipment.destination.address1,
222
+ Address2: '',
223
+ City: shipment.destination.city,
224
+ State: shipment.destination.province,
225
+ Zip: shipment.destination.postal_code.to_s,
226
+ Phone: receiver_phone || '',
227
+ Contact: shipment.destination.contact.name,
228
+ Country: shipment.destination.country.code(:alpha2).value
229
+ },
230
+ PickupSchedule: {
231
+ After: pickup_from.iso8601,
232
+ Before: pickup_to.iso8601,
233
+ AppointmentRequired: false,
234
+ AppointmentMade: false
235
+ },
236
+ TotalWeight: shipment.packages.sum { |p| p.pounds(:total).ceil },
237
+ TotalUnits: shipment.packages.sum(&:quantity),
238
+ TotalBills: 1,
239
+ # TODO: Update with actual value: TotalBills desc =>
240
+ # Total number of freight bills that will be picked up
241
+ TestFlag: false
242
+ }.to_json
243
+ )
244
+ end
245
+
246
+ def build_rate_request(shipment:)
247
+ build_request(
248
+ :rates,
249
+ body: {
250
+ Orig: shipment.origin.postal_code,
251
+ Dest: shipment.destination.postal_code,
252
+ Accessorials: build_accessorials(shipment:),
253
+ Details: shipment.packages.map do |package|
254
+ {
255
+ Height: package.inches(:height).ceil.to_f,
256
+ Length: package.inches(:length).ceil.to_f,
257
+ Width: package.inches(:width).ceil.to_f,
258
+ Units: package.quantity.to_i,
259
+ Class: package.freight_class.to_f,
260
+ Weight: package.pounds(:total).ceil.to_f
261
+ }
262
+ end
263
+ }.to_json
264
+ )
265
+ end
266
+
267
+ def build_request(action, body: {}, query: {})
268
+ api_key = fetch_credential(:api_key).api_key
269
+ proxy_url = fetch_credential(:api_proxy).proxy_url
270
+
271
+ request = {
272
+ url: build_url(action),
273
+ headers: { APIKEY: api_key },
274
+ method: API.dig(:methods, action),
275
+ body:,
276
+ query:,
277
+ proxy_url:
278
+ }.compact
279
+
280
+ save_request(request)
281
+ request
282
+ end
283
+
284
+ def build_tracking_request(tracking_number) = build_request(:track, query: { ReferenceNum: tracking_number })
285
+ def build_url(action) = "https://#{API[:domain]}#{API.dig(:endpoints, action)}"
286
+
287
+ def commit(_action, request)
288
+ response = HTTPClient.request(
289
+ request[:method],
290
+ request[:url],
291
+ headers: request[:headers].merge(JSON_HEADERS),
292
+ body: request[:body],
293
+ query: request[:query],
294
+ proxy: request[:proxy_url]
295
+ )
296
+
297
+ unless response.code == 200
298
+ message = begin
299
+ JSON.parse(response.body)['Message'] || "HTTP #{response.code}"
300
+ rescue JSON::ParserError
301
+ "HTTP #{response.code}"
302
+ end
303
+
304
+ raise FreightKit::InvalidCredentialsError, message if message == 'API key is inactive'
305
+
306
+ raise FreightKit::ResponseError, message
307
+ end
308
+
309
+ JSON.parse(response.body)
310
+ end
311
+
312
+ def parse_document_response(type, tracking_number)
313
+ # Tracking Endpoint returns Images for the Shipment
314
+ request = build_request(:track, query: { ReferenceNum: tracking_number })
315
+ response = commit(type, request)
316
+
317
+ document_response = DocumentResponse.new
318
+
319
+ unless response
320
+ document_response.error = DocumentNotFoundError.new
321
+ return document_response
322
+ end
323
+
324
+ # API response sometimes returns an array
325
+ response = response.first if response.is_a?(Array)
326
+
327
+ unless response
328
+ document_response.error = DocumentNotFoundError.new
329
+ return document_response
330
+ end
331
+
332
+ document = response['Images']&.find { |image| image['DocumentType'] == type.upcase }
333
+
334
+ unless document
335
+ document_response.error = DocumentNotFoundError.new
336
+ return document_response
337
+ end
338
+
339
+ decoded_pdf_data = Base64.decode64(document['Content'])
340
+ document_response.assign_attributes(content_type: 'application/pdf', data: decoded_pdf_data)
341
+
342
+ document_response
343
+ end
344
+
345
+ def parse_pickup_response(response)
346
+ pickup_response = PickupResponse.new(request: last_request, response:)
347
+ pickup_number = response['FreightBillNum']
348
+
349
+ if pickup_number.blank?
350
+ pickup_response.error = FreightKit::ResponseError.new('Unknown response')
351
+ return pickup_response
352
+ end
353
+
354
+ pickup_response.pickup_number = pickup_number
355
+ pickup_response
356
+ end
357
+
358
+ def parse_rate_response(shipment:, response:)
359
+ rate_response = RateResponse.new(request: last_request, response:)
360
+
361
+ if response.blank?
362
+ rate_response.error = ResponseError.new('API Error: Unknown response')
363
+ return rate_response
364
+ end
365
+
366
+ if response['Message'].include?('Quotes between these points are not available')
367
+ rate_response.error = UnserviceableError.new(response['Message'])
368
+ return rate_response
369
+ end
370
+
371
+ if response['TotalCharge'].blank?
372
+ rate_response.error = ResponseError.new('Cost is blank')
373
+ return rate_response
374
+ end
375
+
376
+ estimate_reference = response['QuoteNum']
377
+ expires_at = ::Time.iso8601(response['QuoteExpiryDate'])
378
+
379
+ transit_days = (
380
+ ::Time.iso8601(response['EarliestDeliveryDate']).to_date -
381
+ ::Time.iso8601(response['PickupDate']).to_date
382
+ ).to_i
383
+
384
+ prices = []
385
+
386
+ ['AccessorialCharge', 'FuelCharge', 'HighCostCharge', 'MinCharge'].each do |charge_line_key|
387
+ charge_line = response[charge_line_key]
388
+ next unless charge_line
389
+
390
+ cents = (charge_line.to_f * 100).to_i
391
+ prices << Price.new(blame: :api, cents:, description: charge_line_key)
392
+ end
393
+
394
+ rate = Rate.new(
395
+ carrier: self,
396
+ carrier_name: name,
397
+ currency: 'USD',
398
+ estimate_reference:,
399
+ expires_at:,
400
+ scac:,
401
+ service_name: :standard,
402
+ shipment:,
403
+ prices:,
404
+ transit_days:,
405
+ with_excessive_length_fees: rates_with_excessive_length_fees?
406
+ )
407
+
408
+ rate_response.rates = [rate]
409
+ rate_response
410
+ end
411
+
412
+ def parse_tracking_response(response)
413
+ TrackingResponse.new(carrier: self, request: last_request, response:)
414
+
415
+ # TODO
416
+ end
417
+ end
418
+ end
419
+ 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