Class: Chewy::Search::Parameters::Source

Inherits:
Storage
  • Object
show all
Defined in:
lib/chewy/search/parameters/source.rb

Overview

This storage handles either an array of strings/symbols or a hash with includes and excludes keys and arrays of strings/symbols as values. Any other key is ignored.

Instance Attribute Summary

Attributes inherited from Storage

#value

Instance Method Summary collapse

Methods inherited from Storage

#==, #initialize, #replace!

Constructor Details

This class inherits a constructor from Chewy::Search::Parameters::Storage

Instance Method Details

#merge!(other) ⇒ {Symbol => Array<String>, true, false}

Requires an additional logic to merge enabled value.



38
39
40
41
# File 'lib/chewy/search/parameters/source.rb', line 38

def merge!(other)
  super
  update!(other.value[:enabled])
end

#render{Symbol => Object}?

Renders false if source is disabled, otherwise renders the contents of includes value or even the entire hash if excludes also specified.



49
50
51
52
53
54
55
56
57
# File 'lib/chewy/search/parameters/source.rb', line 49

def render
  if !value[:enabled]
    {self.class.param_name => false}
  elsif value[:excludes].present?
    {self.class.param_name => value.slice(:includes, :excludes).reject { |_, v| v.blank? }}
  elsif value[:includes].present?
    {self.class.param_name => value[:includes]}
  end
end

#update!(other_value) ⇒ {Symbol => Array<String>, true, false}

If array or simple string/symbol is passed, it is treated as a part of includes array and gets concatenated with it. In case of hash, respective values are concatenated as well.



26
27
28
29
30
31
# File 'lib/chewy/search/parameters/source.rb', line 26

def update!(other_value)
  new_value = normalize(other_value)
  new_value[:includes] = value[:includes] | new_value[:includes]
  new_value[:excludes] = value[:excludes] | new_value[:excludes]
  @value = new_value
end