datagrid 1.4.4 → 1.5.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.
- checksums.yaml +4 -4
- data/.travis.yml +0 -1
- data/Gemfile +2 -2
- data/Rakefile +1 -0
- data/Readme.markdown +6 -0
- data/VERSION +1 -1
- data/datagrid.gemspec +92 -52
- data/lib/datagrid/columns.rb +18 -3
- data/lib/datagrid/columns/column.rb +27 -13
- data/lib/datagrid/core.rb +11 -2
- data/lib/datagrid/drivers/abstract_driver.rb +8 -0
- data/lib/datagrid/drivers/active_record.rb +8 -0
- data/lib/datagrid/drivers/array.rb +5 -1
- data/lib/datagrid/drivers/mongo_mapper.rb +8 -0
- data/lib/datagrid/drivers/mongoid.rb +9 -0
- data/lib/datagrid/drivers/sequel.rb +9 -0
- data/lib/datagrid/filters.rb +44 -8
- data/lib/datagrid/filters/base_filter.rb +11 -2
- data/lib/datagrid/filters/ranged_filter.rb +4 -2
- data/lib/datagrid/helper.rb +27 -4
- data/lib/datagrid/ordering.rb +5 -5
- data/lib/datagrid/renderer.rb +8 -4
- data/lib/datagrid/utils.rb +18 -0
- data/spec/datagrid/columns_spec.rb +45 -0
- data/spec/datagrid/core_spec.rb +23 -1
- data/spec/datagrid/filters/date_filter_spec.rb +9 -0
- data/spec/datagrid/filters/dynamic_filter_spec.rb +27 -1
- data/spec/datagrid/filters_spec.rb +49 -19
- data/spec/datagrid/helper_spec.rb +19 -0
- metadata +187 -5
@@ -171,6 +171,15 @@ describe Datagrid::Filters::DateFilter do
|
|
171
171
|
expect(report.created_at).to eq([Date.new(2012, 01, 01), Date.new(2013, 01, 01)])
|
172
172
|
end
|
173
173
|
|
174
|
+
it "should nullify blank range" do
|
175
|
+
report = test_report(:created_at => [nil, nil]) do
|
176
|
+
scope {Entry}
|
177
|
+
filter(:created_at, :date, :range => true)
|
178
|
+
end
|
179
|
+
|
180
|
+
expect(report.created_at).to eq(nil)
|
181
|
+
end
|
182
|
+
|
174
183
|
it "should properly format date in filter_value_as_string" do
|
175
184
|
with_date_format do
|
176
185
|
report = test_report(:created_at => "2012-01-02") do
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require "spec_helper"
|
1
|
+
require "spec_helper"
|
2
2
|
|
3
3
|
|
4
4
|
describe Datagrid::Filters::DynamicFilter do
|
@@ -139,6 +139,32 @@ describe Datagrid::Filters::DynamicFilter do
|
|
139
139
|
expect(grid.assets).to_not include(Entry.create!(disabled: false, group_id: 2))
|
140
140
|
end
|
141
141
|
|
142
|
+
it "should support custom operations" do
|
143
|
+
entry = Entry.create!(name: 'hello')
|
144
|
+
|
145
|
+
grid = test_report do
|
146
|
+
scope {Entry}
|
147
|
+
filter(
|
148
|
+
:condition, :dynamic, operations: ["=", "!="]
|
149
|
+
) do |(field, operation, value), scope|
|
150
|
+
if operation == "!="
|
151
|
+
scope.where("#{field} != ?", value)
|
152
|
+
else
|
153
|
+
default_filter
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
grid.condition = ["name", "=", "hello"]
|
159
|
+
expect(grid.assets).to include(entry)
|
160
|
+
grid.condition = ["name", "!=", "hello"]
|
161
|
+
expect(grid.assets).to_not include(entry)
|
162
|
+
grid.condition = ["name", "=", "hello1"]
|
163
|
+
expect(grid.assets).to_not include(entry)
|
164
|
+
grid.condition = ["name", "!=", "hello1"]
|
165
|
+
expect(grid.assets).to include(entry)
|
166
|
+
end
|
167
|
+
|
142
168
|
it "should raise if unknown operation" do
|
143
169
|
report.condition = [:shipping_date, "<>", '1996-08-05']
|
144
170
|
expect{
|
@@ -112,7 +112,7 @@ describe Datagrid::Filters do
|
|
112
112
|
end
|
113
113
|
expect(grid.assets.to_a.size).to eq(1)
|
114
114
|
end
|
115
|
-
|
115
|
+
|
116
116
|
end
|
117
117
|
describe "default filter as scope" do
|
118
118
|
it "should create default filter if scope respond to filter name method" do
|
@@ -176,23 +176,6 @@ describe Datagrid::Filters do
|
|
176
176
|
end
|
177
177
|
end
|
178
178
|
|
179
|
-
it "should support instance filter rejection" do
|
180
|
-
grid = test_report(:name => 'hello') do
|
181
|
-
scope { Entry }
|
182
|
-
filter(:id)
|
183
|
-
filter(:name)
|
184
|
-
end
|
185
|
-
|
186
|
-
Entry.create!(:name => 'hello1')
|
187
|
-
expect(grid.assets).to be_empty
|
188
|
-
grid.filters.reject! {|f| f.name == :name }
|
189
|
-
expect(grid.filters.map(&:name)).to eq([:id])
|
190
|
-
expect(grid.assets).to_not be_empty
|
191
|
-
expect(grid.class.filters.map(&:name)).to eq([:id, :name])
|
192
|
-
|
193
|
-
end
|
194
|
-
|
195
|
-
|
196
179
|
it "supports dynamic header" do
|
197
180
|
grid = test_report do
|
198
181
|
scope {Entry}
|
@@ -217,7 +200,7 @@ describe Datagrid::Filters do
|
|
217
200
|
end
|
218
201
|
|
219
202
|
describe "tranlations" do
|
220
|
-
|
203
|
+
|
221
204
|
module ::Ns46
|
222
205
|
class TranslatedReport
|
223
206
|
include Datagrid
|
@@ -263,4 +246,51 @@ describe Datagrid::Filters do
|
|
263
246
|
}.to raise_error(Datagrid::ArgumentError)
|
264
247
|
end
|
265
248
|
end
|
249
|
+
|
250
|
+
describe "#inspect" do
|
251
|
+
it "should list all fitlers with types" do
|
252
|
+
|
253
|
+
module ::NsInspect
|
254
|
+
class TestGrid
|
255
|
+
include Datagrid
|
256
|
+
scope {Entry}
|
257
|
+
filter(:id, :integer)
|
258
|
+
filter(:name, :string)
|
259
|
+
filter(:current_user)
|
260
|
+
end
|
261
|
+
end
|
262
|
+
|
263
|
+
expect(NsInspect::TestGrid.inspect).to eq(
|
264
|
+
"NsInspect::TestGrid(id: integer, name: string, current_user: default)"
|
265
|
+
)
|
266
|
+
end
|
267
|
+
|
268
|
+
it "dislays no filters" do
|
269
|
+
class TestGrid8728
|
270
|
+
include Datagrid
|
271
|
+
scope {Entry}
|
272
|
+
end
|
273
|
+
|
274
|
+
expect(TestGrid8728.inspect).to eq("TestGrid8728(no filters)")
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
|
279
|
+
describe ":if :unless options" do
|
280
|
+
it "supports :if option" do
|
281
|
+
klass = test_report_class do
|
282
|
+
scope {Entry}
|
283
|
+
filter(:admin_mode, :boolean, dummy: true)
|
284
|
+
filter(:id, :integer, if: :admin_mode)
|
285
|
+
filter(:name, :integer, unless: :admin_mode)
|
286
|
+
end
|
287
|
+
|
288
|
+
admin_filters = klass.new(admin_mode: true).filters.map(&:name)
|
289
|
+
non_admin_filters = klass.new(admin_mode: false).filters.map(&:name)
|
290
|
+
expect(admin_filters).to include(:id)
|
291
|
+
expect(admin_filters).to_not include(:name)
|
292
|
+
expect(non_admin_filters).to_not include(:id)
|
293
|
+
expect(non_admin_filters).to include(:name)
|
294
|
+
end
|
295
|
+
end
|
266
296
|
end
|
@@ -221,6 +221,19 @@ describe Datagrid::Helper do
|
|
221
221
|
"tr td.name.ordered.asc" => "Star"
|
222
222
|
)
|
223
223
|
end
|
224
|
+
it "should add ordering classes to column" do
|
225
|
+
rp = test_report(:order => :name) do
|
226
|
+
scope { Entry }
|
227
|
+
column(:name)
|
228
|
+
end
|
229
|
+
expect(
|
230
|
+
subject.datagrid_rows(rp) do |row|
|
231
|
+
subject.content_tag(:strong, row.name)
|
232
|
+
end
|
233
|
+
).to match_css_pattern(
|
234
|
+
"strong" => "Star"
|
235
|
+
)
|
236
|
+
end
|
224
237
|
|
225
238
|
it "should add ordering classes to column" do
|
226
239
|
rp = test_report(:order => :name, :descending => true) do
|
@@ -505,6 +518,12 @@ describe Datagrid::Helper do
|
|
505
518
|
expect(r.name).to eq("Hello")
|
506
519
|
expect(r.category).to eq("greetings")
|
507
520
|
end
|
521
|
+
it "should provide an interator" do
|
522
|
+
r = subject.datagrid_row(grid, entry)
|
523
|
+
expect(r.map {|z| z.upcase}).to eq(["HELLO", "GREETINGS"])
|
524
|
+
expect(r.name).to eq("Hello")
|
525
|
+
expect(r.category).to eq("greetings")
|
526
|
+
end
|
508
527
|
|
509
528
|
it "should yield block" do
|
510
529
|
subject.datagrid_row(grid, entry) do |row|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datagrid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bogdan Gusiev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -24,6 +24,188 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 3.2.22.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: jeweler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: debugger
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: pry-byebug
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: nokogiri
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: sqlite3
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: sequel
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '0'
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: mongoid
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: 3.1.7
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '='
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: 3.1.7
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: mongo_mapper
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: 0.13.0
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: 0.13.0
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: bson
|
169
|
+
requirement: !ruby/object:Gem::Requirement
|
170
|
+
requirements:
|
171
|
+
- - ">="
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: '0'
|
174
|
+
type: :runtime
|
175
|
+
prerelease: false
|
176
|
+
version_requirements: !ruby/object:Gem::Requirement
|
177
|
+
requirements:
|
178
|
+
- - ">="
|
179
|
+
- !ruby/object:Gem::Version
|
180
|
+
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: bson_ext
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
195
|
+
- !ruby/object:Gem::Dependency
|
196
|
+
name: rails
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
198
|
+
requirements:
|
199
|
+
- - ">="
|
200
|
+
- !ruby/object:Gem::Version
|
201
|
+
version: 3.2.22.2
|
202
|
+
type: :development
|
203
|
+
prerelease: false
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
205
|
+
requirements:
|
206
|
+
- - ">="
|
207
|
+
- !ruby/object:Gem::Version
|
208
|
+
version: 3.2.22.2
|
27
209
|
- !ruby/object:Gem::Dependency
|
28
210
|
name: bundler
|
29
211
|
requirement: !ruby/object:Gem::Requirement
|
@@ -67,7 +249,7 @@ dependencies:
|
|
67
249
|
- !ruby/object:Gem::Version
|
68
250
|
version: '0'
|
69
251
|
- !ruby/object:Gem::Dependency
|
70
|
-
name: byebug
|
252
|
+
name: pry-byebug
|
71
253
|
requirement: !ruby/object:Gem::Requirement
|
72
254
|
requirements:
|
73
255
|
- - ">="
|
@@ -319,7 +501,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
319
501
|
requirements:
|
320
502
|
- - ">="
|
321
503
|
- !ruby/object:Gem::Version
|
322
|
-
version: '0'
|
504
|
+
version: '2.0'
|
323
505
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
324
506
|
requirements:
|
325
507
|
- - ">="
|
@@ -327,7 +509,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
327
509
|
version: '0'
|
328
510
|
requirements: []
|
329
511
|
rubyforge_project:
|
330
|
-
rubygems_version: 2.
|
512
|
+
rubygems_version: 2.6.7
|
331
513
|
signing_key:
|
332
514
|
specification_version: 4
|
333
515
|
summary: Ruby gem to create datagrids
|