table-for 3.2.0 → 3.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Y2Q4OGZmYWRiNTc4Y2MwNDAyMmY3YzAxYmUxOGViMGVjZDg0NGFjNQ==
5
+ data.tar.gz: !binary |-
6
+ ZTY1ZGRlNTVlNjU3M2Q4NGE5ZjgxMDUxNzk5YTFhZjZiMzc5OTFkOQ==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ YWVkYzU5MzNmOTlmZTIxZDcyOTk1MWY2NWViMDBjYmQxZDBmMjAzY2QxOGU4
10
+ YzJiM2M5N2NiNGM5NmQzOTQwOWViNTJhZGQ2YTgxYzRmY2E0N2YzYTA2YmFi
11
+ OTg3MzEyYjk0NzI5ODFlYmMxZGZkMDc2NTM3MGVhODEwMWVlYjI=
12
+ data.tar.gz: !binary |-
13
+ MThiNzAzYzg0Y2U5MGNjZmEwODQyMDcwMWU0MGQ4ZGU3YjFjYjhiOTY2OTQ4
14
+ ZjU5ZTAyYjU2MWUxZTliYWI0MzFlM2NiZTg1ZDUyMDhlZTFhNGY3Y2ZkMmZk
15
+ Y2Q4OTZjMmU0OTM5MWQyYjhjYzAxMzE5ZjE5NTRmOTUzMDAwMWQ=
@@ -0,0 +1,6 @@
1
+ *.log
2
+ *.sqlite3
3
+ /pkg/*
4
+ .bundle
5
+ spec/database.yml
6
+ Gemfile.lock
@@ -1,3 +1,7 @@
1
+ 3.2.1
2
+ * Added ability to configure sort_mode order, i.e. if sort links generate sort_modes in :asc, :desc order, or have different labels
3
+ than :asc and :desc
4
+
1
5
  3.2.0
2
6
  * Changed the way configuration is done for TableFor. It is still done through TableFor.setup {|config|}, but some of the options have changed. Namely, the new configuration options are thead_tag, tbody_tag, tfoot_tag. If you do not want thead, tbody, or tfoot tags to be rendered, you can specify this in the setup block as follows: TableFor.setup {|config| config.thead_tag = nil; config.tbody_tag = nil; config.tfoot_tag = nil }. In addition, you can also globally define styles for the table as follows: TableFor.setup {|config| config.table_html = {:class => "table striped"}}. This undoes what was was released in 2.1.0
3
7
 
@@ -7,9 +11,6 @@
7
11
  3.1.0
8
12
  * Since templating was moved from blocks into its own gem with_template, TableFor::Base now extends WithTemplate::Base instead of Blocks::Base.
9
13
 
10
- 3.0.0
11
- * TODO
12
-
13
14
  2.2.0 (August 16, 2013)
14
15
  * Upgraded to blocks 2.2.0 and modified calls to evaluated_proc and evaluated_procs to call_if_proc and call_each_hash_value_if_proc
15
16
 
data/Gemfile CHANGED
@@ -1,16 +1,3 @@
1
1
  source "http://rubygems.org"
2
2
 
3
- gem 'rails', ">= 3.0.0"
4
- gem 'with_template', "~> 0.0.6"
5
-
6
- group :development do
7
- gem "rspec-rails", ">= 2.0.0.beta.20"
8
- gem 'mocha', '0.10.3'
9
- gem 'xml-simple', '1.1.1'
10
- gem 'supermodel', '0.1.4'
11
- gem "sqlite3"
12
- gem "with_model", '0.2.6'
13
- gem "bundler", "~> 1.3.5"
14
- gem "jeweler", "~> 1.8.4"
15
- gem "debugger"
16
- end
3
+ gemspec
@@ -1,3 +1,10 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ table-for (3.3.0)
5
+ rails (>= 3.0.0)
6
+ with_template (~> 0.0.6)
7
+
1
8
  GEM
2
9
  remote: http://rubygems.org/
3
10
  specs:
@@ -45,15 +52,9 @@ GEM
45
52
  debugger-ruby_core_source (1.2.3)
46
53
  diff-lcs (1.2.1)
47
54
  erubis (2.7.0)
48
- git (1.2.5)
49
55
  hashie (2.0.5)
50
56
  hike (1.2.1)
51
57
  i18n (0.6.1)
52
- jeweler (1.8.4)
53
- bundler (~> 1.0)
54
- git (>= 1.2.5)
55
- rake
56
- rdoc
57
58
  journey (1.0.4)
58
59
  json (1.7.7)
59
60
  mail (2.5.3)
@@ -132,14 +133,11 @@ PLATFORMS
132
133
  ruby
133
134
 
134
135
  DEPENDENCIES
135
- bundler (~> 1.3.5)
136
136
  debugger
137
- jeweler (~> 1.8.4)
138
137
  mocha (= 0.10.3)
139
- rails (>= 3.0.0)
140
138
  rspec-rails (>= 2.0.0.beta.20)
141
139
  sqlite3
142
140
  supermodel (= 0.1.4)
141
+ table-for!
143
142
  with_model (= 0.2.6)
144
- with_template (~> 0.0.6)
145
143
  xml-simple (= 1.1.1)
@@ -1,6 +1,7 @@
1
1
  = table-for
2
2
 
3
- TableFor is a table builder for a collection of domain objects. It very easily allows the user to specify the columns to render and to override how the table, the header columns, the rows, and the columns are rendered.
3
+ TableFor is a table builder for a collection of domain objects. It very easily allows the user to specify
4
+ the columns to render and to override how the table, the header columns, the rows, and the columns are rendered.
4
5
 
5
6
  == Installation
6
7
 
@@ -9,7 +10,8 @@ In <b>Rails 3 or Rails 4</b>, add this to your Gemfile.
9
10
  gem "table-for"
10
11
 
11
12
  == Example
12
- The following example is purposely complex (in many cases, there are easier ways to do what is shown) in order to show a wide range of features that TableFor is capable of:
13
+ The following example is purposely complex (in many cases, there are easier ways to do what is shown)
14
+ in order to show a wide range of features that TableFor is capable of:
13
15
 
14
16
  <%= table_for @users, :table_html => { :class => "table table-hover table-bordered" },
15
17
  :sortable => true,
@@ -23,17 +25,17 @@ The following example is purposely complex (in many cases, there are easier ways
23
25
  <% table.column :data => "Show 2.0", :link => true %>
24
26
  <% table.column :email, :header => "Email Address" %>
25
27
  <% table.column :first_name, :formatter => :downcase %>
26
- <% table.column :last_name, :formatter => Proc.new { |last_name| last_name.upcase } %>
28
+ <% table.column :last_name, :formatter => lambda { |last_name| last_name.upcase } %>
27
29
  <% table.column :created_at, :formatter => [:strftime, "%m/%d/%y %I:%M %p"] %>
28
30
  <% table.column :updated_at,
29
- :header => Proc.new {
31
+ :header => lambda {
30
32
  content_tag(:span, :class => "badge badge-success") do
31
33
  "Last Updated"
32
34
  end
33
35
  },
34
36
  :sortable => false,
35
37
  :header_column_html => { :style => "background-color:orange" },
36
- :data => Proc.new { time_ago_in_words table.current_row.updated_at } %>
38
+ :data => lambda { time_ago_in_words table.current_row.updated_at } %>
37
39
  <% table.column :full_name, :header => "Full Name", :order => "last_name, first_name" do |user| %>
38
40
  <%= "#{user.first_name} #{user.last_name}" %>
39
41
  <% end %>
@@ -54,7 +56,8 @@ Produces (with Twitter Bootstrap):
54
56
 
55
57
  {<img src="https://raw.github.com/hunterae/table-for/master/example_table.png">}[http://example.com]
56
58
 
57
- For detailed instructions on how to run this example, along with comments on every line of the above table, check out the {Example Details}[https://github.com/hunterae/table-for/blob/master/example.rdoc].
59
+ For detailed instructions on how to run this example, along with comments on every line of the above table,
60
+ check out the {Example Details}[https://github.com/hunterae/table-for/blob/master/example.rdoc].
58
61
 
59
62
  == table_for options
60
63
  The first argument to the table_for call will always be the array of domain objects. The second argument is a hash
@@ -64,90 +67,361 @@ sortable::
64
67
  (defaults to false)
65
68
  Sets whether all columns are sortable by default.
66
69
  If this field is set to true, each column header will be generated as a link.
70
+ <%= table_for @users, :sortable => true %>
71
+ <% table.column :first_name %>
72
+ <% end %>
67
73
  sort_url::
68
- (defaults to "")
74
+ (defaults to the current path)
69
75
  Sets the url for the header column links. This will only affect columns that are sortable.
76
+ <%= table_for @users, :sortable => true,
77
+ :sort_url => sort_admin_users_path %>
78
+ <% table.column :first_name %>
79
+ <% end %>
70
80
  link_namespace::
71
81
  (defaults to nil)
72
82
  Sets the default namespace for any links generated in the columns.
73
83
  For example, a link_namespace of admin would try to build links within the admin namespace in the routes.
74
84
  This can be specified as a string, an array, a domain object, or a symbol,
75
- i.e. :link_namespace => [:admin, @post, :comments]
85
+ <%= table_for @users, :link_namespace => [:admin, @post, :comments] %>
86
+ <% table.column :first_name, :link => true %>
87
+ <% end %>
76
88
  table_html::
77
89
  (defaults to nil)
78
- Hash to specify the styles, classes, id, and other attributes applied to the table element,
79
- i.e. :table_html => { :id => "my-table", :class => "table table-bordered", :cellpadding => 2 }.
90
+ Hash to specify the styles, classes, id, and other attributes applied to the table element.
91
+ <%= table_for @users, :table_html => { :id => "my-table",
92
+ :class => "table table-bordered",
93
+ :cellpadding => 2 } %>
94
+ <% table.column :first_name %>
95
+ <% end %>
80
96
  thead_html::
81
97
  (defaults to nil)
82
- Hash to specify the styles, classes, id, and other attributes applied to the thead element,
83
- i.e. :thead_html => { :id => "thead-id" }
84
- Note: If TableFor.render_thead_element is set to false, the thead surrounding element for the
98
+ Hash to specify the styles, classes, id, and other attributes applied to the thead element.
99
+ Note: If TableFor.config.thead_tag is set to nil, the thead surrounding element for the
85
100
  header row will not be rendered.
101
+ <%= table_for @users, :thead_html => { :id => "thead-id" } %>
102
+ <% table.column :first_name %>
103
+ <% end %>
86
104
  header_row_html::
87
105
  (defaults to nil)
88
- Hash to specify the styles, classes, id, and other attributes applied to the header row (tr) element,
89
- i.e. :header_row_html => { :style => 'color: orange' }
106
+ Hash to specify the styles, classes, id, and other attributes applied to the header row (tr) element.
107
+ <%= table_for @users, :header_row_html => { :style => 'color: orange' } %>
108
+ <% table.column :first_name %>
109
+ <% end %>
90
110
  header_column_html::
91
111
  (defaults to {})
92
112
  Hash to specify the styles, classes, id, and other attributes applied to the header column (th) element.
93
- The values in this hash can each be a string or a Proc that takes (optionally) the column object as a parameter
94
- i.e. :header_column => { :style => "font-weight: bold" }, or :header_column => { :class => Proc.new {|column| "#{column.name}_header" } }
113
+ The values in this hash can each be a string or a Proc that takes (optionally) the column object as a parameter.
114
+ <%= table_for @users, :header_column_html =>
115
+ { :style => "font-weight: bold",
116
+ :class => lambda {|column| "#{column.name}_header" } %>
117
+ <% table.column :first_name %>
118
+ <% end %>
95
119
  tbody_html::
96
120
  (defaults to nil)
97
- Hash to specify the styles, classes, id, and other attributes applied to the tbody element,
98
- i.e. :tbody_html => { :id => "body-id" }
99
- Note: If TableFor.render_tbody_element is set to false, the tbody surrounding element for the
121
+ Hash to specify the styles, classes, id, and other attributes applied to the tbody element.
122
+ Note: If TableFor.config.tbody_tag is set to nil, the tbody surrounding element for the
100
123
  table data rows will not be rendered.
124
+ <%= table_for @users, :tbody_html => { :id => "body-id" } %>
125
+ <% table.column :first_name %>
126
+ <% end %>
101
127
  data_row_html::
102
128
  (defaults to nil)
103
129
  Hash to specify the styles, classes, id, and other attributes applied to each data row element (tr).
104
130
  The values in this hash can each be a string or a Proc that takes (optionally) the current record as a parameter
105
- i.e. :data_row_html => { :class => lambda { cycle('success', 'error', 'warning', 'info')}, :id => lambda { |user| "user-#{user.id}" } }
131
+ <%= table_for @users, :data_row_html =>
132
+ { :class => lambda { cycle('success', 'error', 'warning', 'info')},
133
+ :id => lambda { |user| "user-#{user.id}" } } %>
134
+ <% table.column :first_name %>
135
+ <% end %>
106
136
  data_column_html::
107
137
  (defaults to {})
108
- Hash to specify the styles, classes, id, and other attributes applied to the header column (th) element.
109
- The values in this hash can each be a string or a Proc that takes (optionally) the current_record and (also optionally) the column object as parameters
110
- i.e. :data_column_html => { :style => "font-weight: bold", :id => Proc.new {|record, column| "record-#{record.id}-#{column.name}" } }
138
+ Hash to specify the styles, classes, id, and other attributes applied to the data column (td) element.
139
+ The values in this hash can each be a string or a Proc that takes (optionally) the current_record and
140
+ (also optionally) the column object as parameters
141
+ <%= table_for @users, :data_column_html =>
142
+ { :style => "font-weight: bold",
143
+ :id => lambda { |record, column| "record-#{record.id}-#{column.name}"
144
+ }} do |table| %>
145
+ <% table.column :first_name %>
146
+ <% end %>
111
147
  tfoot_html::
112
148
  (defaults to nil)
113
- Hash to specify the styles, classes, id, and other attributes applied to the tfoot element,
114
- i.e. :tfoot_html => { :id => "tfoot-id" }
115
- Note: If TableFor.render_tfoot_element is set to false, the tfoot surrounding element for the
149
+ Hash to specify the styles, classes, id, and other attributes applied to the tfoot element.
150
+ Note: If TableFor.config.tfoot_tag is set to nil, the tfoot surrounding element for the
116
151
  footer row will not be rendered.
152
+ <%= table_for @users, :tfoot_html => { :id => "tfoot-id" } %>
153
+ <% table.column :first_name %>
154
+ <% end %>
117
155
  footer_row_html::
118
156
  (defaults to nil)
119
- Hash to specify the styles, classes, id, and other attributes applied to the footer row (tr) element,
120
- i.e. :footer_row_html => { :style => 'color: orange' }
157
+ Hash to specify the styles, classes, id, and other attributes applied to the footer row (tr) element.
158
+ <%= table_for @users, :footer_row_html => { :style => 'color: orange' } %>
159
+ <% table.column :first_name %>
160
+ <% end %>
121
161
  footer_column_html::
122
- TODO
162
+ (defaults to nil)
163
+ Hash to specify the styles, classes, id, and other attributes applied to the footer column (td) spanning the entire footer row.
164
+ <%= table_for @users, :footer_column_html =>
165
+ { :style => 'color: orange' } %>
166
+ <% table.column :first_name %>
167
+ <% end %>
123
168
 
124
169
  == table_for column options
125
- data:: TODO
126
- header:: TODO
127
- formatter:: TODO
128
- sortable:: TODO
129
- sort_url:: TODO
130
- order:: TODO
131
- link_url:: TODO
132
- link_action:: TODO
133
- link_method:: TODO
134
- link_confirm:: TODO
170
+ Each individual table column can specify it's own set of options, which can override any options
171
+ applied globally in the table options.
172
+
173
+ The first argument to the column is optional and represents the name of the column.
174
+ If specified, it must be unique to the table, and TableFor will attempt to use this
175
+ field to lookup the value to display in the record, as well as the name to apply to the header column.
176
+
177
+ For example, <% table.column :first_name %> will output the first_name field for each record passed to the table.
178
+
179
+ If a :header option is not specified for the individual column, it will use this first argument to
180
+ check for a translation key to give the header of the column a name (see below under Internationalization).
181
+ Failing to find a translation key, it will titleize "first_name" to "First Name" and use
182
+ that label for the header of the column.
183
+
184
+ The second argument (or first argument if the name of the column is ommitted) to a table column is a hash and is also optional. It is any combination of the following options:
185
+
186
+ data::
187
+ (defaults to nil, unless specified on the entire table)
188
+ Either an object instance (on which #to_s will be invoked) or a Proc
189
+ (which can optionally take the current row as an option), representing the text to be shown
190
+ in the data cell of the column.
191
+ <%= table_for @users do |table| %>
192
+ <% table.column :data => "Edit" %>
193
+ <% table.column :name, :data =>
194
+ lambda {|user| user.name.underscore.upcase } %>
195
+ <% end %>
196
+ formatter::
197
+ (defaults to nil, unless specified on the entire table)
198
+ Either a method name, and array with the method to invoke and its arguments,
199
+ or a Proc (which will be passed the value requiring formatting, based on the current column's name).
200
+ The :formatter argument will only work if the column name has been specified.
201
+ In such a case, the current iteration row will be sent the name of the column, and the resulting value will be
202
+ what's being formatted. If there is a simple method that needs to be applied to the result, that method name can
203
+ be specified as the formatter, or a series of method names (shown in examples below):
204
+ <%= table_for @users do |table| %>
205
+ <% table.column :id, :formatter => :ordinalize %>
206
+ <% table.column :created_at, :formatter => [:strftime, "%m/%d/%Y"] %>
207
+ <% table.column :first_name, :formatter =>
208
+ lambda {|first_name| first_name.downcase } %>
209
+ <%# THE FOLLOWING IS INVALID %>
210
+ <% table.column :formatter => :ordinalize %>
211
+ <% end %>
212
+ header::
213
+ (defaults to nil, unless specified on the entire table)
214
+ Either false, an object instance (on which #to_s will be invoked) or a Proc
215
+ (which can optionally take the current column as an option),
216
+ representing the text to be shown in the header cell of the column. If the :header option is not specified,
217
+ and no column name is specified (the first argument to the column), then no text will be displayed in the
218
+ header cell.
219
+ <%= table_for @users,
220
+ :header => lambda { |column|
221
+ I18n.t("tables.headers.#{column.name.to_s.underscore}",
222
+ :default => column.name.to_s.titleize)
223
+ } do |table| %>
224
+ <% table.column :id, :header => false %>
225
+ <% table.column :first_name, :header => "FIRST NAME" %>
226
+ <% table.column :last_name %>
227
+ <% end %>
228
+ sortable::
229
+ (defaults to false, unless specified on the entire table)
230
+ Whether this particular column is sortable, which will render a sort link around the header name with a sort_mode
231
+ field alternating between values 'asc', 'desc', and 'reset'
232
+ <%= table_for @users, :sortable => true do |table| %>
233
+ <% table.column :id, :sortable => false %>
234
+ <% table.column :first_name %>
235
+ <% end %>
236
+ sort_url::
237
+ (defaults to "", a.k.a. the current url, unless specified on the entire table)
238
+ The sort url that sort links should be generated with
239
+ <%= table_for @users do |table| %>
240
+ <% table.column :first_name, :sortable => true,
241
+ :sort_url => sort_admin_users_path %>
242
+ <% end %>
243
+ order::
244
+ (defaults to the current column's name)
245
+ The sort order (either a string or symbol) that sort links should be generated with
246
+ <%= table_for @users, :sortable => true do |table| %>
247
+ <% table.column :first_name, :order => :fname %>
248
+ <% table.column :last_name, :order => "lname" %>
249
+ <% table.column :full_name, :order => "lname,fname" %>
250
+ <% end %>
251
+ Note: In the last example, the controller would likely need to split the order param on the comma,
252
+ and apply the sort_mode to each field in the split, i.e.
253
+ params[:order].split(",").map do |field|
254
+ "#{field} #{params[:sort_mode]}"
255
+ end.join(",")
256
+ link_url::
257
+ (defaults to nil, unless specified on the entire table)
258
+ Either a string or a Proc (which can optionally take the current record being iterated on)
259
+ which wraps the data columns content in a link.
260
+ <%= table_for @users do |table| %>
261
+ <% table.column :id, :link_url =>
262
+ lambda {|user| edit_admin_user_path(user) } %>
263
+ <% table.column :header => false,
264
+ :data => "DELETE",
265
+ :link_method => :DELETE,
266
+ :link_url => lambda { admin_user_path(user) } %>
267
+ <% end %>
268
+ link_action::
269
+ (defaults to nil)
270
+ An alternative to link_url, link_action takes advantage of Rails' url_for method to generate the url to a specific action
271
+ <%= table_for @users do |table| %>
272
+ <% table.column :data => "Edit", :link_action => :edit %>
273
+ <% table.column :data => "Delete", :link_action => :delete
274
+ # assuming there is a GET delete route defined %>
275
+ <% table.column :data => "Show", :link => true %>
276
+ <% end %>
277
+ link_method::
278
+ (defaults to nil)
279
+ The HTML method to be used to trigger the link (GET/PUT/POST/DELETE)
280
+ <%= table_for @users do |table| %>
281
+ <% table.column :data => "Delete", :link_method => :DELETE %>
282
+ <% end %>
283
+ link_confirm::
284
+ (defaults to nil)
285
+ A confirmation message (javascript) that will be displayed when the user clicks the link
286
+ <%= table_for @users do |table| %>
287
+ <% table.column :data => "Delete", :link_method => :DELETE,
288
+ :link_confirm =>
289
+ "Are you sure you want to delete this user?" %>
290
+ <% end %>
135
291
  link_html::
136
- link:: TODO
137
- data_column_html:: TODO
138
- header_column_html:: TODO
292
+ (defaults to {}, unless specified on the entire table)
293
+ Hash to specify the styles, classes, id, and other attributes applied to the link element.
294
+ <%= table_for @users do |table| %>
295
+ <% table.column :data => "Delete", :link_method => :DELETE,
296
+ :link_html =>
297
+ {:style => "color: RED; font-weight: BOLD"} %>
298
+ <% end %>
299
+ link_namespace::
300
+ (defaults to nil, unless specified on the entire table; normally this option would be specified on the entire table)
301
+ Sets the namespace for the link.
302
+ For example, a link_namespace of admin would try to build the link within the admin namespace in the routes.
303
+ This can be specified as a string, an array, a domain object, or a symbol,
304
+ <%= table_for @users %>
305
+ <% table.column :first_name, :link_namespace =>
306
+ [:admin, @post, :comments], :link => true %>
307
+ <% end %>
308
+ link::
309
+ (defaults to false)
310
+ Sets whether the column's content should render as a link (this can also be accomplished by setting :link_url,
311
+ :link_action, :link_method, or :link_confirm). Set this to true if you are trying to render a show link, since
312
+ specifying :link_action as :show would break the call to url_for.
313
+ <%= table_for @users %>
314
+ <% table.column :id, :link => true %>
315
+ <% end %>
316
+ data_column_html::
317
+ (defaults to {}, unless specified on the entire table)
318
+ Hash to specify the styles, classes, id, and other attributes applied to the data column (td) element.
319
+ The values in this hash can each be a string or a Proc that takes (optionally) the current_record and
320
+ (also optionally) the column object as parameters
321
+ <%= table_for @users, :data_column_html =>
322
+ { :style => "font-weight: bold",
323
+ :id => lambda { |record, column| "record-#{record.id}-#{column.name}"
324
+ }} do |table| %>
325
+ <% table.column :first_name %>
326
+ <% table.column :last_name, :data_column_html =>
327
+ {:style => "color: red"} %>
328
+ <% end %>
329
+ header_column_html::
330
+ (defaults to {}, unless specified on the entire table)
331
+ Hash to specify the styles, classes, id, and other attributes applied to the header column (th) element.
332
+ The values in this hash can each be a string or a Proc that takes (optionally) the column object as a parameter.
333
+ <%= table_for @users, :header_column_html =>
334
+ { :style => "font-weight: bold",
335
+ :class => lambda {|column| "#{column.name}_header" } %>
336
+ <% table.column :first_name %>
337
+ <% table.column :last_name, :header_column_html =>
338
+ {:style => "font-size: 20px"} %>
339
+ <% end %>
139
340
 
140
341
  == table_for header options
141
- TODO
342
+ Should you require more control over how a particular header column renders, the default rendering for particular
343
+ column can easily be replaced. This can be accomplish using the header method within a table_for declaration:
344
+
345
+ <%= table_for @users do |table| %>
346
+ <% table.header :first_name do %>
347
+ Custom Header Code
348
+ <% end %>
349
+ <% table.column :first_name %>
350
+ <% end %>
351
+
352
+ Note: to specify the :header_column_html (the styles / classes to be applied to the th element),
353
+ this should still be done on the column call:
354
+
355
+ <%= table_for @users do |table| %>
356
+ <% table.header :first_name do %>
357
+ <%= link_to "First Name", :sort_mode =>
358
+ (params[:sort_mode] == "asc" ? "desc" :
359
+ (params[:sort_mode] == "desc" ? "reset" : "asc")) %>
360
+ <% end %>
361
+ <% table.column :first_name, :header_column_html => {
362
+ :class =>
363
+ lambda { params[:sort_mode] == "asc" ? "sorting_asc" :
364
+ (params[:sort_mode] == "desc" ? "sorting_desc" : "sorting") }} %>
365
+ <% end %>
366
+
367
+ In the above example, the first name column header will cycle between classes of
368
+ "sorting_asc", "sorting_desc", and "sorting", while the sort link itself in the header
369
+ will cycle between sort_mode parameters of "asc", "desc", and "reset". (This is actually
370
+ the default TableFor sorting behavior)
142
371
 
143
372
  == table_for footer options
144
- TODO
373
+ There are two ways to specify a footer for a table.
374
+
375
+ The first way assumes takes care of rendering the :tfoot element (if TableFor.config.tfoot_tag has not been set to nil),
376
+ the :tr element, and a single :td element that has its colspan set the number of columns in the table (i.e. it spans the full
377
+ width of the table):
378
+
379
+ <%= table_for @users do |table| %>
380
+ <% table.column :first_name %>
381
+ <% table.column :last_name %>
382
+ <% table.footer do %>
383
+ <div class="pull-right">
384
+ <%= will_paginate @users %>
385
+ </div>
386
+ <% end %>
387
+ <% end %>
388
+
389
+ The second approach will be described below under "Advanced: Replacing Table Definitions"
145
390
 
146
391
  == table_for configuration
147
- TODO
392
+ Just as TableFor options can be configured "globally" a single table, it can be configured globally for all tables.
393
+
394
+ This is accomplished through the TableFor#setup method. Any options that can be specified in the table_for options
395
+ can also be specified in an initializer method. For example, consider an application where all tables should
396
+ automatically have the css class "table table-hover table-bordered". This is easily accomplished in an initializer:
397
+
398
+ TableFor.setup do |config|
399
+ config.table_html = { :class => "table table-hover table-bordered" }
400
+ end
401
+
402
+ Gotcha: At this time, you will not be able to configure any TableFor settings that rely on Rails cycles, as the cycle
403
+ would be maintained globally and would produce unexpected results.
404
+
405
+ Besides the table_for options that may be configured globally, the following addition options may be set:
148
406
 
149
- == Using "Before" and "After" hooks
150
- TODO
407
+ thead_tag::
408
+ (defaults to :thead)
409
+ Set this to nil if a thead_tag should not be rendered around the header row of the table.
410
+
411
+ tbody_tag::
412
+ (defaults to :tbody)
413
+ Set this to nil if a tbody tag should not be rendered around the body data rows of the table.
414
+
415
+ tfoot_tag::
416
+ (defaults to :tfoot)
417
+ Set this to nil if a tbody tag should not be rendered around the footer row of the table.
418
+
419
+ sort_modes::
420
+ (defaults to [:asc, :desc])
421
+ Sets the order of sort_mode links. A particular sortable column will, by default, generate a sort link
422
+ with sort_mode set to :asc. If the sort_mode is already :asc for that column, then it generate the sort
423
+ link with sort_mode set to :desc. Finally, if the sort_mode is already :desc for that column, it will
424
+ generate a sort link with sort_mode blank.
151
425
 
152
426
  == Internationalization
153
427
  +table-for+ can do some dirty job for you, if you are using i18n by common rails conventions. For example, you have following in your en.yml:
@@ -160,8 +434,83 @@ TODO
160
434
  name: "Username"
161
435
  bio: "Short biography"
162
436
 
163
- Then, +table-for+ will automatically catch up correct translations for column headers. If you are not familiar with i18n, you can always pass a custom header to the column:
437
+ Then, +table-for+ will automatically look up correct translations for column headers. If you are not familiar with i18n, you can always pass a custom header to the column:
164
438
 
165
439
  <%= table_for @users do |table| %>
166
440
  <% table.column :parent_name, header: "Mr. Smith" %>
167
441
  <% end %>
442
+
443
+ == ADVANCED: Replacing table definitions
444
+ Because TableFor was built on top of {Blocks}[https://github.com/hunterae/blocks],
445
+ you'll have access to some really cool functionality, such as the ability to replace how any aspect
446
+ of your table is defined and rendered.
447
+
448
+ If you take a cursory look at the file
449
+ {_table_for.html.erb}[https://github.com/hunterae/table-for/blob/master/app/views/table_for/_table_for.html.erb],
450
+ you see a series of "table.define" calls. These are defining the various elements of the table, and many are recursive
451
+ definitions by nature.
452
+
453
+ For example, the call to "table.define :table", has calls to "table.render :header", "table.render :body", and "table.render :footer".
454
+ Below the "table.define :table", you'll find the calls to "table.define :header", "table.define :body", and "table.define :footer".
455
+ It shouldn't be hard to see the you're defining the table html element, and the table is made up of a header, a body, and a footer.
456
+ The header is made up a header row, the body is made up of data rows, and the footer is made up of a footer row. Each of those
457
+ rows is broken down into further definitions.
458
+
459
+ A question worth asking then is what is really happening here:
460
+ <%= table_for @users do |table| %>
461
+ <% table.column :full_name do |user| %>
462
+ Overriden: <%= "#{user.first_name} #{user.last_name}" %>
463
+ <% end %>
464
+ <% end %>
465
+
466
+ By passing a block in the definition of the :full_name column, we are overriding the default definition for
467
+ the full_name block (the default definition can be found
468
+ {here}[https://github.com/hunterae/table-for/blob/master/app/views/table_for/_table_for.html.erb#L51-L54]).
469
+ Should we not have specified the block, it would have called #full_name on the user object
470
+ for each row. But as it is, we've overridden the default behavior for this column.
471
+
472
+ Note: table.column is an alias to the #queue method, inherited from {WithTemplate}[https://github.com/hunterae/with_template].
473
+ It works very similar to the "table.define" calls, but preserves the order in which blocks are defined. Because the order
474
+ of table columns is important, this is the reason for using #queue instead of #define.
475
+
476
+ Applying the above principle, it shouldn't be much of a stretch to see that any piece of the TableFor definition may easily
477
+ be replaced. For example, suppose we didn't like the way footers are {defined}[https://github.com/hunterae/table-for/blob/master/app/views/table_for/_table_for.html.erb#L56-L60].
478
+
479
+ To replace this definition, simply #define a footer block:
480
+
481
+ <%= table_for @users do |table| %>
482
+ <% table.column :first_name %>
483
+ <% table.column :last_name %>
484
+ <% table.define :footer do %>
485
+ <tfoot>
486
+ <tr>
487
+ <td colspan="<%= table.columns.length %>">
488
+ <div class="pull-right">
489
+ <%= will_paginate @users %>
490
+ </div>
491
+ </td>
492
+ </tr>
493
+ </tfoot>
494
+ <% end %>
495
+ <% end %>
496
+
497
+ == ADVANCED: Using "Before" and "After" hooks
498
+ Another benefit of TableFor being built on top of {Blocks}[https://github.com/hunterae/blocks] is the ability
499
+ to define before and after blocks. Before blocks will render code before a particular named block is rendered;
500
+ after blocks will render code after said block. So suppose we wanted to render an extra row after every data row
501
+ rendered that provided some additional data. By examining the TableFor
502
+ {DTD}[https://github.com/hunterae/table-for/blob/master/app/views/table_for/_table_for.html.erb#L38-L43],
503
+ we can see the block responsible for rendering an individual data row is called :data_row. With this knowledge,
504
+ we can easily render an extra row after each data_row:
505
+
506
+ <%= table_for @users do |table| %>
507
+ <% table.column :first_name %>
508
+ <% table.column :last_name %>
509
+ <% table.after :data_row do %>
510
+ <tr>
511
+ <td colspan="<%= table.columns.length %>">
512
+ Some extra data
513
+ </td>
514
+ </tr>
515
+ <% end %>
516
+ <% end %>
data/Rakefile CHANGED
@@ -1,49 +1,10 @@
1
1
  require 'rspec/core/rake_task'
2
+ require 'bundler/gem_tasks'
2
3
 
3
- RSpec::Core::RakeTask.new('spec')
4
-
5
- # If you want to make this the default task
6
- task :default => :spec
7
-
8
- require 'rubygems'
9
- require 'bundler'
10
- begin
11
- Bundler.setup(:default, :development)
12
- rescue Bundler::BundlerError => e
13
- $stderr.puts e.message
14
- $stderr.puts "Run `bundle install` to install missing gems"
15
- exit e.status_code
4
+ # Default directory to look in is `/specs`
5
+ # Run with `rake spec`
6
+ RSpec::Core::RakeTask.new(:spec) do |task|
7
+ task.rspec_opts = ['--color', '--format', 'nested']
16
8
  end
17
- require 'rake'
18
9
 
19
- require 'jeweler'
20
- Jeweler::Tasks.new do |gem|
21
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
22
- gem.name = "table-for"
23
- gem.homepage = "http://github.com/hunterae/table-for"
24
- gem.license = "MIT"
25
- gem.summary = "table-for is a table builder for an array of objects, easily allowing overriding of how any aspect of the table is generated"
26
- gem.description = "table-for is a table builder for an array of objects, easily allowing overriding of how any aspect of the table is generated"
27
- gem.email = "hunterae@gmail.com"
28
- gem.authors = ["Andrew Hunter"]
29
- # dependencies defined in Gemfile
30
- end
31
- Jeweler::RubygemsDotOrgTasks.new
32
-
33
- require 'rake/testtask'
34
- Rake::TestTask.new(:test) do |test|
35
- test.libs << 'lib' << 'test'
36
- test.pattern = 'test/**/test_*.rb'
37
- test.verbose = true
38
- end
39
-
40
-
41
- require 'rdoc/task'
42
- Rake::RDocTask.new do |rdoc|
43
- version = File.exist?('VERSION') ? File.read('VERSION') : ""
44
-
45
- rdoc.rdoc_dir = 'rdoc'
46
- rdoc.title = "table-for #{version}"
47
- rdoc.rdoc_files.include('README*')
48
- rdoc.rdoc_files.include('lib/**/*.rb')
49
- end
10
+ task :default => :spec
@@ -2,7 +2,6 @@
2
2
  <%= content_tag :table, options[:table_html] do %>
