datagrid 1.0.3 → 1.0.4
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 +7 -0
- data/Gemfile +1 -0
- data/Readme.markdown +11 -11
- data/VERSION +1 -1
- data/app/assets/stylesheets/datagrid.css.sass +6 -0
- data/datagrid.gemspec +12 -4
- data/lib/datagrid/configuration.rb +1 -1
- data/lib/datagrid/drivers/active_record.rb +1 -1
- data/lib/datagrid/filters.rb +11 -7
- data/lib/datagrid/filters/base_filter.rb +2 -2
- data/lib/datagrid/filters/boolean_enum_filter.rb +0 -8
- data/lib/datagrid/filters/date_time_filter.rb +25 -0
- data/lib/datagrid/filters/extended_boolean_filter.rb +23 -0
- data/lib/datagrid/form_builder.rb +19 -11
- data/lib/datagrid/locale/en.yml +8 -0
- data/lib/datagrid/scaffold.rb +3 -0
- data/lib/datagrid/utils.rb +22 -1
- data/spec/datagrid/core_spec.rb +5 -5
- data/spec/datagrid/filters/date_time_filter_spec.rb +150 -0
- data/spec/datagrid/filters/extended_boolean_filter_spec.rb +35 -0
- data/spec/datagrid/form_builder_spec.rb +22 -6
- data/spec/spec_helper.rb +8 -0
- data/spec/support/configuration.rb +15 -0
- metadata +45 -58
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a33a74ea728f66eb12ea5cc90b17d9be026ac0c1
|
4
|
+
data.tar.gz: fa60a6ba1ff9812693f313604a6e35a39ad0b84c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: cb4e447b826333a3034cbcf6fc44a95e3ff3fa4266c9868295aa12bc0222391bdb458e8ea45568970b85363fd28944dfe4ed2f3550c60c0faa34c7749aacdd52
|
7
|
+
data.tar.gz: 2f1bcbe542567a33be0583b8f6c285d249e0c3d9fd88d0e9fa9a0ea1e573f51ba2050954d0cd4b8a6e2e334f8c152f0fdefacf205665cf019c7d6134972b288a
|
data/Gemfile
CHANGED
data/Readme.markdown
CHANGED
@@ -38,11 +38,10 @@ class SimpleReport
|
|
38
38
|
end
|
39
39
|
|
40
40
|
filter(:category, :enum, :select => ["first", "second"])
|
41
|
-
filter(:disabled, :
|
42
|
-
filter(:confirmed, :boolean)
|
41
|
+
filter(:disabled, :xboolean)
|
43
42
|
filter(:group_id, :integer, :multiple => true)
|
44
|
-
filter(:logins_count, :integer, :range => true
|
45
|
-
filter(:group_name, :string, :header => "Group"
|
43
|
+
filter(:logins_count, :integer, :range => true)
|
44
|
+
filter(:group_name, :string, :header => "Group") do |value|
|
46
45
|
self.joins(:group).where(:groups => {:name => value})
|
47
46
|
end
|
48
47
|
|
@@ -61,13 +60,13 @@ Basic grid api:
|
|
61
60
|
|
62
61
|
``` ruby
|
63
62
|
report = SimpleReport.new(
|
64
|
-
:group_id => [1,2], :from_logins_count => 1,
|
63
|
+
:group_id => [1,2], :from_logins_count => 1,
|
65
64
|
:category => "first",
|
66
65
|
:order => :group,
|
67
66
|
:descending => true
|
68
67
|
)
|
69
68
|
|
70
|
-
report.assets # => Array of User instances:
|
69
|
+
report.assets # => Array of User instances:
|
71
70
|
# SELECT * FROM users WHERE users.group_id in (1,2) AND users.logins_count >= 1 AND users.category = 'first' ORDER BY groups.name DESC
|
72
71
|
|
73
72
|
report.header # => ["Name", "Group", "Activated"]
|
@@ -118,8 +117,9 @@ Datagrid supports different type of filters including:
|
|
118
117
|
* integer
|
119
118
|
* float
|
120
119
|
* date
|
120
|
+
* datetime
|
121
121
|
* boolean
|
122
|
-
*
|
122
|
+
* xboolean - the select of "yes", "no" and any
|
123
123
|
* enum
|
124
124
|
* string
|
125
125
|
* dynamic
|
@@ -137,10 +137,10 @@ column(:activated, :header => "Active", :order => "activated", :after => :name)
|
|
137
137
|
end
|
138
138
|
```
|
139
139
|
|
140
|
-
Some formatting options are also available.
|
140
|
+
Some formatting options are also available.
|
141
141
|
Each column is sortable.
|
142
142
|
|
143
|
-
[More about columns](https://github.com/bogdan/datagrid/wiki/Columns)
|
143
|
+
[More about columns](https://github.com/bogdan/datagrid/wiki/Columns)
|
144
144
|
|
145
145
|
### Front end
|
146
146
|
|
@@ -178,8 +178,8 @@ All advanced frontend things are described in:
|
|
178
178
|
|
179
179
|
## Self-Promotion
|
180
180
|
|
181
|
-
Like datagrid?
|
181
|
+
Like datagrid?
|
182
182
|
|
183
|
-
Follow the repository on [GitHub](https://github.com/bogdan/datagrid).
|
183
|
+
Follow the repository on [GitHub](https://github.com/bogdan/datagrid).
|
184
184
|
|
185
185
|
Read [author blog](http://gusiev.com).
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0.
|
1
|
+
1.0.4
|
data/datagrid.gemspec
CHANGED
@@ -2,14 +2,15 @@
|
|
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.0.4 ruby lib
|
5
6
|
|
6
7
|
Gem::Specification.new do |s|
|
7
8
|
s.name = "datagrid"
|
8
|
-
s.version = "1.0.
|
9
|
+
s.version = "1.0.4"
|
9
10
|
|
10
11
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
12
|
s.authors = ["Bogdan Gusiev"]
|
12
|
-
s.date = "
|
13
|
+
s.date = "2014-01-15"
|
13
14
|
s.description = "This allows you to easily build datagrid aka data tables with sortable columns and filters"
|
14
15
|
s.email = "agresso@gmail.com"
|
15
16
|
s.extra_rdoc_files = [
|
@@ -50,9 +51,11 @@ Gem::Specification.new do |s|
|
|
50
51
|
"lib/datagrid/filters/boolean_filter.rb",
|
51
52
|
"lib/datagrid/filters/composite_filters.rb",
|
52
53
|
"lib/datagrid/filters/date_filter.rb",
|
54
|
+
"lib/datagrid/filters/date_time_filter.rb",
|
53
55
|
"lib/datagrid/filters/default_filter.rb",
|
54
56
|
"lib/datagrid/filters/dynamic_filter.rb",
|
55
57
|
"lib/datagrid/filters/enum_filter.rb",
|
58
|
+
"lib/datagrid/filters/extended_boolean_filter.rb",
|
56
59
|
"lib/datagrid/filters/float_filter.rb",
|
57
60
|
"lib/datagrid/filters/integer_filter.rb",
|
58
61
|
"lib/datagrid/filters/ranged_filter.rb",
|
@@ -79,8 +82,10 @@ Gem::Specification.new do |s|
|
|
79
82
|
"spec/datagrid/filters/boolean_enum_filter_spec.rb",
|
80
83
|
"spec/datagrid/filters/composite_filters_spec.rb",
|
81
84
|
"spec/datagrid/filters/date_filter_spec.rb",
|
85
|
+
"spec/datagrid/filters/date_time_filter_spec.rb",
|
82
86
|
"spec/datagrid/filters/dynamic_filter_spec.rb",
|
83
87
|
"spec/datagrid/filters/enum_filter_spec.rb",
|
88
|
+
"spec/datagrid/filters/extended_boolean_filter_spec.rb",
|
84
89
|
"spec/datagrid/filters/float_filter_spec.rb",
|
85
90
|
"spec/datagrid/filters/integer_filter_spec.rb",
|
86
91
|
"spec/datagrid/filters/string_filter_spec.rb",
|
@@ -106,17 +111,18 @@ Gem::Specification.new do |s|
|
|
106
111
|
s.homepage = "http://github.com/bogdan/datagrid"
|
107
112
|
s.licenses = ["MIT"]
|
108
113
|
s.require_paths = ["lib"]
|
109
|
-
s.rubygems_version = "1.
|
114
|
+
s.rubygems_version = "2.1.10"
|
110
115
|
s.summary = "Ruby gem to create datagrids"
|
111
116
|
|
112
117
|
if s.respond_to? :specification_version then
|
113
|
-
s.specification_version =
|
118
|
+
s.specification_version = 4
|
114
119
|
|
115
120
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
116
121
|
s.add_runtime_dependency(%q<rails>, [">= 3.0"])
|
117
122
|
s.add_development_dependency(%q<bundler>, [">= 0"])
|
118
123
|
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
119
124
|
s.add_development_dependency(%q<debugger>, [">= 0"])
|
125
|
+
s.add_development_dependency(%q<byebug>, [">= 0"])
|
120
126
|
s.add_development_dependency(%q<ruby-debug>, [">= 0"])
|
121
127
|
s.add_development_dependency(%q<rspec>, [">= 0"])
|
122
128
|
s.add_development_dependency(%q<nokogiri>, [">= 0"])
|
@@ -131,6 +137,7 @@ Gem::Specification.new do |s|
|
|
131
137
|
s.add_dependency(%q<bundler>, [">= 0"])
|
132
138
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
133
139
|
s.add_dependency(%q<debugger>, [">= 0"])
|
140
|
+
s.add_dependency(%q<byebug>, [">= 0"])
|
134
141
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
135
142
|
s.add_dependency(%q<rspec>, [">= 0"])
|
136
143
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
@@ -146,6 +153,7 @@ Gem::Specification.new do |s|
|
|
146
153
|
s.add_dependency(%q<bundler>, [">= 0"])
|
147
154
|
s.add_dependency(%q<jeweler>, [">= 0"])
|
148
155
|
s.add_dependency(%q<debugger>, [">= 0"])
|
156
|
+
s.add_dependency(%q<byebug>, [">= 0"])
|
149
157
|
s.add_dependency(%q<ruby-debug>, [">= 0"])
|
150
158
|
s.add_dependency(%q<rspec>, [">= 0"])
|
151
159
|
s.add_dependency(%q<nokogiri>, [">= 0"])
|
@@ -18,7 +18,7 @@ module Datagrid
|
|
18
18
|
# We can only reveal it by checking if it respond to some specific
|
19
19
|
# to ActiveRecord method like #scoped
|
20
20
|
if scope.is_a?(Class)
|
21
|
-
scope.scoped({})
|
21
|
+
Rails.version >= "4.0" ? scope.all : scope.scoped({})
|
22
22
|
elsif scope.respond_to?(:scoped)
|
23
23
|
scope.scoped
|
24
24
|
else
|
data/lib/datagrid/filters.rb
CHANGED
@@ -6,8 +6,10 @@ module Datagrid
|
|
6
6
|
require "datagrid/filters/base_filter"
|
7
7
|
require "datagrid/filters/enum_filter"
|
8
8
|
require "datagrid/filters/boolean_enum_filter"
|
9
|
+
require "datagrid/filters/extended_boolean_filter"
|
9
10
|
require "datagrid/filters/boolean_filter"
|
10
11
|
require "datagrid/filters/date_filter"
|
12
|
+
require "datagrid/filters/date_time_filter"
|
11
13
|
require "datagrid/filters/default_filter"
|
12
14
|
require "datagrid/filters/integer_filter"
|
13
15
|
require "datagrid/filters/composite_filters"
|
@@ -17,9 +19,11 @@ module Datagrid
|
|
17
19
|
|
18
20
|
FILTER_TYPES = {
|
19
21
|
:date => Filters::DateFilter,
|
22
|
+
:datetime => Filters::DateTimeFilter,
|
20
23
|
:string => Filters::StringFilter,
|
21
24
|
:default => Filters::DefaultFilter,
|
22
25
|
:eboolean => Filters::BooleanEnumFilter ,
|
26
|
+
:xboolean => Filters::ExtendedBooleanFilter ,
|
23
27
|
:boolean => Filters::BooleanFilter ,
|
24
28
|
:integer => Filters::IntegerFilter,
|
25
29
|
:enum => Filters::EnumFilter,
|
@@ -52,7 +56,7 @@ module Datagrid
|
|
52
56
|
# Defines new datagrid filter.
|
53
57
|
# This method automatically generates <tt>attr_accessor</tt> for filter name
|
54
58
|
# and adds it to the list of datagrid attributes.
|
55
|
-
#
|
59
|
+
#
|
56
60
|
# Arguments:
|
57
61
|
#
|
58
62
|
# * <tt>name</tt> - filter name
|
@@ -61,19 +65,19 @@ module Datagrid
|
|
61
65
|
# * <tt>block</tt> - proc to apply the filter
|
62
66
|
#
|
63
67
|
# Available options:
|
64
|
-
#
|
68
|
+
#
|
65
69
|
# * <tt>:header</tt> - determines the header of the filter
|
66
70
|
# * <tt>:default</tt> - the default filter value. Able to accept a <tt>Proc</tt> in case default should be recalculated
|
67
|
-
# * <tt>:multiple</tt> - if true multiple values can be assigned to this filter.
|
68
|
-
# By default multiple values are parsed from string using `,` separator.
|
71
|
+
# * <tt>:multiple</tt> - if true multiple values can be assigned to this filter.
|
72
|
+
# By default multiple values are parsed from string using `,` separator.
|
69
73
|
# But you can specify a different separator as option value. Default: false.
|
70
74
|
# * <tt>:allow_nil</tt> - determines if the value can be nil
|
71
75
|
# * <tt>:allow_blank</tt> - determines if the value can be blank
|
72
|
-
# * <tt>:before</tt> - determines the position of this filter,
|
76
|
+
# * <tt>:before</tt> - determines the position of this filter,
|
73
77
|
# by adding it before the filter passed here (when using datagrid_form_for helper)
|
74
|
-
# * <tt>:after</tt> - determines the position of this filter,
|
78
|
+
# * <tt>:after</tt> - determines the position of this filter,
|
75
79
|
# by adding it after the filter passed here (when using datagrid_form_for helper)
|
76
|
-
# * <tt>:dummy</tt> - if true, this filter will not be applied automatically
|
80
|
+
# * <tt>:dummy</tt> - if true, this filter will not be applied automatically
|
77
81
|
# and will be just displayed in form. In case you may want to apply it manually.
|
78
82
|
#
|
79
83
|
# See: https://github.com/bogdan/datagrid/wiki/Filters for examples
|
@@ -16,7 +16,6 @@ class Datagrid::Filters::BaseFilter #:nodoc:
|
|
16
16
|
raise NotImplementedError, "#parse(value) suppose to be overwritten"
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
19
|
def unapplicable_value?(value)
|
21
20
|
value.nil? ? !allow_nil? : value.blank? && !allow_blank?
|
22
21
|
end
|
@@ -87,11 +86,12 @@ class Datagrid::Filters::BaseFilter #:nodoc:
|
|
87
86
|
def default_filter_block
|
88
87
|
filter = self
|
89
88
|
lambda do |value, scope, grid|
|
90
|
-
filter.
|
89
|
+
filter.default_filter(value, scope, grid)
|
91
90
|
end
|
92
91
|
end
|
93
92
|
|
94
93
|
def default_filter(value, scope, grid)
|
94
|
+
return nil if dummy?
|
95
95
|
driver = grid.driver
|
96
96
|
if !driver.has_column?(scope, name) && driver.to_scope(scope).respond_to?(name)
|
97
97
|
driver.to_scope(scope).send(name, value)
|
@@ -10,12 +10,4 @@ class Datagrid::Filters::BooleanEnumFilter < Datagrid::Filters::EnumFilter #:nod
|
|
10
10
|
super(report, attribute, options, &block)
|
11
11
|
end
|
12
12
|
|
13
|
-
def apply(grid_object, scope, value)
|
14
|
-
super(grid_object, scope, value)
|
15
|
-
end
|
16
|
-
|
17
|
-
def to_boolean(value)
|
18
|
-
#TODO decide what to do with conversion
|
19
|
-
end
|
20
|
-
|
21
13
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "datagrid/filters/ranged_filter"
|
2
|
+
|
3
|
+
class Datagrid::Filters::DateTimeFilter < Datagrid::Filters::BaseFilter
|
4
|
+
|
5
|
+
include RangedFilter
|
6
|
+
|
7
|
+
def parse(value)
|
8
|
+
Datagrid::Utils.parse_datetime(value)
|
9
|
+
end
|
10
|
+
|
11
|
+
def format(value)
|
12
|
+
if formats.any? && value
|
13
|
+
value.strftime(formats.first)
|
14
|
+
else
|
15
|
+
super
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def formats
|
22
|
+
Array(Datagrid.configuration.datetime_formats)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class Datagrid::Filters::ExtendedBooleanFilter < Datagrid::Filters::EnumFilter #:nodoc:
|
2
|
+
|
3
|
+
YES = "YES"
|
4
|
+
NO = "NO"
|
5
|
+
|
6
|
+
def initialize(report, attribute, options = {}, &block)
|
7
|
+
options[:select] = [YES, NO].map do |key, value|
|
8
|
+
[I18n.t("datagrid.filters.xboolean.#{key.downcase}"), key]
|
9
|
+
end
|
10
|
+
super(report, attribute, options, &block)
|
11
|
+
end
|
12
|
+
|
13
|
+
def execute(value, scope, grid_object)
|
14
|
+
value = value.blank? ? nil : ::Datagrid::Utils.booleanize(value)
|
15
|
+
super(value, scope, grid_object)
|
16
|
+
end
|
17
|
+
|
18
|
+
def parse(value)
|
19
|
+
return nil if value.blank?
|
20
|
+
super(value)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -11,15 +11,18 @@ module Datagrid
|
|
11
11
|
end
|
12
12
|
|
13
13
|
# Returns a form label html for the corresponding filter name
|
14
|
-
def datagrid_label(filter_or_attribute, options = {})
|
14
|
+
def datagrid_label(filter_or_attribute, options = {}, &block)
|
15
15
|
filter = datagrid_get_filter(filter_or_attribute)
|
16
|
-
|
16
|
+
label(filter.name, filter.header, options, &block)
|
17
17
|
end
|
18
18
|
|
19
19
|
protected
|
20
20
|
def datagrid_boolean_enum_filter(attribute_or_filter, options = {})
|
21
21
|
datagrid_enum_filter(attribute_or_filter, options)
|
22
22
|
end
|
23
|
+
def datagrid_extended_boolean_filter(attribute_or_filter, options = {})
|
24
|
+
datagrid_enum_filter(attribute_or_filter, options)
|
25
|
+
end
|
23
26
|
|
24
27
|
def datagrid_boolean_filter(attribute_or_filter, options = {})
|
25
28
|
check_box(datagrid_get_attribute(attribute_or_filter), options.reverse_merge(datagrid_extra_checkbox_options))
|
@@ -29,6 +32,10 @@ module Datagrid
|
|
29
32
|
datagrid_range_filter(:date, attribute_or_filter, options)
|
30
33
|
end
|
31
34
|
|
35
|
+
def datagrid_date_time_filter(attribute_or_filter, options = {})
|
36
|
+
datagrid_range_filter(:datetime, attribute_or_filter, options)
|
37
|
+
end
|
38
|
+
|
32
39
|
def datagrid_default_filter(attribute_or_filter, options = {})
|
33
40
|
filter = datagrid_get_filter(attribute_or_filter)
|
34
41
|
text_field filter.name, options.reverse_merge(:value => object.filter_value_as_string(filter))
|
@@ -37,6 +44,7 @@ module Datagrid
|
|
37
44
|
def datagrid_enum_filter(attribute_or_filter, options = {})
|
38
45
|
filter = datagrid_get_filter(attribute_or_filter)
|
39
46
|
if filter.checkboxes?
|
47
|
+
options = add_html_classes(options, 'checkboxes')
|
40
48
|
filter.select(object).map do |element|
|
41
49
|
text, value = @template.send(:option_text_and_value, element)
|
42
50
|
id = [object_name, filter.name, value].join('_').underscore
|
@@ -110,15 +118,15 @@ module Datagrid
|
|
110
118
|
options[:value] = filter.format(object[filter.name].try(type_method_map[type]))
|
111
119
|
# In case of datagrid ranged filter
|
112
120
|
# from and to input will have same id
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
121
|
+
if !options.key?(:id)
|
122
|
+
# Rails provides it's own default id for all inputs
|
123
|
+
# In order to prevent that we assign no id by default
|
124
|
+
options[:id] = nil
|
125
|
+
elsif options[:id].present?
|
126
|
+
# If the id was given we prefix it
|
127
|
+
# with from_ and to_ accordingly
|
128
|
+
options[:id] = [type, options[:id]].join("_")
|
129
|
+
end
|
122
130
|
options
|
123
131
|
end
|
124
132
|
|
data/lib/datagrid/locale/en.yml
CHANGED
@@ -16,10 +16,18 @@ en:
|
|
16
16
|
date:
|
17
17
|
range_separator:
|
18
18
|
"<span class=\"separator date\"> - </span>"
|
19
|
+
datetime:
|
20
|
+
range_separator:
|
21
|
+
"<span class=\"separator datetime\"> - </span>"
|
19
22
|
|
20
23
|
eboolean:
|
21
24
|
"yes": "Yes"
|
22
25
|
"no": "No"
|
26
|
+
|
27
|
+
xboolean:
|
28
|
+
"yes": "Yes"
|
29
|
+
"no": "No"
|
30
|
+
|
23
31
|
dynamic:
|
24
32
|
operations:
|
25
33
|
">=": "≥"
|
data/lib/datagrid/scaffold.rb
CHANGED
@@ -8,6 +8,9 @@ class Datagrid::Scaffold < Rails::Generators::NamedBase
|
|
8
8
|
template "controller.rb.erb", "app/controllers/#{grid_controller_name.underscore}.rb"
|
9
9
|
template "index.html.erb", "app/views/#{grid_controller_short_name}/index.html.erb"
|
10
10
|
route("resources :#{grid_controller_short_name}")
|
11
|
+
in_root do
|
12
|
+
inject_into_file "app/assets/stylesheets/application.css", " *= require datagrid", {:before => %r{require_self}} # before all
|
13
|
+
end
|
11
14
|
end
|
12
15
|
|
13
16
|
def grid_class_name
|
data/lib/datagrid/utils.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
module Datagrid
|
1
|
+
module Datagrid
|
2
2
|
module Utils # :nodoc:
|
3
3
|
class << self
|
4
4
|
|
@@ -6,6 +6,9 @@ module Datagrid
|
|
6
6
|
TRUTH = [true, 1, "1", "true", "yes", "on"]
|
7
7
|
|
8
8
|
def booleanize(value)
|
9
|
+
if value.respond_to?(:downcase)
|
10
|
+
value = value.downcase
|
11
|
+
end
|
9
12
|
TRUTH.include?(value)
|
10
13
|
end
|
11
14
|
|
@@ -73,6 +76,24 @@ module Datagrid
|
|
73
76
|
nil
|
74
77
|
end
|
75
78
|
|
79
|
+
def parse_datetime(value)
|
80
|
+
return nil if value.blank?
|
81
|
+
return value if value.is_a?(Range)
|
82
|
+
if value.is_a?(String)
|
83
|
+
Array(Datagrid.configuration.datetime_formats).each do |format|
|
84
|
+
begin
|
85
|
+
return DateTime.strptime(value, format)
|
86
|
+
rescue ::ArgumentError
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
return DateTime.parse(value) if value.is_a?(String)
|
91
|
+
return value.to_datetime if value.respond_to?(:to_datetime)
|
92
|
+
value
|
93
|
+
rescue ::ArgumentError
|
94
|
+
nil
|
95
|
+
end
|
96
|
+
|
76
97
|
def format_date_as_timestamp(value)
|
77
98
|
if !value
|
78
99
|
value
|
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 have(2).item }
|
18
|
+
it { expect(report.scope.to_a).to have(2).item }
|
19
19
|
end
|
20
20
|
|
21
21
|
context 'changes scope on the fly' do
|
@@ -25,25 +25,25 @@ describe Datagrid::Core do
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
it { expect(report.scope).to have(1).item }
|
28
|
+
it { expect(report.scope.to_a).to have(1).item }
|
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 have(1).item }
|
34
|
+
it { expect(report.scope.to_a).to have(1).item }
|
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 have(2).item }
|
40
|
+
it { expect(report.scope.to_a).to have(2).item }
|
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 have(1).item }
|
46
|
+
it { expect(report.scope.to_a).to have(1).item }
|
47
47
|
it { expect(report.scope.order_values).to have(1).item }
|
48
48
|
end
|
49
49
|
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Datagrid::Filters::DateTimeFilter do
|
4
|
+
{:active_record => Entry, :mongoid => MongoidEntry}.each do |orm, klass|
|
5
|
+
describe "with orm #{orm}" do
|
6
|
+
describe "timestamp to timestamp conversion" do
|
7
|
+
let(:klass) { klass }
|
8
|
+
subject do
|
9
|
+
test_report(:created_at => _created_at) do
|
10
|
+
scope { klass }
|
11
|
+
filter(:created_at, :datetime, :range => true)
|
12
|
+
end.assets.to_a
|
13
|
+
end
|
14
|
+
|
15
|
+
def entry_dated(date)
|
16
|
+
klass.create(:created_at => date)
|
17
|
+
end
|
18
|
+
|
19
|
+
context "when single datetime paramter given" do
|
20
|
+
let(:_created_at) { DateTime.now }
|
21
|
+
it { should include(entry_dated(_created_at))}
|
22
|
+
it { should_not include(entry_dated(_created_at - 1.second))}
|
23
|
+
it { should_not include(entry_dated(_created_at + 1.second))}
|
24
|
+
end
|
25
|
+
|
26
|
+
context "when range datetime range given" do
|
27
|
+
let(:_created_at) { [DateTime.now.beginning_of_day, DateTime.now.end_of_day] }
|
28
|
+
it { should include(entry_dated(1.second.ago))}
|
29
|
+
it { should include(entry_dated(Date.today.to_datetime))}
|
30
|
+
it { should include(entry_dated(Date.today.end_of_day.to_datetime))}
|
31
|
+
it { should_not include(entry_dated(Date.yesterday.end_of_day))}
|
32
|
+
it { should_not include(entry_dated(Date.tomorrow.beginning_of_day))}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should support datetime range given as array argument" do
|
40
|
+
e1 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 1, 0))
|
41
|
+
e2 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 2, 0))
|
42
|
+
e3 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 3, 0))
|
43
|
+
report = test_report(:created_at => [DateTime.new(2013, 1, 1, 1, 30).to_s, DateTime.new(2013, 1, 1, 2, 30).to_s]) do
|
44
|
+
scope { Entry }
|
45
|
+
filter(:created_at, :datetime, :range => true)
|
46
|
+
end
|
47
|
+
report.assets.should_not include(e1)
|
48
|
+
report.assets.should include(e2)
|
49
|
+
report.assets.should_not include(e3)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should support minimum datetime argument" do
|
53
|
+
e1 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 1, 0))
|
54
|
+
e2 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 2, 0))
|
55
|
+
e3 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 3, 0))
|
56
|
+
report = test_report(:created_at => [DateTime.new(2013, 1, 1, 1, 30).to_s, nil]) do
|
57
|
+
scope { Entry }
|
58
|
+
filter(:created_at, :datetime, :range => true)
|
59
|
+
end
|
60
|
+
report.assets.should_not include(e1)
|
61
|
+
report.assets.should include(e2)
|
62
|
+
report.assets.should include(e3)
|
63
|
+
end
|
64
|
+
|
65
|
+
it "should support maximum datetime argument" do
|
66
|
+
e1 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 1, 0))
|
67
|
+
e2 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 2, 0))
|
68
|
+
e3 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 3, 0))
|
69
|
+
report = test_report(:created_at => [nil, DateTime.new(2013, 1, 1, 2, 30).to_s]) do
|
70
|
+
scope { Entry }
|
71
|
+
filter(:created_at, :datetime, :range => true)
|
72
|
+
end
|
73
|
+
report.assets.should include(e1)
|
74
|
+
report.assets.should include(e2)
|
75
|
+
report.assets.should_not include(e3)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should find something in one second interval" do
|
79
|
+
|
80
|
+
e1 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 1, 0))
|
81
|
+
e2 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 2, 0))
|
82
|
+
e3 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 3, 0))
|
83
|
+
report = test_report(:created_at => (DateTime.new(2013, 1, 1, 2, 0)..DateTime.new(2013, 1, 1, 2, 0))) do
|
84
|
+
scope { Entry }
|
85
|
+
filter(:created_at, :datetime, :range => true)
|
86
|
+
end
|
87
|
+
report.assets.should_not include(e1)
|
88
|
+
report.assets.should include(e2)
|
89
|
+
report.assets.should_not include(e3)
|
90
|
+
end
|
91
|
+
it "should support invalid range" do
|
92
|
+
|
93
|
+
e1 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 1, 0))
|
94
|
+
e2 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 2, 0))
|
95
|
+
e3 = Entry.create!(:created_at => DateTime.new(2013, 1, 1, 3, 0))
|
96
|
+
report = test_report(:created_at => (DateTime.new(2013, 1, 1, 3, 0)..DateTime.new(2013, 1, 1, 1, 0))) do
|
97
|
+
scope { Entry }
|
98
|
+
filter(:created_at, :datetime, :range => true)
|
99
|
+
end
|
100
|
+
report.assets.should_not include(e1)
|
101
|
+
report.assets.should_not include(e2)
|
102
|
+
report.assets.should_not include(e3)
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
it "should support block" do
|
107
|
+
report = test_report(:created_at => DateTime.now) do
|
108
|
+
scope { Entry }
|
109
|
+
filter(:created_at, :datetime, :range => true) do |value|
|
110
|
+
where("created_at >= ?", value)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
report.assets.should_not include(Entry.create!(:created_at => 1.day.ago))
|
114
|
+
report.assets.should include(Entry.create!(:created_at => DateTime.tomorrow))
|
115
|
+
end
|
116
|
+
|
117
|
+
|
118
|
+
context "when datetime format is configured" do
|
119
|
+
around(:each) do |example|
|
120
|
+
with_datetime_format(format = "%m/%d/%Y %H:%M") do
|
121
|
+
example.run
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should have configurable datetime format" do
|
126
|
+
report = test_report(:created_at => "10/01/2013 01:00") do
|
127
|
+
scope {Entry}
|
128
|
+
filter(:created_at, :datetime)
|
129
|
+
end
|
130
|
+
report.created_at.should == DateTime.new(2013,10,01,1,0)
|
131
|
+
end
|
132
|
+
|
133
|
+
it "should support default explicit datetime" do
|
134
|
+
report = test_report(:created_at => DateTime.parse("2013-10-01 01:00")) do
|
135
|
+
scope {Entry}
|
136
|
+
filter(:created_at, :datetime)
|
137
|
+
end
|
138
|
+
report.created_at.should == DateTime.new(2013,10,01,1,0)
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
142
|
+
|
143
|
+
it "should automatically reverse Array if first more than last" do
|
144
|
+
report = test_report(:created_at => ["2013-01-01 01:00", "2012-01-01 01:00"]) do
|
145
|
+
scope {Entry}
|
146
|
+
filter(:created_at, :datetime, :range => true)
|
147
|
+
end
|
148
|
+
report.created_at.should == [DateTime.new(2012, 01, 01, 1, 0), DateTime.new(2013, 01, 01, 1, 0)]
|
149
|
+
end
|
150
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Datagrid::Filters::ExtendedBooleanFilter do
|
4
|
+
|
5
|
+
it "should support select option" do
|
6
|
+
test_report do
|
7
|
+
scope {Entry}
|
8
|
+
filter(:disabled, :xboolean)
|
9
|
+
end.class.filter_by_name(:disabled).select.should == [["Yes", "YES"], ["No", "NO"]]
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should generate pass boolean value to filter block" do
|
13
|
+
grid = test_report do
|
14
|
+
scope {Entry}
|
15
|
+
filter(:disabled, :xboolean)
|
16
|
+
end
|
17
|
+
|
18
|
+
disabled_entry = Entry.create!(:disabled => true)
|
19
|
+
enabled_entry = Entry.create!(:disabled => false)
|
20
|
+
|
21
|
+
grid.disabled.should be_nil
|
22
|
+
grid.assets.should include(disabled_entry, enabled_entry)
|
23
|
+
grid.disabled = "YES"
|
24
|
+
|
25
|
+
grid.disabled.should == "YES"
|
26
|
+
grid.assets.should include(disabled_entry)
|
27
|
+
grid.assets.should_not include(enabled_entry)
|
28
|
+
grid.disabled = "NO"
|
29
|
+
grid.disabled.should == "NO"
|
30
|
+
grid.assets.should include(enabled_entry)
|
31
|
+
grid.assets.should_not include(disabled_entry)
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
@@ -234,12 +234,23 @@ describe Datagrid::FormBuilder do
|
|
234
234
|
end
|
235
235
|
end
|
236
236
|
let(:_filter) { :category }
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
<label class="category enum_filter" for="
|
241
|
-
|
242
|
-
|
237
|
+
if Rails.version >= "4.0"
|
238
|
+
it { should equal_to_dom(
|
239
|
+
'
|
240
|
+
<label class="category enum_filter checkboxes" for="report_category_first"><input id="report_category_first" name="report[category][]" type="checkbox" value="first" />first</label>
|
241
|
+
<label class="category enum_filter checkboxes" for="report_category_second"><input id="report_category_second" name="report[category][]" type="checkbox" value="second" />second</label>
|
242
|
+
'
|
243
|
+
)}
|
244
|
+
else
|
245
|
+
it { should equal_to_dom(
|
246
|
+
'
|
247
|
+
<label class="category enum_filter checkboxes" for="report_category_first"><input name="report[category][]" type="hidden"><input id="report_category_first" name="report[category][]" type="checkbox" value="first" />first</label>
|
248
|
+
<label class="category enum_filter checkboxes" for="report_category_second"><input name="report[category][]" type="hidden"><input id="report_category_second" name="report[category][]" type="checkbox" value="second" />second</label>
|
249
|
+
'
|
250
|
+
)}
|
251
|
+
|
252
|
+
|
253
|
+
end
|
243
254
|
end
|
244
255
|
end
|
245
256
|
|
@@ -457,5 +468,10 @@ describe Datagrid::FormBuilder do
|
|
457
468
|
'<label class="foo" for="report_name">Name</label>'
|
458
469
|
)
|
459
470
|
end
|
471
|
+
it "should support block" do
|
472
|
+
view.datagrid_label(:name, :class => 'foo') { 'The Name' }.should equal_to_dom(
|
473
|
+
'<label class="foo" for="report_name">The Name</label>'
|
474
|
+
)
|
475
|
+
end
|
460
476
|
end
|
461
477
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -25,6 +25,14 @@ end
|
|
25
25
|
require 'rspec'
|
26
26
|
require "logger"
|
27
27
|
|
28
|
+
class DatagridTest < Rails::Application
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
if I18n.respond_to?(:enforce_available_locales)
|
33
|
+
I18n.enforce_available_locales = true
|
34
|
+
end
|
35
|
+
|
28
36
|
File.open('spec.log', "w").close
|
29
37
|
TEST_LOGGER = Logger.new('spec.log')
|
30
38
|
|
@@ -11,3 +11,18 @@ def with_date_format(format = "%m/%d/%Y")
|
|
11
11
|
end
|
12
12
|
end
|
13
13
|
end
|
14
|
+
|
15
|
+
def with_datetime_format(format = "%m/%d/%Y")
|
16
|
+
begin
|
17
|
+
old_format = Datagrid.configuration.datetime_formats
|
18
|
+
Datagrid.configure do |config|
|
19
|
+
config.datetime_formats = format
|
20
|
+
end
|
21
|
+
yield
|
22
|
+
ensure
|
23
|
+
Datagrid.configure do |config|
|
24
|
+
config.datetime_formats = old_format
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
metadata
CHANGED
@@ -1,148 +1,144 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: datagrid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.4
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Bogdan Gusiev
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-01-15 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: rails
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '3.0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '3.0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: bundler
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: jeweler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: debugger
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: byebug
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
76
81
|
- !ruby/object:Gem::Version
|
77
82
|
version: '0'
|
78
83
|
- !ruby/object:Gem::Dependency
|
79
84
|
name: ruby-debug
|
80
85
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
86
|
requirements:
|
83
|
-
- -
|
87
|
+
- - '>='
|
84
88
|
- !ruby/object:Gem::Version
|
85
89
|
version: '0'
|
86
90
|
type: :development
|
87
91
|
prerelease: false
|
88
92
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
93
|
requirements:
|
91
|
-
- -
|
94
|
+
- - '>='
|
92
95
|
- !ruby/object:Gem::Version
|
93
96
|
version: '0'
|
94
97
|
- !ruby/object:Gem::Dependency
|
95
98
|
name: rspec
|
96
99
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
100
|
requirements:
|
99
|
-
- -
|
101
|
+
- - '>='
|
100
102
|
- !ruby/object:Gem::Version
|
101
103
|
version: '0'
|
102
104
|
type: :development
|
103
105
|
prerelease: false
|
104
106
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
107
|
requirements:
|
107
|
-
- -
|
108
|
+
- - '>='
|
108
109
|
- !ruby/object:Gem::Version
|
109
110
|
version: '0'
|
110
111
|
- !ruby/object:Gem::Dependency
|
111
112
|
name: nokogiri
|
112
113
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - '>='
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
121
|
requirements:
|
123
|
-
- -
|
122
|
+
- - '>='
|
124
123
|
- !ruby/object:Gem::Version
|
125
124
|
version: '0'
|
126
125
|
- !ruby/object:Gem::Dependency
|
127
126
|
name: sqlite3-ruby
|
128
127
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
128
|
requirements:
|
131
|
-
- -
|
129
|
+
- - '>='
|
132
130
|
- !ruby/object:Gem::Version
|
133
131
|
version: '0'
|
134
132
|
type: :development
|
135
133
|
prerelease: false
|
136
134
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
135
|
requirements:
|
139
|
-
- -
|
136
|
+
- - '>='
|
140
137
|
- !ruby/object:Gem::Version
|
141
138
|
version: '0'
|
142
139
|
- !ruby/object:Gem::Dependency
|
143
140
|
name: mongoid
|
144
141
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
142
|
requirements:
|
147
143
|
- - '='
|
148
144
|
- !ruby/object:Gem::Version
|
@@ -150,7 +146,6 @@ dependencies:
|
|
150
146
|
type: :development
|
151
147
|
prerelease: false
|
152
148
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
149
|
requirements:
|
155
150
|
- - '='
|
156
151
|
- !ruby/object:Gem::Version
|
@@ -158,23 +153,20 @@ dependencies:
|
|
158
153
|
- !ruby/object:Gem::Dependency
|
159
154
|
name: mongo_mapper
|
160
155
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
156
|
requirements:
|
163
|
-
- -
|
157
|
+
- - '>='
|
164
158
|
- !ruby/object:Gem::Version
|
165
159
|
version: 0.11.0
|
166
160
|
type: :development
|
167
161
|
prerelease: false
|
168
162
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
163
|
requirements:
|
171
|
-
- -
|
164
|
+
- - '>='
|
172
165
|
- !ruby/object:Gem::Version
|
173
166
|
version: 0.11.0
|
174
167
|
- !ruby/object:Gem::Dependency
|
175
168
|
name: bson
|
176
169
|
requirement: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
170
|
requirements:
|
179
171
|
- - '='
|
180
172
|
- !ruby/object:Gem::Version
|
@@ -182,7 +174,6 @@ dependencies:
|
|
182
174
|
type: :development
|
183
175
|
prerelease: false
|
184
176
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
177
|
requirements:
|
187
178
|
- - '='
|
188
179
|
- !ruby/object:Gem::Version
|
@@ -190,7 +181,6 @@ dependencies:
|
|
190
181
|
- !ruby/object:Gem::Dependency
|
191
182
|
name: bson_ext
|
192
183
|
requirement: !ruby/object:Gem::Requirement
|
193
|
-
none: false
|
194
184
|
requirements:
|
195
185
|
- - '='
|
196
186
|
- !ruby/object:Gem::Version
|
@@ -198,7 +188,6 @@ dependencies:
|
|
198
188
|
type: :development
|
199
189
|
prerelease: false
|
200
190
|
version_requirements: !ruby/object:Gem::Requirement
|
201
|
-
none: false
|
202
191
|
requirements:
|
203
192
|
- - '='
|
204
193
|
- !ruby/object:Gem::Version
|
@@ -206,17 +195,15 @@ dependencies:
|
|
206
195
|
- !ruby/object:Gem::Dependency
|
207
196
|
name: fastercsv
|
208
197
|
requirement: !ruby/object:Gem::Requirement
|
209
|
-
none: false
|
210
198
|
requirements:
|
211
|
-
- -
|
199
|
+
- - '>='
|
212
200
|
- !ruby/object:Gem::Version
|
213
201
|
version: '0'
|
214
202
|
type: :development
|
215
203
|
prerelease: false
|
216
204
|
version_requirements: !ruby/object:Gem::Requirement
|
217
|
-
none: false
|
218
205
|
requirements:
|
219
|
-
- -
|
206
|
+
- - '>='
|
220
207
|
- !ruby/object:Gem::Version
|
221
208
|
version: '0'
|
222
209
|
description: This allows you to easily build datagrid aka data tables with sortable
|
@@ -261,9 +248,11 @@ files:
|
|
261
248
|
- lib/datagrid/filters/boolean_filter.rb
|
262
249
|
- lib/datagrid/filters/composite_filters.rb
|
263
250
|
- lib/datagrid/filters/date_filter.rb
|
251
|
+
- lib/datagrid/filters/date_time_filter.rb
|
264
252
|
- lib/datagrid/filters/default_filter.rb
|
265
253
|
- lib/datagrid/filters/dynamic_filter.rb
|
266
254
|
- lib/datagrid/filters/enum_filter.rb
|
255
|
+
- lib/datagrid/filters/extended_boolean_filter.rb
|
267
256
|
- lib/datagrid/filters/float_filter.rb
|
268
257
|
- lib/datagrid/filters/integer_filter.rb
|
269
258
|
- lib/datagrid/filters/ranged_filter.rb
|
@@ -290,8 +279,10 @@ files:
|
|
290
279
|
- spec/datagrid/filters/boolean_enum_filter_spec.rb
|
291
280
|
- spec/datagrid/filters/composite_filters_spec.rb
|
292
281
|
- spec/datagrid/filters/date_filter_spec.rb
|
282
|
+
- spec/datagrid/filters/date_time_filter_spec.rb
|
293
283
|
- spec/datagrid/filters/dynamic_filter_spec.rb
|
294
284
|
- spec/datagrid/filters/enum_filter_spec.rb
|
285
|
+
- spec/datagrid/filters/extended_boolean_filter_spec.rb
|
295
286
|
- spec/datagrid/filters/float_filter_spec.rb
|
296
287
|
- spec/datagrid/filters/integer_filter_spec.rb
|
297
288
|
- spec/datagrid/filters/string_filter_spec.rb
|
@@ -316,29 +307,25 @@ files:
|
|
316
307
|
homepage: http://github.com/bogdan/datagrid
|
317
308
|
licenses:
|
318
309
|
- MIT
|
310
|
+
metadata: {}
|
319
311
|
post_install_message:
|
320
312
|
rdoc_options: []
|
321
313
|
require_paths:
|
322
314
|
- lib
|
323
315
|
required_ruby_version: !ruby/object:Gem::Requirement
|
324
|
-
none: false
|
325
316
|
requirements:
|
326
|
-
- -
|
317
|
+
- - '>='
|
327
318
|
- !ruby/object:Gem::Version
|
328
319
|
version: '0'
|
329
|
-
segments:
|
330
|
-
- 0
|
331
|
-
hash: 356271283638718851
|
332
320
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
333
|
-
none: false
|
334
321
|
requirements:
|
335
|
-
- -
|
322
|
+
- - '>='
|
336
323
|
- !ruby/object:Gem::Version
|
337
324
|
version: '0'
|
338
325
|
requirements: []
|
339
326
|
rubyforge_project:
|
340
|
-
rubygems_version: 1.
|
327
|
+
rubygems_version: 2.1.10
|
341
328
|
signing_key:
|
342
|
-
specification_version:
|
329
|
+
specification_version: 4
|
343
330
|
summary: Ruby gem to create datagrids
|
344
331
|
test_files: []
|