Module: Retailer::UrlPatterns
- Defined in:
- app/services/retailer/url_patterns.rb
Overview
Shared URL patterns for identifying direct product pages vs search/category pages.
Used by PriceChecker (sync) and WebhookResultProcessor (async) to decide whether
a discovered or redirect URL should be stored on a catalog item.
Constant Summary collapse
- PRODUCT_PATTERNS =
[ %r{/p/[^/]+/\d+}, # Home Depot USA: /p/{slug}/{id} %r{/p/-/[^/]+/\d+}, # Costco (new): /p/-/{slug}/{id} %r{/product/[^/]+}, # Generic / HD Canada: /product/{slug} %r{\.product\.\d+\.html}, # Costco (legacy): /{slug}.product.{tppn}.html %r{/dp/}, # Amazon: /dp/{asin} %r{/pdp/[^?]+\.html}, # Wayfair / Canadian Tire: /pdp/{slug}.html %r{/pd/[^/]+/\d+}, # Lowe's USA: /pd/{slug}/{id} %r{/ip/[^/]+/\d+}, # Walmart: /ip/{slug}/{id} %r{/en-ca/product/}, # Best Buy Canada: /en-ca/product/{slug} %r{/products/[^/]+/pid}, # Houzz: /products/{slug}/pid{id} %r{/s\d+\?uid=} # Ferguson Home (Build.com): /{slug}/s{id}?uid={uid} ].freeze
- SEARCH_PATTERNS =
[ /search\?/, /search-results/, %r{/s/[^/]*$} # HD USA search: /s/{query} ].freeze
Class Method Summary collapse
Class Method Details
.direct_product_url?(url) ⇒ Boolean
28 29 30 31 32 33 |
# File 'app/services/retailer/url_patterns.rb', line 28 def self.direct_product_url?(url) return false if url.blank? return false if SEARCH_PATTERNS.any? { |p| url.match?(p) } PRODUCT_PATTERNS.any? { |p| url.match?(p) } end |