Class: Retailer::UrlConstructor
- Inherits:
-
Object
- Object
- Retailer::UrlConstructor
- Includes:
- CatalogConstants
- Defined in:
- app/services/retailer/url_constructor.rb
Overview
Constructs product URLs for retailer catalog items dynamically.
Prioritizes hardcoded URLs but can generate URLs from product identifiers.
Constant Summary collapse
- CATALOG_BUILDERS =
Catalog ID to URL builder method mapping
Uses CatalogConstants for maintainability { # Home Depot HOME_DEPOT_USA => :home_depot_usa_url, HOME_DEPOT_CANADA => :home_depot_canada_url, # Costco COSTCO_CANADA => :costco_canada_url, # Wayfair WAYFAIR_USA => :wayfair_usa_url, WAYFAIR_CANADA => :wayfair_canada_url, WAYFAIR_GERMANY => :wayfair_germany_url, # Rona/Lowe's RONA_CANADA => :rona_url, LOWES_USA => :lowes_usa_url, LOWES_CANADA => :lowes_canada_url, # Build.com (Ferguson Home) BUILD_COM => :build_com_url, # Amazon Seller Marketplaces AMAZON_SC_US_CATALOG_ID => :amazon_url, AMAZON_SC_CA_CATALOG_ID => :amazon_url, # Amazon European Marketplaces AMAZON_SC_FR_CATALOG_ID => :amazon_url, AMAZON_SC_IT_CATALOG_ID => :amazon_url, AMAZON_SC_ES_CATALOG_ID => :amazon_url, AMAZON_SC_DE_CATALOG_ID => :amazon_url, AMAZON_SC_NL_CATALOG_ID => :amazon_url, AMAZON_SC_PL_CATALOG_ID => :amazon_url, AMAZON_SC_UK_CATALOG_ID => :amazon_url, AMAZON_SC_SE_CATALOG_ID => :amazon_url, AMAZON_SC_BE_CATALOG_ID => :amazon_url, # Walmart Seller Marketplaces WALMART_SELLER_USA => :walmart_usa_url, WALMART_SELLER_CANADA => :walmart_canada_url, # Canadian Tire CANADIAN_TIRE => :canadian_tire_url, # Houzz HOUZZ => :houzz_url, # Best Buy Canada BESTBUY_CANADA => :bestbuy_canada_url }.freeze
Constants included from CatalogConstants
CatalogConstants::ALL_MAIN_CATALOG_IDS, CatalogConstants::AMAZON_CATALOG_IDS, CatalogConstants::AMAZON_CA_CATALOG_IDS, CatalogConstants::AMAZON_EU_CATALOG_IDS, CatalogConstants::AMAZON_NA_SELLER_IDS, CatalogConstants::AMAZON_SC_BE_CATALOG_ID, CatalogConstants::AMAZON_SC_CATALOG_IDS, CatalogConstants::AMAZON_SC_CA_CATALOG_ID, CatalogConstants::AMAZON_SC_DE_CATALOG_ID, CatalogConstants::AMAZON_SC_ES_CATALOG_ID, CatalogConstants::AMAZON_SC_FR_CATALOG_ID, CatalogConstants::AMAZON_SC_IT_CATALOG_ID, CatalogConstants::AMAZON_SC_NL_CATALOG_ID, CatalogConstants::AMAZON_SC_PL_CATALOG_ID, CatalogConstants::AMAZON_SC_SE_CATALOG_ID, CatalogConstants::AMAZON_SC_UK_CATALOG_ID, CatalogConstants::AMAZON_SC_US_CATALOG_ID, CatalogConstants::AMAZON_SELLER_IDS, CatalogConstants::AMAZON_US_CATALOG_IDS, CatalogConstants::AMAZON_VC_CATALOG_IDS, CatalogConstants::AMAZON_VC_CA_CATALOG_ID, CatalogConstants::AMAZON_VC_CA_CATALOG_IDS, CatalogConstants::AMAZON_VC_DIRECT_FULFILLMENT_CATALOG_IDS, CatalogConstants::AMAZON_VC_US_CATALOG_IDS, CatalogConstants::AMAZON_VC_US_WASN4_CATALOG_ID, CatalogConstants::AMAZON_VC_US_WAX7V_CATALOG_ID, CatalogConstants::AMAZON_VC_WAT0F_CA_CATALOG_ID, CatalogConstants::AMAZON_VC_WAT4D_CA_CATALOG_ID, CatalogConstants::AMAZON_VENDOR_CODE_TO_CATALOG_ID, CatalogConstants::BESTBUY_CANADA, CatalogConstants::BUILD_COM, CatalogConstants::CANADIAN_TIRE, CatalogConstants::CA_CATALOG_ID, CatalogConstants::COSTCO_CANADA, CatalogConstants::COSTCO_CATALOGS, CatalogConstants::COSTCO_USA, CatalogConstants::EU_CATALOG_ID, CatalogConstants::HOME_DEPOT_CANADA, CatalogConstants::HOME_DEPOT_CATALOGS, CatalogConstants::HOME_DEPOT_USA, CatalogConstants::HOUZZ, CatalogConstants::LOCALE_TO_CATALOG, CatalogConstants::LOWES_CANADA, CatalogConstants::LOWES_USA, CatalogConstants::MARKETPLACE_CATALOGS, CatalogConstants::PRICE_CHECK_ENABLED_CATALOGS, CatalogConstants::RONA_CANADA, CatalogConstants::US_CATALOG_ID, CatalogConstants::VENDOR_CATALOGS, CatalogConstants::WALMART_CATALOGS, CatalogConstants::WALMART_SELLER_CANADA, CatalogConstants::WALMART_SELLER_USA, CatalogConstants::WAYFAIR_CANADA, CatalogConstants::WAYFAIR_CATALOGS, CatalogConstants::WAYFAIR_GERMANY, CatalogConstants::WAYFAIR_USA
Instance Method Summary collapse
-
#amazon_domain(catalog) ⇒ String
Returns the Amazon domain for a catalog based on its marketplace.
-
#can_generate_url?(catalog) ⇒ Boolean
Check if we can generate a URL for this catalog.
-
#generate_url(catalog_item) ⇒ String?
Generates a URL from product identifiers (ASIN, third_party_part_number, UPC) Does not use the hardcoded URL field.
-
#product_url(catalog_item) ⇒ String?
Returns the best URL for a catalog item Prefers hardcoded URL if present, otherwise generates from identifiers.
Methods included from CatalogConstants
amazon_catalog?, amazon_seller_catalog?, costco_catalog?, home_depot_catalog?, marketplace_catalog?, price_check_enabled?, vendor_catalog?, walmart_catalog?, wayfair_catalog?
Instance Method Details
#amazon_domain(catalog) ⇒ String
Returns the Amazon domain for a catalog based on its marketplace
95 96 97 98 99 100 101 102 103 |
# File 'app/services/retailer/url_constructor.rb', line 95 def amazon_domain(catalog) marketplace = catalog.amazon_marketplace return 'amazon.com' unless marketplace&.url # Extract domain from marketplace URL (https://www.amazon.com -> amazon.com) URI.parse(marketplace.url).host.gsub(/^www\./, '') rescue URI::InvalidURIError 'amazon.com' end |
#can_generate_url?(catalog) ⇒ Boolean
Check if we can generate a URL for this catalog
87 88 89 |
# File 'app/services/retailer/url_constructor.rb', line 87 def can_generate_url?(catalog) CATALOG_BUILDERS.key?(catalog.id) end |
#generate_url(catalog_item) ⇒ String?
Generates a URL from product identifiers (ASIN, third_party_part_number, UPC)
Does not use the hardcoded URL field
72 73 74 75 76 77 78 79 80 81 |
# File 'app/services/retailer/url_constructor.rb', line 72 def generate_url(catalog_item) catalog = catalog_item.catalog return nil unless catalog # Find matching retailer builder by catalog ID builder_method = CATALOG_BUILDERS[catalog.id] return nil unless builder_method send(builder_method, catalog_item, catalog) end |
#product_url(catalog_item) ⇒ String?
Returns the best URL for a catalog item
Prefers hardcoded URL if present, otherwise generates from identifiers
63 64 65 |
# File 'app/services/retailer/url_constructor.rb', line 63 def product_url(catalog_item) catalog_item.url.presence || generate_url(catalog_item) end |