paginated_table 0.0.6 → 0.0.7

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.
Files changed (29) hide show
  1. data/lib/paginated_table.rb +1 -0
  2. data/lib/paginated_table/controller_helpers.rb +4 -1
  3. data/lib/paginated_table/page.rb +0 -42
  4. data/lib/paginated_table/railtie.rb +6 -0
  5. data/lib/paginated_table/version.rb +1 -1
  6. data/lib/paginated_table/view_helpers.rb +1 -171
  7. data/test/dummy/app/controllers/data_controller.rb +11 -1
  8. data/test/dummy/app/views/data/_complex.html.erb +17 -0
  9. data/test/dummy/app/views/data/complex.html.erb +1 -0
  10. data/test/dummy/log/test.log +20149 -0
  11. data/test/dummy/tmp/cache/assets/C4B/9C0/sprockets%2Fc5653d450f0e19225c69a8448202901e +0 -0
  12. data/test/dummy/tmp/cache/assets/D1A/4D0/sprockets%2F7766b94fd3771a7e336ee60045f0fc7a +0 -0
  13. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  14. data/test/dummy/tmp/cache/assets/D61/7F0/sprockets%2F13eed08e0333722e08db28efdc037f0c +0 -0
  15. data/test/dummy/tmp/cache/assets/DF7/210/sprockets%2F424c1b802ed6f5c5f23ef0de59dcd0fa +0 -0
  16. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  17. data/test/integration/paginated_table_integration_test.rb +15 -9
  18. data/test/units/column_description_test.rb +97 -0
  19. data/test/units/config_test.rb +2 -0
  20. data/test/units/controller_helpers_test.rb +9 -0
  21. data/test/units/data_page_test.rb +36 -0
  22. data/test/units/link_renderer_test.rb +44 -0
  23. data/test/units/page_params_test.rb +48 -0
  24. data/test/units/page_test.rb +2 -79
  25. data/test/units/row_description_test.rb +71 -0
  26. data/test/units/table_description_test.rb +88 -0
  27. data/test/units/table_renderer_test.rb +234 -0
  28. data/test/units/view_helpers_test.rb +1 -306
  29. metadata +30 -4
@@ -42,6 +42,12 @@ describe "paginated_table integration" do
42
42
  end
43
43
  end
44
44
 
45
+ it "cycles the 'odd' and 'even' css classes on the data rows" do
46
+ (1..10).each do |row|
47
+ page.has_xpath?("#{tr_xpath(row)}[@class='#{row.odd? ? 'odd' : 'even'}']").must_equal true
48
+ end
49
+ end
50
+
45
51
  describe "with javascript" do
46
52
  before do
47
53
  Capybara.current_driver = Capybara.javascript_driver
@@ -60,13 +66,13 @@ describe "paginated_table integration" do
60
66
  describe "without javascript" do
61
67
  it "displays one page of results" do
62
68
  visit "/data"
63
- pagination_info_text.must_equal "Displaying data controller/data 1 - 10 of 100 in total"
69
+ pagination_info_text.must_equal "Displaying Data 1 - 10 of 100 in total"
64
70
  end
65
71
 
66
72
  it "follows the link to the second page of results" do
67
73
  visit "/data"
68
74
  click_link "2"
69
- pagination_info_text.must_equal "Displaying data controller/data 11 - 20 of 100 in total"
75
+ pagination_info_text.must_equal "Displaying Data 11 - 20 of 100 in total"
70
76
  end
71
77
  end
72
78
 
@@ -77,14 +83,14 @@ describe "paginated_table integration" do
77
83
 
78
84
  it "displays one page of results" do
79
85
  visit "/data"
80
- pagination_info_text.must_equal "Displaying data controller/data 1 - 10 of 100 in total"
86
+ pagination_info_text.must_equal "Displaying Data 1 - 10 of 100 in total"
81
87
  end
82
88
 
83
89
  it "follows the link to the second page of results" do
84
90
  visit "/data"
85
91
  click_link "2"
86
92
  wait_for_ajax_request
