class Nazrin::DataAccessor

Attributes

model[R]
options[R]

Public Class Methods

accessor_for(clazz) click to toggle source
# File lib/nazrin/data_accessor.rb, line 29
def accessor_for(clazz)
  return nil if clazz.name.nil? || clazz.name.empty?

  if clazz.respond_to?(:nazrin_searchable_config) && clazz.nazrin_searchable_config.domain_name
    require 'nazrin/data_accessor/struct'
    return Nazrin::DataAccessor::Struct[clazz.nazrin_searchable_config]
  elsif defined?(::ActiveRecord::Base) && clazz.ancestors.include?(::ActiveRecord::Base)
    require 'nazrin/data_accessor/active_record'
    return Nazrin::DataAccessor::ActiveRecord
  elsif defined?(::Mongoid::Document) && clazz.ancestors.include?(::Mongoid::Document)
    require 'nazrin/data_accessor/mongoid'
    return Nazrin::DataAccessor::Mongoid
  end
  nil
end
accessors() click to toggle source
# File lib/nazrin/data_accessor.rb, line 49
def accessors
  @accessor ||= {}
end
for(clazz) click to toggle source
# File lib/nazrin/data_accessor.rb, line 8
def for(clazz)
  accessor = registered_accessor_for(clazz) || register_accessor(clazz)
  return accessor if accessor
  raise NoAccessorError, "No accessor for #{clazz.name}"
end
new(model, options) click to toggle source
# File lib/nazrin/data_accessor.rb, line 57
def initialize(model, options)
  @model = model
  @options = options
end
register(accessor, clazz) click to toggle source
# File lib/nazrin/data_accessor.rb, line 45
def register(accessor, clazz)
  accessors[clazz.name.to_sym] = accessor
end
register_accessor(clazz) click to toggle source
# File lib/nazrin/data_accessor.rb, line 19
def register_accessor(clazz)
  clazz.ancestors.each do |ancestor_class|
    if accessor = accessor_for(ancestor_class)
      register(accessor, clazz)
      return accessor
    end
  end
  nil
end
registered_accessor_for(clazz) click to toggle source
# File lib/nazrin/data_accessor.rb, line 14
def registered_accessor_for(clazz)
  return nil if clazz.name.nil? || clazz.name.empty?
  accessors[clazz.name.to_sym]
end

Public Instance Methods

data_from_response() click to toggle source
# File lib/nazrin/data_accessor.rb, line 91
def data_from_response
  raise NotImplementedError
end
load_all() click to toggle source
# File lib/nazrin/data_accessor.rb, line 87
def load_all
  raise NotImplementedError
end
results(client) click to toggle source
# File lib/nazrin/data_accessor.rb, line 62
def results(client)
  res = client.search
  collection = load_all(data_from_response(res))
  start = client.parameters[:start]
  size = client.parameters[:size]

  if size && start
    total_count = res.data.hits.found

    records = Nazrin::PaginationGenerator.generate(
      collection,
      current_page: current_page(start, size),
      per_page: size,
      total_count: total_count,
      last_page: last_page(size, total_count))
  else
    records = collection
  end

  Result.new(
    records,
    res.facets
  )
end

Private Instance Methods

current_page(start, size) click to toggle source
# File lib/nazrin/data_accessor.rb, line 101
def current_page(start, size)
  (start / size.to_f).ceil + 1
end
last_page(size, total_count) click to toggle source
# File lib/nazrin/data_accessor.rb, line 97
def last_page(size, total_count)
  (total_count / size.to_f).ceil
end