class Picky::Client::ActiveRecord
An ActiveRecord
integration that uses the Picky
HTTP client to send index updates back to a Picky
server (usually Sinatra).
Examples:
# Note that the Person will # be indexed in three indexes. # class Person < ActiveRecord::Base extend Picky::ActiveRecord.new # All attributes will be sent to index "people". extend Picky::ActiveRecord.new('name') # Only the name will be sent to index "people". extend Picky::ActiveRecord.new('surname', index: 'special_index') # Only the surname will be sent to index "special_index". # Use the given Client to send index data. # extend Picky::ActiveRecord.new(client: Picky::Client.new(host: 'localhost', port: '4567', path: '/indexing')) extend Picky::ActiveRecord.new(host: 'localhost', port: '4567', path: '/indexing') end florian = Person.new name: "Florian", surname: "Hanke" florian.save florian.update_attributes name: "Peter"
Public Class Methods
configure(*attributes)
click to toggle source
Takes an array of indexed attributes/methods and options.
Note: See class documentation for a description.
Examples:
Picky::Client::ActiveRecord.configure Picky::Client::ActiveRecord.configure('name', 'surname', index: 'some_index_name')
Options:
* index: The index name to save to. * host: The host where the Picky server is. * port: The host which the Picky server listens to. * path: The path the Picky server uses for index updates (use e.f. extend Picky::Sinatra::IndexActions to open up a HTTP indexing interface). * client: The client to use if you want to pass in your own (host, port, path options will be ignored).
# File lib/picky-client/client/active_record.rb, line 44 def self.configure *attributes new *attributes end
new(*attributes)
click to toggle source
# File lib/picky-client/client/active_record.rb, line 47 def initialize *attributes options = {} options = attributes.pop if attributes.last.respond_to?(:to_hash) # Default path for indexing is '/'. # client = options[:client] || (options[:path] ||= '/') && Picky::Client.new(options) index_name = options[:index] # Install. # install_extended_on client, index_name, attributes end
Public Instance Methods
install_extended_on(client, index_name, attributes)
click to toggle source
Installs an extended method on client which handles the model passed to it.
# File lib/picky-client/client/active_record.rb, line 65 def install_extended_on client, index_name, attributes self.class.send :define_method, :extended do |model| attributes = nil if attributes.empty? index_name ||= model.table_name # Only after the database has actually # updated the data do we want to index. # model.after_commit do |object| data = { 'id' => object.id } if object.destroyed? client.remove index_name, data else (attributes || object.attributes.keys).each do |attr| data[attr] = object.respond_to?(attr) && object.send(attr) || object[attr] end client.replace index_name, data end end end end