datagrid 1.3.3 → 1.3.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e7dd21661c0b7829a023451513b73670d0b0be11
4
- data.tar.gz: 4b2b5bb748791497da883b6c24ad8f19c7ce3c81
3
+ metadata.gz: 3e94155c2af961e78d34637a09881263afa9b47d
4
+ data.tar.gz: a8573f7be208ac8d629e5a453a3ee52f899333ee
5
5
  SHA512:
6
- metadata.gz: 7d33aa9a4a8eceaacad1ff76ee91ba9dc3b9e312d2158f70998e7eaef707877042ace5218df8de47a28373dce7d92f6886e4fdf7be70ea27bf90baa6246f763c
7
- data.tar.gz: d19b2234cbaba7712206f4b9ed7159cdcf2fd44ec320ff0c3a937a4ea3f03caf237499b4d2a594a0f76a84526fe28cbf23132279e0072a3eaf0535334179692c
6
+ metadata.gz: c994fd4f81436a191195851226c4ff1dd11f1cf0ff17027ee2dd0fe04eed653475d2785e1c90e8765ea997249284fb30344f99e50c8fc5e271f8fb6fee25b3fb
7
+ data.tar.gz: 87bf1d14751e50059eb0414665608936f39002a42bb81021ca93e8b710eef37d231cdf6957fb9c032b9293bba598b270bd855f6339b5aca998a81f8d6cf88097
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.3
1
+ 1.3.4
@@ -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.3 ruby lib
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.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 = "2014-11-12"
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 = [
@@ -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
- if result.is_a?(Array)
15
- case result.size
16
- when 0
17
- nil
18
- when 1
19
- result.first
20
- when 2
21
- if result.first && result.last && result.first > result.last
22
- # If wrong range is given - reverse it to be always valid
23
- result.reverse
24
- else
25
- result
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
- # Simulate single point range
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
- #unless object
5
- #Datagrid::Utils.warn_once("#{self.class.name}#select without argument is deprecated")
6
- #end
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)
@@ -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}"
@@ -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
- expect(test_report do
6
+ report = test_report do
7
7
  scope {Entry}
8
8
  filter(:group_id, :enum, :select => [1,2] )
9
- end.class.filter_by_name(:group_id).select).to eq([1,2])
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
- expect(test_report do
14
+ grid = test_report do
14
15
  scope {Entry}
15
16
  filter(:group_id, :enum, :select => proc { [1,2] })
16
- end.class.filter_by_name(:group_id).select).to eq([1,2])
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
- expect(test_report do
6
+ grid = test_report do
7
7
  scope {Entry}
8
8
  filter(:disabled, :xboolean)
9
- end.class.filter_by_name(:disabled).select).to eq([["Yes", "YES"], ["No", "NO"]])
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(e1)
14
- expect(report.assets).to include(e2)
15
- expect(report.assets).not_to include(e3)
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(e1)
27
- expect(report.assets).to include(e2)
28
- expect(report.assets).not_to include(e3)
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(e1)
40
- expect(report.assets).not_to include(e2)
41
- expect(report.assets).to include(e3)
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(e1)
53
- expect(report.assets).to include(e2)
54
- expect(report.assets).not_to include(e3)
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(e1)
67
- expect(report.assets).to include(e2)
68
- expect(report.assets).not_to include(e3)
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(e1)
80
- expect(report.assets).not_to include(e2)
81
- expect(report.assets).not_to include(e3)
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(Entry.create!(:group_id => 1))
93
- expect(report.assets).to include(Entry.create!(:group_id => 5))
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, :string, :multiple => true)
100
+ filter(:group_id, :integer, :multiple => true)
110
101
  end
111
- expect(report.assets).to include(Entry.create!( :group_id => 1))
112
- expect(report.assets).to include(Entry.create!( :group_id => 2))
113
- expect(report.assets).not_to include(Entry.create!( :group_id => 3))
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, :string, :multiple => '|')
110
+ filter(:group_id, :integer, :multiple => '|')
119
111
  end
120
- expect(report.assets).to include(Entry.create!( :group_id => 1))
121
- expect(report.assets).to include(Entry.create!( :group_id => 2))
122
- expect(report.assets).not_to include(Entry.create!( :group_id => 3))
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 values" do
126
- report = test_report(:group_id => "1,2") do
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, :string, :multiple => '|')
121
+ filter(:group_id, :integer, :multiple => true, :allow_nil => false, :allow_blank => true )
139
122
  end
140
- expect(report.assets).to include(Entry.create!( :group_id => 1))
141
- expect(report.assets).to include(Entry.create!( :group_id => 2))
142
- expect(report.assets).not_to include(Entry.create!( :group_id => 3))
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.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: 2014-11-12 00:00:00.000000000 Z
11
+ date: 2015-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails