Module: RockautoApi::Endpoints::Fitment

Included in:
Client
Defined in:
lib/rockauto_api/endpoints/fitment.rb

Instance Method Summary collapse

Instance Method Details

#get_fitment_for_part(listing_data) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/rockauto_api/endpoints/fitment.rb', line 6

def get_fitment_for_part(listing_data)
  return default_result("", "") unless listing_data.is_a?(Hash) && !listing_data.empty?

  car_data = listing_data["car"] || listing_data[:car] || {}
  supp_data = listing_data["supplemental"] || listing_data[:supplemental] || {}

  part_number = supp_data["partnumber"] || supp_data[:partnumber] || ""
  brand = supp_data["catalogname"] || supp_data[:catalogname] || ""

  cache_key = "rockauto:fitment:#{part_number}:#{brand}"

  cache.fetch(cache_key, ttl: 604800) do
    payload = {
      "partData" => {
        "groupindex" => listing_data["groupindex"] || listing_data[:groupindex] || "0",
        "listing_data_essential" => {
          "groupindex" => listing_data["groupindex"] || listing_data[:groupindex] || "0",
          "carcode" => car_data["carcode"] || car_data[:carcode] || 0,
          "parttype" => car_data["parttype"] || car_data[:parttype] || "",
          "partkey" => car_data["partkey"] || car_data[:partkey] || ""
        },
        "listing_data_supplemental" => {
          "partnumber" => part_number,
          "catalogname" => brand,
          "belongstolisting" => "2",
          "sortgroup" => 0,
          "sortgrouptext" => "",
          "paramdesc" => "",
          "showhide" => {}
        },
        "OptKey" => listing_data["optkey"] || listing_data[:optkey] || ""
      }
    }

    response = call_catalog_api("getbuyersguide", payload)
    html = response.dig("buyersguidepieces", "body")

    Parsers::FitmentParser.parse(html, part_number: part_number, brand: brand)
  end
rescue NetworkError, ParseError
  default_result(part_number, brand)
end