Class: MagicGrid::Definition

Inherits:
Object
  • Object
show all
Defined in:
lib/magic_grid/definition.rb

Constant Summary collapse

DEFAULTS =
{
  :class                 => [],
  :top_pager             => false,
  :bottom_pager          => true,
  :remote                => false,
  :min_search_length     => 3,
  :id                    => false,
  :searcher              => false,
  :needs_searcher        => false,
  :live_search           => false,
  :listeners             => {},
  :collapse_empty_header => false,
  :collapse_empty_footer => false,
  :default_ajax_handler  => true,
  :default_order         => :asc,
  :search_button         => false,
  :searcher_size         => nil,
  :title                 => nil,
}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cols_or_opts, collection = nil, controller = nil, opts = {}) ⇒ Definition

Returns a new instance of Definition.



63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# 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

Instance Attribute Details

#columnsObject (readonly)

Returns the value of attribute columns.



9
10
11
# File 'lib/magic_grid/definition.rb', line 9

def columns
  @columns
end

#optionsObject (readonly)

Returns the value of attribute options.



9
10
11
# File 'lib/magic_grid/definition.rb', line 9

def options
  @options
end

#paramsObject (readonly)

Returns the value of attribute params.



9
10
11
# File 'lib/magic_grid/definition.rb', line 9

def params
  @params
end

Class Method Details

.normalize_columns_options(cols_or_opts, opts) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
# 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_defaultsObject



39
40
41
42
43
44
45
46
47
# 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

Instance Method Details

#apply_collection_paramsObject



87
88
89
90
91
92
93
94
95
96
97
98
# 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_paramsObject



166
167
168
# File 'lib/magic_grid/definition.rb', line 166

def base_params
  params.merge :magic_grid_id => magic_id
end

#collectionObject



15
16
17
# File 'lib/magic_grid/definition.rb', line 15

def collection
  @collection.collection
end

#current_orderObject



122
123
124
# File 'lib/magic_grid/definition.rb', line 122

def current_order
  @current_order ||= Order.from_param(param(:order, default_order.to_param))
end

#current_pageObject



170
171
172
# File 'lib/magic_grid/definition.rb', line 170

def current_page
  [param(:page, 1).to_i, 1].max
end

#current_searchObject



126
127
128
# File 'lib/magic_grid/definition.rb', line 126

def current_search
  param(:q, "")
end

#current_sort_colObject



107
108
109
110
111
112
113
114
115
116
# 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_orderObject



118
119
120
# File 'lib/magic_grid/definition.rb', line 118

def default_order
  @default_order ||= Order.from_param(options[:default_order])
end

#filtersObject



100
101
102
103
104
105
# 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?Boolean

Returns:

  • (Boolean)


150
151
152
# File 'lib/magic_grid/definition.rb', line 150

def has_title?
  options[:title] || false
end

#magic_collectionObject



11
12
13
# File 'lib/magic_grid/definition.rb', line 11

def magic_collection
  @collection
end

#magic_idObject



130
131
132
# File 'lib/magic_grid/definition.rb', line 130

def magic_id
  options[:id] || (Column.hash_string(columns) + magic_collection.hash_string)
end

#needs_searcher?Boolean

Returns:

  • (Boolean)


138
139
140
# 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) ⇒ Object



162
163
164
# File 'lib/magic_grid/definition.rb', line 162

def param(key, default=nil)
  params.fetch(param_key(key), default)
end

#param_key(key) ⇒ Object



158
159
160
# File 'lib/magic_grid/definition.rb', line 158

def param_key(key)
  "#{magic_id}_#{key}".to_sym
end

#searchable?Boolean

Returns:

  • (Boolean)


134
135
136
# File 'lib/magic_grid/definition.rb', line 134

def searchable?
  magic_collection.searchable?
end

#searcherObject



142
143
144
145
146
147
148
# File 'lib/magic_grid/definition.rb', line 142

def searcher
  if needs_searcher?
    param_key(:searcher)
  else
    options[:searcher]
  end
end

#titleObject



154
155
156
# File 'lib/magic_grid/definition.rb', line 154

def title
  options[:title]
end