datagrid 1.2.0 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8352c27cddb180b596755bfed2473efec0f3623b
|
4
|
+
data.tar.gz: 8f92c23740b35d281c71928e447a1d42d67b8270
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 57916c7c0bfc053923738af1b61db8b617a1088c193d58e5908286da2a190f5f1b0d7e926c068cb157cc16f791c7e33ccb8333fe8c938028cada3634efa6b993
|
7
|
+
data.tar.gz: 00327aa061682b9f47178ca95650e36506a7e51d67bb37966f81c40ba885136d3fbc83f02656e9020701129f6323cde72d120e1756cb42d560b89f9ecafd4356
|
data/Gemfile
CHANGED
@@ -15,12 +15,14 @@ group :development do
|
|
15
15
|
gem "rspec"
|
16
16
|
gem "nokogiri" # used to test html output
|
17
17
|
|
18
|
-
gem "sqlite3
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
18
|
+
gem "sqlite3"
|
19
|
+
|
20
|
+
group :mongo do
|
21
|
+
gem "mongoid", "2.2.2"
|
22
|
+
gem "mongo_mapper", ">=0.11.0"
|
23
|
+
gem "bson", "1.4.0"
|
24
|
+
gem "bson_ext", "1.4.0"
|
25
|
+
end
|
24
26
|
|
25
27
|
gem "fastercsv", :platform => "mri_18"
|
26
28
|
end
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.2.
|
1
|
+
1.2.1
|
@@ -7,6 +7,8 @@
|
|
7
7
|
<% end %>
|
8
8
|
<div class="datagrid-actions">
|
9
9
|
<%= f.submit I18n.t("datagrid.form.search").html_safe, :class => "datagrid-submit" %>
|
10
|
-
|
10
|
+
<%# https://github.com/rails/rails/pull/14949 -%>
|
11
|
+
<% empty_parameter = Rails.version >= "4.1.0" && Rails.version <= '4.1.2' ? nil : {}-%>
|
12
|
+
<%= link_to I18n.t('datagrid.form.reset').html_safe, url_for(grid.to_param => empty_parameter), :class => "datagrid-reset" %>
|
11
13
|
</div>
|
12
14
|
<% end -%>
|
data/datagrid.gemspec
CHANGED
@@ -2,16 +2,16 @@
|
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
3
|
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
|
-
# stub: datagrid 1.2.
|
5
|
+
# stub: datagrid 1.2.1 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "datagrid"
|
9
|
-
s.version = "1.2.
|
9
|
+
s.version = "1.2.1"
|
10
10
|
|
11
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
12
|
s.require_paths = ["lib"]
|
13
13
|
s.authors = ["Bogdan Gusiev"]
|
14
|
-
s.date = "2014-05-
|
14
|
+
s.date = "2014-05-19"
|
15
15
|
s.description = "This allows you to easily build datagrid aka data tables with sortable columns and filters"
|
16
16
|
s.email = "agresso@gmail.com"
|
17
17
|
s.extra_rdoc_files = [
|
@@ -132,7 +132,7 @@ Gem::Specification.new do |s|
|
|
132
132
|
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
133
133
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
134
134
|
s.add_development_dependency(%q<nokogiri>, [">= 0"])
|
135
|
-
s.add_development_dependency(%q<sqlite3
|
135
|
+
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
136
136
|
s.add_development_dependency(%q<mongoid>, ["= 2.2.2"])
|
137
137
|
s.add_development_dependency(%q<mongo_mapper>, [">= 0.11.0"])
|
138
138
|
s.add_development_dependency(%q<bson>, ["= 1.4.0"])
|
@@ -147,7 +147,7 @@ Gem::Specification.new do |s|
|
|
147
147
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
148
148
|
s.add_dependency(%q<rspec>, [">= 0"])
|
149
149
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
150
|
-
s.add_dependency(%q<sqlite3
|
150
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
151
151
|
s.add_dependency(%q<mongoid>, ["= 2.2.2"])
|
152
152
|
s.add_dependency(%q<mongo_mapper>, [">= 0.11.0"])
|
153
153
|
s.add_dependency(%q<bson>, ["= 1.4.0"])
|
@@ -163,7 +163,7 @@ Gem::Specification.new do |s|
|
|
163
163
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
164
164
|
s.add_dependency(%q<rspec>, [">= 0"])
|
165
165
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
166
|
-
s.add_dependency(%q<sqlite3
|
166
|
+
s.add_dependency(%q<sqlite3>, [">= 0"])
|
167
167
|
s.add_dependency(%q<mongoid>, ["= 2.2.2"])
|
168
168
|
s.add_dependency(%q<mongo_mapper>, [">= 0.11.0"])
|
169
169
|
s.add_dependency(%q<bson>, ["= 1.4.0"])
|
data/lib/datagrid.rb
CHANGED
data/lib/datagrid/columns.rb
CHANGED
@@ -217,6 +217,7 @@ module Datagrid
|
|
217
217
|
end
|
218
218
|
|
219
219
|
def find_column_by_name(columns,name) #:nodoc:
|
220
|
+
return name if name.is_a?(Datagrid::Columns::Column)
|
220
221
|
columns.find do |col|
|
221
222
|
col.name.to_sym == name.to_sym
|
222
223
|
end
|
@@ -246,7 +247,7 @@ module Datagrid
|
|
246
247
|
# * <tt>column_names</tt> - list of column names if you want to limit data only to specified columns
|
247
248
|
def row_for(asset, *column_names)
|
248
249
|
data_columns(*column_names).map do |column|
|
249
|
-
|
250
|
+
data_value(column, asset)
|
250
251
|
end
|
251
252
|
end
|
252
253
|
|
@@ -254,7 +255,7 @@ module Datagrid
|
|
254
255
|
def hash_for(asset)
|
255
256
|
result = {}
|
256
257
|
self.data_columns.each do |column|
|
257
|
-
result[column.name] =
|
258
|
+
result[column.name] = data_value(column, asset)
|
258
259
|
end
|
259
260
|
result
|
260
261
|
end
|
@@ -436,6 +437,16 @@ module Datagrid
|
|
436
437
|
end
|
437
438
|
end
|
438
439
|
|
440
|
+
# Return a cell data value for given column name and asset
|
441
|
+
def data_value(column_name, asset)
|
442
|
+
column_by_name(column_name).data_value(asset, self)
|
443
|
+
end
|
444
|
+
|
445
|
+
# Return a cell HTML value for given column name and asset and view context
|
446
|
+
def html_value(column_name, context, asset)
|
447
|
+
column_by_name(column_name).html_value(context, asset, self)
|
448
|
+
end
|
449
|
+
|
439
450
|
protected
|
440
451
|
|
441
452
|
def map_with_batches(&block)
|
@@ -474,11 +485,7 @@ module Datagrid
|
|
474
485
|
end
|
475
486
|
|
476
487
|
def method_missing(meth, *args, &blk)
|
477
|
-
|
478
|
-
column.data_value(@model, @grid)
|
479
|
-
else
|
480
|
-
super
|
481
|
-
end
|
488
|
+
@grid.data_value(meth, @model)
|
482
489
|
end
|
483
490
|
end
|
484
491
|
end
|
@@ -16,11 +16,11 @@ class Datagrid::Columns::Column
|
|
16
16
|
self.html_block = block
|
17
17
|
end
|
18
18
|
|
19
|
-
def
|
19
|
+
def call_data
|
20
20
|
data_block.call
|
21
21
|
end
|
22
22
|
|
23
|
-
def
|
23
|
+
def call_html(context)
|
24
24
|
context.instance_eval(&html_block)
|
25
25
|
end
|
26
26
|
end
|
@@ -48,7 +48,7 @@ class Datagrid::Columns::Column
|
|
48
48
|
def data_value(model, grid)
|
49
49
|
raise "no data value for #{name} column" unless data?
|
50
50
|
result = generic_value(model,grid)
|
51
|
-
result.is_a?(ResponseFormat) ? result.
|
51
|
+
result.is_a?(ResponseFormat) ? result.call_data : result
|
52
52
|
end
|
53
53
|
|
54
54
|
|
@@ -119,7 +119,7 @@ class Datagrid::Columns::Column
|
|
119
119
|
value_from_html_block(context, asset, grid)
|
120
120
|
else
|
121
121
|
result = generic_value(asset,grid)
|
122
|
-
result.is_a?(ResponseFormat) ? result.
|
122
|
+
result.is_a?(ResponseFormat) ? result.call_html(context) : result
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
@@ -144,6 +144,9 @@ class Datagrid::Columns::Column
|
|
144
144
|
end
|
145
145
|
|
146
146
|
def generic_value(model, grid)
|
147
|
+
unless enabled?(grid)
|
148
|
+
raise Datagrid::ColumnUnavailableError, "Column #{name} disabled for #{grid.inspect}"
|
149
|
+
end
|
147
150
|
if self.data_block.arity >= 1
|
148
151
|
Datagrid::Utils.apply_args(model, grid, grid.data_row(model), &data_block)
|
149
152
|
else
|
data/lib/datagrid/renderer.rb
CHANGED
@@ -14,19 +14,19 @@ describe Datagrid::ActiveModel do
|
|
14
14
|
|
15
15
|
describe ".model_name" do
|
16
16
|
it "should be generate from class name " do
|
17
|
-
ActiveReport.model_name.
|
17
|
+
expect(ActiveReport.model_name).to eq("ActiveReport")
|
18
18
|
end
|
19
19
|
it "should have ActiveModel naming conventions" do
|
20
|
-
ActiveReport.model_name.i18n_key.
|
20
|
+
expect(ActiveReport.model_name.i18n_key).to eq(:active_report)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
describe ".param_name" do
|
25
25
|
it "should make right param key from simple class name" do
|
26
|
-
ActiveReport.param_name.
|
26
|
+
expect(ActiveReport.param_name).to eq('active_report')
|
27
27
|
end
|
28
28
|
it "should make right param key from class of module" do
|
29
|
-
Grid::ActiveReport.param_name.
|
29
|
+
expect(Grid::ActiveReport.param_name).to eq('grid_active_report')
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -25,24 +25,24 @@ describe Datagrid::ColumnNamesAttribute do
|
|
25
25
|
|
26
26
|
it "should work" do
|
27
27
|
subject.column_names = [:id]
|
28
|
-
subject.mandatory_columns.map(&:name).
|
29
|
-
subject.optional_columns.map(&:name).
|
30
|
-
subject.data.
|
28
|
+
expect(subject.mandatory_columns.map(&:name)).to eq([:name])
|
29
|
+
expect(subject.optional_columns.map(&:name)).to eq([:id, :category])
|
30
|
+
expect(subject.data).to eq([["Id", "Name"], [entry.id, "hello"]])
|
31
31
|
columns_filter = subject.filter_by_name(:column_names)
|
32
|
-
columns_filter.
|
33
|
-
columns_filter.select(subject).
|
32
|
+
expect(columns_filter).not_to be_nil
|
33
|
+
expect(columns_filter.select(subject)).to eq([["Id", :id], ["Category", :category]])
|
34
34
|
end
|
35
35
|
|
36
36
|
it "should show only mandatory columns by default" do
|
37
|
-
subject.row_for(entry).
|
37
|
+
expect(subject.row_for(entry)).to eq([ "hello" ])
|
38
38
|
subject.column_names = ["name", "category"]
|
39
|
-
subject.row_for(entry).
|
39
|
+
expect(subject.row_for(entry)).to eq(["hello", "greeting"])
|
40
40
|
end
|
41
41
|
|
42
42
|
it "should find any column by name" do
|
43
|
-
subject.column_by_name(:id).
|
44
|
-
subject.column_by_name(:name).
|
45
|
-
subject.column_by_name(:category).
|
43
|
+
expect(subject.column_by_name(:id)).not_to be_nil
|
44
|
+
expect(subject.column_by_name(:name)).not_to be_nil
|
45
|
+
expect(subject.column_by_name(:category)).not_to be_nil
|
46
46
|
end
|
47
47
|
|
48
48
|
|
@@ -50,7 +50,11 @@ describe Datagrid::ColumnNamesAttribute do
|
|
50
50
|
let(:column_names_filter_options) do
|
51
51
|
{ :default => [:id] }
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
|
+
describe '#data' do
|
55
|
+
subject { super().data }
|
56
|
+
it { should == [["Id", "Name"], [entry.id, 'hello']] }
|
57
|
+
end
|
54
58
|
|
55
59
|
end
|
56
60
|
end
|
@@ -23,13 +23,13 @@ describe Datagrid::Columns do
|
|
23
23
|
let(:date) { Date.new(2013, 8, 1) }
|
24
24
|
|
25
25
|
it "should have data columns without html columns" do
|
26
|
-
subject.data_columns.size.
|
26
|
+
expect(subject.data_columns.size).to eq(subject.columns.size - 1)
|
27
27
|
end
|
28
28
|
it "should build rows of data" do
|
29
|
-
subject.rows.
|
29
|
+
expect(subject.rows).to eq([[date, "Pop", "Star", "admin", "ROTTWEILER"]])
|
30
30
|
end
|
31
31
|
it "should generate header" do
|
32
|
-
subject.header.
|
32
|
+
expect(subject.header).to eq(["Shipping date", "Group", "Name", "Access level", "Pet"])
|
33
33
|
end
|
34
34
|
|
35
35
|
it "should return html_columns" do
|
@@ -38,7 +38,7 @@ describe Datagrid::Columns do
|
|
38
38
|
column(:id)
|
39
39
|
column(:name, :html => false)
|
40
40
|
end
|
41
|
-
report.html_columns.map(&:name).
|
41
|
+
expect(report.html_columns.map(&:name)).to eq([:id])
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should return html_columns when column definition has 2 arguments" do
|
@@ -51,36 +51,36 @@ describe Datagrid::Columns do
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
entry = Entry.create!(:name => "Hello World")
|
54
|
-
report.row_for(entry).
|
54
|
+
expect(report.row_for(entry)).to eq([entry.id, "'Hello World' filtered by 'Hello'"])
|
55
55
|
end
|
56
56
|
|
57
57
|
it "should generate table data" do
|
58
|
-
subject.data.
|
58
|
+
expect(subject.data).to eq([
|
59
59
|
subject.header,
|
60
60
|
subject.row_for(entry)
|
61
|
-
]
|
61
|
+
])
|
62
62
|
end
|
63
63
|
|
64
64
|
it "should generate hash for given asset" do
|
65
|
-
subject.hash_for(entry).
|
65
|
+
expect(subject.hash_for(entry)).to eq({
|
66
66
|
:group => "Pop",
|
67
67
|
:name => "Star",
|
68
68
|
:access_level => 'admin',
|
69
69
|
:pet => 'ROTTWEILER',
|
70
70
|
:shipping_date => date
|
71
|
-
}
|
71
|
+
})
|
72
72
|
end
|
73
73
|
|
74
74
|
it "should support csv export" do
|
75
|
-
subject.to_csv.
|
75
|
+
expect(subject.to_csv).to eq("Shipping date,Group,Name,Access level,Pet\n#{date},Pop,Star,admin,ROTTWEILER\n")
|
76
76
|
end
|
77
77
|
|
78
78
|
it "should support csv export of particular columns" do
|
79
|
-
subject.to_csv(:name).
|
79
|
+
expect(subject.to_csv(:name)).to eq("Name\nStar\n")
|
80
80
|
end
|
81
81
|
|
82
82
|
it "should support csv export options" do
|
83
|
-
subject.to_csv(:col_sep => ";").
|
83
|
+
expect(subject.to_csv(:col_sep => ";")).to eq("Shipping date;Group;Name;Access level;Pet\n#{date};Pop;Star;admin;ROTTWEILER\n")
|
84
84
|
end
|
85
85
|
|
86
86
|
end
|
@@ -98,8 +98,8 @@ describe Datagrid::Columns do
|
|
98
98
|
end
|
99
99
|
Entry.create!(:category => "foo")
|
100
100
|
Entry.create!(:category => "foobar")
|
101
|
-
report.rows.first.first.
|
102
|
-
report.rows.last.first.
|
101
|
+
expect(report.rows.first.first).to be_true
|
102
|
+
expect(report.rows.last.first).to be_false
|
103
103
|
end
|
104
104
|
|
105
105
|
it "should inherit columns correctly" do
|
@@ -112,10 +112,10 @@ describe Datagrid::Columns do
|
|
112
112
|
child = Class.new(parent) do
|
113
113
|
column(:group_id)
|
114
114
|
end
|
115
|
-
parent.column_by_name(:name).
|
116
|
-
parent.column_by_name(:group_id).
|
117
|
-
child.column_by_name(:name).
|
118
|
-
child.column_by_name(:group_id).
|
115
|
+
expect(parent.column_by_name(:name)).not_to be_nil
|
116
|
+
expect(parent.column_by_name(:group_id)).to be_nil
|
117
|
+
expect(child.column_by_name(:name)).not_to be_nil
|
118
|
+
expect(child.column_by_name(:group_id)).not_to be_nil
|
119
119
|
end
|
120
120
|
it "should support defining a query for a column" do
|
121
121
|
report = test_report do
|
@@ -125,7 +125,7 @@ describe Datagrid::Columns do
|
|
125
125
|
column(:sum_group_id, 'sum(group_id)')
|
126
126
|
end
|
127
127
|
Entry.create!(:group => group)
|
128
|
-
report.assets.first.sum_group_id.
|
128
|
+
expect(report.assets.first.sum_group_id).to eq(group.id)
|
129
129
|
end
|
130
130
|
|
131
131
|
it "should support post formatting for column defined with query" do
|
@@ -139,7 +139,7 @@ describe Datagrid::Columns do
|
|
139
139
|
end
|
140
140
|
end
|
141
141
|
3.times { Entry.create!(group: group) }
|
142
|
-
report.rows.
|
142
|
+
expect(report.rows).to eq([["(3)"]])
|
143
143
|
end
|
144
144
|
it "should support hidding columns through if and unless" do
|
145
145
|
report = test_report do
|
@@ -152,9 +152,9 @@ describe Datagrid::Columns do
|
|
152
152
|
false
|
153
153
|
end
|
154
154
|
end
|
155
|
-
report.columns(:id).
|
156
|
-
report.columns(:name).
|
157
|
-
report.available_columns.map(&:name).
|
155
|
+
expect(report.columns(:id)).to eq([])
|
156
|
+
expect(report.columns(:name)).to eq([])
|
157
|
+
expect(report.available_columns.map(&:name)).to eq([:category])
|
158
158
|
end
|
159
159
|
|
160
160
|
describe ".column_names attributes" do
|
@@ -170,18 +170,18 @@ describe Datagrid::Columns do
|
|
170
170
|
Entry.create!(:name => 'hello')
|
171
171
|
end
|
172
172
|
it "should be suppored in header" do
|
173
|
-
grid.header.
|
173
|
+
expect(grid.header).to eq(["Id", "Name"])
|
174
174
|
end
|
175
175
|
it "should be suppored in rows" do
|
176
|
-
grid.rows.
|
176
|
+
expect(grid.rows).to eq([[entry.id, "hello"]])
|
177
177
|
end
|
178
178
|
|
179
179
|
it "should be suppored in csv" do
|
180
|
-
grid.to_csv.
|
180
|
+
expect(grid.to_csv).to eq("Id,Name\n#{entry.id},hello\n")
|
181
181
|
end
|
182
182
|
|
183
183
|
it "should support explicit overwrite" do
|
184
|
-
grid.header(:id, :name, :category).
|
184
|
+
expect(grid.header(:id, :name, :category)).to eq(%w(Id Name Category))
|
185
185
|
end
|
186
186
|
|
187
187
|
end
|
@@ -198,7 +198,7 @@ describe Datagrid::Columns do
|
|
198
198
|
end
|
199
199
|
end
|
200
200
|
Entry.create!(:name => "Hello World")
|
201
|
-
report.rows.
|
201
|
+
expect(report.rows).to eq([["Hello World"]])
|
202
202
|
end
|
203
203
|
end
|
204
204
|
|
@@ -212,9 +212,9 @@ describe Datagrid::Columns do
|
|
212
212
|
end
|
213
213
|
first = Entry.create(:name => '1st')
|
214
214
|
second = Entry.create(:name => '2nd')
|
215
|
-
|
215
|
+
expect { report.attributes = {:order => :id} }.to raise_error(Datagrid::OrderUnsupported)
|
216
216
|
report.attributes = {:order => :name, :descending => true}
|
217
|
-
report.assets.
|
217
|
+
expect(report.assets).to eq([second, first])
|
218
218
|
end
|
219
219
|
end
|
220
220
|
|
@@ -227,8 +227,8 @@ describe Datagrid::Columns do
|
|
227
227
|
end
|
228
228
|
|
229
229
|
fake_assets = double(:assets)
|
230
|
-
report.
|
231
|
-
fake_assets.
|
230
|
+
expect(report).to receive(:assets) { fake_assets }
|
231
|
+
expect(fake_assets).to receive(:find_each).with(batch_size: 25)
|
232
232
|
report.rows
|
233
233
|
end
|
234
234
|
it "should be able to disable batches" do
|
@@ -240,9 +240,9 @@ describe Datagrid::Columns do
|
|
240
240
|
|
241
241
|
fake_assets = double(:assets)
|
242
242
|
|
243
|
-
report.
|
244
|
-
fake_assets.
|
245
|
-
fake_assets.
|
243
|
+
expect(report).to receive(:assets) { fake_assets }
|
244
|
+
expect(fake_assets).to receive(:each)
|
245
|
+
expect(fake_assets).not_to receive(:find_each)
|
246
246
|
report.rows
|
247
247
|
end
|
248
248
|
|
@@ -255,9 +255,9 @@ describe Datagrid::Columns do
|
|
255
255
|
grid.batch_size = 0
|
256
256
|
fake_assets = double(:assets)
|
257
257
|
|
258
|
-
grid.
|
259
|
-
fake_assets.
|
260
|
-
fake_assets.
|
258
|
+
expect(grid).to receive(:assets) { fake_assets }
|
259
|
+
expect(fake_assets).to receive(:each)
|
260
|
+
expect(fake_assets).not_to receive(:find_each)
|
261
261
|
grid.rows
|
262
262
|
end
|
263
263
|
end
|
@@ -276,11 +276,11 @@ describe Datagrid::Columns do
|
|
276
276
|
end
|
277
277
|
entry = Entry.create!(name: 'hello')
|
278
278
|
row = grid.data_row(entry)
|
279
|
-
row.id.
|
280
|
-
row.name.
|
281
|
-
|
279
|
+
expect(row.id).to eq(entry.id)
|
280
|
+
expect(row.name).to eq("Hello")
|
281
|
+
expect {
|
282
282
|
row.actions
|
283
|
-
}.
|
283
|
+
}.to raise_error
|
284
284
|
end
|
285
285
|
end
|
286
286
|
|
@@ -299,7 +299,7 @@ describe Datagrid::Columns do
|
|
299
299
|
end
|
300
300
|
end
|
301
301
|
|
302
|
-
grid.row_for(group).
|
302
|
+
expect(grid.row_for(group)).to eq([2, false])
|
303
303
|
end
|
304
304
|
end
|
305
305
|
|
@@ -317,55 +317,55 @@ describe Datagrid::Columns do
|
|
317
317
|
let!(:entry) { Entry.create!(:name => "Hello", :category => 'first') }
|
318
318
|
|
319
319
|
it "should have correct columns" do
|
320
|
-
modified_grid.columns.size.
|
321
|
-
basic_grid.class.columns.size.
|
322
|
-
basic_grid.columns.size.
|
320
|
+
expect(modified_grid.columns.size).to eq(2)
|
321
|
+
expect(basic_grid.class.columns.size).to eq(1)
|
322
|
+
expect(basic_grid.columns.size).to eq(1)
|
323
323
|
end
|
324
324
|
|
325
325
|
it "should give correct header" do
|
326
|
-
modified_grid.header.
|
327
|
-
basic_grid.header.
|
326
|
+
expect(modified_grid.header).to eq(["Id", "Name"])
|
327
|
+
expect(basic_grid.header).to eq(["Id"])
|
328
328
|
end
|
329
329
|
|
330
330
|
it "should give correct rows" do
|
331
|
-
modified_grid.rows.
|
332
|
-
basic_grid.rows.
|
331
|
+
expect(modified_grid.rows).to eq([[entry.id, 'Hello']])
|
332
|
+
expect(basic_grid.rows).to eq([[entry.id]])
|
333
333
|
end
|
334
334
|
|
335
335
|
it "should support possitioning" do
|
336
336
|
modified_grid.column(:category, :before => :name)
|
337
|
-
modified_grid.header.
|
337
|
+
expect(modified_grid.header).to eq(["Id", "Category", "Name"])
|
338
338
|
end
|
339
339
|
|
340
340
|
it "should support columns block" do
|
341
341
|
modified_grid.column(:category) do
|
342
342
|
category.capitalize
|
343
343
|
end
|
344
|
-
modified_grid.rows.
|
344
|
+
expect(modified_grid.rows).to eq([[entry.id, "Hello", 'First']])
|
345
345
|
end
|
346
346
|
|
347
347
|
it "should support column_names accessor" do
|
348
348
|
modified_grid.column_names = [:name]
|
349
|
-
modified_grid.rows.
|
349
|
+
expect(modified_grid.rows).to eq([['Hello']])
|
350
350
|
modified_grid.column_names = [:id]
|
351
|
-
modified_grid.rows.
|
351
|
+
expect(modified_grid.rows).to eq([[entry.id]])
|
352
352
|
end
|
353
353
|
it "should support column_names accessor with mandatory columns" do
|
354
354
|
modified_grid.column(:category, :mandatory => true)
|
355
355
|
modified_grid.column_names = [:name]
|
356
|
-
modified_grid.rows.
|
356
|
+
expect(modified_grid.rows).to eq([['Hello', 'first']])
|
357
357
|
basic_grid.column_names = [:id]
|
358
|
-
basic_grid.rows.
|
358
|
+
expect(basic_grid.rows).to eq([[entry.id]])
|
359
359
|
end
|
360
360
|
|
361
361
|
it "should support available columns" do
|
362
362
|
modified_grid.column(:category, :mandatory => true)
|
363
|
-
modified_grid.available_columns.map(&:name).
|
363
|
+
expect(modified_grid.available_columns.map(&:name)).to eq([:id, :name, :category])
|
364
364
|
end
|
365
365
|
|
366
366
|
it "should respect column availability criteria" do
|
367
367
|
modified_grid.column(:category, :if => proc { false })
|
368
|
-
modified_grid.columns.map(&:name).
|
368
|
+
expect(modified_grid.columns.map(&:name)).to eq([:id, :name])
|
369
369
|
end
|
370
370
|
end
|
371
371
|
|
@@ -380,12 +380,30 @@ describe Datagrid::Columns do
|
|
380
380
|
}
|
381
381
|
end
|
382
382
|
|
383
|
-
grid.columns.map(&:name).
|
384
|
-
grid.class.columns.map(&:name).
|
383
|
+
expect(grid.columns.map(&:name)).to eq([:id, :name, :category])
|
384
|
+
expect(grid.class.columns.map(&:name)).to eq([:id])
|
385
385
|
|
386
|
-
grid.column_by_name(:id).
|
387
|
-
grid.column_by_name(:name).
|
386
|
+
expect(grid.column_by_name(:id)).not_to be_nil
|
387
|
+
expect(grid.column_by_name(:name)).not_to be_nil
|
388
388
|
end
|
389
389
|
end
|
390
390
|
|
391
|
+
describe ".data_value" do
|
392
|
+
it "should return value" do
|
393
|
+
grid = test_report do
|
394
|
+
scope {Entry }
|
395
|
+
column(:name)
|
396
|
+
end
|
397
|
+
expect(grid.data_value(:name, Entry.create!(:name => 'Hello'))).to eq('Hello')
|
398
|
+
end
|
399
|
+
it "should raise for disabled columns" do
|
400
|
+
grid = test_report do
|
401
|
+
scope {Entry }
|
402
|
+
column(:name, :if => proc { false })
|
403
|
+
end
|
404
|
+
expect {
|
405
|
+
grid.data_value(:name, Entry.create!(:name => 'Hello'))
|
406
|
+
}.to raise_error(Datagrid::ColumnUnavailableError)
|
407
|
+
end
|
408
|
+
end
|
391
409
|
end
|