87
- pagination_info_text.must_equal "Displaying data controller/data 11 - 20 of 100 in total"
93
+ pagination_info_text.must_equal "Displaying Data 11 - 20 of 100 in total"
88
94
  end
89
95
 
90
96
  # Ensures the AJAX content is decorated with event handlers
@@ -92,10 +98,10 @@ describe "paginated_table integration" do
92
98
  visit "/data"
93
99
  click_link "4"
94
100
  wait_for_ajax_request
95
- pagination_info_text.must_equal "Displaying data controller/data 31 - 40 of 100 in total"
101
+ pagination_info_text.must_equal "Displaying Data 31 - 40 of 100 in total"
96
102
  click_link "3"
97
103
  wait_for_ajax_request
98
- pagination_info_text.must_equal "Displaying data controller/data 21 - 30 of 100 in total"
104
+ pagination_info_text.must_equal "Displaying Data 21 - 30 of 100 in total"
99
105
  end
100
106
  end
101
107
  end
@@ -195,7 +201,7 @@ describe "paginated_table integration" do
195
201
  describe "searching" do
196
202
  it "limits the results" do
197
203
  visit "/data?search=secondhalf"
198
- pagination_info_text.must_equal "Displaying data controller/data 1 - 10 of 50 in total"
204
+ pagination_info_text.must_equal "Displaying Data 1 - 10 of 50 in total"
199
205
  (51..60).each_with_index do |id, index|
200
206
  page.has_xpath?("#{tr_xpath(index + 1)}/td[1][.='Name #{id}']").must_equal true
201
207
  end
@@ -204,7 +210,7 @@ describe "paginated_table integration" do
204
210
  it "following the page links preserves the search criteria" do
205
211
  visit "/data?search=secondhalf"
206
212
  click_link "2"
207
- pagination_info_text.must_equal "Displaying data controller/data 11 - 20 of 50 in total"
213
+ pagination_info_text.must_equal "Displaying Data 11 - 20 of 50 in total"
208
214
  (61..70).each_with_index do |id, index|
209
215
  page.has_xpath?("#{tr_xpath(index + 1)}/td[1][.='Name #{id}']").must_equal true
210
216
  end
@@ -213,7 +219,7 @@ describe "paginated_table integration" do
213
219
  it "following the sort links preserves the search criteria" do
214
220
  visit "/data?search=secondhalf"
215
221
  click_link "Name"
216
- pagination_info_text.must_equal "Displaying data controller/data 1 - 10 of 50 in total"
222
+ pagination_info_text.must_equal "Displaying Data 1 - 10 of 50 in total"
217
223
  [100, 51, 52, 53, 54, 55, 56, 57, 58, 59].each_with_index do |id, index|
218
224
  page.has_xpath?("#{tr_xpath(index + 1)}/td[1][.='Name #{id}']").must_equal true
219
225
  end
