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,474 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class ClearLaneFreightSystems < FreightKit::Carrier
4
+ class << self
5
+ def check_mailing_addresses
6
+ [
7
+ Address.new(
8
+ city: 'Rancho Cucamonga',
9
+ country: Countries.find_by(iso31661_alpha2: 'US'),
10
+ id: '522c3717-d8f1-45c1-a363-da48dadd3090',
11
+ postal_code: '91730',
12
+ region_abbreviation: 'CA',
13
+ street: '9278 Charles Smith Ave'
14
+ )
15
+ ]
16
+ end
17
+
18
+ # @note Explicitly set to `false` because though API allows this, it "doesn't quote correctly" per customer
19
+ # service
20
+ def find_rates_with_declared_value? = false
21
+
22
+ def id = '5fe13653-7ac8-4c82-977a-ba9e83ea92e6'
23
+
24
+ def mappable_accessorials
25
+ {
26
+ inside_delivery: 'INSD',
27
+ inside_pickup: 'INSP',
28
+ liftgate_delivery: 'LIFTD',
29
+ liftgate_pickup: 'LIFTP',
30
+ residential_delivery: 'RESDLY',
31
+ residential_pickup: 'RESPU'
32
+ }
33
+ end
34
+
35
+ def maximum_height = Measured::Length.new(105, :inches)
36
+ def maximum_weight = Measured::Weight.new(10_000, :pounds)
37
+ def minimum_length_for_overlength_fees = Measured::Length.new(8, :feet)
38
+ def name = 'Clear Lane Freight Systems'
39
+ def overlength_fees_require_tariff? = false
40
+ def required_credential_types = %i[api website]
41
+ def requirements = %i[credentials]
42
+ def scac = 'CLNI'
43
+ def unquotable_accessorials = %i[appointment_delivery]
44
+
45
+ def unserviceable_accessorials
46
+ %i[
47
+ afterhours_delivery
48
+ afterhours_pickup
49
+ airport_delivery
50
+ airport_pickup
51
+ amusement_park_delivery
52
+ amusement_park_pickup
53
+ appointment_pickup
54
+ athletic_facility_delivery
55
+ athletic_facility_pickup
56
+ brewery_delivery
57
+ brewery_pickup
58
+ cemetery_delivery
59
+ cemetery_pickup
60
+ church_delivery
61
+ church_pickup
62
+ construction_delivery
63
+ construction_pickup
64
+ convention_delivery
65
+ convention_pickup
66
+ customs_brokerage
67
+ dock_dropoff
68
+ dock_pickup
69
+ driver_assist
70
+ early_morning_delivery
71
+ early_morning_pickup
72
+ fair_delivery
73
+ fair_pickup
74
+ farm_delivery
75
+ farm_pickup
76
+ fitness_center_delivery
77
+ fitness_center_pickup
78
+ flatbed_delivery
79
+ flatbed_pickup
80
+ golf_course_delivery
81
+ golf_course_pickup
82
+ government_delivery
83
+ government_pickup
84
+ grocery_store_delivery
85
+ grocery_store_pickup
86
+ grocery_warehouse_delivery
87
+ grocery_warehouse_pickup
88
+ guaranteed_delivery
89
+ guaranteed_delivery_am
90
+ guaranteed_delivery_pm
91
+ hospital_delivery
92
+ hospital_pickup
93
+ hotel_delivery
94
+ hotel_pickup
95
+ inspection_site_delivery
96
+ inspection_site_pickup
97
+ jobsite_delivery
98
+ jobsite_pickup
99
+ mall_delivery
100
+ mall_pickup
101
+ marina_delivery
102
+ marina_pickup
103
+ military_site_delivery
104
+ military_site_pickup
105
+ mine_site_delivery
106
+ mine_site_pickup
107
+ motel_delivery
108
+ motel_pickup
109
+ nursing_home_delivery
110
+ nursing_home_pickup
111
+ park_delivery
112
+ park_pickup
113
+ prison_delivery
114
+ prison_pickup
115
+ ranch_delivery
116
+ ranch_pickup
117
+ reservation_delivery
118
+ reservation_pickup
119
+ resort_delivery
120
+ resort_pickup
121
+ restaurant_delivery
122
+ restaurant_pickup
123
+ school_delivery
124
+ school_pickup
125
+ steel_mill_delivery
126
+ steel_mill_pickup
127
+ storage_facility_delivery
128
+ storage_facility_pickup
129
+ university_delivery
130
+ university_pickup
131
+ utility_site_delivery
132
+ utility_site_pickup
133
+ winery_delivery
134
+ winery_pickup
135
+ ]
136
+ end
137
+
138
+ def validate_packages(packages, tariff = nil)
139
+ raise UnserviceableError, 'Must be fewer than 10 items altogether' if packages.sum(&:quantity) > 10
140
+
141
+ super
142
+ end
143
+ end
144
+
145
+ include FreightKit::Rateable
146
+
147
+ API = {
148
+ actions: { rates: :get_rating },
149
+ domain: 'ssworldtrak.com',
150
+ endpoints: { rates: '/WTKServicesCLEARL/GetRating.asmx?WSDL' },
151
+ use_ssl: true
152
+ }.freeze
153
+ WEBSITE = { login: 'https://ssworldtrak.com/WebtrakWTNew/' }.freeze
154
+
155
+ # Documents
156
+
157
+ def pod(tracking_number) = parse_document_response(:pod, tracking_number)
158
+ def scanned_bol(tracking_number) = parse_document_response(:bol, tracking_number)
159
+
160
+ # Rates
161
+
162
+ # Tracking
163
+
164
+ protected
165
+
166
+ def accessorial_output_description(accessorial_output)
167
+ return '' if accessorial_output[:accessorial_desc].blank?
168
+
169
+ description = accessorial_output[:accessorial_desc]
170
+ description = description.capitalize
171
+ description.gsub('Smc', 'SMC')
172
+ end
173
+
174
+ def build_commodity_input(packages)
175
+ packages.map do |package|
176
+ {
177
+ CommodityInput: {
178
+ CommodityClass: package.freight_class,
179
+ CommodityHazmat: package.hazmat? ? 'Y' : 'N',
180
+ CommodityHeight: package.height(:in).ceil,
181
+ CommodityLength: package.length(:in).ceil,
182
+ CommodityPieces: package.quantity,
183
+ CommodityPieceType: package.packaging.pallet? ? 'pallet' : 'box',
184
+ CommodityWeight: package.pounds(:total).ceil,
185
+ CommodityWeightPerPiece: package.pounds(:each).ceil,
186
+ CommodityWidth: package.width(:in).ceil
187
+ }
188
+ }
189
+ end
190
+ end
191
+
192
+ def build_rate_request(shipment:)
193
+ accessorial_input = []
194
+ if shipment.accessorials.present?
195
+ serviceable_accessorials?(shipment.accessorials)
196
+ shipment.accessorials.each do |a|
197
+ next if unserviceable_accessorials.include?(a)
198
+
199
+ accessorial_input << { AccessorialInput: { AccessorialCode: mappable_accessorials[a] } }
200
+ end
201
+ end
202
+
203
+ accessorial_input.uniq!
204
+
205
+ commodity_input = build_commodity_input(shipment.packages)
206
+
207
+ palletized = shipment.packages.all? { |package| package.packaging.pallet? } ? 'Y' : 'N'
208
+
209
+ pickup_from = ::Time.current.beginning_of_day + 14.hours
210
+ pickup_from += 1.day if ::Time.current > pickup_from
211
+ pickup_to = pickup_from + 3.hours
212
+
213
+ api_credentials = fetch_credential(:api)
214
+
215
+ request = {
216
+ RatingParam: {
217
+ AccessorialInput: accessorial_input,
218
+ CommodityInput: commodity_input,
219
+ RatingInput: {
220
+ DeclaredValue: 0,
221
+ DestinationCity: shipment.destination.city,
222
+ DestinationCountry: shipment.destination.country.code(:alpha2).value,
223
+ DestinationState: shipment.destination.province,
224
+ DestinationZip: shipment.destination.postal_code,
225
+ LiabilityType: '',
226
+ OriginCity: shipment.origin.city,
227
+ OriginCountry: shipment.origin.country.code(:alpha2).value,
228
+ OriginState: shipment.origin.province,
229
+ OriginZip: shipment.origin.postal_code,
230
+ Palletized: palletized,
231
+ PickupDate: pickup_from.to_date.strftime('%Y-%m-%d'),
232
+ PickupLocationCloseTime: pickup_to.strftime('%H:%M:00'),
233
+ PickupTime: pickup_from.strftime('%H:%M:00'),
234
+ RequestID: rand(0..999_999).to_s,
235
+ ServiceLevelID: '',
236
+ ShipmentTerms: '',
237
+ Stackable: false,
238
+ WebTrakUserID: api_credentials.username
239
+ }
240
+ }
241
+ }
242
+
243
+ save_request(request)
244
+ request
245
+ end
246
+
247
+ def build_url(api_or_website, action)
248
+ case api_or_website
249
+ when :api
250
+ scheme = API[:use_ssl] ? 'https://' : 'http://'
251
+ "#{scheme}#{API[:domain]}#{API.dig(:endpoints, action)}"
252
+ when :website
253
+ WEBSITE[action]
254
+ end
255
+ end
256
+
257
+ def commit(action, request)
258
+ client_args = {
259
+ wsdl: build_url(:api, action),
260
+ convert_request_keys_to: :none,
261
+ env_namespace: :soap,
262
+ element_form_default: :qualified
263
+ }
264
+
265
+ call_args = { message: request_blueprint.deep_merge(request) }
266
+
267
+ ::FreightKit::SoapClient.new(
268
+ carrier: self,
269
+ action:,
270
+ client_args:,
271
+ call_args:,
272
+ soap_operation: API.dig(:actions, action)
273
+ ).call&.to_hash&.with_indifferent_access
274
+ end
275
+
276
+ def parse_amount(amount)
277
+ ['$', ','].each { |char| amount = amount.sub(char, '') }
278
+
279
+ return 0 if amount.blank?
280
+
281
+ amount = (amount.to_f * 100).to_i
282
+ end
283
+
284
+ def parse_document_response(action, tracking_number)
285
+ document_response = DocumentResponse.new
286
+
287
+ selenoid_credential = fetch_credential(:selenoid)
288
+ website_credentials = fetch_credential(:website)
289
+
290
+ browser = Watir::Browser.new(*selenoid_credential.watir_args)
291
+ browser.goto('https://ssworldtrak.com/WebtrakWTNew/')
292
+
293
+ browser.text_field(name: 'txtUserId').set(website_credentials.username)
294
+ browser.text_field(name: 'txtPass').set(website_credentials.password)
295
+ browser.button(name: 'btnSubmit').click
296
+
297
+ if browser.html.include?('Either UserID or Password are incorrect, please try again.')
298
+ browser.close
299
+
300
+ document_response.error = InvalidCredentialsError.new
301
+ return document_response
302
+ end
303
+
304
+ # Bypass the hover menu
305
+ browser.goto('https://ssworldtrak.com/WebtrakWTNew/Main/Reports/POD.aspx')
306
+
307
+ from = 90.days.ago.strftime('%m%d%Y')
308
+
309
+ browser.text_field(name: 'txtFromDate').wait_until(&:present?).focus
310
+
311
+ # Hack to get around JavaScript messing up our input
312
+ sleep(1)
313
+ from.chars.each { |char| browser.text_field(name: 'txtFromDate').append(char) }
314
+
315
+ browser.text_field(name: 'txtToDate').click
316
+ browser.element(xpath: '/html/body/form/div[3]/div[4]/div[3]/div[2]/div/div/div[3]/div').wait_until(&:present?).click
317
+
318
+ browser.button(name: 'btnSubmit').click
319
+
320
+ browser.text_field(id: 'yadcf-filter--grid-2').set(tracking_number)
321
+ browser.send_keys(:enter)
322
+
323
+ if browser.element(id: 'tdPODName0').wait_until(&:present?).text == 'NO POD' && action == :pod
324
+ browser.window.close
325
+ browser.original_window.use
326
+ browser.goto('https://ssworldtrak.com/WebtrakWTNew/logoff.aspx')
327
+ browser.close
328
+
329
+ document_response.error = DocumentNotFoundError.new
330
+ return document_response
331
+ end
332
+
333
+ browser.element(xpath: '/html/body/form/div[3]/div[4]/div[8]/div/table/tbody/tr/td[12]/a').wait_until(&:present?).click
334
+
335
+ browser.switch_window
336
+
337
+ sleep(5)
338
+
339
+ html = browser.element(id: 'DataTables_Table_0').wait_until(&:present?).html
340
+ html = Nokogiri::HTML(html)
341
+ link_id = nil
342
+
343
+ html.css('tbody tr').each do |row|
344
+ next unless row.css('td:nth-child(3)').text == action.to_s.upcase
345
+
346
+ link_id = row.css('td:nth-child(1) a').attr('id').value
347
+ end
348
+
349
+ if link_id.blank?
350
+ browser.window.close
351
+ browser.original_window.use
352
+ browser.goto('https://ssworldtrak.com/WebtrakWTNew/logoff.aspx')
353
+ browser.close
354
+
355
+ document_response.error = DocumentNotFoundError.new
356
+ return document_response
357
+ end
358
+
359
+ browser.element(css: "##{link_id}").click
360
+
361
+ sleep(50) # so Chrome can finish downloading, Selenoid default timeout is 60s
362
+
363
+ download_url = "#{selenoid_credential.selenoid_options[:download_url]}/#{browser.driver.session_id}"
364
+ response = HTTPClient.get("#{download_url}/?json")
365
+
366
+ filename = URI.encode_www_form_component(JSON.parse(response.body)&.last)
367
+ url = "#{download_url}/#{filename}"
368
+
369
+ document_response.request = URI.parse(url)
370
+
371
+ begin
372
+ response = HTTPClient.get(url, proxy_url:)
373
+ rescue StandardError => e
374
+ document_response.error = e
375
+ return document_response
376
+ end
377
+
378
+ browser.window.close
379
+ browser.original_window.use
380
+ browser.goto('https://ssworldtrak.com/WebtrakWTNew/logoff.aspx')
381
+ browser.close
382
+
383
+ unless response.code == 200
384
+ document_response.error = DocumentNotFoundError.new
385
+
386
+ return document_response
387
+ end
388
+
389
+ document_response.assign_attributes(content_type: response.headers['content-type'], data: response.body)
390
+ document_response
391
+ end
392
+
393
+ def parse_rate_response(shipment:, response:)
394
+ rate_response = RateResponse.new(request: last_request, response:)
395
+
396
+ if response.blank?
397
+ rate_response.error = ResponseError.new('Blank response')
398
+ return rate_response
399
+ end
400
+
401
+ error = response.dig(:get_rating_response, :get_rating_result, :rating_output, :message)
402
+
403
+ if error.present?
404
+ if error.include?('do not service this lane')
405
+ rate_response.error = UnserviceableError.new('Incorrect ZIP code or no service available at origin and/or destination')
406
+ return rate_response
407
+ end
408
+
409
+ pretty_error = error.strip.gsub('can not', 'cannot')
410
+
411
+ rate_response.error = ResponseError.new(pretty_error)
412
+ return rate_response
413
+ end
414
+
415
+ result = response.dig(:get_rating_response, :get_rating_result, :rating_output)
416
+
417
+ if result.blank?
418
+ rate_response.error = ResponseError.new('Blank response')
419
+ return rate_response
420
+ end
421
+
422
+ cents = parse_amount(result[:standard_total_rate])
423
+
424
+ if cents.blank?
425
+ rate_response.error = ResponseError.new('Cost is blank')
426
+ return rate_response
427
+ end
428
+
429
+ prices = []
430
+ prices << Price.new(blame: :api, cents:, description: 'Freight')
431
+
432
+ accessorial_outputs = result.dig(:accessorial_output, :accessorial_output)
433
+
434
+ accessorial_outputs.each do |accessorial_output|
435
+ prices << Price.new(blame: :api, cents: 0, description: accessorial_output_description(accessorial_output))
436
+ end
437
+
438
+ transit_days = response[:transit_days].to_i
439
+
440
+ rate = Rate.new(
441
+ carrier: self,
442
+ carrier_name: name,
443
+ currency: 'USD',
444
+ estimate_reference: nil,
445
+ scac:,
446
+ service_name: :standard,
447
+ shipment:,
448
+ prices:,
449
+ transit_days:,
450
+ with_excessive_length_fees: rates_with_excessive_length_fees?
451
+ )
452
+
453
+ rate_response.rates = [rate]
454
+ rate_response
455
+ end
456
+
457
+ def request_blueprint
458
+ api_credentials = fetch_credential(:api)
459
+
460
+ {
461
+ request: {
462
+ Application: 'ThirdParty',
463
+ AccountNumber: api_credentials.account,
464
+ UserID: api_credentials.username,
465
+ Password: api_credentials.password,
466
+ TestMode: 'N'
467
+ }
468
+ }
469
+ end
470
+
471
+ # Tracking
472
+ end
473
+ end
474
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class CleopatraTrucking < Carrier
4
+ class << self
5
+ def id = 'a630f877-5054-4f75-b446-fed6c4bbf942'
6
+ def name = 'Cleopatra Trucking'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class CliffordTransportation < Carrier
4
+ class << self
5
+ def id = '4d25455c-f24a-4cf3-bb43-f40e88a6fdd9'
6
+ def name = 'Clifford Transportation'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,25 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class CMSDomestic < Carrier
4
+ class << self
5
+ def check_mailing_addresses
6
+ [
7
+ Address.new(
8
+ city: 'Denver',
9
+ country: Countries.find_by(iso31661_alpha2: 'US'),
10
+ id: '494c4cf7-3b71-4a5b-b274-afe316f37e46',
11
+ postal_code: '80217',
12
+ region_abbreviation: 'CO',
13
+ street: 'PO Box 17769'
14
+ )
15
+ ]
16
+ end
17
+
18
+ def id = '272af805-19ad-4754-b26f-9177fc39c91d'
19
+ def legal_name = 'Charles M. Schayer & Co.'
20
+ def name = 'CMS Domestic'
21
+ def us_dot_number = 2_249_786
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class CNDLogistics < Carrier
4
+ class << self
5
+ def id = '114bc7ea-33f4-4368-b192-2279fc1a65c5'
6
+ def name = 'CND Logistics'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,27 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class CoastToCoastTransport < Carrier
4
+ class << self
5
+ def contacts
6
+ [Contact.new(department: 'Main', id: '1f791e8b-74cb-452d-971b-50b37f0dac2e', phone: '+13363624940')]
7
+ end
8
+
9
+ def headquarters
10
+ Address.new(
11
+ city: 'Salisbury',
12
+ country: Countries.find_by(iso31661_alpha2: 'US'),
13
+ id: '949745f1-ec5c-4955-b384-60ecc1ff8c4d',
14
+ postal_code: '28146',
15
+ region_abbreviation: 'NC',
16
+ street: '324 Sailboat Dr'
17
+ )
18
+ end
19
+
20
+ def id = '760faad0-3911-4dc5-bf8e-f8a6e697dc06'
21
+ def legal_name = 'Coast to Coast Transport LLC'
22
+ def name = 'Coast to Coast Transport'
23
+ def us_dot_number = 3_157_546
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,10 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class CountrywideCarriers < Carrier
4
+ class << self
5
+ def id = '41fe9756-78bb-42a6-8f70-06df170b4a2e'
6
+ def name = 'Countrywide Carriers'
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,31 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class CPLExpress < Carrier
4
+ class << self
5
+ def contacts
6
+ [
7
+ Contact.new(department: 'Dispatch', email: 'dispatch@cplexpress.com', id: 'ba43e014-2e59-43d6-8f39-acb80128b8c9'),
8
+ Contact.new(department: 'Main', id: 'a7daa1e5-4abb-48de-9893-493e91806a83', phone: '+13104189008')
9
+ ]
10
+ end
11
+
12
+ def headquarters
13
+ Address.new(
14
+ city: 'Santa Fe Springs',
15
+ country: Countries.find_by(iso31661_alpha2: 'US'),
16
+ id: '851dd7b4-b07a-46d2-af99-4cc76de0d15b',
17
+ postal_code: '90670',
18
+ region_abbreviation: 'CA',
19
+ street: '10715 Springdale Avenue #5'
20
+ )
21
+ end
22
+
23
+ def id = '5d814738-f7b8-4727-b44c-d899f5e116e0'
24
+ def legal_name = 'CPL Express Inc'
25
+ def name = 'CPL Express'
26
+ def us_dot_number = 1_376_496
27
+ def us_mc_number = 525_362
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,29 @@
1
+ module FreightKit
2
+ module Carriers
3
+ class CrosbyTruckingService < Carrier
4
+ class << self
5
+ def contacts
6
+ [Contact.new(department: 'Main', id: '8f0e96f7-c0e8-409a-8773-e1886abaf296', phone: '+15402349268')]
7
+ end
8
+
9
+ def headquarters
10
+ Address.new(
11
+ city: 'Mt Sidney',
12
+ country: Countries.find_by(iso31661_alpha2: 'US'),
13
+ id: 'b6aa80c9-3fab-4097-ba56-be53c22916b6',
14
+ postal_code: '24467',
15
+ region_abbreviation: 'VA',
16
+ street: '270 Keezletown Road'
17
+ )
18
+ end
19
+
20
+ def id = '52ef5a35-0c6b-4a70-a3ac-4568f273d859'
21
+ def legal_name = 'Crosby Trucking Service Inc'
22
+ def name = 'Crosby Trucking Service'
23
+ def us_dot_number = 32_052
24
+ def us_mc_number = 142_823
25
+ def website_url = 'https://www.crosbytrucking.com'
26
+ end
27
+ end
28
+ end
29
+ end