datagrid 1.3.3 → 1.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/VERSION +1 -1
- data/datagrid.gemspec +3 -3
- data/lib/datagrid/core.rb +7 -0
- data/lib/datagrid/filters/base_filter.rb +3 -3
- data/lib/datagrid/filters/ranged_filter.rb +16 -21
- data/lib/datagrid/filters/select_options.rb +3 -3
- data/lib/datagrid/rspec.rb +1 -2
- data/spec/datagrid/core_spec.rb +14 -0
- data/spec/datagrid/filters/enum_filter_spec.rb +6 -4
- data/spec/datagrid/filters/extended_boolean_filter_spec.rb +3 -2
- data/spec/datagrid/filters/integer_filter_spec.rb +51 -62
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3e94155c2af961e78d34637a09881263afa9b47d
|
4
|
+
data.tar.gz: a8573f7be208ac8d629e5a453a3ee52f899333ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c994fd4f81436a191195851226c4ff1dd11f1cf0ff17027ee2dd0fe04eed653475d2785e1c90e8765ea997249284fb30344f99e50c8fc5e271f8fb6fee25b3fb
|
7
|
+
data.tar.gz: 87bf1d14751e50059eb0414665608936f39002a42bb81021ca93e8b710eef37d231cdf6957fb9c032b9293bba598b270bd855f6339b5aca998a81f8d6cf88097
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.3.
|
1
|
+
1.3.4
|
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.3.
|
5
|
+
# stub: datagrid 1.3.4 ruby lib
|
6
6
|
|
7
7
|
Gem::Specification.new do |s|
|
8
8
|
s.name = "datagrid"
|
9
|
-
s.version = "1.3.
|
9
|
+
s.version = "1.3.4"
|
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 = "
|
14
|
+
s.date = "2015-01-08"
|
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 = [
|
data/lib/datagrid/core.rb
CHANGED
@@ -98,6 +98,7 @@ module Datagrid
|
|
98
98
|
end
|
99
99
|
|
100
100
|
|
101
|
+
# Updates datagrid attributes with a passed hash argument
|
101
102
|
def assign_attributes(attributes)
|
102
103
|
attributes.each do |name, value|
|
103
104
|
self[name] = value
|
@@ -159,6 +160,12 @@ module Datagrid
|
|
159
160
|
self.class.send :check_scope_defined!, message
|
160
161
|
end
|
161
162
|
|
163
|
+
def inspect
|
164
|
+
attrs = attributes.map do |key, value|
|
165
|
+
"#{key}: #{value.inspect}"
|
166
|
+
end.join(", ")
|
167
|
+
"#<#{self.class} #{attrs}>"
|
168
|
+
end
|
162
169
|
|
163
170
|
end # InstanceMethods
|
164
171
|
end
|
@@ -33,13 +33,13 @@ class Datagrid::Filters::BaseFilter #:nodoc:
|
|
33
33
|
|
34
34
|
def parse_values(value)
|
35
35
|
if multiple?
|
36
|
+
return nil if value.nil?
|
36
37
|
normalize_multiple_value(value).map do |v|
|
37
38
|
parse(v)
|
38
39
|
end
|
40
|
+
elsif value.is_a?(Array)
|
41
|
+
raise Datagrid::ArgumentError, "#{grid_class}##{name} filter can not accept Array argument. Use :multiple option."
|
39
42
|
else
|
40
|
-
if value.is_a?(Array)
|
41
|
-
raise Datagrid::ArgumentError, "#{grid_class}##{name} filter can not accept Array argument. Use :multiple option."
|
42
|
-
end
|
43
43
|
parse(value)
|
44
44
|
end
|
45
45
|
end
|
@@ -10,31 +10,26 @@ module RangedFilter
|
|
10
10
|
|
11
11
|
def parse_values(value)
|
12
12
|
result = super(value)
|
13
|
-
if range?
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
end
|
27
|
-
else
|
28
|
-
raise ArgumentError, "Can not create a date range from array of more than two: #{result.inspect}"
|
29
|
-
end
|
13
|
+
return result if !range? || result.nil?
|
14
|
+
# Simulate single point range
|
15
|
+
return result..result unless result.is_a?(Array)
|
16
|
+
|
17
|
+
case result.size
|
18
|
+
when 0
|
19
|
+
nil
|
20
|
+
when 1
|
21
|
+
result.first
|
22
|
+
when 2
|
23
|
+
if result.first && result.last && result.first > result.last
|
24
|
+
# If wrong range is given - reverse it to be always valid
|
25
|
+
result.reverse
|
30
26
|
else
|
31
|
-
|
32
|
-
result..result
|
27
|
+
result
|
33
28
|
end
|
34
|
-
|
35
29
|
else
|
36
|
-
result
|
30
|
+
raise ArgumentError, "Can not create a date range from array of more than two: #{result.inspect}"
|
37
31
|
end
|
32
|
+
|
38
33
|
end
|
39
34
|
|
40
35
|
def range?
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Datagrid::Filters::SelectOptions
|
2
2
|
|
3
3
|
def select(object = nil)
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
unless object
|
5
|
+
Datagrid::Utils.warn_once("#{self.class.name}#select without argument is deprecated")
|
6
|
+
end
|
7
7
|
select = self.options[:select]
|
8
8
|
if select.is_a?(Symbol)
|
9
9
|
object.send(select)
|
data/lib/datagrid/rspec.rb
CHANGED
@@ -45,8 +45,7 @@ shared_examples_for "Datagrid" do
|
|
45
45
|
when :integer
|
46
46
|
1
|
47
47
|
when :enum
|
48
|
-
select = filter.select
|
49
|
-
select = select.call(subject) if select.respond_to?(:call)
|
48
|
+
select = filter.select(subject)
|
50
49
|
select.first.try(:last)
|
51
50
|
else
|
52
51
|
raise "unknown filter type: #{filter.class}"
|
data/spec/datagrid/core_spec.rb
CHANGED
@@ -48,4 +48,18 @@ describe Datagrid::Core do
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
51
|
+
|
52
|
+
describe ".inspect" do
|
53
|
+
it "should show all attribute values" do
|
54
|
+
class InspectTest
|
55
|
+
include Datagrid
|
56
|
+
scope {Entry}
|
57
|
+
filter(:created_at, :date, :range => true)
|
58
|
+
column(:name)
|
59
|
+
end
|
60
|
+
|
61
|
+
grid = InspectTest.new(:created_at => ['2014-01-01', '2014-08-05'], :descending => true, :order => 'name')
|
62
|
+
expect(grid.inspect).to eq('#<InspectTest order: :name, descending: true, created_at: [Wed, 01 Jan 2014, Tue, 05 Aug 2014]>')
|
63
|
+
end
|
64
|
+
end
|
51
65
|
end
|
@@ -3,17 +3,19 @@ require 'spec_helper'
|
|
3
3
|
describe Datagrid::Filters::EnumFilter do
|
4
4
|
|
5
5
|
it "should support select option" do
|
6
|
-
|
6
|
+
report = test_report do
|
7
7
|
scope {Entry}
|
8
8
|
filter(:group_id, :enum, :select => [1,2] )
|
9
|
-
end
|
9
|
+
end
|
10
|
+
expect(report.filter_by_name(:group_id).select(report)).to eq([1,2])
|
10
11
|
end
|
11
12
|
|
12
13
|
it "should support select option as proc" do
|
13
|
-
|
14
|
+
grid = test_report do
|
14
15
|
scope {Entry}
|
15
16
|
filter(:group_id, :enum, :select => proc { [1,2] })
|
16
|
-
end
|
17
|
+
end
|
18
|
+
expect(grid.filter_by_name(:group_id).select(grid)).to eq([1,2])
|
17
19
|
end
|
18
20
|
|
19
21
|
it "should support select option as proc with instace input" do
|
@@ -3,10 +3,11 @@ require 'spec_helper'
|
|
3
3
|
describe Datagrid::Filters::ExtendedBooleanFilter do
|
4
4
|
|
5
5
|
it "should support select option" do
|
6
|
-
|
6
|
+
grid = test_report do
|
7
7
|
scope {Entry}
|
8
8
|
filter(:disabled, :xboolean)
|
9
|
-
end
|
9
|
+
end
|
10
|
+
expect(grid.filter_by_name(:disabled).select(grid)).to eq([["Yes", "YES"], ["No", "NO"]])
|
10
11
|
end
|
11
12
|
|
12
13
|
it "should generate pass boolean value to filter block" do
|
@@ -2,83 +2,73 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Datagrid::Filters::IntegerFilter do
|
4
4
|
|
5
|
+
|
6
|
+
let(:entry1) { Entry.create!(:group_id => 1) }
|
7
|
+
let(:entry2) { Entry.create!(:group_id => 2) }
|
8
|
+
let(:entry3) { Entry.create!(:group_id => 3) }
|
9
|
+
let(:entry4) { Entry.create!(:group_id => 4) }
|
10
|
+
let(:entry5) { Entry.create!(:group_id => 5) }
|
11
|
+
let(:entry7) { Entry.create!(:group_id => 7) }
|
12
|
+
|
5
13
|
it "should support integer range argument" do
|
6
|
-
e1 = Entry.create!(:group_id => 1)
|
7
|
-
e2 = Entry.create!(:group_id => 4)
|
8
|
-
e3 = Entry.create!(:group_id => 7)
|
9
14
|
report = test_report(:group_id => 3..5) do
|
10
15
|
scope { Entry }
|
11
16
|
filter(:group_id, :integer)
|
12
17
|
end
|
13
|
-
expect(report.assets).not_to include(
|
14
|
-
expect(report.assets).to include(
|
15
|
-
expect(report.assets).not_to include(
|
18
|
+
expect(report.assets).not_to include(entry1)
|
19
|
+
expect(report.assets).to include(entry4)
|
20
|
+
expect(report.assets).not_to include(entry7)
|
16
21
|
end
|
17
22
|
|
18
23
|
it "should support integer range given as array argument" do
|
19
|
-
e1 = Entry.create!(:group_id => 7)
|
20
|
-
e2 = Entry.create!(:group_id => 4)
|
21
|
-
e3 = Entry.create!(:group_id => 1)
|
22
24
|
report = test_report(:group_id => [3.to_s, 5.to_s]) do
|
23
25
|
scope { Entry }
|
24
26
|
filter(:group_id, :integer, :range => true)
|
25
27
|
end
|
26
|
-
expect(report.assets).not_to include(
|
27
|
-
expect(report.assets).to include(
|
28
|
-
expect(report.assets).not_to include(
|
28
|
+
expect(report.assets).not_to include(entry7)
|
29
|
+
expect(report.assets).to include(entry4)
|
30
|
+
expect(report.assets).not_to include(entry1)
|
29
31
|
end
|
30
32
|
|
31
33
|
it "should support minimum integer argument" do
|
32
|
-
e1 = Entry.create!(:group_id => 1)
|
33
|
-
e2 = Entry.create!(:group_id => 4)
|
34
|
-
e3 = Entry.create!(:group_id => 7)
|
35
34
|
report = test_report(:group_id => [5.to_s, nil]) do
|
36
35
|
scope { Entry }
|
37
36
|
filter(:group_id, :integer, :range => true)
|
38
37
|
end
|
39
|
-
expect(report.assets).not_to include(
|
40
|
-
expect(report.assets).not_to include(
|
41
|
-
expect(report.assets).to include(
|
38
|
+
expect(report.assets).not_to include(entry1)
|
39
|
+
expect(report.assets).not_to include(entry4)
|
40
|
+
expect(report.assets).to include(entry7)
|
42
41
|
end
|
43
42
|
|
44
43
|
it "should support maximum integer argument" do
|
45
|
-
e1 = Entry.create!(:group_id => 1)
|
46
|
-
e2 = Entry.create!(:group_id => 4)
|
47
|
-
e3 = Entry.create!(:group_id => 7)
|
48
44
|
report = test_report(:group_id => [nil, 5.to_s]) do
|
49
45
|
scope { Entry }
|
50
46
|
filter(:group_id, :integer, :range => true)
|
51
47
|
end
|
52
|
-
expect(report.assets).to include(
|
53
|
-
expect(report.assets).to include(
|
54
|
-
expect(report.assets).not_to include(
|
48
|
+
expect(report.assets).to include(entry1)
|
49
|
+
expect(report.assets).to include(entry4)
|
50
|
+
expect(report.assets).not_to include(entry7)
|
55
51
|
end
|
56
52
|
|
57
53
|
it "should find something in one integer interval" do
|
58
54
|
|
59
|
-
e1 = Entry.create!(:group_id => 7)
|
60
|
-
e2 = Entry.create!(:group_id => 4)
|
61
|
-
e3 = Entry.create!(:group_id => 1)
|
62
55
|
report = test_report(:group_id => (4..4)) do
|
63
56
|
scope { Entry }
|
64
57
|
filter(:group_id, :integer, :range => true)
|
65
58
|
end
|
66
|
-
expect(report.assets).not_to include(
|
67
|
-
expect(report.assets).to include(
|
68
|
-
expect(report.assets).not_to include(
|
59
|
+
expect(report.assets).not_to include(entry7)
|
60
|
+
expect(report.assets).to include(entry4)
|
61
|
+
expect(report.assets).not_to include(entry1)
|
69
62
|
end
|
70
63
|
it "should support invalid range" do
|
71
64
|
|
72
|
-
e1 = Entry.create!(:group_id => 7)
|
73
|
-
e2 = Entry.create!(:group_id => 4)
|
74
|
-
e3 = Entry.create!(:group_id => 1)
|
75
65
|
report = test_report(:group_id => (7..1)) do
|
76
66
|
scope { Entry }
|
77
67
|
filter(:group_id, :integer, :range => true)
|
78
68
|
end
|
79
|
-
expect(report.assets).not_to include(
|
80
|
-
expect(report.assets).not_to include(
|
81
|
-
expect(report.assets).not_to include(
|
69
|
+
expect(report.assets).not_to include(entry7)
|
70
|
+
expect(report.assets).not_to include(entry4)
|
71
|
+
expect(report.assets).not_to include(entry1)
|
82
72
|
end
|
83
73
|
|
84
74
|
|
@@ -89,8 +79,8 @@ describe Datagrid::Filters::IntegerFilter do
|
|
89
79
|
where("group_id >= ?", value)
|
90
80
|
end
|
91
81
|
end
|
92
|
-
expect(report.assets).not_to include(
|
93
|
-
expect(report.assets).to include(
|
82
|
+
expect(report.assets).not_to include(entry1)
|
83
|
+
expect(report.assets).to include(entry5)
|
94
84
|
end
|
95
85
|
|
96
86
|
|
@@ -99,6 +89,7 @@ describe Datagrid::Filters::IntegerFilter do
|
|
99
89
|
scope { Entry.joins(:group) }
|
100
90
|
filter(:rating, :integer, :range => true)
|
101
91
|
end
|
92
|
+
expect(report.rating).to eq([4,nil])
|
102
93
|
expect(report.assets).not_to include(Entry.create!(:group => Group.create!(:rating => 3)))
|
103
94
|
expect(report.assets).to include(Entry.create!(:group => Group.create!(:rating => 5)))
|
104
95
|
end
|
@@ -106,39 +97,37 @@ describe Datagrid::Filters::IntegerFilter do
|
|
106
97
|
it "should support multiple values" do
|
107
98
|
report = test_report(:group_id => "1,2") do
|
108
99
|
scope {Entry}
|
109
|
-
filter(:group_id, :
|
100
|
+
filter(:group_id, :integer, :multiple => true)
|
110
101
|
end
|
111
|
-
expect(report.
|
112
|
-
expect(report.assets).to include(
|
113
|
-
expect(report.assets).
|
102
|
+
expect(report.group_id).to eq([1,2])
|
103
|
+
expect(report.assets).to include(entry1)
|
104
|
+
expect(report.assets).to include(entry2)
|
105
|
+
expect(report.assets).not_to include(entry3)
|
114
106
|
end
|
115
107
|
it "should support custom separator multiple values" do
|
116
108
|
report = test_report(:group_id => "1|2") do
|
117
109
|
scope {Entry}
|
118
|
-
filter(:group_id, :
|
110
|
+
filter(:group_id, :integer, :multiple => '|')
|
119
111
|
end
|
120
|
-
expect(report.
|
121
|
-
expect(report.assets).to include(
|
122
|
-
expect(report.assets).
|
112
|
+
expect(report.group_id).to eq([1,2])
|
113
|
+
expect(report.assets).to include(entry1)
|
114
|
+
expect(report.assets).to include(entry2)
|
115
|
+
expect(report.assets).not_to include(entry3)
|
123
116
|
end
|
124
117
|
|
125
|
-
it "should support multiple
|
126
|
-
report
|
127
|
-
scope {Entry}
|
128
|
-
filter(:group_id, :string, :multiple => true)
|
129
|
-
end
|
130
|
-
expect(report.assets).to include(Entry.create!( :group_id => 1))
|
131
|
-
expect(report.assets).to include(Entry.create!( :group_id => 2))
|
132
|
-
expect(report.assets).not_to include(Entry.create!( :group_id => 3))
|
133
|
-
end
|
134
|
-
|
135
|
-
it "should support custom separator multiple values" do
|
136
|
-
report = test_report(:group_id => "1|2") do
|
118
|
+
it "should support multiple with allow_blank allow_nil options" do
|
119
|
+
report = test_report do
|
137
120
|
scope {Entry}
|
138
|
-
filter(:group_id, :
|
121
|
+
filter(:group_id, :integer, :multiple => true, :allow_nil => false, :allow_blank => true )
|
139
122
|
end
|
140
|
-
|
141
|
-
expect(report.assets).
|
142
|
-
expect(report.assets).
|
123
|
+
report.group_id = []
|
124
|
+
expect(report.assets).to_not include(entry1)
|
125
|
+
expect(report.assets).to_not include(entry2)
|
126
|
+
report.group_id = [1]
|
127
|
+
expect(report.assets).to include(entry1)
|
128
|
+
expect(report.assets).to_not include(entry2)
|
129
|
+
report.group_id = nil
|
130
|
+
expect(report.assets).to include(entry1)
|
131
|
+
expect(report.assets).to include(entry2)
|
143
132
|
end
|
144
133
|
end
|
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.3.
|
4
|
+
version: 1.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bogdan Gusiev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2015-01-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|