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

DEFAULT CONTEXT METHODS

# File lib/cloud_sesame/domain/base.rb, line 34
def default_size(value)
  context_page[:size] = value.to_i
end
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 INITIALIZERS

# File lib/cloud_sesame/domain/base.rb, line 119
def context_page
  context[:page] ||= {}
end
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