Class: Nazrin::DataAccessor

Inherits:
Object
  • Object
show all
Defined in:
lib/nazrin/data_accessor.rb,
lib/nazrin/data_accessor/struct.rb,
lib/nazrin/data_accessor/mongoid.rb,
lib/nazrin/data_accessor/active_record.rb

Direct Known Subclasses

ActiveRecord, Mongoid, Struct

Defined Under Namespace

Classes: ActiveRecord, Mongoid, NoAccessorError, Struct

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model, options) ⇒ DataAccessor

Returns a new instance of DataAccessor.



57
58
59
60
# File 'lib/nazrin/data_accessor.rb', line 57

def initialize(model, options)
  @model = model
  @options = options
end

Instance Attribute Details

#modelObject (readonly)

Returns the value of attribute model.



54
55
56
# File 'lib/nazrin/data_accessor.rb', line 54

def model
  @model
end

#optionsObject (readonly)

Returns the value of attribute options.



55
56
57
# File 'lib/nazrin/data_accessor.rb', line 55

def options
  @options
end

Class Method Details

.accessor_for(clazz) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 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

.accessorsObject



49
50
51
# File 'lib/nazrin/data_accessor.rb', line 49

def accessors
  @accessor ||= {}
end

.for(clazz) ⇒ Object

Raises:



8
9
10
11
12
# 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

.register(accessor, clazz) ⇒ Object



45
46
47
# File 'lib/nazrin/data_accessor.rb', line 45

def register(accessor, clazz)
  accessors[clazz.name.to_sym] = accessor
end

.register_accessor(clazz) ⇒ Object



19
20
21
22
23
24
25
26
27
# 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) ⇒ Object



14
15
16
17
# 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

Instance Method Details

#data_from_responseObject

Raises:

  • (NotImplementedError)


91
92
93
# File 'lib/nazrin/data_accessor.rb', line 91

def data_from_response
  raise NotImplementedError
end

#load_allObject

Raises:

  • (NotImplementedError)


87
88
89
# File 'lib/nazrin/data_accessor.rb', line 87

def load_all
  raise NotImplementedError
end

#results(client) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# 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