Module: MakeModelSearchable
- Defined in:
- lib/make_model_searchable.rb,
lib/make_model_searchable/version.rb
Defined Under Namespace
Modules: ClassMethods
Constant Summary collapse
- VERSION =
"0.3.0"
Instance Method Summary collapse
- #get_valid_fields(options) ⇒ Object
- #get_valid_joined_fields(key, columns_array) ⇒ Object
- #searchable_attributes(*options) ⇒ Object
- #setup_fields(options) ⇒ Object
- #setup_joined_fields(options_array) ⇒ Object
Instance Method Details
#get_valid_fields(options) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/make_model_searchable.rb', line 42 def get_valid_fields() 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 = .select{ |option| searchable_columns.include?(option.to_s) } else valid_fields = [] end valid_fields end |
#get_valid_joined_fields(key, columns_array) ⇒ Object
59 60 61 62 63 64 65 66 67 68 |
# 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) ⇒ Object
7 8 9 10 11 12 13 14 15 16 |
# File 'lib/make_model_searchable.rb', line 7 def searchable_attributes(*) # self.connection = .select{ |option| option.is_a? (Hash) } = .select{ |option| !option.is_a?(Hash) } setup_fields() if .present? setup_joined_fields() end self.extend(ClassMethods) end |
#setup_fields(options) ⇒ Object
34 35 36 37 38 39 40 |
# File 'lib/make_model_searchable.rb', line 34 def setup_fields() unless .present? = self.column_names end valid_fields = get_valid_fields() self.instance_variable_set(:@selected_fields, valid_fields) end |
#setup_joined_fields(options_array) ⇒ Object
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/make_model_searchable.rb', line 18 def setup_joined_fields() joined_fields = [] association_names = self.reflect_on_all_associations.map(&:name) valid_opts = .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 |