Module: DataTable::ActiveRecord::ClassMethods
- Defined in:
- lib/data_table/active_record.rb
Instance Method Summary collapse
- #_date_where_condition(query, field) ⇒ Object
- #_discover_joins(fields) ⇒ Object
- #_find_objects(params, fields, search_fields) ⇒ Object
- #_order_fields(params, fields) ⇒ Object
- #_split_where_condition(query, fields, options) ⇒ Object
- #_where_condition(query, field) ⇒ Object
- #_where_conditions(query, search_fields, join_operator = "OR") ⇒ Object
Instance Method Details
#_date_where_condition(query, field) ⇒ Object
78 79 80 81 82 83 84 |
# File 'lib/data_table/active_record.rb', line 78 def _date_where_condition query, field begin ["#{field} = ?", Date.parse(query)] rescue ArgumentError [] end end |
#_discover_joins(fields) ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/data_table/active_record.rb', line 16 def _discover_joins fields joins = Set.new object = self.new fields.each { |it| field = it.split('.') if (field.size == 2) then next if object.class.name.downcase == field[0].singularize if object.respond_to?(field[0].to_sym) joins.add field[0].to_sym elsif object.respond_to?(field[0].singularize.to_sym) joins.add field[0].singularize.to_sym end end } joins.to_a end |
#_find_objects(params, fields, search_fields) ⇒ Object
5 6 7 8 9 10 11 12 13 14 |
# File 'lib/data_table/active_record.rb', line 5 def _find_objects params, fields, search_fields self.where(_where_conditions params[:ssearch], search_fields). includes(_discover_joins fields).tap do |query| if query.respond_to?(:references!) query.references!(_discover_joins fields) end end. order(_order_fields params, fields). paginate :page => _page(params), :per_page => _per_page(params) end |
#_order_fields(params, fields) ⇒ Object
109 110 111 112 |
# File 'lib/data_table/active_record.rb', line 109 def _order_fields params, fields direction = params[:ssortdir_0] == "asc" ? "ASC" : "DESC" %{#{fields[params[:isortcol_0].to_i]} #{direction}} end |
#_split_where_condition(query, fields, options) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
# File 'lib/data_table/active_record.rb', line 86 def _split_where_condition query, fields, conditions = [] parameters = [] split_query = query.split [:split] types = [:types] || ([:string] * fields.size) if split_query.size == fields.size fields.zip(split_query).zip(types).each do |((field, query), type)| if type == :numeric conditions << "#{field} = ?" parameters << query.to_i else conditions << "UPPER(#{field}) LIKE ?" parameters << "%#{query.upcase}%" end end ["(" + conditions.join(" AND ") + ")", *parameters] else [] end end |
#_where_condition(query, field) ⇒ Object
60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/data_table/active_record.rb', line 60 def _where_condition query, field return [] if query.blank? if field.is_a? Array = field. if [:split] _split_where_condition query, field, elsif [:date] _date_where_condition query, field.first else _where_conditions(query, field, "AND") end else ["UPPER(#{field}) LIKE ?", "%#{query.upcase}%"] end end |
#_where_conditions(query, search_fields, join_operator = "OR") ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/data_table/active_record.rb', line 37 def _where_conditions query, search_fields, join_operator = "OR" return if query.blank? all_conditions = [] all_parameters = [] query.split.each do |term| conditions = [] parameters = [] search_fields.each do |field| next if (clause = _where_condition(term, field.dup)).empty? conditions << clause.shift parameters += clause end all_conditions << conditions all_parameters << parameters end [all_conditions.map {|conditions| "(" + conditions.join(" #{join_operator} ") + ")" }.join(" AND "), *all_parameters.flatten] end |