Module: MakeModelSearchable::ClassMethods

Defined in:
lib/make_model_searchable.rb

Instance Method Summary collapse

Instance Method Details

#get_join_fields(fields, associations) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/make_model_searchable.rb', line 57

def get_join_fields(fields, associations)
  # self.reflect_on_association(:emails).class_name.constantize.column_names
  column_names = []
  associations.each do |association_name|
    # association_name
    column_names << self.reflect_on_association(association_name).class_name.constantize.column_names
  end
  column_names.flatten!
  column_names.uniq!

  fields.reject { |element| !column_names.include?(element) }
end

#get_valid_associations(associations) ⇒ Object



70
71
72
73
74
# File 'lib/make_model_searchable.rb', line 70

def get_valid_associations(associations)
  associations.collect! { |assoc| assoc.to_sym }
  association_names = self.reflect_on_all_associations.collect{|assoc| assoc.name  }
  associations.reject { |element| !association_names.include?(element) }
end

#get_valid_fields(fields) ⇒ Object



51
52
53
54
55
# File 'lib/make_model_searchable.rb', line 51

def get_valid_fields(fields)
  column_names = self.column_names
  column_types = self.column_types
  fields.reject { |element| !column_names.include?(element) or column_types[element].type != :string }
end

#search(search_term) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/make_model_searchable.rb', line 27

def search(search_term)
  valid_fields = self.instance_variable_get(:@selected_fields)
  if valid_fields.present?
    if search_term
      search_term = "%#{search_term.downcase}%"
      users = self.arel_table
      # valid_fields = ["first_name", "last_name"]
      arel_node = Arel::Nodes::Node.new
      valid_fields.each_with_index do |val, index|
        if index == 0
          arel_node = users[val].lower.matches(search_term)
        else
          arel_node = arel_node.or(users[val].lower.matches(search_term))
        end
      end
      where(arel_node)
    else
      all
    end
  else
    raise Exception,  "Please pass valid attributes for class: #{self.name}"
  end
end