@@ -0,0 +1,97 @@
1
+ require 'test_helper'
2
+
3
+ module PaginatedTable
4
+ describe ColumnDescription do
5
+ let(:options) { {} }
6
+ let(:row) { stub("row") }
7
+ let(:name) { 'foo' }
8
+ let(:description) { ColumnDescription.new(row, name, options) }
9
+
10
+ describe "#initialize" do
11
+ it "creates a new instance with a row, a name and an optional block" do
12
+ ColumnDescription.new(row, name) { true }
13
+ end
14
+
15
+ it "accepts an options hash" do
16
+ ColumnDescription.new(row, name, :baz => 'bat')
17
+ end
18
+ end
19
+
20
+ describe "#sortable?" do
21
+ it "returns true by default" do
22
+ description.sortable?.must_equal true
23
+ end
24
+
25
+ it "returns the :sortable option" do
26
+ options[:sortable] = sortable = stub("sortable")
27
+ description.sortable?.must_equal sortable
28
+ end
29
+ end
30
+
31
+ describe "#span" do
32
+ it "returns false by default" do
33
+ description.span.must_equal false
34
+ end
35
+
36
+ it "returns the :span option" do
37
+ options[:span] = span = stub("span")
38
+ description.span.must_equal span
39
+ end
40
+ end
41
+
42
+ describe "#html_attributes" do
43
+ it "returns an empty hash by default" do
44
+ description.html_attributes.must_equal({})
45
+ end
46
+
47
+ it "adds the css classes given by the :class option" do
48
+ options[:class] = %w(bar baz)
49
+ description.html_attributes.must_equal(:class => 'bar baz')
50
+ end
51
+
52
+ it "adds the css styles given by the :style option" do
53
+ options[:style] = 'font-face: bold'
54
+ description.html_attributes.must_equal(:style => 'font-face: bold')
55
+ end
56
+
57
+ it "sets the colspan when span is :all" do
58
+ span = stub("span")
59
+ row.stubs(:colspan).with(span).returns("5")
60
+ options[:span] = span
61
+ description.html_attributes.must_equal(:colspan => '5')
62
+ end
63
+ end
64
+
65
+ describe "#render_header" do
66
+ it "returns the titleized name" do
67
+ description.render_header.must_equal "Foo"
68
+ end
69
+
70
+ it "returns the :title option if given" do
71
+ options[:title] = 'bar'
72
+ description.render_header.must_equal "bar"
73
+ end
74
+ end
75
+
76
+ describe "#render_cell" do
77
+ let(:results) { stub("results") }
78
+
79
+ describe "on a column with no block" do
80
+ it "sends its name to the datum" do
81
+ datum = stub("datum", 'foo' => results)
82
+ description.render_cell(datum).must_equal results
83
+ end
84
+ end
85
+
86
+ describe "on a column with a block" do
87
+ it "calls its block with the datum" do
88
+ datum = stub("datum")
89
+ column = ColumnDescription.new(row, name) do |block_arg|
90
+ results if block_arg == datum
91
+ end
92
+ column.render_cell(datum).must_equal results
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -1,3 +1,5 @@
1
+ require 'test_helper'
2
+
1
3
  module PaginatedTable
2
4
  describe "configuration" do
3
5
  let(:configuration) { PaginatedTable.configuration }
@@ -1,3 +1,5 @@
1
+ require 'test_helper'
2
+
1
3
  module PaginatedTable
2
4
  describe ControllerHelpers do
3
5
  let(:params) { stub("params") }
@@ -32,6 +34,13 @@ module PaginatedTable
32
34
  controller.paginated_table(name, collection)
33
35
  end
34
36
 
37
+ it "renders the given partial without layout if request is xhr?" do
38
+ partial = stub("partial")
39
+ request.stubs(:xhr? => true)
40
+ controller.expects(:render).with(:partial => partial, :layout => false)
41
+ controller.paginated_table(name, collection, :partial => partial)
42
+ end
43
+
35
44
  it "does not render if request is not xhr?" do
36
45
  request.stubs(:xhr? => false)
37
46
  controller.expects(:render).never