3
3
  <%= table.render :header %>
4
4
  <%= table.render :body %>
5
- <%# Purposely no default implementation for the tfoot block given, since most tables do not have footers (provided to for easy hook to add a footer). %>
6
5
  <%= table.render :footer %>
7
6
  <% end %>
8
7
  <% end %>
@@ -27,6 +27,17 @@ From console:
27
27
  rake db:create && rake db:migrate && rake db:seed && rake db:seed && rake db:seed && rake db:seed
28
28
  rails s
29
29
 
30
+ NOTE:
31
+ It does not appear that nifty-generators has been ported over to Rails 4. If you are using Rails 4, you will
32
+ need to remove this gem from the Gemfile, and run the following commands from the console instead of the preceding
33
+ commands:
34
+ bundle install
35
+ rails generate controller admin/users index
36
+ rails generate model user email:string first_name:string last_name:string
37
+ rails generate bootstrap:install less
38
+ rake db:create && rake db:migrate && rake db:seed && rake db:seed && rake db:seed && rake db:seed
39
+ rails s
40
+
30
41
  In routes.rb:
31
42
  namespace :admin do
32
43
  resources :users do
@@ -135,4 +146,4 @@ In views/admin/users/index.html.erb
135
146
  <%= will_paginate @users %>
136
147
  </div>
