class IndexFor::WiceBuilder

Attributes

direction[RW]
order[RW]
page[RW]
per_page[RW]

Public Instance Methods

attribute(attribute_name, options = {}) click to toggle source
# File lib/index_for/builders/wice_builder.rb, line 27
def attribute attribute_name, options = {}
  model_class = options[:model] || html_options[:model] || @object
  field_name = "#{model_class.table_name}.#{attribute_name}"
  sortable_field = parse_option(options[:sortable] || true, field_name)
  sortable_fields.merge!(field_name => sortable_field) if sortable_field
  searchable_field = parse_option(options[:searchable] || false, field_name)
  searchable_fields.concat(Array.wrap(searchable_field)) if searchable_field
  filterable_field = parse_option(options[:filterable] || false, field_name)
  filterable_fields.merge! filterable_field if filterable_field
  nil
end
column_exists?(field_name) click to toggle source
# File lib/index_for/builders/wice_builder.rb, line 23
def column_exists? field_name
  ActiveRecord::Base.connection.column_exists? *field_name.split(".", 2)
end
fields_for(attribute_name, options = {}) click to toggle source
# File lib/index_for/builders/wice_builder.rb, line 39
def fields_for attribute_name, options = {}, &block
  cached_html_options = @html_options
  @html_options = options
  block.call self
  @html_options = cached_html_options
  nil
end
filterable_fields() click to toggle source
# File lib/index_for/builders/wice_builder.rb, line 15
def filterable_fields
  @filterable_fields ||= {}
end
parse_option(option, default) click to toggle source
# File lib/index_for/builders/wice_builder.rb, line 19
def parse_option option, default
  option === true ? default : option if option
end
per_pages() { |per_page, url_for(merge(page: nil, per_page: per_page)), per_page == per_page| ... } click to toggle source
# File lib/index_for/builders/wice_builder.rb, line 64
def per_pages
  params = template.params.permit!
  IndexFor.per_pages.each do |per_page|
    yield per_page, @template.url_for(params.merge(page: nil, per_page: per_page)), per_page == self.per_page
  end
end
result() click to toggle source
# File lib/index_for/builders/wice_builder.rb, line 47
def result
  params = @template.params

  self.per_page = (params[:per_page] || IndexFor.per_page).to_i
  self.page = (params[:page] || 1).to_i
  self.order = sortable_fields[params[:order]] if sortable_fields.key? params[:order]
  self.direction = params[:direction] || "asc"
  self.search = params[:search]

  collection = @object
  collection = collection.page(page).per(per_page)
  collection = collection.order(Array.wrap(order).select{|f|column_exists? f}.map{|f|"#{f} #{direction.upcase}"}.join(", ")) if order
  collection = collection.where((searchable_fields.flatten.map{|f|"#{f} LIKE '%#{search}%'"} + filterable_fields.select{|k,v|v}.map{|k,v|"#{k} = #{v}"}).join(" OR ")) if search

  collection
end
searchable_fields() click to toggle source
# File lib/index_for/builders/wice_builder.rb, line 11
def searchable_fields
  @searchable_fields ||= []
end
sortable_fields() click to toggle source
# File lib/index_for/builders/wice_builder.rb, line 7
def sortable_fields
  @sortable_fields ||= {}
end