class Trample::Condition
Public Class Methods
new(attrs)
click to toggle source
Calls superclass method
# File lib/trample/condition.rb, line 25 def initialize(attrs) attrs.merge!(single: true) if attrs[:name] == :keywords super(attrs) end
Public Instance Methods
as_json(*opts)
click to toggle source
# File lib/trample/condition.rb, line 52 def as_json(*opts) if single? values.first elsif range? {}.tap do |json| json[:from_eq] = from_eq if from_eq? json[:from] = from if from? json[:to_eq] = to_eq if to_eq? json[:to] = to if to? end else { values: values, and: and? } end end
blank?()
click to toggle source
# File lib/trample/condition.rb, line 48 def blank? values.reject { |v| v == "" || v.nil? }.empty? && !range? end
lookup_autocomplete()
click to toggle source
# File lib/trample/condition.rb, line 30 def lookup_autocomplete if require_autocomplete_lookup? options = (lookup || {}).dup klass = options.delete(:klass) || '::Trample::TextLookup' options.assert_valid_keys(:key, :label) options = options.merge({ search_klass: search_klass, condition_name: name }) lookup_instance = klass.to_s.constantize.new(options) self.values = lookup_instance.load(values) end end
runtime_query_name()
click to toggle source
# File lib/trample/condition.rb, line 67 def runtime_query_name name = query_name return "#{name}.text_start" if prefix? return "#{name}.text_middle" if any_text? return "#{name}.analyzed" if search_analyzed? return "#{name}.autocomplete" if autocomplete? name end
to_query()
click to toggle source
# File lib/trample/condition.rb, line 76 def to_query if range? to_range_query else _values = values.dup.map { |v| v.is_a?(Hash) ? v.dup : v } user_queries = _values.select(&is_user_query) transformed = transform_values(_values - user_queries) user_query_clause = derive_user_query_clause(user_queries) main_clause = derive_main_clause(transformed) if user_query_clause.present? { or: [ main_clause, user_query_clause ] } else main_clause end end end
Private Instance Methods
anded?()
click to toggle source
# File lib/trample/condition.rb, line 160 def anded? has_combinator? and !!self.and end
derive_main_clause(transformed)
click to toggle source
# File lib/trample/condition.rb, line 114 def derive_main_clause(transformed) if prefix? to_prefix_query(transformed) elsif has_combinator? to_combinator_query(transformed) elsif exclusion? to_exclusion_query(transformed) else {runtime_query_name => transformed} end end
derive_user_query_clause(user_queries)
click to toggle source
# File lib/trample/condition.rb, line 104 def derive_user_query_clause(user_queries) if user_queries.length > 0 user_queries.each { |q| q.delete(:user_query) } condition = Condition.new(user_query.merge(values: user_queries)) condition.to_query else {} end end
exclusion?()
click to toggle source
# File lib/trample/condition.rb, line 156 def exclusion? not attributes[:not].nil? end
from?()
click to toggle source
# File lib/trample/condition.rb, line 172 def from? !!self.from end
from_eq?()
click to toggle source
# File lib/trample/condition.rb, line 180 def from_eq? !!self.from_eq end
has_autocomplete_keys?(entries)
click to toggle source
# File lib/trample/condition.rb, line 144 def has_autocomplete_keys?(entries) multiple? and entries.any? { |e| e.is_a?(Hash) } end
has_combinator?()
click to toggle source
# File lib/trample/condition.rb, line 148 def has_combinator? not attributes[:and].nil? end
has_user_queries?(entries)
click to toggle source
# File lib/trample/condition.rb, line 132 def has_user_queries?(entries) entries.any?(&is_user_query) end
is_user_query()
click to toggle source
# File lib/trample/condition.rb, line 136 def is_user_query ->(entry) { entry.is_a?(Hash) and !!entry[:user_query] } end
multiple?()
click to toggle source
# File lib/trample/condition.rb, line 164 def multiple? not single? end
not?()
click to toggle source
# File lib/trample/condition.rb, line 168 def not? !!self.not end
pluck_autocomplete_keys(entries)
click to toggle source
# File lib/trample/condition.rb, line 140 def pluck_autocomplete_keys(entries) entries.map { |v| v[:key] } end
pluck_user_query_values!(values)
click to toggle source
# File lib/trample/condition.rb, line 126 def pluck_user_query_values!(values) user_queries = values.select(&is_user_query) values.reject!(&is_user_query) [values, user_queries] end
prefix?()
click to toggle source
# File lib/trample/condition.rb, line 152 def prefix? !!prefix end
require_autocomplete_lookup?()
click to toggle source
# File lib/trample/condition.rb, line 227 def require_autocomplete_lookup? (values.present? && values.first.is_a?(Hash)) && values.any? { |v| v[:text].blank? } end
to?()
click to toggle source
# File lib/trample/condition.rb, line 176 def to? !!self.to end
to_combinator_query(vals, query_name_override = nil)
click to toggle source
# File lib/trample/condition.rb, line 204 def to_combinator_query(vals, query_name_override = nil) if anded? {runtime_query_name => {all: vals}} else {runtime_query_name => vals} end end
to_eq?()
click to toggle source
# File lib/trample/condition.rb, line 184 def to_eq? !!self.to_eq end
to_exclusion_query(vals)
click to toggle source
# File lib/trample/condition.rb, line 196 def to_exclusion_query(vals) if not? {runtime_query_name => {not: vals}} else {runtime_query_name => vals} end end
to_prefix_query(vals)
click to toggle source
# File lib/trample/condition.rb, line 188 def to_prefix_query(vals) if has_combinator? to_combinator_query(vals) else {runtime_query_name => vals} end end
to_range_query()
click to toggle source
# File lib/trample/condition.rb, line 212 def to_range_query _from_eq = transform.call(self.from_eq) if from_eq? _to_eq = transform.call(self.to_eq) if to_eq? _from = transform.call(self.from) if from? _to = transform.call(self.to) if to? hash = {} hash.merge!(gte: _from_eq) if _from_eq hash.merge!(gt: _from) if _from hash.merge!(lte: _to_eq) if _to_eq hash.merge!(lt: _to) if _to { runtime_query_name => hash } end
transform_values(entries)
click to toggle source
# File lib/trample/condition.rb, line 97 def transform_values(entries) entries = pluck_autocomplete_keys(entries) if has_autocomplete_keys?(entries) entries.map(&:downcase!) if search_analyzed? entries = entries.first if entries.length == 1 entries end