137
148
  <% end %>
138
- <% end %>
149
+ <% end %>
@@ -12,6 +12,7 @@ module TableFor
12
12
  @@config.thead_tag = :thead
13
13
  @@config.tbody_tag = :tbody
14
14
  @@config.tfoot_tag = :tfoot
15
+ @@config.sort_modes = [:asc, :desc]
15
16
 
16
17
  # Default way to setup TableFor
17
18
  def self.setup
@@ -25,7 +25,12 @@ module TableFor
25
25
  header_column_html = call_each_hash_value_with_params(options[:header_column_html], column)
26
26
  if options[:sortable]
27
27
  order = options[:order] ? options[:order].to_s : column.name.to_s
28
- sort_class = (view.params[:order] != order || view.params[:sort_mode] == "reset") ? "sorting" : (view.params[:sort_mode] == "desc" ? "sorting_desc" : "sorting_asc")
28
+
29
+ sort_modes = TableFor.config.sort_modes
30
+ current_sort_mode = (view.params[:order] != order || view.params[:sort_mode].blank?) ? nil : view.params[:sort_mode]
31
+ current_sort_mode = sort_modes[sort_modes.index(current_sort_mode.to_sym)] rescue nil if current_sort_mode
32
+ sort_class = "sorting#{"_#{current_sort_mode}" if current_sort_mode}"
33
+
29
34
  header_column_html[:class] = (header_column_html[:class] ? "#{header_column_html[:class]} #{sort_class}" : sort_class)
