class CloudSesame::Domain::Base
Attributes
searchable[R]
Public Class Methods
definitions()
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 10 def self.definitions @definitions ||= {} end
new(searchable)
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 14 def initialize(searchable) @searchable = searchable @builder = Query::Builder.construct_class(searchable) end
Public Instance Methods
builder()
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 19 def builder @builder.new context, searchable end
client()
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 23 def client @client ||= Client.new searchable end
context()
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 27 def context @context ||= Context.new end
default_size(value)
click to toggle source
define_fuzziness(&block)
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 42 def define_fuzziness(&block) context_query[:fuzziness] = Query::Node::Fuzziness.new(&block) end
define_sloppiness(value)
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 38 def define_sloppiness(value) context_query[:sloppiness] = Query::Node::Sloppiness.new(value) end
field(name, options = {})
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 46 def field(name, options = {}) field_name = (options[:as] || name).to_sym add_sort_alias(name, options) if options[:as] add_query_options(field_name, options) if options[:query] add_facet(field_name, options) if options[:facet] add_field(name, options) end
scope(name, proc = nil, &block)
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 55 def scope(name, proc = nil, &block) block = proc unless block_given? filter_query_scopes[name.to_sym] = block if block end
Private Instance Methods
add_facet(name, options)
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 70 def add_facet(name, options) context_facet[name] = to_hash(options.delete(:facet)) end
add_field(name, options)
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 74 def add_field(name, options) options = merge_with_as_field options if options[:as] options[:type] = set_type(options[:type]) create_accessor name create_default_literal name, options filter_query_fields[name] = options end
add_query_options(name, options)
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 66 def add_query_options(name, options) context_query_options[name] = to_hash(options.delete(:query)) end
add_sort_alias(name, options)
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 62 def add_sort_alias(name, options) context_sort_fields[name] = { as: options[:as] } end
context_facet()
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 131 def context_facet context[:facet] ||= {} end
context_page()
click to toggle source
context_query()
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 123 def context_query context[:query] ||= {} end
context_query_options()
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 127 def context_query_options (context[:query_options] ||= {})[:fields] ||= {} end
context_sort_fields()
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 135 def context_sort_fields (context[:sort] ||= {})[:fields] ||= {} end
create_accessor(name)
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 90 def create_accessor(name) @builder.literal_methods.__define_accessor__(name) end
create_default_literal(name, options)
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 94 def create_default_literal(name, options) if (block = options.delete(:default)) caller = block.binding.eval "self" node = Query::Domain::Literal.new(name, options, caller)._eval(&block) filter_query_defaults << node if node end end
filter_query_defaults()
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 143 def filter_query_defaults (context[:filter_query] ||= {})[:defaults] ||= [] end
filter_query_fields()
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 139 def filter_query_fields (context[:filter_query] ||= {})[:fields] ||= {} end
filter_query_scopes()
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 147 def filter_query_scopes (context[:filter_query] ||= {})[:scopes] ||= {} end
merge_with_as_field(options)
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 86 def merge_with_as_field(options) (existing = filter_query_fields.delete(options[:as])) ? existing.merge(options) : options end
method_missing(name, *args, &block)
click to toggle source
Calls superclass method
# File lib/cloud_sesame/domain/base.rb, line 106 def method_missing(name, *args, &block) if builder.respond_to?(name, true) || filter_query_scopes[name] builder.send(name, *args, &block) elsif searchable.respond_to?(name, true) searchable.send(name, *args, &block) else super end end
set_type(type)
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 82 def set_type(type) Query::AST::Value.map_type(type) end
to_hash(options)
click to toggle source
# File lib/cloud_sesame/domain/base.rb, line 102 def to_hash(options) options.is_a?(Hash) ? options : {} end