sorting_table_for 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.mdown +8 -0
- data/MIT-LICENSE +1 -1
- data/README.mdown +102 -75
- data/assets/config/initializers/sorting_table_for.rb +45 -0
- data/assets/public/images/sorting_table_for/bullet_arrow_down.png +0 -0
- data/assets/public/images/sorting_table_for/bullet_arrow_up.png +0 -0
- data/assets/public/images/sorting_table_for/bullet_black.png +0 -0
- data/assets/public/images/sorting_table_for/readme.txt +22 -0
- data/assets/public/stylesheets/sorting_table_for.css +13 -0
- data/lib/sorting_table_for.rb +7 -4
- data/lib/sorting_table_for/i18n.rb +9 -4
- data/lib/sorting_table_for/table_builder.rb +242 -15
- data/spec/helpers/builder_spec.rb +44 -0
- data/spec/helpers/caption_spec.rb +162 -0
- data/spec/helpers/column_spec.rb +41 -1
- data/spec/helpers/footer_spec.rb +267 -0
- data/spec/helpers/header_spec.rb +52 -2
- data/spec/locales/test.yml +4 -1
- data/spec/locales/test_rails3.yml +4 -0
- metadata +12 -5
- data/TODO +0 -4
data/spec/helpers/column_spec.rb
CHANGED
@@ -82,6 +82,13 @@ describe SortingTableFor, :type => :helper do
|
|
82
82
|
helper.output_buffer.should have_comp_tag("table[class='table_class sorting_table_for'][id=table_id]")
|
83
83
|
end
|
84
84
|
|
85
|
+
it "should have option colspan" do
|
86
|
+
table_html = helper.sorting_table_for(@users) do |table|
|
87
|
+
html = table.columns :colspan => 5
|
88
|
+
html.should have_comp_tag('td[colspan="5"]', :count => (@users.size * User.content_columns.size))
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
85
92
|
end
|
86
93
|
|
87
94
|
describe " #table columns" do
|
@@ -160,6 +167,13 @@ describe SortingTableFor, :type => :helper do
|
|
160
167
|
helper.output_buffer.should have_comp_tag("table[class='table_class sorting_table_for'][id=table_id]")
|
161
168
|
end
|
162
169
|
|
170
|
+
it "should have option colspan" do
|
171
|
+
table_html = helper.sorting_table_for(@users) do |table|
|
172
|
+
html = table.columns :username, :colspan => 5
|
173
|
+
html.should have_comp_tag('td[colspan="5"]', :count => @users.size)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
163
177
|
end
|
164
178
|
|
165
179
|
describe " #table column" do
|
@@ -216,6 +230,17 @@ describe SortingTableFor, :type => :helper do
|
|
216
230
|
helper.output_buffer.should have_comp_tag("table[class='table_class sorting_table_for'][id=table_id]")
|
217
231
|
end
|
218
232
|
|
233
|
+
it "should have option colspan" do
|
234
|
+
table_html = helper.sorting_table_for(@users) do |table|
|
235
|
+
html = table.columns do
|
236
|
+
table.column :username, :colspan => 5
|
237
|
+
table.column :price, :colspan => 3
|
238
|
+
end
|
239
|
+
html.should have_comp_tag('td[colspan="5"]', :count => @users.size)
|
240
|
+
html.should have_comp_tag('td[colspan="3"]', :count => @users.size)
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
219
244
|
end
|
220
245
|
|
221
246
|
describe " #table column with value" do
|
@@ -290,6 +315,21 @@ describe SortingTableFor, :type => :helper do
|
|
290
315
|
helper.output_buffer.concat(table_html)
|
291
316
|
helper.output_buffer.should have_comp_tag("table[class='table_class sorting_table_for'][id=table_id]")
|
292
317
|
end
|
318
|
+
|
319
|
+
it "should have option colspan" do
|
320
|
+
table_html = helper.sorting_table_for(@users) do |table|
|
321
|
+
html = table.columns do
|
322
|
+
table.column :colspan => 5 do
|
323
|
+
'my_colspan'
|
324
|
+
end
|
325
|
+
table.column :colspan => 3 do
|
326
|
+
'my_colspan_2'
|
327
|
+
end
|
328
|
+
end
|
329
|
+
html.should have_comp_tag('td[colspan="5"]', :count => @users.size)
|
330
|
+
html.should have_comp_tag('td[colspan="3"]', :count => @users.size)
|
331
|
+
end
|
332
|
+
end
|
293
333
|
|
294
334
|
end
|
295
335
|
|
@@ -301,7 +341,7 @@ describe SortingTableFor, :type => :helper do
|
|
301
341
|
SortingTableFor::TableBuilder.reserved_columns = [:id, :password, :salt]
|
302
342
|
SortingTableFor::TableBuilder.default_actions = [:edit, :delete]
|
303
343
|
end
|
304
|
-
|
344
|
+
|
305
345
|
it "should not add total entries" do
|
306
346
|
SortingTableFor::TableBuilder.show_total_entries = false
|
307
347
|
helper.sorting_table_for(@users) do |table|
|
@@ -0,0 +1,267 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
require File.expand_path(File.dirname(__FILE__) + '/../fixtures/user')
|
5
|
+
|
6
|
+
include SortingTableForSpecHelper
|
7
|
+
|
8
|
+
describe SortingTableFor, :type => :helper do
|
9
|
+
|
10
|
+
before :each do
|
11
|
+
@users = User.all
|
12
|
+
helper.stub!(:url_for).and_return('fake_link')
|
13
|
+
helper.stub!(:params).and_return({ :controller => 'fakes', :action => 'index' })
|
14
|
+
helper.output_buffer = ''
|
15
|
+
end
|
16
|
+
|
17
|
+
describe ' #default usage' do
|
18
|
+
|
19
|
+
it "should set nothing" do
|
20
|
+
helper.sorting_table_for(@users) do |table|
|
21
|
+
html = table.footers
|
22
|
+
html.should_not have_comp_tag("tfoot")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
describe " #table footers" do
|
29
|
+
|
30
|
+
it "should set a footer with argument" do
|
31
|
+
helper.sorting_table_for(@users) do |table|
|
32
|
+
html = table.footers 'hello'
|
33
|
+
html.should have_comp_tag("tfoot", :count => 1)
|
34
|
+
html.should have_comp_tag("tr", :count => 1)
|
35
|
+
html.should have_comp_tag("td", :count => 1)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should set a footer with multiple arguments" do
|
40
|
+
helper.sorting_table_for(@users) do |table|
|
41
|
+
html = table.footers 'hello', 'hi', 'footer'
|
42
|
+
html.should have_comp_tag("tfoot", :count => 1)
|
43
|
+
html.should have_comp_tag("tr", :count => 1)
|
44
|
+
html.should have_comp_tag("td", :count => 3)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should set i18n" do
|
49
|
+
helper.sorting_table_for(@users) do |table|
|
50
|
+
html = table.footers :username
|
51
|
+
html.should have_comp_tag('td', :text => 'UserFoot')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it "should set i18n for multiple arguments" do
|
56
|
+
helper.sorting_table_for(@users) do |table|
|
57
|
+
html = table.footers :username, :price
|
58
|
+
html.should have_comp_tag('td:nth-child(1)', :text => 'UserFoot')
|
59
|
+
html.should have_comp_tag('td:nth-child(2)', :text => 'PriceFoot')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should works with colspan" do
|
64
|
+
helper.sorting_table_for(@users) do |table|
|
65
|
+
html = table.footers :username, :colspan => 5
|
66
|
+
html.should have_comp_tag('td[colspan="5"]')
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should be customize with html" do
|
71
|
+
table_html = helper.sorting_table_for(@users, :html => { :class => 'table_class', :id => 'table_id' }) do |table|
|
72
|
+
html = table.footers :username, :html => { :class => 'header_class', :id => 'header_id' }
|
73
|
+
html.should have_comp_tag("tr[class=header_class][id=header_id]")
|
74
|
+
end
|
75
|
+
helper.output_buffer.concat(table_html)
|
76
|
+
helper.output_buffer.should have_comp_tag("table[class='table_class sorting_table_for'][id=table_id]")
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
describe " #table footer" do
|
82
|
+
|
83
|
+
it "should set a footer with argument" do
|
84
|
+
helper.sorting_table_for(@users) do |table|
|
85
|
+
html = table.footers do
|
86
|
+
table.footer 'hello'
|
87
|
+
end
|
88
|
+
html.should have_comp_tag("tfoot", :count => 1)
|
89
|
+
html.should have_comp_tag("tr", :count => 1)
|
90
|
+
html.should have_comp_tag("td", :count => 1)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should set a footer with multiple arguments" do
|
95
|
+
helper.sorting_table_for(@users) do |table|
|
96
|
+
html = table.footers do
|
97
|
+
table.footer 'hello'
|
98
|
+
table.footer 'hi'
|
99
|
+
table.footer 'footer'
|
100
|
+
end
|
101
|
+
html.should have_comp_tag("tfoot", :count => 1)
|
102
|
+
html.should have_comp_tag("tr", :count => 1)
|
103
|
+
html.should have_comp_tag("td", :count => 3)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
it "should set i18n" do
|
108
|
+
helper.sorting_table_for(@users) do |table|
|
109
|
+
html = table.footers do
|
110
|
+
table.footer :username
|
111
|
+
end
|
112
|
+
html.should have_comp_tag('td', :text => 'UserFoot')
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
it "should set i18n for multiple arguments" do
|
117
|
+
helper.sorting_table_for(@users) do |table|
|
118
|
+
html = table.footers do
|
119
|
+
table.footer :username
|
120
|
+
table.footer :price
|
121
|
+
end
|
122
|
+
html.should have_comp_tag('td:nth-child(1)', :text => 'UserFoot')
|
123
|
+
html.should have_comp_tag('td:nth-child(2)', :text => 'PriceFoot')
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should works with colspan" do
|
128
|
+
helper.sorting_table_for(@users) do |table|
|
129
|
+
html = table.footers do
|
130
|
+
table.footer :username, :colspan => 5
|
131
|
+
end
|
132
|
+
html.should have_comp_tag('td[colspan="5"]')
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
it "should be customize with html" do
|
137
|
+
table_html = helper.sorting_table_for(@users, :html => { :class => 'table_class', :id => 'table_id' }) do |table|
|
138
|
+
html = table.footers(:html => { :class => 'header_class', :id => 'header_id' }) do
|
139
|
+
table.footer :username, :html => { :class => 'cell_1_class', :id => 'cell_1_id', :title => 'hello_1' }
|
140
|
+
table.footer :firstname, :html => { :class => 'cell_2_class', :id => 'cell_2_id', :title => 'hello_2' }
|
141
|
+
table.footer 'hello', :html => { :class => 'cell_3_class', :id => 'cell_3_id', :title => 'hello_3' }
|
142
|
+
end
|
143
|
+
html.should have_comp_tag("tr[class=header_class][id=header_id]")
|
144
|
+
html.should have_comp_tag("td:nth-child(1)[class='cell_1_class'][id=cell_1_id][title=hello_1]")
|
145
|
+
html.should have_comp_tag("td:nth-child(2)[class='cell_2_class'][id=cell_2_id][title=hello_2]")
|
146
|
+
html.should have_comp_tag("td:nth-child(3)[class=cell_3_class][id=cell_3_id][title=hello_3]")
|
147
|
+
end
|
148
|
+
helper.output_buffer.concat(table_html)
|
149
|
+
helper.output_buffer.should have_comp_tag("table[class='table_class sorting_table_for'][id=table_id]")
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|
153
|
+
|
154
|
+
describe " #table footer with block" do
|
155
|
+
|
156
|
+
it "should set a footer with argument" do
|
157
|
+
helper.sorting_table_for(@users) do |table|
|
158
|
+
html = table.footers do
|
159
|
+
table.footer do
|
160
|
+
'hello'
|
161
|
+
end
|
162
|
+
end
|
163
|
+
html.should have_comp_tag("tfoot", :count => 1)
|
164
|
+
html.should have_comp_tag("tr", :count => 1)
|
165
|
+
html.should have_comp_tag("td", :count => 1)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
it "should set a footer with multiple arguments" do
|
170
|
+
helper.sorting_table_for(@users) do |table|
|
171
|
+
html = table.footers do
|
172
|
+
table.footer do
|
173
|
+
'hello'
|
174
|
+
end
|
175
|
+
table.footer do
|
176
|
+
'hi'
|
177
|
+
end
|
178
|
+
table.footer do
|
179
|
+
'footer'
|
180
|
+
end
|
181
|
+
end
|
182
|
+
html.should have_comp_tag("tfoot", :count => 1)
|
183
|
+
html.should have_comp_tag("tr", :count => 1)
|
184
|
+
html.should have_comp_tag("td", :count => 3)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
it "should not set i18n" do
|
189
|
+
helper.sorting_table_for(@users) do |table|
|
190
|
+
html = table.footers do
|
191
|
+
table.footer do
|
192
|
+
:username
|
193
|
+
end
|
194
|
+
end
|
195
|
+
html.should_not have_comp_tag('td', :text => 'UserFoot')
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
it "should not set i18n for multiple arguments" do
|
200
|
+
helper.sorting_table_for(@users) do |table|
|
201
|
+
html = table.footers do
|
202
|
+
table.footer do
|
203
|
+
:username
|
204
|
+
end
|
205
|
+
table.footer do
|
206
|
+
:price
|
207
|
+
end
|
208
|
+
end
|
209
|
+
html.should_not have_comp_tag('td:nth-child(1)', :text => 'UserFoot')
|
210
|
+
html.should_not have_comp_tag('td:nth-child(2)', :text => 'PriceFoot')
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
it "should works with colspan" do
|
215
|
+
helper.sorting_table_for(@users) do |table|
|
216
|
+
html = table.footers do
|
217
|
+
table.footer :colspan => 5 do
|
218
|
+
:username
|
219
|
+
end
|
220
|
+
end
|
221
|
+
html.should have_comp_tag('td[colspan="5"]')
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
it "should be customize with html" do
|
226
|
+
table_html = helper.sorting_table_for(@users, :html => { :class => 'table_class', :id => 'table_id' }) do |table|
|
227
|
+
html = table.footers(:html => { :class => 'header_class', :id => 'header_id' }) do
|
228
|
+
table.footer :html => { :class => 'cell_1_class', :id => 'cell_1_id', :title => 'hello_1' } do
|
229
|
+
:username
|
230
|
+
end
|
231
|
+
table.footer :html => { :class => 'cell_2_class', :id => 'cell_2_id', :title => 'hello_2' } do
|
232
|
+
:firstname
|
233
|
+
end
|
234
|
+
table.footer :html => { :class => 'cell_3_class', :id => 'cell_3_id', :title => 'hello_3' } do
|
235
|
+
'hello'
|
236
|
+
end
|
237
|
+
end
|
238
|
+
html.should have_comp_tag("tr[class=header_class][id=header_id]")
|
239
|
+
html.should have_comp_tag("td:nth-child(1)[class='cell_1_class'][id=cell_1_id][title=hello_1]")
|
240
|
+
html.should have_comp_tag("td:nth-child(2)[class='cell_2_class'][id=cell_2_id][title=hello_2]")
|
241
|
+
html.should have_comp_tag("td:nth-child(3)[class=cell_3_class][id=cell_3_id][title=hello_3]")
|
242
|
+
end
|
243
|
+
helper.output_buffer.concat(table_html)
|
244
|
+
helper.output_buffer.should have_comp_tag("table[class='table_class sorting_table_for'][id=table_id]")
|
245
|
+
end
|
246
|
+
|
247
|
+
end
|
248
|
+
|
249
|
+
describe " #With editable options" do
|
250
|
+
|
251
|
+
before :each do
|
252
|
+
## Restaure default values
|
253
|
+
SortingTableFor::TableBuilder.i18n_add_footer_action_scope = :footer
|
254
|
+
end
|
255
|
+
|
256
|
+
it "should change the i18n add" do
|
257
|
+
SortingTableFor::TableBuilder.i18n_add_footer_action_scope = :header
|
258
|
+
helper.sorting_table_for(@users) do |table|
|
259
|
+
html = table.footers :username, :price
|
260
|
+
html.should have_comp_tag('td:nth-child(1)', :text => 'Usernames')
|
261
|
+
html.should have_comp_tag('td:nth-child(2)', :text => 'Prices')
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
end
|
266
|
+
|
267
|
+
end
|
data/spec/helpers/header_spec.rb
CHANGED
@@ -55,6 +55,13 @@ describe SortingTableFor, :type => :helper do
|
|
55
55
|
helper.output_buffer.should have_comp_tag("table[class='table_class sorting_table_for'][id=table_id]")
|
56
56
|
end
|
57
57
|
|
58
|
+
it "should have option colspan" do
|
59
|
+
table_html = helper.sorting_table_for(@users) do |table|
|
60
|
+
html = table.headers :colspan => 5
|
61
|
+
html.should have_comp_tag('th[colspan="5"]', :count => User.content_columns.size)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
58
65
|
end
|
59
66
|
|
60
67
|
describe ' #custom headers' do
|
@@ -108,6 +115,13 @@ describe SortingTableFor, :type => :helper do
|
|
108
115
|
html.should have_comp_tag("th:nth-child(5)", :text => 'Edit users')
|
109
116
|
end
|
110
117
|
end
|
118
|
+
|
119
|
+
it "should have option colspan" do
|
120
|
+
table_html = helper.sorting_table_for(@users) do |table|
|
121
|
+
html = table.headers :username, :colspan => 5
|
122
|
+
html.should have_comp_tag('th[colspan="5"]', :count => 1)
|
123
|
+
end
|
124
|
+
end
|
111
125
|
|
112
126
|
end
|
113
127
|
|
@@ -206,6 +220,17 @@ describe SortingTableFor, :type => :helper do
|
|
206
220
|
end
|
207
221
|
end
|
208
222
|
|
223
|
+
it "should have option colspan" do
|
224
|
+
table_html = helper.sorting_table_for(@users) do |table|
|
225
|
+
html = table.headers do
|
226
|
+
table.header :username, :colspan => 5
|
227
|
+
table.header :price, :colspan => 3
|
228
|
+
end
|
229
|
+
html.should have_comp_tag('th[colspan="5"]', :count => 1)
|
230
|
+
html.should have_comp_tag('th[colspan="3"]', :count => 1)
|
231
|
+
end
|
232
|
+
end
|
233
|
+
|
209
234
|
end
|
210
235
|
|
211
236
|
describe ' #custom sub header' do
|
@@ -291,6 +316,21 @@ describe SortingTableFor, :type => :helper do
|
|
291
316
|
helper.output_buffer.should have_comp_tag("table[class='table_class sorting_table_for'][id=table_id]")
|
292
317
|
end
|
293
318
|
|
319
|
+
it "should have option colspan" do
|
320
|
+
table_html = helper.sorting_table_for(@users) do |table|
|
321
|
+
html = table.headers do
|
322
|
+
table.header :colspan => 5 do
|
323
|
+
'my_colspan'
|
324
|
+
end
|
325
|
+
table.header :colspan => 3 do
|
326
|
+
'my_colspan_2'
|
327
|
+
end
|
328
|
+
end
|
329
|
+
html.should have_comp_tag('th[colspan="5"]', :count => 1)
|
330
|
+
html.should have_comp_tag('th[colspan="3"]', :count => 1)
|
331
|
+
end
|
332
|
+
end
|
333
|
+
|
294
334
|
end
|
295
335
|
|
296
336
|
describe ' #With editable options' do
|
@@ -298,8 +338,9 @@ describe SortingTableFor, :type => :helper do
|
|
298
338
|
before :each do
|
299
339
|
## Restaure default values
|
300
340
|
SortingTableFor::TableBuilder.reserved_columns = [:id, :password, :salt]
|
301
|
-
SortingTableFor::TableBuilder.default_actions = [:edit, :delete]
|
302
|
-
SortingTableFor::TableBuilder.params_sort_table = :table_sort
|
341
|
+
SortingTableFor::TableBuilder.default_actions = [:edit, :delete]
|
342
|
+
SortingTableFor::TableBuilder.params_sort_table = :table_sort
|
343
|
+
SortingTableFor::TableBuilder.i18n_add_header_action_scope = :header
|
303
344
|
end
|
304
345
|
|
305
346
|
it "should edit reserved columns" do
|
@@ -330,6 +371,15 @@ describe SortingTableFor, :type => :helper do
|
|
330
371
|
end
|
331
372
|
end
|
332
373
|
|
374
|
+
it "should change the i18n add" do
|
375
|
+
SortingTableFor::TableBuilder.i18n_add_header_action_scope = :footer
|
376
|
+
helper.sorting_table_for(@users) do |table|
|
377
|
+
html = table.headers :username, :price
|
378
|
+
html.should have_comp_tag('th:nth-child(1)', :text => 'UserFoot')
|
379
|
+
html.should have_comp_tag('th:nth-child(2)', :text => 'PriceFoot')
|
380
|
+
end
|
381
|
+
end
|
382
|
+
|
333
383
|
end
|
334
384
|
|
335
385
|
end
|
data/spec/locales/test.yml
CHANGED
@@ -49,6 +49,7 @@ test:
|
|
49
49
|
|
50
50
|
fakes:
|
51
51
|
index:
|
52
|
+
table_caption: 'Quick Caption'
|
52
53
|
edit: 'Edit'
|
53
54
|
delete: 'Delete'
|
54
55
|
header:
|
@@ -64,7 +65,9 @@ test:
|
|
64
65
|
edit: 'Edit users'
|
65
66
|
delete: 'Delete users'
|
66
67
|
my_fake: 'Hello fake'
|
67
|
-
|
68
|
+
footer:
|
69
|
+
username: 'UserFoot'
|
70
|
+
price: 'PriceFoot'
|
68
71
|
|
69
72
|
fake_scope:
|
70
73
|
my_test: 'Hello'
|