30
35
  end
31
36
  header_column_html
@@ -76,8 +81,17 @@ module TableFor
76
81
  def header_sort_link(column, options={}, &block)
77
82
  if options[:sortable] && (options[:header] || !column.anonymous)
78
83
  order = options[:order] ? options[:order].to_s : column.name.to_s
79
- sort_mode = (view.params[:order] != order || view.params[:sort_mode] == "reset") ? "asc" : (view.params[:sort_mode] == "desc" ? "reset" : "desc")
80
- parameters = view.params.merge(:order => order, :sort_mode => sort_mode)
84
+
85
+ sort_modes = TableFor.config.sort_modes
86
+ current_sort_mode = (view.params[:order] != order || view.params[:sort_mode].blank?) ? nil : view.params[:sort_mode]
87
+ next_sort_mode_index = sort_modes.index(current_sort_mode.to_sym) + 1 rescue 0
88
+ if next_sort_mode_index == sort_modes.length
89
+ next_sort_mode = nil
90
+ else
91
+ next_sort_mode = sort_modes[next_sort_mode_index]
92
+ end
93
+
94
+ parameters = view.params.merge(:order => order, :sort_mode => next_sort_mode)
81
95
  parameters.delete(:action)
82
96
  parameters.delete(:controller)
83
97
  url = options[:sort_url] ? options[:sort_url] : ""