@@ -0,0 +1,36 @@
1
+ require 'test_helper'
2
+
3
+ module PaginatedTable
4
+ describe DataPage do
5
+ describe "#data" do
6
+ let(:page) {
7
+ Page.new(
8
+ :number => 2,
9
+ :rows => 5,
10
+ :sort_column => 'name',
11
+ :sort_direction => 'asc'
12
+ )
13
+ }
14
+ let(:collection) {
15
+ collection = (1..10).map { |i| "Name #{i}" }
16
+ def collection.order(clause)
17
+ raise unless clause == "name asc"
18
+ sort
19
+ end
20
+ collection
21
+ }
22
+
23
+ it "sorts the collection and pages to the given page number" do
24
+ DataPage.new(collection, page).data.must_equal(
25
+ ["Name 5", "Name 6", "Name 7", "Name 8", "Name 9"]
26
+ )
27
+ end
28
+
29
+ describe "#page" do
30
+ it "provides a reference to the given page" do
31
+ DataPage.new(collection, page).page.must_equal page
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,44 @@
1
+ require 'test_helper'
2
+
3
+ module PaginatedTable
4
+ describe LinkRenderer do
5
+ let(:page) { Page.new(:number => 2, :rows => 5, :sort_column => 'to_s', :sort_direction => 'desc') }
6
+ let(:data) { (1..10).to_a }
7
+ let(:data_page) { data.paginate(:page => 2, :per_page => 5) }
8
+ let(:view) { stub("view") }
9
+ let(:renderer) do
10
+ renderer = LinkRenderer.new(page)
11
+ renderer.prepare(data, {}, view)
12
+ renderer
13
+ end
14
+ let(:text) { stub("text") }
15
+ let(:href) { stub("href") }
16
+ let(:link) { stub("link") }
17
+
18
+ describe "#sort_link" do
19
+ it "calls link_to on the view with the sort url and the :remote option" do
20
+ view.stubs("url_for").
21
+ with(:sort_direction => 'asc', :per_page => '5', :page => '1', :sort_column => 'to_s').
22
+ returns(href)
23
+ view.stubs("link_to").with(text, href, :remote => true).returns(link)
24
+ renderer.sort_link(text, 'to_s').must_equal link
25
+ end
26
+ end
27
+
28
+ describe "#tag" do
29
+ it "calls link_to on the view with the :remote option for :a tags" do
30
+ html_safe_text = stub("html_safe_text")
31
+ text = stub("text", :to_s => stub("string", :html_safe => html_safe_text))
32
+ view.expects(:link_to).
33
+ with(html_safe_text, href, { :class => 'highlight', :remote => true }).
34
+ returns(link)
35
+ renderer.tag(:a, text, :class => 'highlight', :href => href).must_equal link
36
+ end
37
+
38
+ it "delegates to its parent for all other tags" do
39
+ view.expects(:link_to).never
40
+ renderer.tag(:span, "foo")
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,48 @@
1
+ require 'test_helper'
2
+
3
+ module PaginatedTable
4
+ describe PageParams do
5
+ describe ".create_page" do
6
+ it "returns a new page created from the request params" do
7
+ page = PageParams.create_page(
8
+ :page => '2',
9
+ :per_page => '5',
10
+ :sort_column => 'name',
11
+ :sort_direction => 'desc'
12
+ )
13
+ page.number.must_equal 2
14
+ page.rows.must_equal 5
15
+ page.sort_column.must_equal 'name'
16
+ page.sort_direction.must_equal 'desc'
17
+ end
18
+
19
+ it "returns a new page created from the request params and the defaults" do
20
+ page = PageParams.create_page(
21
+ { :page => '2', :per_page => '5' },
22
+ { :sort_column => 'name', :sort_direction => 'desc' }
23
+ )
24
+ page.number.must_equal 2
25
+ page.rows.must_equal 5
26
+ page.sort_column.must_equal 'name'
27
+ page.sort_direction.must_equal 'desc'
28
+ end
29
+ end
30
+
31
+ describe ".to_params" do
32
+ it "creates a params hash from the page" do
33
+ page = Page.new(
34
+ :number => 2,
35
+ :rows => 5,
36
+ :sort_column => 'name',
37
+ :sort_direction => 'desc'
38
+ )
39
+ PageParams.to_params(page).must_equal(
40
+ :page => '2',
41
+ :per_page => '5',
42
+ :sort_column => 'name',
43
+ :sort_direction => 'desc'
44
+ )
45
+ end
46
+ end
47
+ end
48
+ end
@@ -1,3 +1,5 @@
1
+ require 'test_helper'
2
+
1
3
  module PaginatedTable
2
4
  describe Page do
3
5
  let(:page) { Page.new(:number => 2, :rows => 5, :sort_column => 'name', :sort_direction => 'desc') }
@@ -121,83 +123,4 @@ module PaginatedTable
121
123
  end
122
124
  end
123
125
  end
