Class: Effective::ActiveRecordDatatableTool
- Inherits:
-
Object
- Object
- Effective::ActiveRecordDatatableTool
- Defined in:
- app/models/effective/active_record_datatable_tool.rb
Instance Attribute Summary collapse
-
#table_columns ⇒ Object
Returns the value of attribute table_columns.
Instance Method Summary collapse
-
#initialize(datatable, table_columns) ⇒ ActiveRecordDatatableTool
constructor
A new instance of ActiveRecordDatatableTool.
- #order(collection) ⇒ Object
- #order_column ⇒ Object
- #paginate(collection) ⇒ Object
- #search(collection) ⇒ Object
- #search_column_with_defaults(collection, table_column, term) ⇒ Object
- #search_terms ⇒ Object
Constructor Details
#initialize(datatable, table_columns) ⇒ ActiveRecordDatatableTool
Returns a new instance of ActiveRecordDatatableTool.
7 8 9 10 |
# File 'app/models/effective/active_record_datatable_tool.rb', line 7 def initialize(datatable, table_columns) @datatable = datatable @table_columns = table_columns end |
Instance Attribute Details
#table_columns ⇒ Object
Returns the value of attribute table_columns.
3 4 5 |
# File 'app/models/effective/active_record_datatable_tool.rb', line 3 def table_columns @table_columns end |
Instance Method Details
#order(collection) ⇒ Object
20 21 22 23 24 25 26 |
# File 'app/models/effective/active_record_datatable_tool.rb', line 20 def order(collection) if order_column.present? collection.order("#{order_column[:column]} #{order_direction} NULLS #{order_direction == 'ASC' ? 'LAST' : 'FIRST'}") else collection end end |
#order_column ⇒ Object
12 13 14 |
# File 'app/models/effective/active_record_datatable_tool.rb', line 12 def order_column @order_column ||= table_columns.find { |_, values| values[:index] == order_column_index }.try(:second) # This pulls out the values end |
#paginate(collection) ⇒ Object
88 89 90 |
# File 'app/models/effective/active_record_datatable_tool.rb', line 88 def paginate(collection) collection.page(page).per(per_page) end |
#search(collection) ⇒ Object
28 29 30 31 32 33 34 35 |
# File 'app/models/effective/active_record_datatable_tool.rb', line 28 def search(collection) search_terms.each do |name, search_term| column_search = search_column(collection, table_columns[name], search_term) raise 'search_column must return an ActiveRecord::Relation object' unless column_search.kind_of?(ActiveRecord::Relation) collection = column_search end collection end |
#search_column_with_defaults(collection, table_column, term) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'app/models/effective/active_record_datatable_tool.rb', line 37 def search_column_with_defaults(collection, table_column, term) column = table_column[:column] case table_column[:type] when :string, :text if table_column[:filter][:type] == :select && table_column[:filter][:fuzzy] != true collection.where("#{column} = :term", :term => term) else collection.where("#{column} ILIKE :term", :term => "%#{term}%") end when :datetime begin digits = term.scan(/(\d+)/).flatten.map(&:to_i) start_at = Time.zone.local(*digits) case digits.length when 1 # Year end_at = start_at.end_of_year when 2 # Year-Month end_at = start_at.end_of_month when 3 # Year-Month-Day end_at = start_at.end_of_day when 4 # Year-Month-Day Hour end_at = start_at.end_of_hour when 5 # Year-Month-Day Hour-Minute end_at = start_at.end_of_minute when 6 end_at = start_at + 1.second else end_at = start_at end collection.where("#{column} >= :start_at AND #{column} <= :end_at", :start_at => start_at, :end_at => end_at) rescue => e collection end when :obfuscated_id if ( = collection.deobfuscate(term)) == term # We weren't able to deobfuscate it, so this is an Invalid ID collection.where("#{column} = :term", :term => 0) else collection.where("#{column} = :term", :term => ) end when :integer collection.where("#{column} = :term", :term => term.to_i) when :year collection.where("EXTRACT(YEAR FROM #{column}) = :term", :term => term.to_i) else collection.where("#{column} = :term", :term => term) end end |
#search_terms ⇒ Object
16 17 18 |
# File 'app/models/effective/active_record_datatable_tool.rb', line 16 def search_terms @search_terms ||= @datatable.search_terms.select { |name, search_term| table_columns.key?(name) } end |