@@ -0,0 +1,3 @@
1
+ module TableFor
2
+ VERSION = "3.3.0"
3
+ end
@@ -396,14 +396,14 @@ describe "table_for" do
396
396
  end
397
397
  xml = XmlSimple.xml_in(%%
398
398
  <table>
399
- <thead><tr><th class="sorting_desc"><a href="?order=email&amp;sort_mode=reset">Email</a></th></tr></thead>
399
+ <thead><tr><th class="sorting_desc"><a href="?order=email&amp;sort_mode=">Email</a></th></tr></thead>
400
400
  <tbody><tr><td>andrew.hunter@livingsocial.com</td></tr></tbody>
401
401
  </table>%)
402
402
  XmlSimple.xml_in(buffer, 'NormaliseSpace' => 2).should eql xml
403
403
  end
404
404
 
405
405
  it "should add a 'sorting' class to the 'th' element and a link around the header content if a column is sortable and the sort_mode is in reset mode" do
406
- @view.expects(:params).at_least_once.returns({:order => "email", :sort_mode => "reset"})
406
+ @view.expects(:params).at_least_once.returns({:order => "email", :sort_mode => ""})
407
407
  buffer = @view.table_for @users[0,1] do |table|
408
408
  table.column :email, :sortable => true
409
409
  end