124
-
125
- describe PageParams do
126
- describe ".create_page" do
127
- it "returns a new page created from the request params" do
128
- page = PageParams.create_page(
129
- :page => '2',
130
- :per_page => '5',
131
- :sort_column => 'name',
132
- :sort_direction => 'desc'
133
- )
134
- page.number.must_equal 2
135
- page.rows.must_equal 5
136
- page.sort_column.must_equal 'name'
137
- page.sort_direction.must_equal 'desc'
138
- end
139
-
140
- it "returns a new page created from the request params and the defaults" do
141
- page = PageParams.create_page(
142
- { :page => '2', :per_page => '5' },
143
- { :sort_column => 'name', :sort_direction => 'desc' }
144
- )
145
- page.number.must_equal 2
146
- page.rows.must_equal 5
147
- page.sort_column.must_equal 'name'
148
- page.sort_direction.must_equal 'desc'
149
- end
150
- end
151
-
152
- describe ".to_params" do
153
- it "creates a params hash from the page" do
154
- page = Page.new(
155
- :number => 2,
156
- :rows => 5,
157
- :sort_column => 'name',
158
- :sort_direction => 'desc'
159
- )
160
- PageParams.to_params(page).must_equal(
161
- :page => '2',
162
- :per_page => '5',
163
- :sort_column => 'name',
164
- :sort_direction => 'desc'
165
- )
166
- end
167
- end
168
- end
169
-
170
- describe DataPage do
171
- describe "#data" do
172
- let(:page) {
173
- Page.new(
174
- :number => 2,
175
- :rows => 5,
176
- :sort_column => 'name',
177
- :sort_direction => 'asc'
178
- )
179
- }
180
- let(:collection) {
181
- collection = (1..10).map { |i| "Name #{i}" }
182
- def collection.order(clause)
183
- raise unless clause == "name asc"
184
- sort
185
- end
186
- collection
187
- }
188
-
189
- it "sorts the collection and pages to the given page number" do
190
- DataPage.new(collection, page).data.must_equal(
191
- ["Name 5", "Name 6", "Name 7", "Name 8", "Name 9"]
192
- )
193
- end
194
-
195
- describe "#page" do
196
- it "provides a reference to the given page" do
197
- DataPage.new(collection, page).page.must_equal page
198
- end
199
- end
200
- end
201
- end
202
-
203
126
  end
@@ -0,0 +1,71 @@
1
+ require 'test_helper'
2
+
3
+ module PaginatedTable
4
+ describe RowDescription do
5
+ let(:table) { TableDescription.new }
6
+ let(:description_proc) { lambda { |row| nil } }
7
+ let(:options) { {} }
8
+ let(:description) {
9
+ RowDescription.new(table, options, description_proc)
10
+ }
11
+
12
+ describe "#initialize" do
13
+ it "creates a new instance with empty columns" do
14
+ description.columns.must_equal []
15
+ end
16
+
17
+ it "calls the given block with itself" do
18
+ fake_proc = stub("proc")
19
+ fake_proc.expects(:call)
20
+ RowDescription.new(table, options, fake_proc)
21
+ end
22
+ end
23
+
24
+ describe "#title" do
25
+ it "returns the title option" do
26
+ options[:title] = title = stub("title")
27
+ description.title.must_equal title
28
+ end
29
+ end
30
+
31
+ describe "#cycle" do
32
+ it "returns the cycle option" do
33
+ options[:cycle] = cycle = stub("cycle")
34
+ description.cycle.must_equal cycle
35
+ end
36
+ end
37
+
38
+ describe "#hidden" do
39
+ it "returns the hidden option" do
40
+ options[:hidden] = hidden = stub("hidden")
41
+ description.hidden.must_equal hidden
42
+ end
43
+ end
44
+
45
+ describe "#data_type" do
46
+ it "returns the data_type option" do
47
+ options[:data_type] = data_type = stub("data_type")
48
+ description.data_type.must_equal data_type
49
+ end
50
+ end
51
+
52
+ describe "#colspan" do
53
+ it "delegates to the table description" do
54
+ colspan = stub("colspan")
55
+ arg = stub("arg")
56
+ table.stubs(:colspan).with(arg).returns(colspan)
57
+ description.colspan(arg).must_equal colspan
58
+ end
59
+ end
60
+
61
+ describe "#column" do
62
+ it "constructs a new ColumnDescription and appends it to the columns array" do
63
+ column = stub("column")
64
+ name = stub("name")
65
+ ColumnDescription.stubs(:new).with(description, name).returns(column)
66
+ description.column(name)
67
+ description.columns.must_equal [column]
68
+ end
69
+ end
70
+ end
71
+ end