datagrid 1.3.9 → 1.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +2 -1
- data/Readme.markdown +10 -8
- data/VERSION +1 -1
- data/app/views/datagrid/_table.html.erb +15 -11
- data/datagrid.gemspec +12 -6
- data/lib/datagrid/columns.rb +10 -5
- data/lib/datagrid/drivers.rb +1 -0
- data/lib/datagrid/drivers/abstract_driver.rb +11 -0
- data/lib/datagrid/drivers/active_record.rb +9 -1
- data/lib/datagrid/drivers/mongoid.rb +1 -0
- data/lib/datagrid/drivers/sequel.rb +104 -0
- data/lib/datagrid/filters/base_filter.rb +14 -11
- data/lib/datagrid/filters/date_filter.rb +2 -2
- data/lib/datagrid/filters/dynamic_filter.rb +1 -1
- data/lib/datagrid/filters/ranged_filter.rb +2 -2
- data/lib/datagrid/form_builder.rb +1 -1
- data/lib/datagrid/locale/en.yml +1 -13
- data/lib/datagrid/rspec.rb +1 -1
- data/lib/datagrid/utils.rb +3 -3
- data/spec/datagrid/column_names_attribute_spec.rb +6 -0
- data/spec/datagrid/drivers/active_record_spec.rb +30 -0
- data/spec/datagrid/drivers/sequel_spec.rb +111 -0
- data/spec/datagrid/filters/date_filter_spec.rb +2 -2
- data/spec/datagrid/filters/date_time_filter_spec.rb +31 -31
- data/spec/datagrid/filters/dynamic_filter_spec.rb +15 -15
- data/spec/datagrid/form_builder_spec.rb +16 -3
- data/spec/datagrid/helper_spec.rb +14 -0
- data/spec/spec_helper.rb +1 -2
- data/spec/support/mongo_mapper.rb +2 -2
- data/spec/support/mongoid.rb +2 -2
- data/spec/support/sequel.rb +39 -0
- data/spec/support/simple_report.rb +1 -1
- metadata +21 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cb6758027fb0dcc66c2d3a285466b5aed3d4c3f1
|
4
|
+
data.tar.gz: ea86794219dd8af94986c010c976809580680b55
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f91876b2190e994ff3259106a296034ff000ea1f3da233af811491d0c881e7a0bb14519b4a419f048b0865d4a9bc02c275a95ea10b648e2184d36f8d0cd4c50c
|
7
|
+
data.tar.gz: a337280ece74f2b3e4b97e2749dde0d6a422405d71b051871222b0c5e2622bc8437e0bbbf40cff5cac04441b456c8640fcda82deb4f0a3399451ae16bb25dd94
|
data/Gemfile
CHANGED
@@ -15,10 +15,11 @@ group :development do
|
|
15
15
|
gem "nokogiri" # used to test html output
|
16
16
|
|
17
17
|
gem "sqlite3"
|
18
|
+
gem "sequel"
|
18
19
|
|
19
20
|
group :mongo do
|
20
21
|
gem "mongoid", "3.1.6"
|
21
|
-
gem "mongo_mapper", "
|
22
|
+
gem "mongo_mapper", "~> 0.11.0"
|
22
23
|
gem "bson", "1.4.0"
|
23
24
|
gem "bson_ext", "1.4.0"
|
24
25
|
end
|
data/Readme.markdown
CHANGED
@@ -15,6 +15,7 @@ Ruby library that helps you to build and represent table-like data with:
|
|
15
15
|
* ActiveRecord
|
16
16
|
* Mongoid
|
17
17
|
* MongoMapper
|
18
|
+
* Sequel
|
18
19
|
* Array (slow but possible)
|
19
20
|
|
20
21
|
[Create an issue](https://github.com/bogdan/datagrid/issues/new) if you want more.
|
@@ -31,7 +32,7 @@ Ruby library that helps you to build and represent table-like data with:
|
|
31
32
|
In order to create a grid:
|
32
33
|
|
33
34
|
``` ruby
|
34
|
-
class
|
35
|
+
class UsersGrid
|
35
36
|
|
36
37
|
include Datagrid
|
37
38
|
|
@@ -61,11 +62,12 @@ end
|
|
61
62
|
Basic grid api:
|
62
63
|
|
63
64
|
``` ruby
|
64
|
-
report =
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
65
|
+
report = UsersGrid.new(
|
66
|
+
:group_id => [1,2],
|
67
|
+
:logins_count => [1, nil],
|
68
|
+
:category => "first",
|
69
|
+
:order => :group,
|
70
|
+
:descending => true
|
69
71
|
)
|
70
72
|
|
71
73
|
report.assets # => Array of User instances:
|
@@ -122,9 +124,9 @@ Datagrid supports different type of filters including:
|
|
122
124
|
* datetime
|
123
125
|
* boolean
|
124
126
|
* xboolean - the select of "yes", "no" and any
|
125
|
-
* enum
|
127
|
+
* enum - selection of the given values
|
126
128
|
* string
|
127
|
-
* dynamic
|
129
|
+
* dynamic - build dynamic SQL condition
|
128
130
|
|
129
131
|
[More about filters](https://github.com/bogdan/datagrid/wiki/Filters)
|
130
132
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.4.0
|
@@ -4,15 +4,19 @@ Local variables:
|
|
4
4
|
* assets - Array of database Entities
|
5
5
|
* options - passed options Hash
|
6
6
|
%>
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
7
|
+
<% if grid.html_columns(*options[:columns]).any? %>
|
8
|
+
<%= content_tag :table, options[:html] do %>
|
9
|
+
<thead>
|
10
|
+
<%= datagrid_header(grid, options) %>
|
11
|
+
</thead>
|
12
|
+
<tbody>
|
13
|
+
<% if assets.any? %>
|
14
|
+
<%= datagrid_rows(grid, assets, options) %>
|
15
|
+
<% else %>
|
16
|
+
<tr><td class="noresults" colspan="100%"><%= I18n.t('datagrid.no_results').html_safe %></td></tr>
|
17
|
+
<% end %>
|
18
|
+
</tbody>
|
19
|
+
<% end %>
|
20
|
+
<% else -%>
|
21
|
+
<%= I18n.t("datagrid.table.no_columns").html_safe %>
|
18
22
|
<% 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.
|
5
|
+
# stub: datagrid 1.4.0 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "datagrid"
|
9
|
-
s.version = "1.
|
9
|
+
s.version = "1.4.0"
|
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 = "2015-05
|
14
|
+
s.date = "2015-11-05"
|
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 = [
|
@@ -49,6 +49,7 @@ Gem::Specification.new do |s|
|
|
49
49
|
"lib/datagrid/drivers/array.rb",
|
50
50
|
"lib/datagrid/drivers/mongo_mapper.rb",
|
51
51
|
"lib/datagrid/drivers/mongoid.rb",
|
52
|
+
"lib/datagrid/drivers/sequel.rb",
|
52
53
|
"lib/datagrid/engine.rb",
|
53
54
|
"lib/datagrid/filters.rb",
|
54
55
|
"lib/datagrid/filters/base_filter.rb",
|
@@ -83,6 +84,7 @@ Gem::Specification.new do |s|
|
|
83
84
|
"spec/datagrid/drivers/array_spec.rb",
|
84
85
|
"spec/datagrid/drivers/mongo_mapper_spec.rb",
|
85
86
|
"spec/datagrid/drivers/mongoid_spec.rb",
|
87
|
+
"spec/datagrid/drivers/sequel_spec.rb",
|
86
88
|
"spec/datagrid/filters/boolean_enum_filter_spec.rb",
|
87
89
|
"spec/datagrid/filters/composite_filters_spec.rb",
|
88
90
|
"spec/datagrid/filters/date_filter_spec.rb",
|
@@ -108,6 +110,7 @@ Gem::Specification.new do |s|
|
|
108
110
|
"spec/support/matchers.rb",
|
109
111
|
"spec/support/mongo_mapper.rb",
|
110
112
|
"spec/support/mongoid.rb",
|
113
|
+
"spec/support/sequel.rb",
|
111
114
|
"spec/support/simple_report.rb",
|
112
115
|
"spec/support/test_partials/_actions.html.erb",
|
113
116
|
"spec/support/test_partials/client/datagrid/_form.html.erb",
|
@@ -139,8 +142,9 @@ Gem::Specification.new do |s|
|
|
139
142
|
s.add_development_dependency(%q<rspec>, [">= 3"])
|
140
143
|
s.add_development_dependency(%q<nokogiri>, [">= 0"])
|
141
144
|
s.add_development_dependency(%q<sqlite3>, [">= 0"])
|
145
|
+
s.add_development_dependency(%q<sequel>, [">= 0"])
|
142
146
|
s.add_development_dependency(%q<mongoid>, ["= 3.1.6"])
|
143
|
-
s.add_development_dependency(%q<mongo_mapper>, ["
|
147
|
+
s.add_development_dependency(%q<mongo_mapper>, ["~> 0.11.0"])
|
144
148
|
s.add_development_dependency(%q<bson>, ["= 1.4.0"])
|
145
149
|
s.add_development_dependency(%q<bson_ext>, ["= 1.4.0"])
|
146
150
|
else
|
@@ -152,8 +156,9 @@ Gem::Specification.new do |s|
|
|
152
156
|
s.add_dependency(%q<rspec>, [">= 3"])
|
153
157
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
154
158
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
159
|
+
s.add_dependency(%q<sequel>, [">= 0"])
|
155
160
|
s.add_dependency(%q<mongoid>, ["= 3.1.6"])
|
156
|
-
s.add_dependency(%q<mongo_mapper>, ["
|
161
|
+
s.add_dependency(%q<mongo_mapper>, ["~> 0.11.0"])
|
157
162
|
s.add_dependency(%q<bson>, ["= 1.4.0"])
|
158
163
|
s.add_dependency(%q<bson_ext>, ["= 1.4.0"])
|
159
164
|
end
|
@@ -166,8 +171,9 @@ Gem::Specification.new do |s|
|
|
166
171
|
s.add_dependency(%q<rspec>, [">= 3"])
|
167
172
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
168
173
|
s.add_dependency(%q<sqlite3>, [">= 0"])
|
174
|
+
s.add_dependency(%q<sequel>, [">= 0"])
|
169
175
|
s.add_dependency(%q<mongoid>, ["= 3.1.6"])
|
170
|
-
s.add_dependency(%q<mongo_mapper>, ["
|
176
|
+
s.add_dependency(%q<mongo_mapper>, ["~> 0.11.0"])
|
171
177
|
s.add_dependency(%q<bson>, ["= 1.4.0"])
|
172
178
|
s.add_dependency(%q<bson_ext>, ["= 1.4.0"])
|
173
179
|
end
|
data/lib/datagrid/columns.rb
CHANGED
@@ -184,10 +184,15 @@ module Datagrid
|
|
184
184
|
# # ]
|
185
185
|
def dynamic(&block)
|
186
186
|
previous_block = dynamic_block
|
187
|
-
self.dynamic_block =
|
188
|
-
|
189
|
-
|
190
|
-
|
187
|
+
self.dynamic_block =
|
188
|
+
if previous_block
|
189
|
+
proc {
|
190
|
+
instance_eval(&previous_block)
|
191
|
+
instance_eval(&block)
|
192
|
+
}
|
193
|
+
else
|
194
|
+
block
|
195
|
+
end
|
191
196
|
end
|
192
197
|
|
193
198
|
def inherited(child_class) #:nodoc:
|
@@ -319,7 +324,7 @@ module Datagrid
|
|
319
324
|
def to_csv(*column_names)
|
320
325
|
options = column_names.extract_options!
|
321
326
|
csv_class.generate(
|
322
|
-
{:headers => self.header(*column_names), :write_headers => true}.merge(options)
|
327
|
+
{:headers => self.header(*column_names), :write_headers => true}.merge!(options)
|
323
328
|
) do |csv|
|
324
329
|
each_with_batches do |asset|
|
325
330
|
csv << row_for(asset, *column_names)
|
data/lib/datagrid/drivers.rb
CHANGED
@@ -94,6 +94,17 @@ module Datagrid
|
|
94
94
|
raise NotImplementedError
|
95
95
|
end
|
96
96
|
|
97
|
+
def where_by_timestamp_gotcha(scope, name, value)
|
98
|
+
value = Datagrid::Utils.format_date_as_timestamp(value)
|
99
|
+
if value.first
|
100
|
+
scope = greater_equal(scope, name, value.first)
|
101
|
+
end
|
102
|
+
if value.last
|
103
|
+
scope = less_equal(scope, name, value.last)
|
104
|
+
end
|
105
|
+
scope
|
106
|
+
end
|
107
|
+
|
97
108
|
protected
|
98
109
|
def timestamp_class?(klass)
|
99
110
|
TIMESTAMP_CLASSES.include?(klass)
|
@@ -56,7 +56,7 @@ module Datagrid
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def default_order(scope, column_name)
|
59
|
-
has_column?(scope, column_name) ?
|
59
|
+
has_column?(scope, column_name) ? prefix_table_name(scope, column_name) : nil
|
60
60
|
end
|
61
61
|
|
62
62
|
def greater_equal(scope, field, value)
|
@@ -127,3 +127,11 @@ module Datagrid
|
|
127
127
|
end
|
128
128
|
end
|
129
129
|
end
|
130
|
+
|
131
|
+
if defined?(ActiveRecord::Base)
|
132
|
+
ActiveRecord::Base.class_eval do
|
133
|
+
def self.datagrid_where_by_timestamp(column, value)
|
134
|
+
Datagrid::Drivers::ActiveRecord.new.where_by_timestamp_gotcha(self, column, value)
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
module Datagrid
|
2
|
+
module Drivers
|
3
|
+
class Sequel < AbstractDriver #:nodoc:
|
4
|
+
|
5
|
+
def self.match?(scope)
|
6
|
+
return false unless defined?(::Sequel)
|
7
|
+
if scope.is_a?(Class)
|
8
|
+
scope.ancestors.include?(::Sequel::Model)
|
9
|
+
else
|
10
|
+
scope.is_a?(::Sequel::Dataset)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def to_scope(scope)
|
15
|
+
return scope if scope.is_a?(::Sequel::Dataset)
|
16
|
+
scope.where
|
17
|
+
end
|
18
|
+
|
19
|
+
def append_column_queries(assets, columns)
|
20
|
+
super
|
21
|
+
end
|
22
|
+
|
23
|
+
def where(scope, attribute, value)
|
24
|
+
scope.where(attribute => value)
|
25
|
+
end
|
26
|
+
|
27
|
+
def asc(scope, order)
|
28
|
+
scope.order(::Sequel.lit(order))
|
29
|
+
end
|
30
|
+
|
31
|
+
def desc(scope, order)
|
32
|
+
scope.order(::Sequel.desc(::Sequel.lit(order)))
|
33
|
+
end
|
34
|
+
|
35
|
+
def reverse_order(scope)
|
36
|
+
super
|
37
|
+
end
|
38
|
+
|
39
|
+
def default_order(scope, column_name)
|
40
|
+
has_column?(scope, column_name) ? ::Sequel.lit(prefix_table_name(scope, column_name)) : nil
|
41
|
+
end
|
42
|
+
|
43
|
+
def greater_equal(scope, field, value)
|
44
|
+
scope.where(["#{prefix_table_name(scope, field)} >= ?", value])
|
45
|
+
end
|
46
|
+
|
47
|
+
def less_equal(scope, field, value)
|
48
|
+
scope.where(["#{prefix_table_name(scope, field)} <= ?", value])
|
49
|
+
end
|
50
|
+
|
51
|
+
def has_column?(scope, column_name)
|
52
|
+
scope.columns.include?(column_name.to_sym)
|
53
|
+
end
|
54
|
+
|
55
|
+
def column_names(scope)
|
56
|
+
scope.columns
|
57
|
+
end
|
58
|
+
|
59
|
+
def is_timestamp?(scope, column_name)
|
60
|
+
column_type(scope, column_name) == :datetime
|
61
|
+
end
|
62
|
+
|
63
|
+
def contains(scope, field, value)
|
64
|
+
field = prefix_table_name(scope, field)
|
65
|
+
scope.where(Sequel.like(field, "%#{value}%"))
|
66
|
+
end
|
67
|
+
|
68
|
+
def normalized_column_type(scope, field)
|
69
|
+
type = column_type(scope, field)
|
70
|
+
return nil unless type
|
71
|
+
{
|
72
|
+
[:string, :blob, :time] => :string,
|
73
|
+
[:integer, :primary_key] => :integer,
|
74
|
+
[:float, :decimal] => :float,
|
75
|
+
[:date] => :date,
|
76
|
+
[:datetime] => :datetime,
|
77
|
+
[:boolean] => :boolean
|
78
|
+
}.each do |keys, value|
|
79
|
+
return value if keys.include?(type)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def default_cache_key(asset)
|
84
|
+
asset.id || raise(NotImplementedError)
|
85
|
+
end
|
86
|
+
|
87
|
+
def batch_each(scope, batch_size, &block)
|
88
|
+
scope.extension(:pagination).each_page(batch_size) do |page|
|
89
|
+
page.each(&block)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
protected
|
94
|
+
|
95
|
+
def prefix_table_name(scope, field)
|
96
|
+
has_column?(scope, field) ? [to_scope(scope).row_proc.table_name, field].join(".") : field
|
97
|
+
end
|
98
|
+
|
99
|
+
def column_type(scope, field)
|
100
|
+
has_column?(scope, field) ? to_scope(scope).row_proc.db_schema[field.to_sym][:type] : nil
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
@@ -89,16 +89,6 @@ class Datagrid::Filters::BaseFilter #:nodoc:
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
-
def default_filter(value, scope, grid)
|
93
|
-
return nil if dummy?
|
94
|
-
driver = grid.driver
|
95
|
-
if !driver.has_column?(scope, name) && driver.to_scope(scope).respond_to?(name)
|
96
|
-
driver.to_scope(scope).send(name, value)
|
97
|
-
else
|
98
|
-
default_filter_where(driver, scope, value)
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
92
|
def supports_range?
|
103
93
|
self.class.ancestors.include?(::Datagrid::Filters::RangedFilter)
|
104
94
|
end
|
@@ -122,7 +112,7 @@ class Datagrid::Filters::BaseFilter #:nodoc:
|
|
122
112
|
|
123
113
|
protected
|
124
114
|
|
125
|
-
def default_filter_where(
|
115
|
+
def default_filter_where(scope, value)
|
126
116
|
driver.where(scope, name, value)
|
127
117
|
end
|
128
118
|
|
@@ -150,5 +140,18 @@ class Datagrid::Filters::BaseFilter #:nodoc:
|
|
150
140
|
','
|
151
141
|
end
|
152
142
|
|
143
|
+
def driver
|
144
|
+
grid_class.driver
|
145
|
+
end
|
146
|
+
|
147
|
+
def default_filter(value, scope, grid)
|
148
|
+
return nil if dummy?
|
149
|
+
if !driver.has_column?(scope, name) && driver.to_scope(scope).respond_to?(name)
|
150
|
+
driver.to_scope(scope).send(name, value)
|
151
|
+
else
|
152
|
+
default_filter_where(scope, value)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
153
156
|
end
|
154
157
|
|
@@ -24,11 +24,11 @@ class Datagrid::Filters::DateFilter < Datagrid::Filters::BaseFilter
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
-
def default_filter_where(
|
27
|
+
def default_filter_where(scope, value)
|
28
28
|
if driver.is_timestamp?(scope, name)
|
29
29
|
value = Datagrid::Utils.format_date_as_timestamp(value)
|
30
30
|
end
|
31
|
-
super(
|
31
|
+
super(scope, value)
|
32
32
|
end
|
33
33
|
|
34
34
|
protected
|
@@ -26,7 +26,7 @@ class Datagrid::Filters::DynamicFilter < Datagrid::Filters::BaseFilter
|
|
26
26
|
super(value)
|
27
27
|
end
|
28
28
|
|
29
|
-
def default_filter_where(
|
29
|
+
def default_filter_where(scope, filter)
|
30
30
|
field, operation, value = filter
|
31
31
|
date_conversion = value.is_a?(Date) && driver.is_timestamp?(scope, field)
|
32
32
|
|
@@ -36,7 +36,7 @@ module Datagrid::Filters::RangedFilter
|
|
36
36
|
options[:range]
|
37
37
|
end
|
38
38
|
|
39
|
-
def default_filter_where(
|
39
|
+
def default_filter_where(scope, value)
|
40
40
|
if range? && value.is_a?(Array)
|
41
41
|
left, right = value
|
42
42
|
if left
|
@@ -47,7 +47,7 @@ module Datagrid::Filters::RangedFilter
|
|
47
47
|
end
|
48
48
|
scope
|
49
49
|
else
|
50
|
-
super(
|
50
|
+
super(scope, value)
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
@@ -33,7 +33,7 @@ module Datagrid
|
|
33
33
|
end
|
34
34
|
|
35
35
|
def datagrid_boolean_filter(attribute_or_filter, options = {})
|
36
|
-
check_box(datagrid_get_attribute(attribute_or_filter), options
|
36
|
+
check_box(datagrid_get_attribute(attribute_or_filter), options)
|
37
37
|
end
|
38
38
|
|
39
39
|
def datagrid_date_filter(attribute_or_filter, options = {})
|
data/lib/datagrid/locale/en.yml
CHANGED
@@ -6,23 +6,11 @@ en:
|
|
6
6
|
order:
|
7
7
|
asc: "↑"
|
8
8
|
desc: "↓"
|
9
|
+
no_columns: "No columns selected"
|
9
10
|
form:
|
10
11
|
search: "Search"
|
11
12
|
reset: "Reset"
|
12
13
|
filters:
|
13
|
-
#integer:
|
14
|
-
#range_format:
|
15
|
-
#"%{from_input}<span class=\"separator integer\"> - </span>%{to_input}"
|
16
|
-
#date:
|
17
|
-
#range_format:
|
18
|
-
#"%{from_input}<span class=\"separator date\"> - </span>%{to_input}"
|
19
|
-
#datetime:
|
20
|
-
#range_format:
|
21
|
-
#"%{from_input}<span class=\"separator datetime\"> - </span>%{to_input}"
|
22
|
-
#float:
|
23
|
-
#range_format:
|
24
|
-
#"%{from_input}<span class=\"separator float\"> - </span>%{to_input}"
|
25
|
-
|
26
14
|
xboolean:
|
27
15
|
"yes": "Yes"
|
28
16
|
"no": "No"
|
data/lib/datagrid/rspec.rb
CHANGED
data/lib/datagrid/utils.rb
CHANGED
@@ -96,13 +96,13 @@ module Datagrid
|
|
96
96
|
if value.is_a?(String)
|
97
97
|
Array(Datagrid.configuration.datetime_formats).each do |format|
|
98
98
|
begin
|
99
|
-
return
|
99
|
+
return Time.strptime(value, format)
|
100
100
|
rescue ::ArgumentError
|
101
101
|
end
|
102
102
|
end
|
103
103
|
end
|
104
|
-
return
|
105
|
-
return value.
|
104
|
+
return Time.parse(value) if value.is_a?(String)
|
105
|
+
return value.to_time if value.respond_to?(:to_time)
|
106
106
|
value
|
107
107
|
rescue ::ArgumentError
|
108
108
|
nil
|
@@ -39,6 +39,12 @@ describe Datagrid::ColumnNamesAttribute do
|
|
39
39
|
expect(subject.row_for(entry)).to eq(["hello", "greeting"])
|
40
40
|
end
|
41
41
|
|
42
|
+
it "should show mandatory columns even if they are unselected" do
|
43
|
+
subject.column_names = ["category"]
|
44
|
+
expect(subject.row_for(entry)).to eq(["hello", "greeting"])
|
45
|
+
expect(subject.data).to eq([["Name", "Category"], ["hello", "greeting"]])
|
46
|
+
end
|
47
|
+
|
42
48
|
it "should find any column by name" do
|
43
49
|
expect(subject.column_by_name(:id)).not_to be_nil
|
44
50
|
expect(subject.column_by_name(:name)).not_to be_nil
|
@@ -20,4 +20,34 @@ describe Datagrid::Drivers::ActiveRecord do
|
|
20
20
|
scope = subject.append_column_queries(Entry.where({}), [Datagrid::Columns::Column.new(test_report_class, :sum_group_id, 'sum(entries.group_id)')])
|
21
21
|
expect(scope.to_sql.strip).to eq('SELECT "entries".*, sum(entries.group_id) AS sum_group_id FROM "entries"')
|
22
22
|
end
|
23
|
+
|
24
|
+
|
25
|
+
describe "gotcha #datagrid_where_by_timestamp" do
|
26
|
+
|
27
|
+
subject do
|
28
|
+
test_report(created_at: 10.days.ago..5.days.ago) do
|
29
|
+
scope {Entry}
|
30
|
+
|
31
|
+
filter(:created_at, :date, range: true) do |value, scope, grid|
|
32
|
+
scope.joins(:group).datagrid_where_by_timestamp("groups.created_at", value)
|
33
|
+
end
|
34
|
+
end.assets
|
35
|
+
end
|
36
|
+
it "includes object created in proper range" do
|
37
|
+
expect(subject).to include(
|
38
|
+
Entry.create!(group: Group.create!(created_at: 7.days.ago)),
|
39
|
+
)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "excludes object created before the range" do
|
43
|
+
expect(subject).to_not include(
|
44
|
+
Entry.create!(created_at: 7.days.ago, group: Group.create!(created_at: 11.days.ago)),
|
45
|
+
)
|
46
|
+
end
|
47
|
+
it "excludes object created after the range" do
|
48
|
+
expect(subject).to_not include(
|
49
|
+
Entry.create!(created_at: 7.days.ago, group: Group.create!(created_at: 4.days.ago)),
|
50
|
+
)
|
51
|
+
end
|
52
|
+
end
|
23
53
|
end
|
@@ -0,0 +1,111 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Datagrid::Drivers::Sequel do
|
4
|
+
|
5
|
+
describe ".match?" do
|
6
|
+
|
7
|
+
subject { described_class }
|
8
|
+
|
9
|
+
it {should be_match(SequelEntry)}
|
10
|
+
it {should be_match(SequelEntry.where(:id => 1))}
|
11
|
+
it {should_not be_match(Entry.where(:id => 1))}
|
12
|
+
|
13
|
+
end
|
14
|
+
describe "api" do
|
15
|
+
|
16
|
+
subject do
|
17
|
+
SequelGrid.new(
|
18
|
+
defined?(_attributes) ? _attributes : {}
|
19
|
+
)
|
20
|
+
end
|
21
|
+
|
22
|
+
let!(:first) do
|
23
|
+
SequelEntry.create(
|
24
|
+
:group_id => 2,
|
25
|
+
:name => "Main First",
|
26
|
+
:disabled => false
|
27
|
+
)
|
28
|
+
end
|
29
|
+
let!(:second) do
|
30
|
+
SequelEntry.create(
|
31
|
+
:group_id => 3,
|
32
|
+
:name => "Main Second",
|
33
|
+
:disabled => true
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
describe '#assets' do
|
39
|
+
subject { super().assets }
|
40
|
+
it {should include(first, second)}
|
41
|
+
end
|
42
|
+
|
43
|
+
describe '#assets' do
|
44
|
+
subject { super().assets }
|
45
|
+
describe '#size' do
|
46
|
+
subject { super().count }
|
47
|
+
it {should == 2}
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe '#rows' do
|
52
|
+
subject { super().rows }
|
53
|
+
it {should == [["Main First", 2, false], ["Main Second", 3, true]]}
|
54
|
+
end
|
55
|
+
|
56
|
+
describe '#header' do
|
57
|
+
subject { super().header }
|
58
|
+
it {should ==[ "Name", "Group", "Disabled"]}
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '#data' do
|
62
|
+
subject { super().data }
|
63
|
+
it {should == [[ "Name", "Group", "Disabled"], ["Main First", 2, false], ["Main Second", 3, true]]}
|
64
|
+
end
|
65
|
+
|
66
|
+
|
67
|
+
describe "when some filters specified" do
|
68
|
+
let(:_attributes) { {:from_group_id => 3} }
|
69
|
+
|
70
|
+
describe '#assets' do
|
71
|
+
subject { super().assets.map(&:id) }
|
72
|
+
it {should_not include(first.id)}
|
73
|
+
end
|
74
|
+
|
75
|
+
describe '#assets' do
|
76
|
+
subject { super().assets }
|
77
|
+
it {should include(second)}
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "when reverse ordering is specified" do
|
82
|
+
let(:_attributes) { {:order => :name, :descending => true} }
|
83
|
+
|
84
|
+
describe '#rows' do
|
85
|
+
subject { super().rows }
|
86
|
+
it {should == [["Main Second", 3, true], ["Main First", 2, false]]}
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should provide default order for non declared fields" do
|
91
|
+
expect {
|
92
|
+
test_report(:order => :test) do
|
93
|
+
scope { SequelEntry }
|
94
|
+
column(:test) do
|
95
|
+
'test'
|
96
|
+
end
|
97
|
+
end.assets
|
98
|
+
}.to raise_error(Datagrid::OrderUnsupported)
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should support batch_size" do
|
102
|
+
report = test_report do
|
103
|
+
scope { SequelEntry }
|
104
|
+
self.batch_size = 1
|
105
|
+
column(:name)
|
106
|
+
end
|
107
|
+
|
108
|
+
expect(report.data).to eq([["Name"], ["Main First"], ["Main Second"]])
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
@@ -15,7 +15,7 @@ describe Datagrid::Filters::DateFilter do
|
|
15
15
|
expect(report.assets).not_to include(e3)
|
16
16
|
end
|
17
17
|
|
18
|
-
{:active_record => Entry, :mongoid => MongoidEntry}.each do |orm, klass|
|
18
|
+
{:active_record => Entry, :mongoid => MongoidEntry, :sequel => SequelEntry}.each do |orm, klass|
|
19
19
|
describe "with orm #{orm}", orm => true do
|
20
20
|
describe "date to timestamp conversion" do
|
21
21
|
let(:klass) { klass }
|
@@ -127,7 +127,7 @@ describe Datagrid::Filters::DateFilter do
|
|
127
127
|
end
|
128
128
|
end
|
129
129
|
expect(report.assets).not_to include(Entry.create!(:created_at => 1.day.ago))
|
130
|
-
expect(report.assets).to include(Entry.create!(:created_at =>
|
130
|
+
expect(report.assets).to include(Entry.create!(:created_at => Time.now))
|
131
131
|
end
|
132
132
|
|
133
133
|
|
@@ -22,17 +22,17 @@ describe Datagrid::Filters::DateTimeFilter do
|
|
22
22
|
end
|
23
23
|
|
24
24
|
context "when single datetime paramter given" do
|
25
|
-
let(:_created_at) {
|
26
|
-
it { should include(entry_dated(_created_at))}
|
25
|
+
let(:_created_at) { Time.now.change(sec: 0) }
|
26
|
+
it { should include(entry_dated(_created_at)) }
|
27
27
|
it { should_not include(entry_dated(_created_at - 1.second))}
|
28
28
|
it { should_not include(entry_dated(_created_at + 1.second))}
|
29
29
|
end
|
30
30
|
|
31
31
|
context "when range datetime range given" do
|
32
|
-
let(:_created_at) { [
|
32
|
+
let(:_created_at) { [Time.now.beginning_of_day, Time.now.end_of_day] }
|
33
33
|
it { should include(entry_dated(1.second.ago))}
|
34
|
-
it { should include(entry_dated(Date.today.
|
35
|
-
it { should include(entry_dated(
|
34
|
+
it { should include(entry_dated(Date.today.to_time))}
|
35
|
+
it { should include(entry_dated(Time.now.end_of_day.to_time))}
|
36
36
|
it { should_not include(entry_dated(Date.yesterday.end_of_day))}
|
37
37
|
it { should_not include(entry_dated(Date.tomorrow.beginning_of_day))}
|
38
38
|
end
|
@@ -42,10 +42,10 @@ describe Datagrid::Filters::DateTimeFilter do
|
|
42
42
|
end
|
43
43
|
|
44
44
|
it "should support datetime range given as array argument" do
|
45
|
-
e1 = Entry.create!(:created_at =>
|
46
|
-
e2 = Entry.create!(:created_at =>
|
47
|
-
e3 = Entry.create!(:created_at =>
|
48
|
-
report = test_report(:created_at => [
|
45
|
+
e1 = Entry.create!(:created_at => Time.new(2013, 1, 1, 1, 0))
|
46
|
+
e2 = Entry.create!(:created_at => Time.new(2013, 1, 1, 2, 0))
|
47
|
+
e3 = Entry.create!(:created_at => Time.new(2013, 1, 1, 3, 0))
|
48
|
+
report = test_report(:created_at => [Time.new(2013, 1, 1, 1, 30).to_s, Time.new(2013, 1, 1, 2, 30).to_s]) do
|
49
49
|
scope { Entry }
|
50
50
|
filter(:created_at, :datetime, :range => true)
|
51
51
|
end
|
@@ -55,10 +55,10 @@ describe Datagrid::Filters::DateTimeFilter do
|
|
55
55
|
end
|
56
56
|
|
57
57
|
it "should support minimum datetime argument" do
|
58
|
-
e1 = Entry.create!(:created_at =>
|
59
|
-
e2 = Entry.create!(:created_at =>
|
60
|
-
e3 = Entry.create!(:created_at =>
|
61
|
-
report = test_report(:created_at => [
|
58
|
+
e1 = Entry.create!(:created_at => Time.new(2013, 1, 1, 1, 0))
|
59
|
+
e2 = Entry.create!(:created_at => Time.new(2013, 1, 1, 2, 0))
|
60
|
+
e3 = Entry.create!(:created_at => Time.new(2013, 1, 1, 3, 0))
|
61
|
+
report = test_report(:created_at => [Time.new(2013, 1, 1, 1, 30).to_s, nil]) do
|
62
62
|
scope { Entry }
|
63
63
|
filter(:created_at, :datetime, :range => true)
|
64
64
|
end
|
@@ -68,10 +68,10 @@ describe Datagrid::Filters::DateTimeFilter do
|
|
68
68
|
end
|
69
69
|
|
70
70
|
it "should support maximum datetime argument" do
|
71
|
-
e1 = Entry.create!(:created_at =>
|
72
|
-
e2 = Entry.create!(:created_at =>
|
73
|
-
e3 = Entry.create!(:created_at =>
|
74
|
-
report = test_report(:created_at => [nil,
|
71
|
+
e1 = Entry.create!(:created_at => Time.new(2013, 1, 1, 1, 0))
|
72
|
+
e2 = Entry.create!(:created_at => Time.new(2013, 1, 1, 2, 0))
|
73
|
+
e3 = Entry.create!(:created_at => Time.new(2013, 1, 1, 3, 0))
|
74
|
+
report = test_report(:created_at => [nil, Time.new(2013, 1, 1, 2, 30).to_s]) do
|
75
75
|
scope { Entry }
|
76
76
|
filter(:created_at, :datetime, :range => true)
|
77
77
|
end
|
@@ -82,10 +82,10 @@ describe Datagrid::Filters::DateTimeFilter do
|
|
82
82
|
|
83
83
|
it "should find something in one second interval" do
|
84
84
|
|
85
|
-
e1 = Entry.create!(:created_at =>
|
86
|
-
e2 = Entry.create!(:created_at =>
|
87
|
-
e3 = Entry.create!(:created_at =>
|
88
|
-
report = test_report(:created_at => (
|
85
|
+
e1 = Entry.create!(:created_at => Time.new(2013, 1, 1, 1, 0))
|
86
|
+
e2 = Entry.create!(:created_at => Time.new(2013, 1, 1, 2, 0))
|
87
|
+
e3 = Entry.create!(:created_at => Time.new(2013, 1, 1, 3, 0))
|
88
|
+
report = test_report(:created_at => (Time.new(2013, 1, 1, 2, 0)..Time.new(2013, 1, 1, 2, 0))) do
|
89
89
|
scope { Entry }
|
90
90
|
filter(:created_at, :datetime, :range => true)
|
91
91
|
end
|
@@ -95,10 +95,10 @@ describe Datagrid::Filters::DateTimeFilter do
|
|
95
95
|
end
|
96
96
|
it "should support invalid range" do
|
97
97
|
|
98
|
-
e1 = Entry.create!(:created_at =>
|
99
|
-
e2 = Entry.create!(:created_at =>
|
100
|
-
e3 = Entry.create!(:created_at =>
|
101
|
-
report = test_report(:created_at => (
|
98
|
+
e1 = Entry.create!(:created_at => Time.new(2013, 1, 1, 1, 0))
|
99
|
+
e2 = Entry.create!(:created_at => Time.new(2013, 1, 1, 2, 0))
|
100
|
+
e3 = Entry.create!(:created_at => Time.new(2013, 1, 1, 3, 0))
|
101
|
+
report = test_report(:created_at => (Time.new(2013, 1, 1, 3, 0)..Time.new(2013, 1, 1, 1, 0))) do
|
102
102
|
scope { Entry }
|
103
103
|
filter(:created_at, :datetime, :range => true)
|
104
104
|
end
|
@@ -109,14 +109,14 @@ describe Datagrid::Filters::DateTimeFilter do
|
|
109
109
|
|
110
110
|
|
111
111
|
it "should support block" do
|
112
|
-
report = test_report(:created_at =>
|
112
|
+
report = test_report(:created_at => Time.now) do
|
113
113
|
scope { Entry }
|
114
114
|
filter(:created_at, :datetime, :range => true) do |value|
|
115
115
|
where("created_at >= ?", value)
|
116
116
|
end
|
117
117
|
end
|
118
118
|
expect(report.assets).not_to include(Entry.create!(:created_at => 1.day.ago))
|
119
|
-
expect(report.assets).to include(Entry.create!(:created_at =>
|
119
|
+
expect(report.assets).to include(Entry.create!(:created_at => Time.now+1.day))
|
120
120
|
end
|
121
121
|
|
122
122
|
|
@@ -132,15 +132,15 @@ describe Datagrid::Filters::DateTimeFilter do
|
|
132
132
|
scope {Entry}
|
133
133
|
filter(:created_at, :datetime)
|
134
134
|
end
|
135
|
-
expect(report.created_at).to eq(
|
135
|
+
expect(report.created_at).to eq(Time.new(2013,10,01,1,0))
|
136
136
|
end
|
137
137
|
|
138
138
|
it "should support default explicit datetime" do
|
139
|
-
report = test_report(:created_at =>
|
139
|
+
report = test_report(:created_at => Time.parse("2013-10-01 01:00")) do
|
140
140
|
scope {Entry}
|
141
141
|
filter(:created_at, :datetime)
|
142
142
|
end
|
143
|
-
expect(report.created_at).to eq(
|
143
|
+
expect(report.created_at).to eq(Time.new(2013,10,01,1,0))
|
144
144
|
end
|
145
145
|
end
|
146
146
|
|
@@ -150,6 +150,6 @@ describe Datagrid::Filters::DateTimeFilter do
|
|
150
150
|
scope {Entry}
|
151
151
|
filter(:created_at, :datetime, :range => true)
|
152
152
|
end
|
153
|
-
expect(report.created_at).to eq([
|
153
|
+
expect(report.created_at).to eq([Time.new(2012, 01, 01, 1, 0), Time.new(2013, 01, 01, 1, 0)])
|
154
154
|
end
|
155
155
|
end
|
@@ -77,33 +77,33 @@ describe Datagrid::Filters::DynamicFilter do
|
|
77
77
|
it "should support date comparation operation by timestamp column" do
|
78
78
|
report.condition = [:created_at, "<=", '1986-08-05']
|
79
79
|
expect(report.condition).to eq([:created_at, "<=", Date.parse('1986-08-05')])
|
80
|
-
expect(report.assets).to include(Entry.create!(:created_at =>
|
81
|
-
expect(report.assets).to include(Entry.create!(:created_at =>
|
82
|
-
expect(report.assets).to include(Entry.create!(:created_at =>
|
83
|
-
expect(report.assets).not_to include(Entry.create!(:created_at =>
|
84
|
-
expect(report.assets).not_to include(Entry.create!(:created_at =>
|
80
|
+
expect(report.assets).to include(Entry.create!(:created_at => Time.parse('1986-08-04 01:01:01')))
|
81
|
+
expect(report.assets).to include(Entry.create!(:created_at => Time.parse('1986-08-05 23:59:59')))
|
82
|
+
expect(report.assets).to include(Entry.create!(:created_at => Time.parse('1986-08-05 00:00:00')))
|
83
|
+
expect(report.assets).not_to include(Entry.create!(:created_at => Time.parse('1986-08-06 00:00:00')))
|
84
|
+
expect(report.assets).not_to include(Entry.create!(:created_at => Time.parse('1986-08-06 23:59:59')))
|
85
85
|
end
|
86
86
|
|
87
87
|
it "should support date = operation by timestamp column" do
|
88
88
|
report.condition = [:created_at, "=", '1986-08-05']
|
89
89
|
expect(report.condition).to eq([:created_at, "=", Date.parse('1986-08-05')])
|
90
|
-
expect(report.assets).not_to include(Entry.create!(:created_at =>
|
91
|
-
expect(report.assets).to include(Entry.create!(:created_at =>
|
92
|
-
expect(report.assets).to include(Entry.create!(:created_at =>
|
90
|
+
expect(report.assets).not_to include(Entry.create!(:created_at => Time.parse('1986-08-04 23:59:59')))
|
91
|
+
expect(report.assets).to include(Entry.create!(:created_at => Time.parse('1986-08-05 23:59:59')))
|
92
|
+
expect(report.assets).to include(Entry.create!(:created_at => Time.parse('1986-08-05 00:00:01')))
|
93
93
|
#TODO: investigate SQLite issue and uncomment this line
|
94
|
-
#report.assets.should include(Entry.create!(:created_at =>
|
95
|
-
expect(report.assets).not_to include(Entry.create!(:created_at =>
|
94
|
+
#report.assets.should include(Entry.create!(:created_at => Time.parse('1986-08-05 00:00:00')))
|
95
|
+
expect(report.assets).not_to include(Entry.create!(:created_at => Time.parse('1986-08-06 23:59:59')))
|
96
96
|
end
|
97
97
|
|
98
98
|
it "should support date =~ operation by timestamp column" do
|
99
99
|
report.condition = [:created_at, "=~", '1986-08-05']
|
100
100
|
expect(report.condition).to eq([:created_at, "=~", Date.parse('1986-08-05')])
|
101
|
-
expect(report.assets).not_to include(Entry.create!(:created_at =>
|
102
|
-
expect(report.assets).to include(Entry.create!(:created_at =>
|
103
|
-
expect(report.assets).to include(Entry.create!(:created_at =>
|
101
|
+
expect(report.assets).not_to include(Entry.create!(:created_at => Time.parse('1986-08-04 23:59:59')))
|
102
|
+
expect(report.assets).to include(Entry.create!(:created_at => Time.parse('1986-08-05 23:59:59')))
|
103
|
+
expect(report.assets).to include(Entry.create!(:created_at => Time.parse('1986-08-05 00:00:01')))
|
104
104
|
#TODO: investigate SQLite issue and uncomment this line
|
105
|
-
#report.assets.should include(Entry.create!(:created_at =>
|
106
|
-
expect(report.assets).not_to include(Entry.create!(:created_at =>
|
105
|
+
#report.assets.should include(Entry.create!(:created_at => Time.parse('1986-08-05 00:00:00')))
|
106
|
+
expect(report.assets).not_to include(Entry.create!(:created_at => Time.parse('1986-08-06 23:59:59')))
|
107
107
|
end
|
108
108
|
|
109
109
|
it "should support operations for invalid date" do
|
@@ -346,16 +346,29 @@ describe Datagrid::FormBuilder do
|
|
346
346
|
end
|
347
347
|
end
|
348
348
|
|
349
|
-
context "with
|
349
|
+
context "with boolean filter type" do
|
350
350
|
let(:_filter) { :disabled }
|
351
351
|
let(:_grid) do
|
352
352
|
test_report do
|
353
353
|
scope {Entry}
|
354
|
-
filter(:disabled, :
|
354
|
+
filter(:disabled, :boolean, default: true)
|
355
355
|
end
|
356
356
|
end
|
357
357
|
it { should equal_to_dom(
|
358
|
-
|
358
|
+
# hidden is important when default is set to true
|
359
|
+
'<input name="report[disabled]" type="hidden" value="0"><input checked class="disabled boolean_filter" id="report_disabled" name="report[disabled]" type="checkbox" value="1">'
|
360
|
+
)}
|
361
|
+
end
|
362
|
+
context "with xboolean filter type" do
|
363
|
+
let(:_filter) { :disabled }
|
364
|
+
let(:_grid) do
|
365
|
+
test_report do
|
366
|
+
scope {Entry}
|
367
|
+
filter(:disabled, :xboolean)
|
368
|
+
end
|
369
|
+
end
|
370
|
+
it { should equal_to_dom(
|
371
|
+
'<select class="disabled extended_boolean_filter" id="report_disabled" name="report[disabled]"><option value=""></option>
|
359
372
|
<option value="YES">Yes</option>
|
360
373
|
<option value="NO">No</option></select>'
|
361
374
|
)}
|
@@ -31,6 +31,7 @@ describe Datagrid::Helper do
|
|
31
31
|
let(:grid) do
|
32
32
|
test_report do
|
33
33
|
scope { Entry.where("1 != 1") }
|
34
|
+
column(:id)
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
@@ -55,6 +56,7 @@ describe Datagrid::Helper do
|
|
55
56
|
class TestGrid
|
56
57
|
include Datagrid
|
57
58
|
scope { Entry }
|
59
|
+
column(:id)
|
58
60
|
end
|
59
61
|
end
|
60
62
|
expect(subject.datagrid_table(::Ns23::TestGrid.new)).to match_css_pattern(
|
@@ -128,6 +130,18 @@ describe Datagrid::Helper do
|
|
128
130
|
end
|
129
131
|
end
|
130
132
|
|
133
|
+
context "when grid has no columns" do
|
134
|
+
let(:grid) do
|
135
|
+
test_report do
|
136
|
+
scope {Entry}
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
it "should render no_columns message" do
|
141
|
+
expect(subject.datagrid_table(grid, [entry])).to equal_to_dom("No columns selected")
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
131
145
|
context 'with partials attribute' do
|
132
146
|
let(:grid) do
|
133
147
|
test_report do
|
data/spec/spec_helper.rb
CHANGED
@@ -75,6 +75,7 @@ RSpec.configure do |config|
|
|
75
75
|
#TODO better database truncation
|
76
76
|
Group.delete_all
|
77
77
|
Entry.delete_all
|
78
|
+
SequelEntry.where.delete
|
78
79
|
unless NO_MONGO
|
79
80
|
MongoidEntry.delete_all
|
80
81
|
MongoMapperEntry.delete_all
|
@@ -99,6 +100,4 @@ end
|
|
99
100
|
# Requires supporting files with custom matchers and macros, etc,
|
100
101
|
# in ./support/ and its subdirectories.
|
101
102
|
Dir["#{File.dirname(__FILE__)}/support/schema.rb"].each {|f| require f}
|
102
|
-
Dir["#{File.dirname(__FILE__)}/support/mongoid.rb"].each {|f| require f}
|
103
|
-
Dir["#{File.dirname(__FILE__)}/support/mongo_mapper.rb"].each {|f| require f}
|
104
103
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
@@ -8,7 +8,7 @@ class MongoMapperEntry
|
|
8
8
|
key :category, String
|
9
9
|
key :disabled, Boolean, :default => false
|
10
10
|
key :confirmed, Boolean, :default => false
|
11
|
-
key :shipping_date,
|
11
|
+
key :shipping_date, Time
|
12
12
|
timestamps!
|
13
13
|
|
14
14
|
end
|
@@ -22,7 +22,7 @@ class MongoMapperGrid
|
|
22
22
|
|
23
23
|
filter :name
|
24
24
|
integer_range_filters(:group_id, {:default => 0}, {:default => 100})
|
25
|
-
filter :disabled, :
|
25
|
+
filter :disabled, :xboolean
|
26
26
|
|
27
27
|
column :name
|
28
28
|
column :group_id
|
data/spec/support/mongoid.rb
CHANGED
@@ -13,7 +13,7 @@ class MongoidEntry
|
|
13
13
|
field :category, :type => String
|
14
14
|
field :disabled, :default => false, :type => Boolean
|
15
15
|
field :confirmed, :default => false, :type => Boolean
|
16
|
-
field :shipping_date, :type =>
|
16
|
+
field :shipping_date, :type => Time
|
17
17
|
|
18
18
|
end
|
19
19
|
|
@@ -26,7 +26,7 @@ class MongoidGrid
|
|
26
26
|
|
27
27
|
filter :name
|
28
28
|
integer_range_filters(:group_id, {:default => 0}, {:default => 100})
|
29
|
-
filter :disabled, :
|
29
|
+
filter :disabled, :xboolean
|
30
30
|
|
31
31
|
column :name
|
32
32
|
column :group_id
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require "sequel"
|
2
|
+
|
3
|
+
|
4
|
+
DB = Sequel.sqlite # memory database
|
5
|
+
|
6
|
+
DB.create_table :sequel_entries do
|
7
|
+
primary_key :id
|
8
|
+
|
9
|
+
Integer :group_id
|
10
|
+
String :name
|
11
|
+
String :category
|
12
|
+
Boolean :disabled
|
13
|
+
Boolean :confirmed
|
14
|
+
Time :shipping_date
|
15
|
+
Time :created_at
|
16
|
+
end
|
17
|
+
|
18
|
+
class SequelEntry < Sequel::Model
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
class SequelGrid
|
24
|
+
include ::Datagrid
|
25
|
+
|
26
|
+
scope do
|
27
|
+
SequelEntry
|
28
|
+
end
|
29
|
+
|
30
|
+
filter :name
|
31
|
+
integer_range_filters(:group_id, {:default => 0}, {:default => 100})
|
32
|
+
filter :disabled, :xboolean
|
33
|
+
|
34
|
+
column :name
|
35
|
+
column :group_id
|
36
|
+
column :disabled
|
37
|
+
|
38
|
+
end
|
39
|
+
|
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.4.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: 2015-05
|
11
|
+
date: 2015-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -122,6 +122,20 @@ dependencies:
|
|
122
122
|
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
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: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - ">="
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: mongoid
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
@@ -140,14 +154,14 @@ dependencies:
|
|
140
154
|
name: mongo_mapper
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
|
-
- - "
|
157
|
+
- - "~>"
|
144
158
|
- !ruby/object:Gem::Version
|
145
159
|
version: 0.11.0
|
146
160
|
type: :development
|
147
161
|
prerelease: false
|
148
162
|
version_requirements: !ruby/object:Gem::Requirement
|
149
163
|
requirements:
|
150
|
-
- - "
|
164
|
+
- - "~>"
|
151
165
|
- !ruby/object:Gem::Version
|
152
166
|
version: 0.11.0
|
153
167
|
- !ruby/object:Gem::Dependency
|
@@ -217,6 +231,7 @@ files:
|
|
217
231
|
- lib/datagrid/drivers/array.rb
|
218
232
|
- lib/datagrid/drivers/mongo_mapper.rb
|
219
233
|
- lib/datagrid/drivers/mongoid.rb
|
234
|
+
- lib/datagrid/drivers/sequel.rb
|
220
235
|
- lib/datagrid/engine.rb
|
221
236
|
- lib/datagrid/filters.rb
|
222
237
|
- lib/datagrid/filters/base_filter.rb
|
@@ -251,6 +266,7 @@ files:
|
|
251
266
|
- spec/datagrid/drivers/array_spec.rb
|
252
267
|
- spec/datagrid/drivers/mongo_mapper_spec.rb
|
253
268
|
- spec/datagrid/drivers/mongoid_spec.rb
|
269
|
+
- spec/datagrid/drivers/sequel_spec.rb
|
254
270
|
- spec/datagrid/filters/boolean_enum_filter_spec.rb
|
255
271
|
- spec/datagrid/filters/composite_filters_spec.rb
|
256
272
|
- spec/datagrid/filters/date_filter_spec.rb
|
@@ -276,6 +292,7 @@ files:
|
|
276
292
|
- spec/support/matchers.rb
|
277
293
|
- spec/support/mongo_mapper.rb
|
278
294
|
- spec/support/mongoid.rb
|
295
|
+
- spec/support/sequel.rb
|
279
296
|
- spec/support/simple_report.rb
|
280
297
|
- spec/support/test_partials/_actions.html.erb
|
281
298
|
- spec/support/test_partials/client/datagrid/_form.html.erb
|