@@ -100,8 +100,8 @@ describe TableFor::Base do
100
100
  header_column_html[:class].should eql "sorting_desc"
101
101
  end
102
102
 
103
- it "should add a 'sorting' class to the header_column_html class if a column is sortable and it is reset mode" do
104
- @view.expects(:params).at_least_once.returns(:order => @column.name.to_s, :sort_mode => "reset")
103
+ it "should add a 'sorting' class to the header_column_html class if a column is sortable and it is blank sort mode" do
104
+ @view.expects(:params).at_least_once.returns(:order => @column.name.to_s, :sort_mode => "")
105
105
  header_column_html = @base.header_column_html(@column, :sortable => true)
106
106
  header_column_html[:class].should eql "sorting"
107
107
  end
@@ -126,7 +126,7 @@ describe TableFor::Base do
126
126
 
127
127
  it "should be able to generate a sort link for a column if that column is sortable and it is already sorted in desc order" do
128
128
  @view.expects(:params).at_least_once.returns(:order => @column.name.to_s, :sort_mode => "desc")
129
- @view.expects(:link_to).with(@column.name.to_s.titleize, "?order=#{@column.name}&sort_mode=reset").returns "my link"
129
+ @view.expects(:link_to).with(@column.name.to_s.titleize, "?order=#{@column.name}&sort_mode=").returns "my link"
130
130
  @base.header_sort_link(@column, :sortable => true).should eql "my link"
