Class: ActiveShopifyGraphQL::SearchQuery

Inherits:
Object
  • Object
show all
Defined in:
lib/active_shopify_graphql/search_query.rb,
lib/active_shopify_graphql/search_query/value_sanitizer.rb,
lib/active_shopify_graphql/search_query/parameter_binder.rb,
lib/active_shopify_graphql/search_query/hash_condition_formatter.rb

Overview

Represents a Shopify search query, converting Ruby conditions into Shopify's search syntax Supports hash-based conditions (with sanitization), string-based conditions (raw), and parameter binding

Examples:

Hash-based query (safe, with sanitization)

SearchQuery.new(sku: "ABC-123").to_s
# => "sku:'ABC-123'"

String-based query (raw, user responsibility for safety)

SearchQuery.new("sku:* AND product_id:123").to_s
# => "sku:* AND product_id:123"

String with positional parameter binding

SearchQuery.new("sku:? product_id:?", "Good ol' value", 123).to_s
# => "sku:'Good ol\\' value' product_id:123"

String with named parameter binding

SearchQuery.new("sku::sku product_id::product_id", { sku: "A-SKU", product_id: 123 }).to_s
# => "sku:'A-SKU' product_id:123"

Defined Under Namespace

Classes: HashConditionFormatter, ParameterBinder, ValueSanitizer

Instance Method Summary collapse

Constructor Details

#initialize(conditions = {}, *args) ⇒ SearchQuery

Returns a new instance of SearchQuery.



26
27
28
29
# File 'lib/active_shopify_graphql/search_query.rb', line 26

def initialize(conditions = {}, *args)
  @conditions = conditions
  @args = args
end

Instance Method Details

#to_sString

Converts conditions to Shopify search query string

Returns:

  • (String)

    The Shopify query string



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/active_shopify_graphql/search_query.rb', line 33

def to_s
  case @conditions
  when Hash
    HashConditionFormatter.format(@conditions)
  when String
    if @args.empty?
      @conditions
    else
      ParameterBinder.bind(@conditions, *@args)
    end
  when Array
    # Handle [query_string, *binding_args] format from FinderMethods#where
    query_string = @conditions.first
    binding_args = @conditions[1..]
    ParameterBinder.bind(query_string, *binding_args)
  else
    ""
  end
end