tableficate 0.2.1 → 0.3.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/README.markdown +6 -4
- data/app/views/tableficate/_data.html.erb +7 -1
- data/app/views/tableficate/_header.html.erb +2 -2
- data/app/views/tableficate/_table.html.erb +16 -23
- data/app/views/tableficate/_table_for.html.erb +9 -0
- data/app/views/tableficate/filters/_check_box_choice.html.erb +3 -0
- data/app/views/tableficate/filters/_form.html.erb +16 -0
- data/app/views/tableficate/filters/_radio_choice.html.erb +3 -0
- data/changelog.markdown +17 -0
- data/lib/generators/tableficate/theme/theme_generator.rb +17 -1
- data/lib/tableficate.rb +3 -0
- data/lib/tableficate/action_column.rb +2 -2
- data/lib/tableficate/caption.rb +29 -0
- data/lib/tableficate/column.rb +13 -7
- data/lib/tableficate/empty.rb +34 -0
- data/lib/tableficate/filters/base.rb +7 -5
- data/lib/tableficate/filters/check_box.rb +1 -1
- data/lib/tableficate/filters/choice.rb +2 -2
- data/lib/tableficate/filters/collection_base.rb +13 -0
- data/lib/tableficate/filters/input.rb +2 -2
- data/lib/tableficate/filters/input_range.rb +6 -6
- data/lib/tableficate/filters/radio.rb +1 -1
- data/lib/tableficate/filters/select.rb +1 -1
- data/lib/tableficate/filters/select_range.rb +4 -4
- data/lib/tableficate/finder.rb +70 -28
- data/lib/tableficate/helper.rb +44 -47
- data/lib/tableficate/table.rb +64 -24
- data/lib/tableficate/utils.rb +27 -2
- data/lib/tableficate/version.rb +1 -1
- data/spec/action_column_spec.rb +9 -1
- data/spec/base_spec.rb +10 -0
- data/spec/caption_spec.rb +33 -0
- data/spec/column_spec.rb +29 -0
- data/spec/empty_spec.rb +45 -0
- data/spec/filters/base_spec.rb +6 -5
- data/spec/filters/choice_spec.rb +5 -2
- data/spec/filters/collection_spec.rb +4 -4
- data/spec/filters/input_range_spec.rb +10 -8
- data/spec/filters/select_range_spec.rb +79 -0
- data/spec/finder_spec.rb +48 -1
- data/spec/generators/tableficate_theme_spec.rb +14 -0
- data/spec/table_spec.rb +114 -3
- data/spec/test_app/app/controllers/filters_controller.rb +1 -1
- data/spec/test_app/app/controllers/tests_controller.rb +5 -0
- data/spec/test_app/app/controllers/themes_controller.rb +7 -0
- data/spec/test_app/app/views/filters/html5_input_types.html.erb +31 -0
- data/spec/test_app/app/views/tableficate/custom_check_box_block/filters/_check_box_choice.html.erb +2 -0
- data/spec/test_app/app/views/tableficate/custom_radio_block/filters/_radio_choice.html.erb +2 -0
- data/spec/test_app/app/views/tests/index.html.erb +13 -0
- data/spec/test_app/app/views/themes/caption.html.erb +9 -0
- data/spec/test_app/app/views/themes/column_attrs.html.erb +7 -0
- data/spec/test_app/app/views/themes/column_cell_attrs.html.erb +7 -0
- data/spec/test_app/app/views/themes/column_cell_attrs_with_proc.html.erb +7 -0
- data/spec/test_app/app/views/themes/column_header_attrs.html.erb +7 -0
- data/spec/test_app/app/views/themes/empty_with_data.html.erb +9 -0
- data/spec/test_app/app/views/themes/empty_with_no_data.html.erb +9 -0
- data/spec/test_app/app/views/themes/no_caption.html.erb +7 -0
- data/spec/test_app/app/views/themes/no_column_attrs.html.erb +7 -0
- data/spec/test_app/config/application.rb +1 -1
- data/spec/test_app/config/routes.rb +2 -0
- data/spec/test_app/db/migrate/20111227224959_additional_columns.rb +73 -0
- data/spec/test_app/db/migrate/20111230203456_created_at_specific_dates.rb +11 -0
- data/spec/test_app/db/schema.rb +10 -3
- data/spec/test_app/db/test.sqlite3 +0 -0
- data/spec/theme/caption_spec.rb +15 -0
- data/spec/theme/column_spec.rb +35 -0
- data/spec/theme/empty_spec.rb +15 -0
- data/spec/utils_spec.rb +44 -4
- metadata +69 -58
- data/spec/test_app/app/views/tableficate/custom_check_box_block/_data.html.erb +0 -1
- data/spec/test_app/app/views/tableficate/custom_check_box_block/_header.html.erb +0 -8
- data/spec/test_app/app/views/tableficate/custom_check_box_block/_row.html.erb +0 -5
- data/spec/test_app/app/views/tableficate/custom_check_box_block/_table.html.erb +0 -36
- data/spec/test_app/app/views/tableficate/custom_check_box_block/filters/_check_box.html.erb +0 -7
- data/spec/test_app/app/views/tableficate/custom_check_box_block/filters/_input.html.erb +0 -4
- data/spec/test_app/app/views/tableficate/custom_check_box_block/filters/_input_range.html.erb +0 -6
- data/spec/test_app/app/views/tableficate/custom_check_box_block/filters/_radio.html.erb +0 -4
- data/spec/test_app/app/views/tableficate/custom_check_box_block/filters/_select.html.erb +0 -4
- data/spec/test_app/app/views/tableficate/custom_check_box_block/filters/_select_range_filter.html.erb +0 -6
- data/spec/test_app/app/views/tableficate/custom_radio_block/_data.html.erb +0 -1
- data/spec/test_app/app/views/tableficate/custom_radio_block/_header.html.erb +0 -8
- data/spec/test_app/app/views/tableficate/custom_radio_block/_row.html.erb +0 -5
- data/spec/test_app/app/views/tableficate/custom_radio_block/_table.html.erb +0 -36
- data/spec/test_app/app/views/tableficate/custom_radio_block/filters/_check_box.html.erb +0 -4
- data/spec/test_app/app/views/tableficate/custom_radio_block/filters/_input.html.erb +0 -4
- data/spec/test_app/app/views/tableficate/custom_radio_block/filters/_input_range.html.erb +0 -6
- data/spec/test_app/app/views/tableficate/custom_radio_block/filters/_radio.html.erb +0 -7
- data/spec/test_app/app/views/tableficate/custom_radio_block/filters/_select.html.erb +0 -4
- data/spec/test_app/app/views/tableficate/custom_radio_block/filters/_select_range_filter.html.erb +0 -6
- data/spec/test_app/public/index.html +0 -241
data/spec/filters/base_spec.rb
CHANGED
|
@@ -4,24 +4,25 @@ describe Tableficate::Filter::Base do
|
|
|
4
4
|
before(:all) do
|
|
5
5
|
@table = Tableficate::Table.new(nil, NobelPrizeWinner.limit(1), {}, {})
|
|
6
6
|
@table.column(:first_name, header: 'Given Name')
|
|
7
|
+
@first_name_filter = Tableficate::Filter::Base.new(@table, :first_name)
|
|
7
8
|
end
|
|
8
9
|
|
|
9
10
|
it 'should find the correct template type' do
|
|
10
|
-
|
|
11
|
+
@first_name_filter.template.should == 'filters/base'
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
it 'should use the provided label or default to the column header' do
|
|
14
|
-
|
|
15
|
+
@first_name_filter.label.should == 'Given Name'
|
|
15
16
|
Tableficate::Filter::Base.new(@table, :first_name, label: 'First').label.should == 'First'
|
|
16
17
|
end
|
|
17
18
|
|
|
18
19
|
it 'should provide a field name' do
|
|
19
|
-
|
|
20
|
+
@first_name_filter.field_name.should == "#{@table.as}[filter][first_name]"
|
|
20
21
|
end
|
|
21
22
|
|
|
22
23
|
it 'should provide a field value when given params or a blank value' do
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
@first_name_filter.field_value({filter: {first_name: 'Aaron'}}).should == 'Aaron'
|
|
25
|
+
@first_name_filter.field_value({}).should == ''
|
|
25
26
|
end
|
|
26
27
|
|
|
27
28
|
it 'should allow for filters that do not match a particular field' do
|
data/spec/filters/choice_spec.rb
CHANGED
|
@@ -4,10 +4,13 @@ describe Tableficate::Filter::Choice do
|
|
|
4
4
|
it 'should mark a choice as selected if it has a :selected or :checked option' do
|
|
5
5
|
choice = Tableficate::Filter::Choice.new('foo', 'bar', {selected: 'selected'})
|
|
6
6
|
choice.selected?.should be true
|
|
7
|
-
choice.
|
|
7
|
+
choice.attrs[:selected].should be nil
|
|
8
|
+
|
|
9
|
+
choice = Tableficate::Filter::Choice.new('foo', 'bar')
|
|
10
|
+
choice.selected?.should be false
|
|
8
11
|
|
|
9
12
|
choice = Tableficate::Filter::Choice.new('foo', 'bar', {checked: 'checked'})
|
|
10
13
|
choice.checked?.should be true
|
|
11
|
-
choice.
|
|
14
|
+
choice.attrs[:checked].should be nil
|
|
12
15
|
end
|
|
13
16
|
end
|
|
@@ -75,9 +75,9 @@ describe Tableficate::Filter::Collection do
|
|
|
75
75
|
|
|
76
76
|
1.upto(3) do |i|
|
|
77
77
|
if i == 2
|
|
78
|
-
collection[i - 1].
|
|
78
|
+
collection[i - 1].attrs[:disabled].should == 'disabled'
|
|
79
79
|
else
|
|
80
|
-
collection[i - 1].
|
|
80
|
+
collection[i - 1].attrs.has_key?(:disabled).should be false
|
|
81
81
|
end
|
|
82
82
|
end
|
|
83
83
|
|
|
@@ -85,9 +85,9 @@ describe Tableficate::Filter::Collection do
|
|
|
85
85
|
|
|
86
86
|
1.upto(3) do |i|
|
|
87
87
|
if i == 2 or i == 3
|
|
88
|
-
collection[i - 1].
|
|
88
|
+
collection[i - 1].attrs[:disabled].should == 'disabled'
|
|
89
89
|
else
|
|
90
|
-
collection[i - 1].
|
|
90
|
+
collection[i - 1].attrs.has_key?(:disabled).should be false
|
|
91
91
|
end
|
|
92
92
|
end
|
|
93
93
|
end
|
|
@@ -7,19 +7,20 @@ describe Tableficate::Filter::InputStart do
|
|
|
7
7
|
template.lookup_context.stub!(:exists?).and_return(true)
|
|
8
8
|
@table = Tableficate::Table.new(template, NobelPrizeWinner.joins(:nobel_prizes).limit(1), {}, {})
|
|
9
9
|
@table.column(:year)
|
|
10
|
+
@input_start_filter = Tableficate::Filter::InputStart.new(@table, :year)
|
|
10
11
|
end
|
|
11
12
|
|
|
12
13
|
it 'should append "[start]" to field_name' do
|
|
13
|
-
|
|
14
|
+
@input_start_filter.field_name == "#{@table.as}[filter][year][start]"
|
|
14
15
|
end
|
|
15
16
|
|
|
16
17
|
it 'should append "_start" to the name' do
|
|
17
|
-
|
|
18
|
+
@input_start_filter.name == :year_start
|
|
18
19
|
end
|
|
19
20
|
|
|
20
21
|
it 'should provide a field value when given params or a blank value' do
|
|
21
|
-
|
|
22
|
-
|
|
22
|
+
@input_start_filter.field_value({filter: {year: {start: '2011'}}}).should == '2011'
|
|
23
|
+
@input_start_filter.field_value({}).should == ''
|
|
23
24
|
end
|
|
24
25
|
end
|
|
25
26
|
|
|
@@ -30,19 +31,20 @@ describe Tableficate::Filter::InputStop do
|
|
|
30
31
|
template.lookup_context.stub!(:exists?).and_return(true)
|
|
31
32
|
@table = Tableficate::Table.new(template, NobelPrizeWinner.joins(:nobel_prizes).limit(1), {}, {})
|
|
32
33
|
@table.column(:year)
|
|
34
|
+
@input_stop_filter = Tableficate::Filter::InputStop.new(@table, :year)
|
|
33
35
|
end
|
|
34
36
|
|
|
35
37
|
it 'should append "[stop]" to field_name' do
|
|
36
|
-
|
|
38
|
+
@input_stop_filter.field_name == "#{@table.as}[filter][year][stop]"
|
|
37
39
|
end
|
|
38
40
|
|
|
39
41
|
it 'should append "_stop" to the name' do
|
|
40
|
-
|
|
42
|
+
@input_stop_filter.name == :year_stop
|
|
41
43
|
end
|
|
42
44
|
|
|
43
45
|
it 'should provide a field value when given params or a blank value' do
|
|
44
|
-
|
|
45
|
-
|
|
46
|
+
@input_stop_filter.field_value({filter: {year: {stop: '2011'}}}).should == '2011'
|
|
47
|
+
@input_stop_filter.field_value({}).should == ''
|
|
46
48
|
end
|
|
47
49
|
end
|
|
48
50
|
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
|
|
3
|
+
describe Tableficate::Filter::SelectStart do
|
|
4
|
+
before(:each) do
|
|
5
|
+
template = mock('Template')
|
|
6
|
+
template.stub!(:lookup_context).and_return(ActionView::LookupContext.new([]))
|
|
7
|
+
template.lookup_context.stub!(:exists?).and_return(true)
|
|
8
|
+
@table = Tableficate::Table.new(template, NobelPrizeWinner.joins(:nobel_prizes).limit(1), {}, {})
|
|
9
|
+
@table.column(:year)
|
|
10
|
+
@select_start_filter = Tableficate::Filter::SelectStart.new(@table, :year, collection: 1900..2000)
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it 'should append "[start]" to field_name' do
|
|
14
|
+
@select_start_filter.field_name == "#{@table.as}[filter][year][start]"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
it 'should append "_start" to the name' do
|
|
18
|
+
@select_start_filter.name == :year_start
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'should provide a field value when given params or a blank value' do
|
|
22
|
+
@select_start_filter.field_value({filter: {year: {start: '1911'}}}).should == '1911'
|
|
23
|
+
@select_start_filter.field_value({}).should == ''
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
describe Tableficate::Filter::SelectStop do
|
|
28
|
+
before(:each) do
|
|
29
|
+
template = mock('Template')
|
|
30
|
+
template.stub!(:lookup_context).and_return(ActionView::LookupContext.new([]))
|
|
31
|
+
template.lookup_context.stub!(:exists?).and_return(true)
|
|
32
|
+
@table = Tableficate::Table.new(template, NobelPrizeWinner.joins(:nobel_prizes).limit(1), {}, {})
|
|
33
|
+
@table.column(:year)
|
|
34
|
+
@select_stop_filter = Tableficate::Filter::SelectStop.new(@table, :year, collection: 1900..2000)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it 'should append "[stop]" to field_name' do
|
|
38
|
+
@select_stop_filter.field_name == "#{@table.as}[filter][year][stop]"
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
it 'should append "_stop" to the name' do
|
|
42
|
+
@select_stop_filter.name == :year_stop
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it 'should provide a field value when given params or a blank value' do
|
|
46
|
+
@select_stop_filter.field_value({filter: {year: {stop: '1911'}}}).should == '1911'
|
|
47
|
+
@select_stop_filter.field_value({}).should == ''
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
describe Tableficate::Filter::SelectRange do
|
|
52
|
+
before(:each) do
|
|
53
|
+
template = mock('Template')
|
|
54
|
+
template.stub!(:lookup_context).and_return(ActionView::LookupContext.new([]))
|
|
55
|
+
@table = Tableficate::Table.new(template, NobelPrizeWinner.joins(:nobel_prizes).limit(1), {}, {})
|
|
56
|
+
@table.column(:year)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
it 'should create a start and stop select' do
|
|
60
|
+
@table.template.lookup_context.stub!(:exists?).and_return(true)
|
|
61
|
+
|
|
62
|
+
filter = Tableficate::Filter::SelectRange.new(@table, :year, collection: 1900..2000)
|
|
63
|
+
|
|
64
|
+
filter.start.is_a?(Tableficate::Filter::SelectStart).should be true
|
|
65
|
+
filter.stop.is_a?(Tableficate::Filter::SelectStop).should be true
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'should use the :start and :stop option hashes for the individual filters and default any values not passed to the range options provided' do
|
|
69
|
+
@table.template.lookup_context.stub!(:exists?).and_return(true)
|
|
70
|
+
|
|
71
|
+
filter = Tableficate::Filter::SelectRange.new(@table, :year, label: 'Nobel Prize Won In', collection: 1900..2000)
|
|
72
|
+
filter.start.label.should == 'Nobel Prize Won In'
|
|
73
|
+
filter.stop.label.should == 'Nobel Prize Won In'
|
|
74
|
+
|
|
75
|
+
filter = Tableficate::Filter::SelectRange.new(@table, :year, label: 'Nobel Prize Won In', start: {label: 'Nobel Prize Won Between'}, stop: {label: 'and'}, collection: 1900..2000)
|
|
76
|
+
filter.start.label.should == 'Nobel Prize Won Between'
|
|
77
|
+
filter.stop.label.should == 'and'
|
|
78
|
+
end
|
|
79
|
+
end
|
data/spec/finder_spec.rb
CHANGED
|
@@ -2,21 +2,43 @@ require 'spec_helper'
|
|
|
2
2
|
|
|
3
3
|
describe Tableficate::Finder do
|
|
4
4
|
it 'should filter based on single input passed in' do
|
|
5
|
-
# exact
|
|
5
|
+
# exact match
|
|
6
6
|
npw = NobelPrizeWinner.tableficate({filter: {first_name: 'Albert'}})
|
|
7
7
|
npw.size.should == 1
|
|
8
8
|
npw.first.first_name.should == 'Albert'
|
|
9
9
|
npw = NobelPrizeWinner.tableficate({filter: {first_name: 'Al'}})
|
|
10
10
|
npw.size.should == 0
|
|
11
|
+
|
|
12
|
+
# contains match
|
|
13
|
+
class ContainsNobelPrizeWinner < Tableficate::Base
|
|
14
|
+
scope :nobel_prize_winner
|
|
15
|
+
|
|
16
|
+
filter(:first_name, match: 'contains')
|
|
17
|
+
end
|
|
18
|
+
npw = ContainsNobelPrizeWinner.tableficate({filter: {first_name: 'Al'}})
|
|
19
|
+
npw.size.should == 1
|
|
20
|
+
npw.first.first_name.should == 'Albert'
|
|
11
21
|
end
|
|
12
22
|
|
|
13
23
|
it 'should filter based on multiple inputs passed in' do
|
|
24
|
+
# exact match
|
|
14
25
|
npw = NobelPrizeWinner.tableficate({filter: {first_name: ['Albert', 'Marie']}})
|
|
15
26
|
npw.size.should == 2
|
|
16
27
|
npw.first.first_name.should == 'Albert'
|
|
17
28
|
npw.last.first_name.should == 'Marie'
|
|
18
29
|
npw = NobelPrizeWinner.tableficate({filter: {first_name: ['Al', 'Mar']}})
|
|
19
30
|
npw.size.should == 0
|
|
31
|
+
|
|
32
|
+
# contains match
|
|
33
|
+
class ContainsNobelPrizeWinner < Tableficate::Base
|
|
34
|
+
scope :nobel_prize_winner
|
|
35
|
+
|
|
36
|
+
filter(:first_name, match: 'contains')
|
|
37
|
+
end
|
|
38
|
+
npw = ContainsNobelPrizeWinner.tableficate({filter: {first_name: ['Al', 'Mar']}})
|
|
39
|
+
npw.size.should == 2
|
|
40
|
+
npw.first.first_name.should == 'Albert'
|
|
41
|
+
npw.last.first_name.should == 'Marie'
|
|
20
42
|
end
|
|
21
43
|
|
|
22
44
|
it 'should attach the table name to the fields from the primary table to avoid ambiguity' do
|
|
@@ -32,4 +54,29 @@ describe Tableficate::Finder do
|
|
|
32
54
|
np = NobelPrize.tableficate({filter: {year: {start: 1900, stop: 1930}}})
|
|
33
55
|
np.size.should == 4
|
|
34
56
|
end
|
|
57
|
+
|
|
58
|
+
it 'should remove harmful characters from the param name' do
|
|
59
|
+
np = NobelPrize.tableficate({filter: {"ye'ar" => {start: 1900, stop: 1930}}})
|
|
60
|
+
np.size.should == 4
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
it 'should handle a date string being used against a datetime or timestamp column' do
|
|
64
|
+
np = NobelPrizeWinner.tableficate({filter: {created_at: '20110101'}})
|
|
65
|
+
np.size.should == 1
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it 'should handle a date range being used against a datetime or timestamp column' do
|
|
69
|
+
np = NobelPrizeWinner.tableficate({filter: {created_at: {start: '20110101', stop: '20110105'}}})
|
|
70
|
+
np.size.should == 5
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
it 'should match an exact datetime and account for the timezone setting' do
|
|
74
|
+
np = NobelPrizeWinner.tableficate({filter: {created_at: '20110101050112'}})
|
|
75
|
+
np.size.should == 1
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it 'should match an exact datetime range and account for the timezone setting' do
|
|
79
|
+
np = NobelPrizeWinner.tableficate({filter: {created_at: {start: '20110101050112', stop: '20110102050212'}}})
|
|
80
|
+
np.size.should == 2
|
|
81
|
+
end
|
|
35
82
|
end
|
|
@@ -8,4 +8,18 @@ describe 'tableficate:theme' do
|
|
|
8
8
|
subject.should generate('app/views/tableficate/foo/_table.html.erb')
|
|
9
9
|
end
|
|
10
10
|
end
|
|
11
|
+
|
|
12
|
+
with_args :foo, 'table_for' do
|
|
13
|
+
it 'should generate a single file in app/views/tableficate/foo/' do
|
|
14
|
+
subject.should generate('app/views/tableficate/foo')
|
|
15
|
+
subject.should generate('app/views/tableficate/foo/_table_for.html.erb')
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
with_args :foo, 'filters/form' do
|
|
20
|
+
it 'should generate a single file in app/views/tableficate/foo/filters' do
|
|
21
|
+
subject.should generate('app/views/tableficate/foo/filters')
|
|
22
|
+
subject.should generate('app/views/tableficate/foo/filters/_form.html.erb')
|
|
23
|
+
end
|
|
24
|
+
end
|
|
11
25
|
end
|
data/spec/table_spec.rb
CHANGED
|
@@ -5,7 +5,7 @@ describe Tableficate::Table do
|
|
|
5
5
|
template = mock('Template')
|
|
6
6
|
template.stub!(:lookup_context).and_return(ActionView::LookupContext.new([]))
|
|
7
7
|
template.lookup_context.stub!(:exists?).and_return(true)
|
|
8
|
-
@table = Tableficate::Table.new(template, NobelPrizeWinner.limit(1), {}, {current_sort: {column: :first_name, dir: 'asc'}})
|
|
8
|
+
@table = Tableficate::Table.new(template, NobelPrizeWinner.joins(:nobel_prizes).limit(1), {}, {current_sort: {column: :first_name, dir: 'asc'}})
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
it 'should have the current sort if provided' do
|
|
@@ -17,6 +17,28 @@ describe Tableficate::Table do
|
|
|
17
17
|
@table.as.should == 'nobel_prize_winners'
|
|
18
18
|
end
|
|
19
19
|
|
|
20
|
+
it 'should add a empty' do
|
|
21
|
+
@table.empty('There is no data.')
|
|
22
|
+
@table.empty.is_a?(Tableficate::Empty).should be true
|
|
23
|
+
@table.empty.value.should == 'There is no data.'
|
|
24
|
+
|
|
25
|
+
@table.empty do
|
|
26
|
+
'No data.'
|
|
27
|
+
end
|
|
28
|
+
@table.empty.value.should == 'No data.'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'should add a caption' do
|
|
32
|
+
@table.caption('Nobel Prize Winners')
|
|
33
|
+
@table.caption.is_a?(Tableficate::Caption).should be true
|
|
34
|
+
@table.caption.value.should == 'Nobel Prize Winners'
|
|
35
|
+
|
|
36
|
+
@table.caption do
|
|
37
|
+
'Nobel Winners'
|
|
38
|
+
end
|
|
39
|
+
@table.caption.value.should == 'Nobel Winners'
|
|
40
|
+
end
|
|
41
|
+
|
|
20
42
|
it 'should add a Column' do
|
|
21
43
|
@table.column(:first_name)
|
|
22
44
|
@table.column(:last_name)
|
|
@@ -85,7 +107,96 @@ describe Tableficate::Table do
|
|
|
85
107
|
@table.filter(:first_name, as: :search)
|
|
86
108
|
|
|
87
109
|
@table.filters.first.is_a?(Tableficate::Filter::Input).should be true
|
|
88
|
-
@table.filters.first.
|
|
110
|
+
@table.filters.first.attrs[:type].should == 'search'
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
it 'should default the type to "checkbox" for boolean fields' do
|
|
114
|
+
@table.filter(:shared)
|
|
115
|
+
|
|
116
|
+
@table.filters.first.is_a?(Tableficate::Filter::CheckBox).should be true
|
|
117
|
+
@table.filters.first.attrs[:type].should == 'checkbox'
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
it 'should default the type to "email" for string fields with "email" somewhere in the name' do
|
|
121
|
+
@table.filter(:email)
|
|
122
|
+
|
|
123
|
+
@table.filters.first.is_a?(Tableficate::Filter::Input).should be true
|
|
124
|
+
@table.filters.first.attrs[:type].should == 'email'
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
it 'should default the type to "url" for string fields with "url" somewhere in the name' do
|
|
128
|
+
@table.filter(:url)
|
|
129
|
+
|
|
130
|
+
@table.filters.first.is_a?(Tableficate::Filter::Input).should be true
|
|
131
|
+
@table.filters.first.attrs[:type].should == 'url'
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it 'should default the type to "tel" for string fields with "phone" somewhere in the name' do
|
|
135
|
+
@table.filter(:home_phone)
|
|
136
|
+
|
|
137
|
+
@table.filters.first.is_a?(Tableficate::Filter::Input).should be true
|
|
138
|
+
@table.filters.first.attrs[:type].should == 'tel'
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it 'should default the type to "number" for integer fields' do
|
|
142
|
+
@table.filter(:year)
|
|
143
|
+
|
|
144
|
+
@table.filters.first.is_a?(Tableficate::Filter::Input).should be true
|
|
145
|
+
@table.filters.first.attrs[:type].should == 'number'
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
it 'should default the type to "number" for float fields' do
|
|
149
|
+
@table.filter(:meaningless_float)
|
|
150
|
+
|
|
151
|
+
@table.filters.first.is_a?(Tableficate::Filter::Input).should be true
|
|
152
|
+
@table.filters.first.attrs[:type].should == 'number'
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it 'should default the type to "number" for decimal fields' do
|
|
156
|
+
@table.filter(:meaningless_decimal)
|
|
157
|
+
|
|
158
|
+
@table.filters.first.is_a?(Tableficate::Filter::Input).should be true
|
|
159
|
+
@table.filters.first.attrs[:type].should == 'number'
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
it 'should default the type to "date" for date fields' do
|
|
163
|
+
@table.filter(:birthdate)
|
|
164
|
+
|
|
165
|
+
@table.filters.first.is_a?(Tableficate::Filter::Input).should be true
|
|
166
|
+
@table.filters.first.attrs[:type].should == 'date'
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
it 'should default the type to "time" for time fields' do
|
|
170
|
+
@table.filter(:meaningless_time)
|
|
171
|
+
|
|
172
|
+
@table.filters.first.is_a?(Tableficate::Filter::Input).should be true
|
|
173
|
+
@table.filters.first.attrs[:type].should == 'time'
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
it 'should default the type to "datetime" for datetime fields' do
|
|
177
|
+
@table.filter(:created_at)
|
|
178
|
+
|
|
179
|
+
@table.filters.first.is_a?(Tableficate::Filter::Input).should be true
|
|
180
|
+
@table.filters.first.attrs[:type].should == 'datetime'
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
it 'should default the type to "datetime" for timestamp fields' do
|
|
184
|
+
@table.filter(:updated_at)
|
|
185
|
+
|
|
186
|
+
@table.filters.first.is_a?(Tableficate::Filter::Input).should be true
|
|
187
|
+
@table.filters.first.attrs[:type].should == 'datetime'
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
it 'should default the type based on the actual field, not the label' do
|
|
191
|
+
template = mock('Template')
|
|
192
|
+
template.stub!(:lookup_context).and_return(ActionView::LookupContext.new([]))
|
|
193
|
+
template.lookup_context.stub!(:exists?).and_return(true)
|
|
194
|
+
table = Tableficate::Table.new(template, NobelPrizeWinner.joins(:nobel_prizes).limit(1), {}, {field_map: {foo: 'year'}})
|
|
195
|
+
|
|
196
|
+
table.filter(:foo)
|
|
197
|
+
|
|
198
|
+
table.filters.first.is_a?(Tableficate::Filter::Input).should be true
|
|
199
|
+
table.filters.first.attrs[:type].should == 'number'
|
|
89
200
|
end
|
|
90
201
|
|
|
91
202
|
it 'should add a InputRange filter' do
|
|
@@ -105,7 +216,7 @@ describe Tableficate::Table do
|
|
|
105
216
|
@table.filter_range(:first_name, as: :search)
|
|
106
217
|
|
|
107
218
|
@table.filters.first.is_a?(Tableficate::Filter::InputRange).should be true
|
|
108
|
-
@table.filters.first.
|
|
219
|
+
@table.filters.first.attrs[:type].should == 'search'
|
|
109
220
|
end
|
|
110
221
|
|
|
111
222
|
it 'should add a Select filter' do
|
|
@@ -2,6 +2,6 @@ class FiltersController < ApplicationController
|
|
|
2
2
|
before_filter :get_npw
|
|
3
3
|
|
|
4
4
|
def get_npw
|
|
5
|
-
@npw = NobelPrizeWinner.select('nobel_prize_winners.*, nobel_prizes
|
|
5
|
+
@npw = NobelPrizeWinner.select('nobel_prize_winners.*, nobel_prizes.*').joins(:nobel_prizes).tableficate(params[:nobel_prize_winners])
|
|
6
6
|
end
|
|
7
7
|
end
|