131
131
  end
132
132
 
@@ -1,91 +1,31 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
- # -*- encoding: utf-8 -*-
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'table_for/version'
5
5
 
6
- Gem::Specification.new do |s|
7
- s.name = "table-for"
8
- s.version = "3.2.0"
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "table-for"
8
+ spec.version = TableFor::VERSION
9
+ spec.authors = ["Andrew Hunter"]
10
+ spec.email = ["hunterae@gmail.com"]
11
+ spec.summary = %q{table-for is a table builder for an array of objects, easily allowing overriding of how any aspect of the table is generated}
12
+ spec.description = %q{table-for is a table builder for an array of objects, easily allowing overriding of how any aspect of the table is generated}
13
+ spec.homepage = "http://github.com/hunterae/table-for"
14
+ spec.license = "MIT"
9
15
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Andrew Hunter"]
12
- s.date = "2013-11-04"
13
- s.description = "table-for is a table builder for an array of objects, easily allowing overriding of how any aspect of the table is generated"
14
- s.email = "hunterae@gmail.com"
15
- s.extra_rdoc_files = [
16
- "README.rdoc"
17
- ]
18
- s.files = [
19
- ".rspec",
20
- ".ruby-gemset",
21
- ".ruby-version",
22
- "CHANGELOG.rdoc",
23
- "Gemfile",
24
- "Gemfile.lock",
25
- "README.rdoc",
26
- "Rakefile",
27
- "VERSION",
28
- "app/views/table_for/_table_for.html.erb",
29
- "example.rdoc",
30
- "example_table.png",
31
- "lib/table-for.rb",
32
- "lib/table_for.rb",
33
- "lib/table_for/base.rb",
34
- "lib/table_for/engine.rb",
35
- "lib/table_for/view_additions.rb",
36
- "rails/init.rb",
37
- "spec/integration/table_for_spec.rb",
38
- "spec/spec_helper.rb",
39
- "spec/table_for/base_spec.rb",
40
- "spec/table_for/view_additions_spec.rb",
41
- "table-for.gemspec"
42
- ]
43
- s.homepage = "http://github.com/hunterae/table-for"
44
- s.licenses = ["MIT"]
45
- s.require_paths = ["lib"]
46
- s.rubygems_version = "1.8.25"
47
- s.summary = "table-for is a table builder for an array of objects, easily allowing overriding of how any aspect of the table is generated"
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
48
20
 
49
- if s.respond_to? :specification_version then
50
- s.specification_version = 3
21
+ spec.add_dependency "rails", ">= 3.0.0"
22
+ spec.add_dependency "with_template", "~> 0.0.6"
51
23
 
