filterrific 2.0.3 → 2.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 +4 -4
- data/CHANGELOG.md +10 -0
- data/lib/filterrific/action_controller_extension.rb +1 -1
- data/lib/filterrific/param_set.rb +21 -6
- data/lib/filterrific/version.rb +1 -1
- data/spec/filterrific/param_set_spec.rb +47 -8
- 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: 36dc749c095650e566eacee010e3021ee5aad1c3
|
4
|
+
data.tar.gz: dedcfb34441effe7dfde8fbb610b0dedcfcab461
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c92f6d1eae2d2a91ad1b00bc9cfb5c6bc2e84ea0889748042b4b295ede9a9741a14232e565b8ffad66a9ac7fd897f3f5e9e8140762649bbb6f155b99967845d1
|
7
|
+
data.tar.gz: caf3aca751fbc4d9dbe894530ac03ef4024d2d69ca1569fa29081ed89ddd361cb3e40c4f09738204a6c0a73a7f6898595242c6475a7d9493eca5338578055e7d
|
data/CHANGELOG.md
CHANGED
@@ -39,6 +39,16 @@
|
|
39
39
|
},
|
40
40
|
)
|
41
41
|
|
42
|
+
|
43
|
+
### 2.0.4
|
44
|
+
|
45
|
+
* Objectify nested params so that they render correctly on the form when
|
46
|
+
restored from session or URL params.
|
47
|
+
* Don't convert strings that almost look like integers to integers. Example:
|
48
|
+
`"0123"` as part of a phone number should not be converted to `123`.
|
49
|
+
|
50
|
+
|
51
|
+
|
42
52
|
### 2.0.3
|
43
53
|
|
44
54
|
* Cleaned up obsolete option names
|
@@ -34,7 +34,7 @@ module Filterrific
|
|
34
34
|
if (f_params.delete('reset_filterrific'))
|
35
35
|
# Reset query and session_persisted params
|
36
36
|
session[pi] = nil
|
37
|
-
redirect_to url_for({}) and return false #
|
37
|
+
redirect_to url_for({}) and return false # requires `or return` in calling action.
|
38
38
|
end
|
39
39
|
|
40
40
|
f_params = compute_filterrific_params(model_class, f_params, opts, pi)
|
@@ -13,9 +13,9 @@ module Filterrific
|
|
13
13
|
|
14
14
|
# Initializes a new Filterrific::ParamSet. This is the core of Filterrific
|
15
15
|
# where all the action happens.
|
16
|
-
# @param a_model_class [Class] the class you want to filter records of
|
17
|
-
# @param filterrific_params [Hash, optional] the filter params,
|
18
|
-
# model_class' default_settings
|
16
|
+
# @param a_model_class [Class] the class you want to filter records of.
|
17
|
+
# @param filterrific_params [Hash, optional] the filter params, falls back
|
18
|
+
# to model_class' default_settings.
|
19
19
|
# @return [Filterrific::ParamSet]
|
20
20
|
def initialize(a_model_class, filterrific_params = {})
|
21
21
|
self.model_class = a_model_class
|
@@ -41,6 +41,13 @@ module Filterrific
|
|
41
41
|
model_class.filterrific_find(self)
|
42
42
|
end
|
43
43
|
|
44
|
+
# Returns true if this instance of Filterrific has params other than the
|
45
|
+
# defaults.
|
46
|
+
# @return [Boolean]
|
47
|
+
def has_filters_applied?
|
48
|
+
sdf
|
49
|
+
end
|
50
|
+
|
44
51
|
# Returns Filterrific::ParamSet as hash (used for URL params and serialization)
|
45
52
|
# @return [Hash] with stringified keys
|
46
53
|
def to_hash
|
@@ -53,6 +60,9 @@ module Filterrific
|
|
53
60
|
when param_value.is_a?(Proc)
|
54
61
|
# evaluate Proc so it can be serialized
|
55
62
|
h[filter_name] = param_value.call
|
63
|
+
when param_value.is_a?(OpenStruct)
|
64
|
+
# convert OpenStruct to hash
|
65
|
+
h[filter_name] = param_value.marshal_dump
|
56
66
|
else
|
57
67
|
h[filter_name] = param_value
|
58
68
|
end
|
@@ -69,18 +79,23 @@ module Filterrific
|
|
69
79
|
protected
|
70
80
|
|
71
81
|
# Conditions params: Evaluates Procs and type casts integer values.
|
82
|
+
# Why are we type casting integers?
|
72
83
|
# @param fp [Hash] the filterrific params hash
|
73
84
|
# @return[Hash] the conditioned params hash
|
74
85
|
def condition_filterrific_params(fp)
|
75
86
|
fp.each do |key, val|
|
76
87
|
case
|
77
88
|
when val.is_a?(Proc)
|
78
|
-
#
|
89
|
+
# evaluate Procs
|
79
90
|
fp[key] = val.call
|
80
91
|
when val.is_a?(Array)
|
81
92
|
# type cast integers in the array
|
82
|
-
fp[key] = fp[key].map { |e| e =~
|
83
|
-
when val
|
93
|
+
fp[key] = fp[key].map { |e| e =~ /^[1-9]\d*$/ ? e.to_i : e }
|
94
|
+
when val.is_a?(Hash)
|
95
|
+
# type cast Hash to OpenStruct so that nested params render correctly
|
96
|
+
# in the form
|
97
|
+
fp[key] = OpenStruct.new(fp[key])
|
98
|
+
when val =~ /^[1-9]\d*$/
|
84
99
|
# type cast integer
|
85
100
|
fp[key] = fp[key].to_i
|
86
101
|
end
|
data/lib/filterrific/version.rb
CHANGED
@@ -8,8 +8,10 @@ module Filterrific
|
|
8
8
|
|
9
9
|
def self.filterrific_available_filters
|
10
10
|
%w[
|
11
|
+
filter_almost_int
|
11
12
|
filter_array_int
|
12
13
|
filter_array_string
|
14
|
+
filter_hash
|
13
15
|
filter_int
|
14
16
|
filter_proc
|
15
17
|
filter_string
|
@@ -22,21 +24,37 @@ module Filterrific
|
|
22
24
|
|
23
25
|
def self.filterrific_params
|
24
26
|
{
|
25
|
-
'
|
27
|
+
'filter_almost_int' => '042',
|
26
28
|
'filter_array_int' => %w[1 2 3],
|
27
29
|
'filter_array_string' => %w[one two three],
|
30
|
+
'filter_hash' => { a: 1, b: 2 },
|
28
31
|
'filter_int' => '42',
|
29
|
-
'
|
32
|
+
'filter_proc' => lambda { 1 + 1 },
|
33
|
+
'filter_string' => 'forty-two',
|
30
34
|
}
|
31
35
|
end
|
32
36
|
|
33
|
-
def self.
|
37
|
+
def self.filterrific_params_after_conditioning
|
34
38
|
{
|
39
|
+
'filter_almost_int' => '042',
|
35
40
|
'filter_array_int' => [1, 2, 3],
|
36
41
|
'filter_array_string' => %w[one two three],
|
42
|
+
'filter_hash' => OpenStruct.new(a: 1, b: 2),
|
37
43
|
'filter_int' => 42,
|
38
44
|
'filter_proc' => 2,
|
39
|
-
'filter_string' => 'forty-two'
|
45
|
+
'filter_string' => 'forty-two',
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.filterrific_params_as_hash
|
50
|
+
{
|
51
|
+
'filter_almost_int' => '042',
|
52
|
+
'filter_array_int' => [1, 2, 3],
|
53
|
+
'filter_array_string' => %w[one two three],
|
54
|
+
'filter_hash' => { a: 1, b: 2 },
|
55
|
+
'filter_int' => 42,
|
56
|
+
'filter_proc' => 2,
|
57
|
+
'filter_string' => 'forty-two',
|
40
58
|
}
|
41
59
|
end
|
42
60
|
|
@@ -82,8 +100,8 @@ module Filterrific
|
|
82
100
|
|
83
101
|
TestData.filterrific_params.keys.each do |key|
|
84
102
|
|
85
|
-
it "assigns
|
86
|
-
filterrific_param_set.send(key).must_equal(TestData.
|
103
|
+
it "assigns conditioned param to '#{ key }' attr" do
|
104
|
+
filterrific_param_set.send(key).must_equal(TestData.filterrific_params_after_conditioning[key])
|
87
105
|
end
|
88
106
|
|
89
107
|
end
|
@@ -102,7 +120,7 @@ module Filterrific
|
|
102
120
|
|
103
121
|
it "returns all filterrific_params as hash" do
|
104
122
|
filterrific_param_set.to_hash.must_equal(
|
105
|
-
TestData.
|
123
|
+
TestData.filterrific_params_as_hash
|
106
124
|
)
|
107
125
|
end
|
108
126
|
|
@@ -112,7 +130,7 @@ module Filterrific
|
|
112
130
|
|
113
131
|
it "returns all filterrific_params as json string" do
|
114
132
|
filterrific_param_set.to_json.must_equal(
|
115
|
-
TestData.
|
133
|
+
TestData.filterrific_params_as_hash.to_json
|
116
134
|
)
|
117
135
|
end
|
118
136
|
|
@@ -142,5 +160,26 @@ module Filterrific
|
|
142
160
|
end
|
143
161
|
end
|
144
162
|
|
163
|
+
describe "#condition_filterrific_params" do
|
164
|
+
|
165
|
+
[
|
166
|
+
[{ a_proc: lambda { 1 + 1 } }, { a_proc: 2 }],
|
167
|
+
[{ an_array: [1, 'a'] }, { an_array: [1, 'a'] }],
|
168
|
+
[{ a_hash: { 'a' => 1, 'b' => 2 } }, { a_hash: OpenStruct.new({ 'a' => 1, 'b' => 2 }) }],
|
169
|
+
[{ a_string_that_looks_like_int: '123' }, { a_string_that_looks_like_int: 123 }],
|
170
|
+
[{ a_string_that_almost_looks_like_int: '0123' }, { a_string_that_almost_looks_like_int: '0123' }],
|
171
|
+
[{ an_array_with_almost_int: ['0123', '123'] }, { an_array_with_almost_int: ['0123', 123] }],
|
172
|
+
[{ a_string: 'abc' }, { a_string: 'abc' }],
|
173
|
+
].each do |test_params, xpect|
|
174
|
+
it "Handles #{ test_params.inspect }" do
|
175
|
+
filterrific_param_set.send(
|
176
|
+
:condition_filterrific_params,
|
177
|
+
test_params
|
178
|
+
).must_equal(xpect)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
end
|
183
|
+
|
145
184
|
end
|
146
185
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filterrific
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jo Hund
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|