Module: Cloudsearchable::ClassMethods

Defined in:
lib/cloudsearchable.rb

Instance Method Summary collapse

Instance Method Details

#cloudsearch_domainsObject



94
95
96
# File 'lib/cloudsearchable.rb', line 94

def cloudsearch_domains
  @cloudsearch_domains || {}
end

#cloudsearch_domains=(domains) ⇒ Object



90
91
92
# File 'lib/cloudsearchable.rb', line 90

def cloudsearch_domains= domains
  @cloudsearch_domains = domains
end

#cloudsearch_index(name = nil) ⇒ Object



132
133
134
# File 'lib/cloudsearchable.rb', line 132

def cloudsearch_index name = nil
  cloudsearch_domains[name]
end

#cloudsearch_prefixObject

Prefix name used for indexes, defaults to class name underscored



139
140
141
# File 'lib/cloudsearchable.rb', line 139

def cloudsearch_prefix
  name.pluralize.underscore.gsub('/', '_')
end

#index_in_cloudsearch(name = nil, &block) ⇒ Object

Declares a Cloudsearchable index that returns a list of object of this class.

Parameters:

  • name (optional) (defaults to: nil)

    optional name for the index. If not specified, a default (unnamed) index for the class will be created

  • options (optional)

    Hash defining an index



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/cloudsearchable.rb', line 107

def index_in_cloudsearch(name = nil, &block)
  locator_field = :"#{cloudsearch_prefix.singularize}_id"
  # Fetches the existing search domain, or generates a new one
  unless domain = cloudsearch_domains[name]
    domain = new_cloudsearch_index(name).tap do |d|
      # This id field is used to reify search results
      d.add_field(locator_field, :literal,
        :result_enabled => true, :search_enabled => true,
        :source => :id)
    end
    self.cloudsearch_domains = self.cloudsearch_domains.merge({name => domain})
  end

  if block_given?
    dsl = DSL.new(domain, self)
    dsl.instance_exec &block
  end

  # Define the search method
  search_method_name = "search#{name && ('_' + name.to_s)}".to_sym
  define_singleton_method search_method_name do
    Query.new(self, cloudsearch_index(name), locator_field)
  end
end

#materialize_method(method_name = nil) ⇒ Object

By default use ‘find’ to materialize items



149
150
151
152
# File 'lib/cloudsearchable.rb', line 149

def materialize_method method_name = nil
  @materialize_method = method_name unless method_name.nil?
  @materialize_method.nil? ? :find : @materialize_method
end

#new_cloudsearch_index(name) ⇒ Object



143
144
145
146
# File 'lib/cloudsearchable.rb', line 143

def new_cloudsearch_index name
  name = [cloudsearch_prefix, name].compact.join('-').gsub('_','-')
  Cloudsearchable::Domain.new name
end