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,27 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class SBTransportation < Carrier
4
+ class << self
5
+ def contacts
6
+ [Contact.new(department: 'Main', id: '44d7a6cd-793a-4854-b310-59d549fe9a86', phone: '+14077044947')]
7
+ end
8
+
9
+ def headquarters
10
+ Address.new(
11
+ city: 'Orlando',
12
+ country: Countries.find_by(iso31661_alpha2: 'US'),
13
+ id: '273678e1-0877-45d0-8b38-c9463f58ebfe',
14
+ postal_code: '32819-8508',
15
+ region_abbreviation: 'FL',
16
+ street: '7575 Kingspointe Pkwy Ste 26'
17
+ )
18
+ end
19
+
20
+ def id = 'b9fe0d63-1637-41c5-add9-7ad95a5fceda'
21
+ def legal_name = 'SB Transportation Service Inc'
22
+ def name = 'SB Transportation'
23
+ def us_dot_number = 3_072_336
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,29 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class SchneiderNational < Carrier
4
+ class << self
5
+ def contacts
6
+ [Contact.new(department: 'Main', id: '16de7430-ff26-415a-817d-9acd2f5ca69f', phone: '+18005586767')]
7
+ end
8
+
9
+ def headquarters
10
+ Address.new(
11
+ city: 'Green Bay',
12
+ country: Countries.find_by(iso31661_alpha2: 'US'),
13
+ id: 'f03995ec-487e-4b04-ad6b-6f5d4e9ccc36',
14
+ postal_code: '54313',
15
+ region_abbreviation: 'WI',
16
+ street: '3101 South Packerland Drive'
17
+ )
18
+ end
19
+
20
+ def id = '7f242e83-5194-4d2b-adee-0025dd7c00ff'
21
+ def legal_name = 'Schneider National Carriers Inc'
22
+ def name = 'Schneider National'
23
+ def us_dot_number = 264_184
24
+ def us_mc_number = 133_655
25
+ def website_url = 'https://schneider.com'
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class SchwarzTrucking < Carrier
4
+ class << self
5
+ def id = '8c5ea288-b345-470b-8816-3f37a691a2cc'
6
+ def name = 'Schwarz Trucking'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,29 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class SewellMotorExpress < Carrier
4
+ class << self
5
+ def contacts
6
+ [Contact.new(department: 'Main', id: '2d3cd00e-fc8e-4a1e-95cd-948667e5b0bd', phone: '+19373823847')]
7
+ end
8
+
9
+ def headquarters
10
+ Address.new(
11
+ city: 'Wilmington',
12
+ country: Countries.find_by(iso31661_alpha2: 'US'),
13
+ id: 'f550e34c-83b5-4795-a537-f7a7325b688a',
14
+ postal_code: '45177',
15
+ region_abbreviation: 'OH',
16
+ street: '370 Davids Drive'
17
+ )
18
+ end
19
+
20
+ def id = '8868b780-9c04-4a1c-a0df-6b9cb3b06b47'
21
+ def legal_name = 'Sewell Motor Express Co'
22
+ def name = 'Sewell Motor Express'
23
+ def us_dot_number = 258_149
24
+ def us_mc_number = 57_992
25
+ def website_url = 'https://go-sewell.com'
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,28 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class ShawneeTrucking < Carrier
4
+ class << self
5
+ def contacts
6
+ [Contact.new(department: 'Main', id: 'cc54bc7b-4053-4d10-9a79-c05e5c06fd99', phone: '+12014387060')]
7
+ end
8
+
9
+ def headquarters
10
+ Address.new(
11
+ city: 'Clifton',
12
+ country: Countries.find_by(iso31661_alpha2: 'US'),
13
+ id: '00527f54-15cb-49c4-a1b4-e4c04b041824',
14
+ postal_code: '07012',
15
+ region_abbreviation: 'NJ',
16
+ street: '50 Somerset Place'
17
+ )
18
+ end
19
+
20
+ def id = 'f619ca2e-b7ec-4a3a-a190-e970c135ba44'
21
+ def legal_name = 'Shawnee Trucking Company Inc'
22
+ def name = 'Shawnee Trucking'
23
+ def us_dot_number = 564_981
24
+ def us_mc_number = 275_313
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class ShiLogistics < Carrier
4
+ class << self
5
+ def id = 'b56a7770-6988-4410-944c-d85f178d10cb'
6
+ def name = 'Shi Logistics'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class SinbadTransport < Carrier
4
+ class << self
5
+ def id = '5e463c12-33f6-43b7-ae7f-65246a83d140'
6
+ def name = 'Sinbad Transport'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class Skyway < Carrier
4
+ class << self
5
+ def id = '10e5f283-2b39-4b04-bd21-076ceae20c0d'
6
+ def name = 'Skyway'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,23 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class SmithCargoTransportationServices < 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: '1d2277ec-c692-4e8c-b270-c61a0dfc7aab',
11
+ postal_code: '31192',
12
+ region_abbreviation: 'GA',
13
+ street: 'Dept At 952490'
14
+ )
15
+ ]
16
+ end
17
+
18
+ def id = '9d4c34e3-ce99-4610-a99e-1d7a503e2e0f'
19
+ def name = 'Smith Cargo Transportation Services'
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class SNATransportation < Carrier
4
+ class << self
5
+ def id = '070feac7-1983-460f-9353-ff25a293e240'
6
+ def name = 'SNA Transportation'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class SolidGroup < Carrier
4
+ class << self
5
+ def id = 'ef53463f-6edf-4dd4-bd8a-eadeb642d9d2'
6
+ def name = 'Solid Group'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class SolutionCarrierExpress < Carrier
4
+ class << self
5
+ def id = '4534f34f-e00f-4bc0-a479-6d1b9d94ae95'
6
+ def name = 'Solution Carrier Express'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,441 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class SoutheasternFreightLines < FreightKit::Carrier
4
+ class << self
5
+ def check_mailing_addresses
6
+ [
7
+ Address.new(
8
+ city: 'Lexington',
9
+ country: Countries.find_by(iso31661_alpha2: 'US'),
10
+ id: 'd032f1fc-0c3d-4717-b9e7-314156374088',
11
+ postal_code: '29073',
12
+ region_abbreviation: 'SC',
13
+ street: '420 Davega Rd'
14
+ )
15
+ ]
16
+ end
17
+
18
+ def contacts
19
+ [Contact.new(department: 'Main', id: 'da295604-b58b-4f48-bdfa-3bfea8c9514e', phone: '+18006377335')]
20
+ end
21
+
22
+ def find_rates_with_declared_value? = true
23
+
24
+ def headquarters
25
+ Address.new(
26
+ city: 'Lexington',
27
+ country: Countries.find_by(iso31661_alpha2: 'US'),
28
+ id: '13399c8d-ffaf-4e3b-b9ee-872b3b964308',
29
+ postal_code: '29073',
30
+ region_abbreviation: 'SC',
31
+ street: '420 Davega Rd'
32
+ )
33
+ end
34
+
35
+ def id = '4f076fd0-ed4f-4e66-9cfe-9c880c9db8ca'
36
+ def legal_name = 'Southeastern Freight Lines LLC'
37
+
38
+ def mappable_accessorials
39
+ {
40
+ airport_delivery: 'chkAPD',
41
+ airport_pickup: 'chkAPU',
42
+ amusement_park_delivery: 'chkLAD',
43
+ amusement_park_pickup: 'chkLAP',
44
+ appointment_delivery: 'chkAN',
45
+ athletic_facility_delivery: 'chkLAD',
46
+ athletic_facility_pickup: 'chkLAP',
47
+ cemetery_delivery: 'chkLAD',
48
+ cemetery_pickup: 'chkLAP',
49
+ church_delivery: 'chkLAD',
50
+ church_pickup: 'chkLAP',
51
+ construction_delivery: 'chkLAD',
52
+ construction_pickup: 'chkLAP',
53
+ convention_delivery: 'chkLAD',
54
+ convention_pickup: 'chkLAP',
55
+ dock_dropoff: 'chkSHC',
56
+ fair_delivery: 'chkLAD',
57
+ fair_pickup: 'chkLAP',
58
+ farm_delivery: 'chkLAD',
59
+ farm_pickup: 'chkLAP',
60
+ fitness_center_delivery: 'chkLAD',
61
+ fitness_center_pickup: 'chkLAP',
62
+ golf_course_delivery: 'chkLAD',
63
+ golf_course_pickup: 'chkLAP',
64
+ government_delivery: 'chkLAD',
65
+ government_pickup: 'chkLAP',
66
+ grocery_store_delivery: 'chkLAD',
67
+ grocery_store_pickup: 'chkLAP',
68
+ guaranteed_delivery: 'chkDG',
69
+ guaranteed_delivery_am: 'chkNG',
70
+ guaranteed_delivery_pm: 'chkDG',
71
+ hospital_delivery: 'chkLAD',
72
+ hospital_pickup: 'chkLAP',
73
+ hotel_delivery: 'chkLAD',
74
+ hotel_pickup: 'chkLAP',
75
+ inside_delivery: 'chkID',
76
+ inside_pickup: 'chkIP',
77
+ inspection_site_delivery: 'chkLAD',
78
+ inspection_site_pickup: 'chkLAP',
79
+ jobsite_delivery: 'chkLAD',
80
+ jobsite_pickup: 'chkLAP',
81
+ liftgate_delivery: 'chkLGD',
82
+ liftgate_pickup: 'chkLGP',
83
+ mall_delivery: 'chkLAD',
84
+ mall_pickup: 'chkLAP',
85
+ marina_delivery: 'chkLAD',
86
+ marina_pickup: 'chkLAP',
87
+ military_site_delivery: 'chkLAD',
88
+ military_site_pickup: 'chkLAP',
89
+ mine_site_delivery: 'chkLAD',
90
+ mine_site_pickup: 'chkLAP',
91
+ motel_delivery: 'chkLAD',
92
+ motel_pickup: 'chkLAP',
93
+ nursing_home_delivery: 'chkLAD',
94
+ nursing_home_pickup: 'chkLAP',
95
+ park_delivery: 'chkLAD',
96
+ park_pickup: 'chkLAP',
97
+ prison_delivery: 'chkLAD',
98
+ prison_pickup: 'chkLAP',
99
+ ranch_delivery: 'chkLAD',
100
+ ranch_pickup: 'chkLAP',
101
+ reservation_delivery: 'chkLAD',
102
+ reservation_pickup: 'chkLAP',
103
+ residential_delivery: 'chkPR',
104
+ residential_pickup: 'chkPR',
105
+ resort_delivery: 'chkLAD',
106
+ resort_pickup: 'chkLAP',
107
+ restaurant_delivery: 'chkLAD',
108
+ restaurant_pickup: 'chkLAP',
109
+ school_delivery: 'chkLAD',
110
+ school_pickup: 'chkLAP',
111
+ steel_mill_delivery: 'chkLAD',
112
+ steel_mill_pickup: 'chkLAP',
113
+ storage_facility_delivery: 'chkLAD',
114
+ storage_facility_pickup: 'chkLAP',
115
+ university_delivery: 'chkLAD',
116
+ university_pickup: 'chkLAP',
117
+ utility_site_delivery: 'chkLAD',
118
+ utility_site_pickup: 'chkLAP'
119
+ }
120
+ end
121
+
122
+ def maximum_height = Measured::Length.new(105, :inches)
123
+ def maximum_weight = Measured::Weight.new(10_000, :pounds)
124
+ def minimum_length_for_overlength_fees = Measured::Length.new(8, :feet)
125
+ def name = 'Southeastern Freight Lines'
126
+ def overlength_fees_require_tariff? = false
127
+ def required_credential_types = %i[api]
128
+ def requirements = %i[credentials]
129
+ def scac = 'SEFL'
130
+ def services = %i[standard]
131
+ def unquotable_accessorials = %i[dock_pickup]
132
+
133
+ def unserviceable_accessorials
134
+ %i[
135
+ afterhours_delivery
136
+ afterhours_pickup
137
+ appointment_pickup
138
+ brewery_delivery
139
+ brewery_pickup
140
+ customs_brokerage
141
+ driver_assist
142
+ early_morning_delivery
143
+ early_morning_pickup
144
+ flatbed_delivery
145
+ flatbed_pickup
146
+ grocery_warehouse_delivery
147
+ grocery_warehouse_pickup
148
+ winery_delivery
149
+ winery_pickup
150
+ ]
151
+ end
152
+
153
+ def us_dot_number = 63_419
154
+ def website_url = 'https://sefl.com'
155
+ end
156
+
157
+ API = {
158
+ domain: 'www.sefl.com',
159
+ endpoints: { rates: '/webconnect/ratequotes/rest/submitQuote' },
160
+ methods: { get_rate: :get, rates: :post },
161
+ use_ssl: false
162
+ }.freeze
163
+ JSON_HEADERS = { Accept: 'application/json', charset: 'utf-8', 'Content-Type' => 'application/x-www-form-urlencoded' }.freeze
164
+
165
+ # Documents
166
+
167
+ # Rates
168
+ def find_rates(shipment:)
169
+ begin
170
+ validate_packages(shipment.packages)
171
+ rescue UnserviceableError => e
172
+ return RateResponse.new(error: e)
173
+ end
174
+
175
+ request = build_rate_request(shipment:)
176
+ parse_rate_response(shipment:, response: commit(request))
177
+ end
178
+
179
+ # Tracking
180
+
181
+ protected
182
+
183
+ def auth_header
184
+ api_credentials = fetch_credential(:api)
185
+ auth = Base64.strict_encode64("#{api_credentials.username}:#{api_credentials.password}")
186
+
187
+ { Authorization: "Basic #{auth}" }
188
+ end
189
+
190
+ def base_url = "https://#{API[:domain]}"
191
+
192
+ # Rates
193
+ def build_rate_request(shipment:)
194
+ accessorials = []
195
+
196
+ if shipment.accessorials.any?
197
+ serviceable_accessorials?(shipment.accessorials)
198
+
199
+ shipment
200
+ .accessorials
201
+ .reject { |accessorial| unquotable_accessorials.include?(accessorial) }
202
+ .each do |shipment_accessorial|
203
+ conf_accessorial = mappable_accessorials[shipment_accessorial]
204
+
205
+ case conf_accessorial
206
+ when Array then accessorials += conf_accessorial
207
+ when String then accessorials << conf_accessorial
208
+ end
209
+ end
210
+ end
211
+
212
+ longest_dimension = shipment.packages.map { |p| [p.width(:inches), p.length(:inches)].max }.max.ceil
213
+ accessorials << 'chkOD' if longest_dimension >= 96
214
+
215
+ accessorials.uniq!
216
+
217
+ pickup_on = Date.current
218
+ shipment_description = shipment.packages.map(&:description).reject(&:blank?).uniq.join(', ')
219
+ shipment_description = 'Freight All Kinds' if shipment_description.blank?
220
+
221
+ api_credentials = fetch_credential(:api)
222
+
223
+ body = {
224
+ allowSpot: longest_dimension >= 120 ? 'Y' : 'N',
225
+ CustomerAccount: api_credentials.account.to_i.to_s.rjust(9, '0'),
226
+ CustomerCity: customer_location.city,
227
+ CustomerName: customer_location.contact.company_name,
228
+ CustomerState: customer_location.province,
229
+ CustomerStreet: customer_location.address1,
230
+ CustomerZip: customer_location.postal_code,
231
+ Description: shipment_description,
232
+ DestCountry: 'U',
233
+ DestinationCity: shipment.destination.city,
234
+ DestinationState: shipment.destination.province,
235
+ DestinationZip: shipment.destination.postal_code,
236
+ DimsOption: 'I',
237
+ EmailAddress: customer_location.contact.email,
238
+ Option: 'T',
239
+ OrigCountry: 'U',
240
+ OriginCity: shipment.origin.city,
241
+ OriginState: shipment.origin.province,
242
+ OriginZip: shipment.origin.postal_code,
243
+ PickupDay: pickup_on.strftime('%_d'),
244
+ PickupMonth: pickup_on.strftime('%_m'),
245
+ PickupYear: pickup_on.strftime('%Y'),
246
+ rateXML: 'Y',
247
+ returnX: 'Y',
248
+ Terms: 'P'
249
+ }
250
+
251
+ declared_value = if shipment.declared_value_cents.blank?
252
+ 0
253
+ else
254
+ (shipment.declared_value_cents.to_f / 100).ceil
255
+ end
256
+
257
+ body.deep_merge!({ chkIN: 'on', FVInsuranceAmount: format('%.2f', declared_value) }) if declared_value.positive?
258
+ body.deep_merge!({ ODLength: longest_dimension, ODLengthUnit: 'I' }) if longest_dimension >= 96
259
+
260
+ cubic_ft_required = shipment.destination.province.upcase == 'PR'
261
+
262
+ i = 0
263
+ shipment.packages.each do |package|
264
+ package.quantity.times do
265
+ i += 1
266
+
267
+ body = body.deep_merge({ "Class#{i}": package.freight_class.to_s.sub('.', '').to_i })
268
+ body = body.deep_merge({ "Description#{i}": package.description || 'Freight' })
269
+ body = body.deep_merge({ "PieceLength#{i}": package.length(:in).ceil })
270
+ body = body.deep_merge({ "PieceWidth#{i}": package.width(:in).ceil })
271
+ body = body.deep_merge({ "PieceHeight#{i}": package.height(:in).ceil })
272
+ body = body.deep_merge({ "Weight#{i}": package.pounds(:each).ceil })
273
+
274
+ body = body.deep_merge({ "CubicFt#{i}": package.cubic_ft(:each) }) if cubic_ft_required
275
+ end
276
+ end
277
+
278
+ if accessorials.any?
279
+ body[:accessorial] = 'on'
280
+
281
+ accessorials.each { |accessorial| body[accessorial] = 'on' }
282
+ end
283
+
284
+ request = build_request(:rates, body:)
285
+ save_request(request)
286
+ request
287
+ end
288
+
289
+ def build_request(action, options = {})
290
+ headers = JSON_HEADERS
291
+ headers = headers.merge(auth_header)
292
+ headers = headers.merge(options[:headers]) if options[:headers].present?
293
+ body = URI.encode_www_form(options[:body]) if options[:body].present?
294
+
295
+ request = { url: options[:url].presence || build_url(action), headers:, method: API.dig(:methods, action), body: }
296
+
297
+ save_request(request)
298
+ request
299
+ end
300
+
301
+ def build_url(action) = "#{base_url}#{API.dig(:endpoints, action)}"
302
+
303
+ def commit(request)
304
+ url = request[:url]
305
+ headers = request[:headers]
306
+ method = request[:method]
307
+ body = request[:body]
308
+
309
+ case method
310
+ when :post
311
+ HTTPClient.post(url, headers:, body:, proxy_url:)
312
+ else
313
+ HTTPClient.get(url, headers:, proxy_url:)
314
+ end
315
+ end
316
+
317
+ def parse_rate_response(shipment:, response:, tries: 0)
318
+ rate_response = RateResponse.new(request: last_request, response:)
319
+
320
+ # Used begin rescue block's retry instead.
321
+ # if tries > 10
322
+ # rate_response.error = ResponseError.new("Timeout after #{tries * 5} seconds")
323
+ # return rate_response
324
+ # end
325
+
326
+ if response.body.blank?
327
+ rate_response.error = InvalidCredentialsError if response.code == 401
328
+
329
+ rate_response.error = ResponseError.new('Unknown response') if rate_response.error.blank?
330
+ return rate_response
331
+ end
332
+
333
+ begin
334
+ response = JSON.parse(response.body)
335
+ rescue JSON::ParserError
336
+ sleep(5)
337
+ if tries > 10
338
+ rate_response.error = ResponseError.new("Timeout after #{tries * 5} seconds")
339
+ return rate_response
340
+ end
341
+
342
+ tries += 1
343
+ retry
344
+ end
345
+
346
+ error = response['errorMessage']
347
+
348
+ if error.present?
349
+ rate_response.error = UnserviceableError.new(error.sub(' by SEFL.', '')) if error.include?('one point must be directly serviced')
350
+
351
+ rate_response.error = ResponseError.new(error) if rate_response.error.blank?
352
+ return rate_response
353
+ end
354
+
355
+ url = response['detailQuoteLocation'].gsub('\\', '')
356
+ request = build_request(:get_rate, url:)
357
+
358
+ tries = 0
359
+
360
+ until tries > 10
361
+ save_request(request)
362
+ response = commit(request)
363
+
364
+ if response.body.blank?
365
+ rate_response.error = InvalidCredentialsError if response.code == 401
366
+
367
+ rate_response.error = ResponseError.new('Unknown response') if rate_response.error.blank?
368
+ return rate_response
369
+ end
370
+
371
+ response = JSON.parse(response.body)
372
+
373
+ if response.blank?
374
+ rate_response.error = ResponseError.new('Unknown response')
375
+ return rate_response
376
+ end
377
+
378
+ error = response['errorMessage']
379
+
380
+ if error.present?
381
+ if error.downcase.include?('not yet been processed')
382
+ sleep(5)
383
+ tries += 1
384
+ next
385
+ else
386
+ rate_response.error = ResponseError.new(error)
387
+ return rate_response
388
+ end
389
+ end
390
+
391
+ tries = 50
392
+ end
393
+
394
+ if response['rateQuote'].blank?
395
+ rate_response.error = ResponseError.new('Cost is empty')
396
+ return rate_response
397
+ end
398
+
399
+ estimate_reference = response['quoteNumber']
400
+ transit_days = response['transitTime'].to_i
401
+
402
+ details = response['details']
403
+ prices = []
404
+
405
+ # return details
406
+
407
+ details.each do |detail|
408
+ next if detail['typeCharge'].include?('TTL') || detail['typeCharge'].include?('NFC')
409
+
410
+ cents = detail['charges'].squish
411
+ cents = cents.blank? ? 0 : (cents.to_f * 100).to_i
412
+ next if cents.zero?
413
+
414
+ description = detail['description'].squish
415
+
416
+ cents *= -1 if detail['description'].include?('DISCOUNT')
417
+
418
+ prices << Price.new(blame: :api, cents:, description:)
419
+ end
420
+
421
+ rate = Rate.new(
422
+ carrier: self,
423
+ carrier_name: name,
424
+ currency: 'USD',
425
+ estimate_reference:,
426
+ scac:,
427
+ service_name: :standard,
428
+ shipment:,
429
+ prices:,
430
+ transit_days:,
431
+ with_excessive_length_fees: rates_with_excessive_length_fees?
432
+ )
433
+
434
+ rate_response.rates = [rate]
435
+ rate_response
436
+ end
437
+
438
+ # Tracking
439
+ end
440
+ end
441
+ end
@@ -0,0 +1,30 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class SouthwesternMotorTransport < Carrier
4
+ class << self
5
+ def contacts
6
+ [Contact.new(department: 'Main', id: '1c08f628-6d56-41d9-b381-4feedfc6cab8', phone: '+12106616791')]
7
+ end
8
+
9
+ def headquarters
10
+ Address.new(
11
+ city: 'San Antonio',
12
+ country: Countries.find_by(iso31661_alpha2: 'US'),
13
+ id: '09fe17b4-8d19-4501-8455-4b31c9460705',
14
+ postal_code: '78218',
15
+ region_abbreviation: 'TX',
16
+ street: '4600 Goldfield'
17
+ )
18
+ end
19
+
20
+ def id = 'f45ef864-e505-4946-8676-a49b961be91d'
21
+ def legal_name = 'Southwestern Motor Transport Inc'
22
+ def name = 'Southwestern Motor Transport'
23
+ def scac = 'SMTL'
24
+ def us_dot_number = 136_555
25
+ def us_mc_number = 825_355
26
+ def website_url = 'https://www.smtl.com'
27
+ end
28
+ end
29
+ end
30
+ end