52
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
53
- s.add_runtime_dependency(%q<rails>, [">= 3.0.0"])
54
- s.add_runtime_dependency(%q<with_template>, ["~> 0.0.6"])
55
- s.add_development_dependency(%q<rspec-rails>, [">= 2.0.0.beta.20"])
56
- s.add_development_dependency(%q<mocha>, ["= 0.10.3"])
57
- s.add_development_dependency(%q<xml-simple>, ["= 1.1.1"])
58
- s.add_development_dependency(%q<supermodel>, ["= 0.1.4"])
59
- s.add_development_dependency(%q<sqlite3>, [">= 0"])
60
- s.add_development_dependency(%q<with_model>, ["= 0.2.6"])
61
- s.add_development_dependency(%q<bundler>, ["~> 1.3.5"])
62
- s.add_development_dependency(%q<jeweler>, ["~> 1.8.4"])
63
- s.add_development_dependency(%q<debugger>, [">= 0"])
64
- else
65
- s.add_dependency(%q<rails>, [">= 3.0.0"])
66
- s.add_dependency(%q<with_template>, ["~> 0.0.6"])
67
- s.add_dependency(%q<rspec-rails>, [">= 2.0.0.beta.20"])
68
- s.add_dependency(%q<mocha>, ["= 0.10.3"])
69
- s.add_dependency(%q<xml-simple>, ["= 1.1.1"])
70
- s.add_dependency(%q<supermodel>, ["= 0.1.4"])
71
- s.add_dependency(%q<sqlite3>, [">= 0"])
72
- s.add_dependency(%q<with_model>, ["= 0.2.6"])
73
- s.add_dependency(%q<bundler>, ["~> 1.3.5"])
74
- s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
75
- s.add_dependency(%q<debugger>, [">= 0"])
76
- end
77
- else
78
- s.add_dependency(%q<rails>, [">= 3.0.0"])
79
- s.add_dependency(%q<with_template>, ["~> 0.0.6"])
80
- s.add_dependency(%q<rspec-rails>, [">= 2.0.0.beta.20"])
81
- s.add_dependency(%q<mocha>, ["= 0.10.3"])
82
- s.add_dependency(%q<xml-simple>, ["= 1.1.1"])
83
- s.add_dependency(%q<supermodel>, ["= 0.1.4"])
84
- s.add_dependency(%q<sqlite3>, [">= 0"])
85
- s.add_dependency(%q<with_model>, ["= 0.2.6"])
86
- s.add_dependency(%q<bundler>, ["~> 1.3.5"])
87
- s.add_dependency(%q<jeweler>, ["~> 1.8.4"])
88
- s.add_dependency(%q<debugger>, [">= 0"])
89
- end
24
+ spec.add_development_dependency "rspec-rails", ">= 2.0.0.beta.20"
25
+ spec.add_development_dependency "mocha", "0.10.3"
26
+ spec.add_development_dependency "xml-simple", "1.1.1"
27
+ spec.add_development_dependency "supermodel", "0.1.4"
28
+ spec.add_development_dependency "sqlite3"
29
+ spec.add_development_dependency "with_model", "0.2.6"
30
+ spec.add_development_dependency "debugger"
90
31
  end
91
-
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: table-for
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
5
- prerelease:
4
+ version: 3.3.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Andrew Hunter
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-11-04 00:00:00.000000000 Z
11
+ date: 2014-07-21 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: rails
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: with_template
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ~>
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ~>
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec-rails
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ! '>='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ! '>='
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: mocha
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - '='
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - '='
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: xml-simple
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - '='
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - '='
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: supermodel
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - '='
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - '='
108
95
  - !ruby/object:Gem::Version
@@ -110,7 +97,6 @@ dependencies:
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: sqlite3
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
101
  - - ! '>='
116
102
  - !ruby/object:Gem::Version
@@ -118,7 +104,6 @@ dependencies:
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
108
  - - ! '>='
124
109
  - !ruby/object:Gem::Version
@@ -126,7 +111,6 @@ dependencies:
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: with_model
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
115
  - - '='
132
116
  - !ruby/object:Gem::Version
@@ -134,47 +118,13 @@ dependencies:
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
122
  - - '='
140
123
  - !ruby/object:Gem::Version
141
124
  version: 0.2.6
142
- - !ruby/object:Gem::Dependency
143
- name: bundler
144
- requirement: !ruby/object:Gem::Requirement
145
- none: false
146
- requirements:
147
- - - ~>
148
- - !ruby/object:Gem::Version
149
- version: 1.3.5
150
- type: :development
151
- prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
- requirements:
155
- - - ~>
156
- - !ruby/object:Gem::Version
157
- version: 1.3.5
158
- - !ruby/object:Gem::Dependency
159
- name: jeweler
160
- requirement: !ruby/object:Gem::Requirement
161
- none: false
162
- requirements:
163
- - - ~>
164
- - !ruby/object:Gem::Version
165
- version: 1.8.4
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
- requirements:
171
- - - ~>
172
- - !ruby/object:Gem::Version
173
- version: 1.8.4
174
125
  - !ruby/object:Gem::Dependency
175
126
  name: debugger
176
127
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
128
  requirements:
179
129
  - - ! '>='
180
130
  - !ruby/object:Gem::Version
@@ -182,19 +132,19 @@ dependencies:
182
132
  type: :development
183
133
  prerelease: false
184
134
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
135
  requirements:
187
136
  - - ! '>='
188
137
  - !ruby/object:Gem::Version
189
138
  version: '0'
190
139
  description: table-for is a table builder for an array of objects, easily allowing
191
140
  overriding of how any aspect of the table is generated
192
- email: hunterae@gmail.com
141
+ email:
142
+ - hunterae@gmail.com
193
143
  executables: []
194
144
  extensions: []
195
- extra_rdoc_files:
196
- - README.rdoc
145
+ extra_rdoc_files: []
197
146
  files:
147
+ - .gitignore
198
148
  - .rspec
199
149
  - .ruby-gemset
200
150
  - .ruby-version
@@ -203,7 +153,6 @@ files:
203
153
  - Gemfile.lock
204
154
  - README.rdoc
205
155
  - Rakefile
206
- - VERSION
207
156
  - app/views/table_for/_table_for.html.erb
208
157
  - example.rdoc
209
158
  - example_table.png
@@ -211,6 +160,7 @@ files:
211
160
  - lib/table_for.rb
212
161
  - lib/table_for/base.rb
213
162
  - lib/table_for/engine.rb
163
+ - lib/table_for/version.rb
214
164
  - lib/table_for/view_additions.rb
215
165
  - rails/init.rb
216
166
  - spec/integration/table_for_spec.rb
@@ -221,30 +171,30 @@ files:
221
171
  homepage: http://github.com/hunterae/table-for
222
172
  licenses:
223
173
  - MIT
174
+ metadata: {}
224
175
  post_install_message:
225
176
  rdoc_options: []
226
177
  require_paths:
227
178
  - lib
228
179
  required_ruby_version: !ruby/object:Gem::Requirement
229
- none: false
230
180
  requirements:
231
181
  - - ! '>='
232
182
  - !ruby/object:Gem::Version
233
183
  version: '0'
234
- segments:
235
- - 0
236
- hash: -2937228185400889819
237
184
  required_rubygems_version: !ruby/object:Gem::Requirement
238
- none: false
239
185
  requirements:
240
186
  - - ! '>='
241
187
  - !ruby/object:Gem::Version
242
188
  version: '0'
243
189
  requirements: []
244
190
  rubyforge_project:
245
- rubygems_version: 1.8.25
191
+ rubygems_version: 2.2.2
246
192
  signing_key:
247
- specification_version: 3
193
+ specification_version: 4
248
194
  summary: table-for is a table builder for an array of objects, easily allowing overriding
249
195
  of how any aspect of the table is generated
250
- test_files: []
196
+ test_files:
197
+ - spec/integration/table_for_spec.rb
198
+ - spec/spec_helper.rb
199
+ - spec/table_for/base_spec.rb
200
+ - spec/table_for/view_additions_spec.rb
data/VERSION DELETED
@@ -1 +0,0 @@
1
- 3.2.0