datagrid 1.2.0 → 1.2.1
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.
- checksums.yaml +4 -4
- data/Gemfile +8 -6
- data/VERSION +1 -1
- data/app/views/datagrid/_form.html.erb +3 -1
- data/datagrid.gemspec +6 -6
- data/lib/datagrid.rb +1 -0
- data/lib/datagrid/columns.rb +14 -7
- data/lib/datagrid/columns/column.rb +7 -4
- data/lib/datagrid/renderer.rb +1 -1
- data/spec/datagrid/active_model_spec.rb +4 -4
- data/spec/datagrid/column_names_attribute_spec.rb +15 -11
- data/spec/datagrid/columns_spec.rb +80 -62
- data/spec/datagrid/core_spec.rb +6 -6
- data/spec/datagrid/drivers/active_record_spec.rb +4 -4
- data/spec/datagrid/drivers/array_spec.rb +41 -8
- data/spec/datagrid/drivers/mongo_mapper_spec.rb +42 -10
- data/spec/datagrid/drivers/mongoid_spec.rb +43 -11
- data/spec/datagrid/filters/composite_filters_spec.rb +12 -12
- data/spec/datagrid/filters/date_filter_spec.rb +25 -25
- data/spec/datagrid/filters/date_time_filter_spec.rb +20 -20
- data/spec/datagrid/filters/dynamic_filter_spec.rb +43 -43
- data/spec/datagrid/filters/enum_filter_spec.rb +6 -6
- data/spec/datagrid/filters/extended_boolean_filter_spec.rb +10 -10
- data/spec/datagrid/filters/float_filter_spec.rb +2 -2
- data/spec/datagrid/filters/integer_filter_spec.rb +34 -34
- data/spec/datagrid/filters/string_filter_spec.rb +7 -7
- data/spec/datagrid/filters_spec.rb +20 -20
- data/spec/datagrid/form_builder_spec.rb +5 -5
- data/spec/datagrid/helper_spec.rb +41 -40
- data/spec/datagrid/ordering_spec.rb +22 -22
- data/spec/datagrid/scaffold_spec.rb +2 -2
- data/spec/datagrid/utils_spec.rb +3 -3
- data/spec/datagrid_spec.rb +10 -7
- data/spec/support/matchers.rb +6 -3
- metadata +30 -30
data/spec/datagrid/core_spec.rb
CHANGED
@@ -15,7 +15,7 @@ describe Datagrid::Core do
|
|
15
15
|
context 'in the class' do
|
16
16
|
let(:report) { report_class.new }
|
17
17
|
|
18
|
-
it { expect(report.scope.to_a).to
|
18
|
+
it { expect(report.scope.to_a.size).to eq(2) }
|
19
19
|
end
|
20
20
|
|
21
21
|
context 'changes scope on the fly' do
|
@@ -25,26 +25,26 @@ describe Datagrid::Core do
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
it { expect(report.scope.to_a).to
|
28
|
+
it { expect(report.scope.to_a.size).to eq(1) }
|
29
29
|
end
|
30
30
|
|
31
31
|
context 'overriding scope by initializer' do
|
32
32
|
let(:report) { report_class.new { Entry.limit(1) } }
|
33
33
|
|
34
|
-
it { expect(report.scope.to_a).to
|
34
|
+
it { expect(report.scope.to_a.size).to eq(1) }
|
35
35
|
|
36
36
|
context "reset scope to default" do
|
37
37
|
before do
|
38
38
|
report.reset_scope
|
39
39
|
end
|
40
|
-
it { expect(report.scope.to_a).to
|
40
|
+
it { expect(report.scope.to_a.size).to eq(2) }
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
44
|
context "appending scope by initializer " do
|
45
45
|
let(:report) { report_class.new {|scope| scope.limit(1)} }
|
46
|
-
it { expect(report.scope.to_a).to
|
47
|
-
it { expect(report.scope.order_values).to
|
46
|
+
it { expect(report.scope.to_a.size).to eq(1) }
|
47
|
+
it { expect(report.scope.order_values.size).to eq(1) }
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
@@ -11,13 +11,13 @@ describe Datagrid::Drivers::ActiveRecord do
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it "should convert any scope to AR::Relation" do
|
14
|
-
subject.to_scope(Entry).
|
15
|
-
subject.to_scope(Entry.limit(5)).
|
16
|
-
subject.to_scope(Group.create!.entries).
|
14
|
+
expect(subject.to_scope(Entry)).to be_a(ActiveRecord::Relation)
|
15
|
+
expect(subject.to_scope(Entry.limit(5))).to be_a(ActiveRecord::Relation)
|
16
|
+
expect(subject.to_scope(Group.create!.entries)).to be_a(ActiveRecord::Relation)
|
17
17
|
end
|
18
18
|
|
19
19
|
it "should support append_column_queries" do
|
20
20
|
scope = subject.append_column_queries(Entry.scoped, [Datagrid::Columns::Column.new(SimpleReport, :sum_group_id, 'sum(entries.group_id)')])
|
21
|
-
scope.to_sql.strip.
|
21
|
+
expect(scope.to_sql.strip).to eq('SELECT "entries".*, sum(entries.group_id) AS sum_group_id FROM "entries"')
|
22
22
|
end
|
23
23
|
end
|
@@ -38,23 +38,56 @@ describe Datagrid::Drivers::Array do
|
|
38
38
|
end
|
39
39
|
|
40
40
|
|
41
|
-
|
42
|
-
|
43
|
-
|
41
|
+
describe '#assets' do
|
42
|
+
subject { super().assets }
|
43
|
+
describe '#size' do
|
44
|
+
subject { super().size }
|
45
|
+
it {should == 3}
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#rows' do
|
50
|
+
subject { super().rows }
|
51
|
+
it {should == [["Vasya", 15], ["Petya", 12], ["Vova", 13]]}
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#header' do
|
55
|
+
subject { super().header }
|
56
|
+
it {should ==[ "Name", "Age"]}
|
57
|
+
end
|
44
58
|
|
45
|
-
|
59
|
+
describe '#data' do
|
60
|
+
subject { super().data }
|
61
|
+
it {should == [[ "Name", "Age"], ["Vasya", 15], ["Petya", 12], ["Vova", 13]]}
|
62
|
+
end
|
46
63
|
|
47
64
|
|
48
65
|
describe "when some filters specified" do
|
49
66
|
let(:_attributes) { {:age => [12,14]} }
|
50
|
-
|
51
|
-
|
52
|
-
|
67
|
+
|
68
|
+
describe '#assets' do
|
69
|
+
subject { super().assets }
|
70
|
+
it {should_not include(first)}
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '#assets' do
|
74
|
+
subject { super().assets }
|
75
|
+
it {should include(second)}
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#assets' do
|
79
|
+
subject { super().assets }
|
80
|
+
it {should include(third)}
|
81
|
+
end
|
53
82
|
end
|
54
83
|
|
55
84
|
describe "when reverse ordering is specified" do
|
56
85
|
let(:_attributes) { {:order => :name, :descending => true} }
|
57
|
-
|
86
|
+
|
87
|
+
describe '#assets' do
|
88
|
+
subject { super().assets }
|
89
|
+
it {should == [third, first, second]}
|
90
|
+
end
|
58
91
|
end
|
59
92
|
end
|
60
93
|
end
|
@@ -34,32 +34,64 @@ describe Datagrid::Drivers::MongoMapper, :mongomapper do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
|
37
|
-
|
37
|
+
describe '#assets' do
|
38
|
+
subject { super().assets }
|
39
|
+
it {should include(first, second)}
|
40
|
+
end
|
38
41
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
+
describe '#assets' do
|
43
|
+
subject { super().assets }
|
44
|
+
describe '#size' do
|
45
|
+
subject { super().size }
|
46
|
+
it {should == 2}
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe '#rows' do
|
51
|
+
subject { super().rows }
|
52
|
+
it {should == [["Main First", 2, false], ["Main Second", 3, true]]}
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#header' do
|
56
|
+
subject { super().header }
|
57
|
+
it {should ==[ "Name", "Group", "Disabled"]}
|
58
|
+
end
|
42
59
|
|
43
|
-
|
60
|
+
describe '#data' do
|
61
|
+
subject { super().data }
|
62
|
+
it {should == [[ "Name", "Group", "Disabled"], ["Main First", 2, false], ["Main Second", 3, true]]}
|
63
|
+
end
|
44
64
|
|
45
65
|
|
46
66
|
describe "when some filters specified" do
|
47
67
|
let(:_attributes) { {:from_group_id => 3} }
|
48
|
-
|
49
|
-
|
68
|
+
|
69
|
+
describe '#assets' do
|
70
|
+
subject { super().assets }
|
71
|
+
it {should_not include(first)}
|
72
|
+
end
|
73
|
+
|
74
|
+
describe '#assets' do
|
75
|
+
subject { super().assets }
|
76
|
+
it {should include(second)}
|
77
|
+
end
|
50
78
|
end
|
51
79
|
|
52
80
|
describe "when reverse ordering is specified" do
|
53
81
|
let(:_attributes) { {:order => :name, :descending => true} }
|
54
|
-
|
82
|
+
|
83
|
+
describe '#rows' do
|
84
|
+
subject { super().rows }
|
85
|
+
it {should == [["Main Second", 3, true], ["Main First", 2, false]]}
|
86
|
+
end
|
55
87
|
end
|
56
88
|
it "should not provide default order for non declared fields" do
|
57
|
-
|
89
|
+
expect {
|
58
90
|
test_report(:order => :test) do
|
59
91
|
scope { MongoMapperEntry }
|
60
92
|
column(:test)
|
61
93
|
end
|
62
|
-
}.
|
94
|
+
}.to raise_error(Datagrid::OrderUnsupported)
|
63
95
|
end
|
64
96
|
end
|
65
97
|
end
|
@@ -33,33 +33,65 @@ describe Datagrid::Drivers::Mongoid, :mongoid do
|
|
33
33
|
end
|
34
34
|
|
35
35
|
|
36
|
-
|
36
|
+
describe '#assets' do
|
37
|
+
subject { super().assets }
|
38
|
+
it {should include(first, second)}
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '#assets' do
|
42
|
+
subject { super().assets }
|
43
|
+
describe '#size' do
|
44
|
+
subject { super().size }
|
45
|
+
it {should == 2}
|
46
|
+
end
|
47
|
+
end
|
37
48
|
|
38
|
-
|
39
|
-
|
40
|
-
|
49
|
+
describe '#rows' do
|
50
|
+
subject { super().rows }
|
51
|
+
it {should == [["Main First", 2, false], ["Main Second", 3, true]]}
|
52
|
+
end
|
53
|
+
|
54
|
+
describe '#header' do
|
55
|
+
subject { super().header }
|
56
|
+
it {should ==[ "Name", "Group", "Disabled"]}
|
57
|
+
end
|
41
58
|
|
42
|
-
|
59
|
+
describe '#data' do
|
60
|
+
subject { super().data }
|
61
|
+
it {should == [[ "Name", "Group", "Disabled"], ["Main First", 2, false], ["Main Second", 3, true]]}
|
62
|
+
end
|
43
63
|
|
44
64
|
|
45
65
|
describe "when some filters specified" do
|
46
66
|
let(:_attributes) { {:from_group_id => 3} }
|
47
|
-
|
48
|
-
|
67
|
+
|
68
|
+
describe '#assets' do
|
69
|
+
subject { super().assets }
|
70
|
+
it {should_not include(first)}
|
71
|
+
end
|
72
|
+
|
73
|
+
describe '#assets' do
|
74
|
+
subject { super().assets }
|
75
|
+
it {should include(second)}
|
76
|
+
end
|
49
77
|
end
|
50
78
|
|
51
79
|
describe "when reverse ordering is specified" do
|
52
80
|
let(:_attributes) { {:order => :name, :descending => true} }
|
53
|
-
|
81
|
+
|
82
|
+
describe '#rows' do
|
83
|
+
subject { super().rows }
|
84
|
+
it {should == [["Main Second", 3, true], ["Main First", 2, false]]}
|
85
|
+
end
|
54
86
|
end
|
55
87
|
|
56
88
|
it "should not provide default order for non declared fields" do
|
57
|
-
|
89
|
+
expect {
|
58
90
|
test_report(:order => :test) do
|
59
91
|
scope { MongoidEntry }
|
60
92
|
column(:test)
|
61
93
|
end
|
62
|
-
}.
|
94
|
+
}.to raise_error(Datagrid::OrderUnsupported)
|
63
95
|
end
|
64
96
|
|
65
97
|
it "should support batch_size" do
|
@@ -69,7 +101,7 @@ describe Datagrid::Drivers::Mongoid, :mongoid do
|
|
69
101
|
column(:name)
|
70
102
|
end
|
71
103
|
|
72
|
-
report.data.
|
104
|
+
expect(report.data).to eq([["Name"], ["Main First"], ["Main Second"]])
|
73
105
|
end
|
74
106
|
end
|
75
107
|
end
|
@@ -13,23 +13,23 @@ describe Datagrid::Filters::CompositeFilters do
|
|
13
13
|
date_range_filters(:shipping_date)
|
14
14
|
end.assets
|
15
15
|
|
16
|
-
assets.
|
17
|
-
assets.
|
16
|
+
expect(assets).to include(e2)
|
17
|
+
expect(assets).not_to include(e1, e3)
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should support options" do
|
21
21
|
report = test_report do
|
22
22
|
report = date_range_filters(:shipping_date, {:default => 10.days.ago.to_date}, {:default => Date.today})
|
23
23
|
end
|
24
|
-
report.from_shipping_date.
|
25
|
-
report.to_shipping_date.
|
24
|
+
expect(report.from_shipping_date).to eq(10.days.ago.to_date)
|
25
|
+
expect(report.to_shipping_date).to eq(Date.today)
|
26
26
|
end
|
27
27
|
it "should support table name in field" do
|
28
28
|
report = test_report do
|
29
29
|
report = date_range_filters("entries.shipping_date", {:default => 10.days.ago.to_date}, {:default => Date.today})
|
30
30
|
end
|
31
|
-
report.from_entries_shipping_date.
|
32
|
-
report.to_entries_shipping_date.
|
31
|
+
expect(report.from_entries_shipping_date).to eq(10.days.ago.to_date)
|
32
|
+
expect(report.to_entries_shipping_date).to eq(Date.today)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
@@ -44,22 +44,22 @@ describe Datagrid::Filters::CompositeFilters do
|
|
44
44
|
integer_range_filters(:group_id)
|
45
45
|
end.assets
|
46
46
|
|
47
|
-
assets.
|
48
|
-
assets.
|
47
|
+
expect(assets).to include(e2)
|
48
|
+
expect(assets).not_to include(e1, e3)
|
49
49
|
end
|
50
50
|
it "should support options" do
|
51
51
|
report = test_report do
|
52
52
|
report = integer_range_filters(:group_id, {:default => 0}, {:default => 100})
|
53
53
|
end
|
54
|
-
report.from_group_id.
|
55
|
-
report.to_group_id.
|
54
|
+
expect(report.from_group_id).to eq(0)
|
55
|
+
expect(report.to_group_id).to eq(100)
|
56
56
|
end
|
57
57
|
it "should table name in field name" do
|
58
58
|
report = test_report do
|
59
59
|
report = integer_range_filters("entries.group_id", {:default => 0}, {:default => 100})
|
60
60
|
end
|
61
|
-
report.from_entries_group_id.
|
62
|
-
report.to_entries_group_id.
|
61
|
+
expect(report.from_entries_group_id).to eq(0)
|
62
|
+
expect(report.to_entries_group_id).to eq(100)
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
@@ -10,9 +10,9 @@ describe Datagrid::Filters::DateFilter do
|
|
10
10
|
scope { Entry }
|
11
11
|
filter(:created_at, :date)
|
12
12
|
end
|
13
|
-
report.assets.
|
14
|
-
report.assets.
|
15
|
-
report.assets.
|
13
|
+
expect(report.assets).not_to include(e1)
|
14
|
+
expect(report.assets).to include(e2)
|
15
|
+
expect(report.assets).not_to include(e3)
|
16
16
|
end
|
17
17
|
|
18
18
|
{:active_record => Entry, :mongoid => MongoidEntry}.each do |orm, klass|
|
@@ -60,9 +60,9 @@ describe Datagrid::Filters::DateFilter do
|
|
60
60
|
scope { Entry }
|
61
61
|
filter(:created_at, :date, :range => true)
|
62
62
|
end
|
63
|
-
report.assets.
|
64
|
-
report.assets.
|
65
|
-
report.assets.
|
63
|
+
expect(report.assets).not_to include(e1)
|
64
|
+
expect(report.assets).to include(e2)
|
65
|
+
expect(report.assets).not_to include(e3)
|
66
66
|
end
|
67
67
|
|
68
68
|
it "should support minimum date argument" do
|
@@ -73,9 +73,9 @@ describe Datagrid::Filters::DateFilter do
|
|
73
73
|
scope { Entry }
|
74
74
|
filter(:created_at, :date, :range => true)
|
75
75
|
end
|
76
|
-
report.assets.
|
77
|
-
report.assets.
|
78
|
-
report.assets.
|
76
|
+
expect(report.assets).not_to include(e1)
|
77
|
+
expect(report.assets).to include(e2)
|
78
|
+
expect(report.assets).to include(e3)
|
79
79
|
end
|
80
80
|
|
81
81
|
it "should support maximum date argument" do
|
@@ -86,9 +86,9 @@ describe Datagrid::Filters::DateFilter do
|
|
86
86
|
scope { Entry }
|
87
87
|
filter(:created_at, :date, :range => true)
|
88
88
|
end
|
89
|
-
report.assets.
|
90
|
-
report.assets.
|
91
|
-
report.assets.
|
89
|
+
expect(report.assets).to include(e1)
|
90
|
+
expect(report.assets).to include(e2)
|
91
|
+
expect(report.assets).not_to include(e3)
|
92
92
|
end
|
93
93
|
|
94
94
|
it "should find something in one day interval" do
|
@@ -100,9 +100,9 @@ describe Datagrid::Filters::DateFilter do
|
|
100
100
|
scope { Entry }
|
101
101
|
filter(:created_at, :date, :range => true)
|
102
102
|
end
|
103
|
-
report.assets.
|
104
|
-
report.assets.
|
105
|
-
report.assets.
|
103
|
+
expect(report.assets).not_to include(e1)
|
104
|
+
expect(report.assets).to include(e2)
|
105
|
+
expect(report.assets).not_to include(e3)
|
106
106
|
end
|
107
107
|
it "should support invalid range" do
|
108
108
|
|
@@ -113,9 +113,9 @@ describe Datagrid::Filters::DateFilter do
|
|
113
113
|
scope { Entry }
|
114
114
|
filter(:created_at, :date, :range => true)
|
115
115
|
end
|
116
|
-
report.assets.
|
117
|
-
report.assets.
|
118
|
-
report.assets.
|
116
|
+
expect(report.assets).not_to include(e1)
|
117
|
+
expect(report.assets).not_to include(e2)
|
118
|
+
expect(report.assets).not_to include(e3)
|
119
119
|
end
|
120
120
|
|
121
121
|
|
@@ -126,8 +126,8 @@ describe Datagrid::Filters::DateFilter do
|
|
126
126
|
where("created_at >= ?", value)
|
127
127
|
end
|
128
128
|
end
|
129
|
-
report.assets.
|
130
|
-
report.assets.
|
129
|
+
expect(report.assets).not_to include(Entry.create!(:created_at => 1.day.ago))
|
130
|
+
expect(report.assets).to include(Entry.create!(:created_at => DateTime.now))
|
131
131
|
end
|
132
132
|
|
133
133
|
|
@@ -143,7 +143,7 @@ describe Datagrid::Filters::DateFilter do
|
|
143
143
|
scope {Entry}
|
144
144
|
filter(:created_at, :date)
|
145
145
|
end
|
146
|
-
report.created_at.
|
146
|
+
expect(report.created_at).to eq(Date.new(2013,10,01))
|
147
147
|
end
|
148
148
|
|
149
149
|
it "should support default explicit date" do
|
@@ -151,7 +151,7 @@ describe Datagrid::Filters::DateFilter do
|
|
151
151
|
scope {Entry}
|
152
152
|
filter(:created_at, :date)
|
153
153
|
end
|
154
|
-
report.created_at.
|
154
|
+
expect(report.created_at).to eq(Date.new(2013,10,01))
|
155
155
|
end
|
156
156
|
end
|
157
157
|
|
@@ -161,14 +161,14 @@ describe Datagrid::Filters::DateFilter do
|
|
161
161
|
scope {Entry}
|
162
162
|
filter(:created_at, :date, :range => true)
|
163
163
|
end
|
164
|
-
report.created_at.
|
164
|
+
expect(report.created_at).to eq([Date.new(2012, 01, 01), Date.new(2013, 01, 01)])
|
165
165
|
end
|
166
166
|
it "should automatically reverse Array if first more than last" do
|
167
167
|
report = test_report(:created_at => ["2013-01-01", "2012-01-01"]) do
|
168
168
|
scope {Entry}
|
169
169
|
filter(:created_at, :date, :range => true)
|
170
170
|
end
|
171
|
-
report.created_at.
|
171
|
+
expect(report.created_at).to eq([Date.new(2012, 01, 01), Date.new(2013, 01, 01)])
|
172
172
|
end
|
173
173
|
|
174
174
|
it "should properly format date in filter_value_as_string" do
|
@@ -177,7 +177,7 @@ describe Datagrid::Filters::DateFilter do
|
|
177
177
|
scope {Entry}
|
178
178
|
filter(:created_at, :date)
|
179
179
|
end
|
180
|
-
report.filter_value_as_string(:created_at).
|
180
|
+
expect(report.filter_value_as_string(:created_at)).to eq("01/02/2012")
|
181
181
|
end
|
182
182
|
end
|
183
183
|
|