class MagicGrid::Definition

Constants

DEFAULTS

Attributes

columns[R]
options[R]
params[R]

Public Class Methods

new(cols_or_opts, collection = nil, controller = nil, opts = {}) click to toggle source
# File lib/magic_grid/definition.rb, line 63
def initialize(cols_or_opts, collection = nil, controller = nil, opts = {})
  @options, @columns = *self.class.normalize_columns_options(cols_or_opts, opts)
  @params = controller && controller.params || {}

  @collection = Collection.create_or_reuse collection, options

  @columns = Column.columns_for_collection(magic_collection,
                                           columns,
                                           options[:searchable])
  columns.each do |col|
    if col.sortable?
      if col.id == current_sort_col
        col.order = current_order
      else
        col.order = Order::Unordered
      end
    else
      col.order = Order::Unsortable
    end
  end

  apply_collection_params
end
normalize_columns_options(cols_or_opts, opts) click to toggle source
# File lib/magic_grid/definition.rb, line 49
def self.normalize_columns_options(cols_or_opts, opts)
  case cols_or_opts
  when Hash
    options = runtime_defaults.merge(cols_or_opts.reject {|k| k == :cols})
    columns = cols_or_opts.fetch(:cols, [])
  when Array
    options = runtime_defaults.merge opts
    columns = cols_or_opts
  else
    raise "I have no idea what that is, but it's not a columns list or options hash"
  end
  [options, columns]
end
runtime_defaults() click to toggle source
# File lib/magic_grid/definition.rb, line 39
def self.runtime_defaults
  # run these lazily to catch any late I18n path changes
  DEFAULTS.merge(Collection::DEFAULTS).merge(
    :if_empty         => I18n.t("magic_grid.no_results").capitalize, # "No results found."
    :searcher_label   => I18n.t("magic_grid.search.label").capitalize + ': ', # "Search: "
    :searcher_tooltip => I18n.t("magic_grid.search.tooltip"), # "type.. + <return>"
    :searcher_button  => I18n.t("magic_grid.search.button").capitalize # "Search"
  )
end

Public Instance Methods

apply_collection_params() click to toggle source
# File lib/magic_grid/definition.rb, line 87
def apply_collection_params
  magic_collection.apply_sort(columns[current_sort_col], current_order.to_sql)

  magic_collection.apply_filter filters
  magic_collection.apply_pagination(current_page)
  magic_collection.apply_search current_search

  magic_collection.per_page = options[:per_page]
  magic_collection.apply_filter_callback options[:listener_handler]
  magic_collection.enable_post_filter options[:collection_post_filter]
  magic_collection.add_post_filter_callback options[:post_filter]
end
base_params() click to toggle source
# File lib/magic_grid/definition.rb, line 166
def base_params
  params.merge :magic_grid_id => magic_id
end
collection() click to toggle source
# File lib/magic_grid/definition.rb, line 15
def collection
  @collection.collection
end
current_order() click to toggle source
# File lib/magic_grid/definition.rb, line 122
def current_order
  @current_order ||= Order.from_param(param(:order, default_order.to_param))
end
current_page() click to toggle source
# File lib/magic_grid/definition.rb, line 170
def current_page
  [param(:page, 1).to_i, 1].max
end
current_sort_col() click to toggle source
# File lib/magic_grid/definition.rb, line 107
def current_sort_col
  @current_sort_col ||= begin
    given = param(:col, -1).to_i
    if given >= 0 and given <= columns.count
      given
    else
      options[:default_col].to_i
    end
  end
end
default_order() click to toggle source
# File lib/magic_grid/definition.rb, line 118
def default_order
  @default_order ||= Order.from_param(options[:default_order])
end
filters() click to toggle source
# File lib/magic_grid/definition.rb, line 100
def filters
  @filters ||= begin
    filter_keys = options[:listeners].values
    params.slice(*filter_keys).reject {|k,v| v.to_s.empty? }
  end
end
has_title?() click to toggle source
# File lib/magic_grid/definition.rb, line 150
def has_title?
  options[:title] || false
end
magic_collection() click to toggle source
# File lib/magic_grid/definition.rb, line 11
def magic_collection
  @collection
end
magic_id() click to toggle source
# File lib/magic_grid/definition.rb, line 130
def magic_id
  options[:id] || (Column.hash_string(columns) + magic_collection.hash_string)
end
needs_searcher?() click to toggle source
# File lib/magic_grid/definition.rb, line 138
def needs_searcher?
  options[:needs_searcher] or (searchable? and not options[:searcher])
end
param(key, default=nil) click to toggle source
# File lib/magic_grid/definition.rb, line 162
def param(key, default=nil)
  params.fetch(param_key(key), default)
end
param_key(key) click to toggle source
# File lib/magic_grid/definition.rb, line 158
def param_key(key)
  "#{magic_id}_#{key}".to_sym
end
searchable?() click to toggle source
# File lib/magic_grid/definition.rb, line 134
def searchable?
  magic_collection.searchable?
end
searcher() click to toggle source
# File lib/magic_grid/definition.rb, line 142
def searcher
  if needs_searcher?
    param_key(:searcher)
  else
    options[:searcher]
  end
end
title() click to toggle source
# File lib/magic_grid/definition.rb, line 154
def title
  options[:title]
end