module MakeModelSearchable
Constants
- VERSION
Public Instance Methods
get_valid_fields(options)
click to toggle source
# File lib/make_model_searchable.rb, line 42 def get_valid_fields(options) column_names = self.columns.map(&:name) column_types = self.columns.map(&:type) searchable_columns = [] if column_names.length == column_types.length column_names.each_with_index do |column_name, index| searchable_columns << column_name if column_types[index].to_sym == :string end end if searchable_columns.present? valid_fields = options.select{ |option| searchable_columns.include?(option.to_s) } else valid_fields = [] end valid_fields end
get_valid_joined_fields(key, columns_array)
click to toggle source
# File lib/make_model_searchable.rb, line 59 def get_valid_joined_fields(key, columns_array) associated_model = self.reflect_on_association(key).klass associated_model.connection if columns_array.empty? valid_joied_fields = associated_model.columns.select{ |col| col.type == :string or col.type == :text } else valid_joied_fields = associated_model.columns.select{ |col| (col.type == :string or col.type == :text) and columns_array.include?(col.name.to_sym) } end valid_joied_fields end
searchable_attributes(*options)
click to toggle source
# File lib/make_model_searchable.rb, line 7 def searchable_attributes(*options) # self.connection joined_options = options.select{ |option| option.is_a? (Hash) } options = options.select{ |option| !option.is_a?(Hash) } setup_fields(options) if joined_options.present? setup_joined_fields(joined_options) end self.extend(ClassMethods) end
setup_fields(options)
click to toggle source
# File lib/make_model_searchable.rb, line 34 def setup_fields(options) unless options.present? options = self.column_names end valid_fields = get_valid_fields(options) self.instance_variable_set(:@selected_fields, valid_fields) end
setup_joined_fields(options_array)
click to toggle source
# File lib/make_model_searchable.rb, line 18 def setup_joined_fields(options_array) joined_fields = [] association_names = self.reflect_on_all_associations.map(&:name) valid_opts = options_array.first.select {|k,v| association_names.include?(k) } searchable_fields = [] valid_opts.each do |key, val| assoc = self.reflect_on_association(key) joined_fields << get_valid_joined_fields(key, val) joined_fields.flatten.each do |f| searchable_fields << SearchableField.new(f.name, f.type, assoc.name, assoc.klass) end end self.instance_variable_set(:@joined_fields, searchable_fields.flatten) if searchable_fields.present? end