filterrific 1.2.0 → 1.3.0
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/CHANGELOG.md +24 -9
- data/README.md +2 -1
- data/lib/filterrific/action_view_extension.rb +1 -1
- data/lib/filterrific/active_record_extension.rb +32 -15
- data/lib/filterrific/param_set.rb +44 -28
- data/lib/filterrific/version.rb +1 -1
- data/spec/param_set_spec.rb +20 -0
- data/vendor/assets/javascripts/filterrific-jquery.js +1 -1
- metadata +21 -49
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f5d3faba1051ddc4f44e54c059d8066e79088c01
|
4
|
+
data.tar.gz: 2fd9d094d986128b8fbcc523fffe2b79a3d04dee
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2874548de0af99e2cd671314a651231cb6b4c5b87303c36dbb4287767b4f14595290045043745e3285c0fa68cba18bb7a999bb572c7be1c06b9f6defed155a86
|
7
|
+
data.tar.gz: cd45acb35c256fa3b61ac47ae8bfe517834ed450b818df3f9bc71b59761681d5b52ef3e7629adec535f199d0a8eac23ba03658261f4c21f71c7b9426cdcd2ded
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
## 1.3.0
|
2
|
+
|
3
|
+
* Added ParamSet#select_options (thanks @pnomolos).
|
4
|
+
* Added ParamSet#signature to quickly test two param_sets for equality.
|
5
|
+
* Bugfix: When using with Rails 4.0: Fixed ‘wrong number of arguments 0 for 1’ exception (thanks @sebboh).
|
6
|
+
* Bugfix: jQuery bug in `form_for` helper (thanks @sebboh).
|
7
|
+
* Bugfix: removed duplicate dependency in .gemspec.
|
8
|
+
|
9
|
+
* Updated documentation.
|
10
|
+
* Updated Gemfile source
|
11
|
+
* Refactored ParamSet initialization.
|
12
|
+
* Refactored ActiveRecordExtension initialization.
|
13
|
+
|
14
|
+
|
15
|
+
|
1
16
|
## 1.2.0
|
2
17
|
|
3
18
|
* Added simple wrapper for Filterrific::ParamSet.new so that it can be
|
@@ -14,31 +29,31 @@
|
|
14
29
|
|
15
30
|
## 1.1.0
|
16
31
|
|
17
|
-
* Major refactor
|
18
|
-
* Added specs
|
19
|
-
* Tied in Rails asset pipeline
|
20
|
-
* Added gh-pages branch for documentation
|
32
|
+
* Major refactor.
|
33
|
+
* Added specs.
|
34
|
+
* Tied in Rails asset pipeline.
|
35
|
+
* Added gh-pages branch for documentation.
|
21
36
|
|
22
37
|
|
23
38
|
### 1.0.1
|
24
39
|
|
25
|
-
* Bug fix: Replaced stringify_keys with map.to_s (filter_names is an Array, not a Hash!)
|
40
|
+
* Bug fix: Replaced stringify_keys with map.to_s (filter_names is an Array, not a Hash!).
|
26
41
|
|
27
42
|
|
28
43
|
|
29
44
|
|
30
45
|
# 1.0.0
|
31
46
|
|
32
|
-
* Support for Rails 3.1
|
33
|
-
* New model api
|
47
|
+
* Support for Rails 3.1.
|
48
|
+
* New model api.
|
34
49
|
|
35
50
|
|
36
51
|
|
37
52
|
## 0.1.0, released 2010-08-01
|
38
53
|
|
39
|
-
* Replicate functionality of Rails 2.3 version
|
54
|
+
* Replicate functionality of Rails 2.3 version.
|
40
55
|
|
41
56
|
|
42
57
|
### 0.0.1, released 2010-07-30
|
43
58
|
|
44
|
-
* Initial setup
|
59
|
+
* Initial setup.
|
data/README.md
CHANGED
@@ -22,12 +22,13 @@ or with bundler in your Gemfile:
|
|
22
22
|
### Resources
|
23
23
|
|
24
24
|
* [Documentation](http://filterrific.clearcove.ca)
|
25
|
+
* [Live demo](http://filterrific-demo.herokuapp.com)
|
25
26
|
* [Changelog](https://github.com/jhund/filterrific/blob/master/CHANGELOG.md)
|
26
27
|
* [Source code (github)](https://github.com/jhund/filterrific)
|
27
28
|
* [Issues](https://github.com/jhund/filterrific/issues)
|
28
29
|
* [Rubygems.org](http://rubygems.org/gems/filterrific)
|
29
30
|
|
30
|
-
|
31
|
+
[](https://codeclimate.com/github/jhund/filterrific)
|
31
32
|
|
32
33
|
### License
|
33
34
|
|
@@ -10,7 +10,7 @@ module Filterrific::ActionViewExtension
|
|
10
10
|
options[:html] ||= {}
|
11
11
|
options[:html][:method] ||= :get
|
12
12
|
options[:html][:id] ||= :filterrific_filter
|
13
|
-
options[:url] ||= url_for
|
13
|
+
options[:url] ||= url_for(:controller => controller.controller_name, :action => controller.action_name)
|
14
14
|
end
|
15
15
|
super
|
16
16
|
end
|
@@ -25,21 +25,10 @@ module Filterrific::ActiveRecordExtension
|
|
25
25
|
|
26
26
|
options.stringify_keys!
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
raise(ArgumentError, ":filter_names can't be empty") if filterrific_filter_names.blank?
|
33
|
-
|
34
|
-
self.filterrific_default_settings = (
|
35
|
-
options['default_settings'] || options['defaults'] || {}
|
36
|
-
).stringify_keys
|
37
|
-
# Raise exception if defaults contain keys that are not present in filter_names
|
38
|
-
if (
|
39
|
-
invalid_defaults = (filterrific_default_settings.keys - filterrific_filter_names)
|
40
|
-
).any?
|
41
|
-
raise(ArgumentError, "Invalid default keys: #{ invalid_defaults.inspect }")
|
42
|
-
end
|
28
|
+
assign_filterrific_filter_names(options)
|
29
|
+
validate_filterrific_filter_names
|
30
|
+
assign_filterrific_default_settings(options)
|
31
|
+
validate_filterrific_default_settings
|
43
32
|
end
|
44
33
|
|
45
34
|
# Returns ActiveRecord relation based on given filterrific_param_set.
|
@@ -66,6 +55,34 @@ module Filterrific::ActiveRecordExtension
|
|
66
55
|
ar_proxy
|
67
56
|
end
|
68
57
|
|
58
|
+
protected
|
59
|
+
|
60
|
+
def assign_filterrific_filter_names(options)
|
61
|
+
self.filterrific_filter_names = (
|
62
|
+
options['filter_names'] || options['scope_names'] || []
|
63
|
+
).map { |e| e.to_s }
|
64
|
+
end
|
65
|
+
|
66
|
+
def validate_filterrific_filter_names
|
67
|
+
# Raise exception if not filter_names are given
|
68
|
+
raise(ArgumentError, ":filter_names can't be empty") if filterrific_filter_names.blank?
|
69
|
+
end
|
70
|
+
|
71
|
+
def assign_filterrific_default_settings(options)
|
72
|
+
self.filterrific_default_settings = (
|
73
|
+
options['default_settings'] || options['defaults'] || {}
|
74
|
+
).stringify_keys
|
75
|
+
end
|
76
|
+
|
77
|
+
def validate_filterrific_default_settings
|
78
|
+
# Raise exception if defaults contain keys that are not present in filter_names
|
79
|
+
if (
|
80
|
+
invalid_defaults = (filterrific_default_settings.keys - filterrific_filter_names)
|
81
|
+
).any?
|
82
|
+
raise(ArgumentError, "Invalid default keys: #{ invalid_defaults.inspect }")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
69
86
|
end
|
70
87
|
|
71
88
|
end
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'active_support/all'
|
2
|
+
require 'digest/sha1'
|
2
3
|
|
3
4
|
module Filterrific
|
4
5
|
|
@@ -6,10 +7,11 @@ module Filterrific
|
|
6
7
|
class ParamSet
|
7
8
|
|
8
9
|
attr_accessor :resource_class
|
10
|
+
attr_reader :select_options
|
9
11
|
|
10
12
|
def initialize(a_resource_class, filterrific_params = {})
|
11
|
-
|
12
13
|
self.resource_class = a_resource_class
|
14
|
+
@select_options = {}
|
13
15
|
|
14
16
|
# Use either passed in filterrific_params or resource class' default_settings.
|
15
17
|
# Don't merge the hashes. This causes trouble if an option is set to nil
|
@@ -18,33 +20,9 @@ module Filterrific
|
|
18
20
|
# Persistence, baby. By the time you submit changes to one dimension, all the others
|
19
21
|
# will be already initialized with the defaults.
|
20
22
|
filterrific_params = resource_class.filterrific_default_settings if filterrific_params.blank?
|
21
|
-
|
22
|
-
# force all keys to strings
|
23
23
|
filterrific_params.stringify_keys!
|
24
|
-
|
25
|
-
|
26
|
-
filterrific_params.each do |key, val|
|
27
|
-
case
|
28
|
-
when val.is_a?(Proc)
|
29
|
-
# evaulate Procs
|
30
|
-
filterrific_params[key] = val.call
|
31
|
-
when val.is_a?(Array)
|
32
|
-
# type cast integers in the array
|
33
|
-
filterrific_params[key] = filterrific_params[key].map { |e| e =~ /^\d+$/ ? e.to_i : e }
|
34
|
-
when val =~ /^\d+$/
|
35
|
-
# type cast integer
|
36
|
-
filterrific_params[key] = filterrific_params[key].to_i
|
37
|
-
end
|
38
|
-
end
|
39
|
-
|
40
|
-
# Define attr_accessor for each filterrific_filter_name
|
41
|
-
# on Filterrific::ParamSet instance and assign values from options
|
42
|
-
resource_class.filterrific_filter_names.each do |filter_name|
|
43
|
-
self.class.send(:attr_accessor, filter_name)
|
44
|
-
v = filterrific_params[filter_name]
|
45
|
-
self.send("#{ filter_name }=", v) if v.present?
|
46
|
-
end
|
47
|
-
|
24
|
+
filterrific_params = condition_filterrific_params(filterrific_params)
|
25
|
+
define_attr_accessors_for_each_filter(filterrific_params)
|
48
26
|
end
|
49
27
|
|
50
28
|
# Returns Filterrific::ParamSet as hash (used for URL params and serialization)
|
@@ -69,14 +47,52 @@ module Filterrific
|
|
69
47
|
to_hash.to_json
|
70
48
|
end
|
71
49
|
|
50
|
+
# Returns a signature that is unique to self's params
|
51
|
+
def signature
|
52
|
+
Digest::SHA1.hexdigest(to_hash.to_a.sort.to_s)
|
53
|
+
end
|
54
|
+
|
72
55
|
# Returns true if this Filterrific::ParamSet is not the model's default.
|
73
|
-
# TODO: this doesn't work for procs. I need to evaluate the
|
56
|
+
# TODO: this doesn't work for procs. I need to evaluate the
|
74
57
|
# filterrific_default_settings before comparing them to to_hash.
|
75
58
|
#
|
76
59
|
# def customized?
|
77
60
|
# resource_class.filterrific_default_settings != to_hash
|
78
61
|
# end
|
79
62
|
|
63
|
+
protected
|
64
|
+
|
65
|
+
# Conditions params
|
66
|
+
# @param[Hash] fp the filterrific params hash
|
67
|
+
# @return[Hash] the conditioned params hash
|
68
|
+
def condition_filterrific_params(fp)
|
69
|
+
fp.each do |key, val|
|
70
|
+
case
|
71
|
+
when val.is_a?(Proc)
|
72
|
+
# evaulate Procs
|
73
|
+
fp[key] = val.call
|
74
|
+
when val.is_a?(Array)
|
75
|
+
# type cast integers in the array
|
76
|
+
fp[key] = fp[key].map { |e| e =~ /^\d+$/ ? e.to_i : e }
|
77
|
+
when val =~ /^\d+$/
|
78
|
+
# type cast integer
|
79
|
+
fp[key] = fp[key].to_i
|
80
|
+
end
|
81
|
+
end
|
82
|
+
fp
|
83
|
+
end
|
84
|
+
|
85
|
+
# Defines attr accessors for each filter name on self and assigns
|
86
|
+
# values based on fp
|
87
|
+
# @param[Hash] fp filterrific_params
|
88
|
+
def define_attr_accessors_for_each_filter(fp)
|
89
|
+
resource_class.filterrific_filter_names.each do |filter_name|
|
90
|
+
self.class.send(:attr_accessor, filter_name)
|
91
|
+
v = fp[filter_name]
|
92
|
+
self.send("#{ filter_name }=", v) if v.present?
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
80
96
|
end
|
81
97
|
|
82
98
|
end
|
data/lib/filterrific/version.rb
CHANGED
data/spec/param_set_spec.rb
CHANGED
@@ -106,4 +106,24 @@ describe Filterrific::ParamSet do
|
|
106
106
|
|
107
107
|
end
|
108
108
|
|
109
|
+
describe "#select_options" do
|
110
|
+
it "exists" do
|
111
|
+
expect(filterrific_param_set.select_options).to eq({})
|
112
|
+
end
|
113
|
+
|
114
|
+
it "does not let you set itself" do
|
115
|
+
expect{filterrific_param_set.select_options = nil}.to raise_error
|
116
|
+
end
|
117
|
+
|
118
|
+
it "lets you set a value" do
|
119
|
+
expect{filterrific_param_set.select_options[:value] = 1}.not_to raise_error
|
120
|
+
end
|
121
|
+
|
122
|
+
it "returns the same value you set" do
|
123
|
+
value = rand(1..200)
|
124
|
+
filterrific_param_set.select_options[:value] = value
|
125
|
+
expect(filterrific_param_set.select_options[:value]).to eq(value)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
109
129
|
end
|
metadata
CHANGED
@@ -1,110 +1,83 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filterrific
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
5
|
-
prerelease:
|
4
|
+
version: 1.3.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Jo Hund
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-06-03 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.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.0
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: sqlite3
|
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: bundler
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: 1.0.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: 1.0.0
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rake
|
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
|
-
- -
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: '0'
|
78
|
-
- !ruby/object:Gem::Dependency
|
79
|
-
name: sqlite3
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
|
-
requirements:
|
83
|
-
- - ! '>='
|
84
|
-
- !ruby/object:Gem::Version
|
85
|
-
version: '0'
|
86
|
-
type: :development
|
87
|
-
prerelease: false
|
88
|
-
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ! '>='
|
66
|
+
- - '>='
|
92
67
|
- !ruby/object:Gem::Version
|
93
68
|
version: '0'
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: rspec-rails
|
96
71
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
72
|
requirements:
|
99
|
-
- -
|
73
|
+
- - '>='
|
100
74
|
- !ruby/object:Gem::Version
|
101
75
|
version: '0'
|
102
76
|
type: :development
|
103
77
|
prerelease: false
|
104
78
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
79
|
requirements:
|
107
|
-
- -
|
80
|
+
- - '>='
|
108
81
|
- !ruby/object:Gem::Version
|
109
82
|
version: '0'
|
110
83
|
description: Filterrific is a Rails Engine plugin that makes it easy to add filtering,
|
@@ -116,21 +89,21 @@ extra_rdoc_files: []
|
|
116
89
|
files:
|
117
90
|
- CHANGELOG.md
|
118
91
|
- MIT-LICENSE
|
119
|
-
- Rakefile
|
120
92
|
- README.md
|
93
|
+
- Rakefile
|
94
|
+
- doc/Overview diagram.graffle/data.plist
|
95
|
+
- doc/Overview diagram.graffle/image1.tiff
|
121
96
|
- doc/development_notes/api_design.txt
|
122
97
|
- doc/development_notes/controller_api.txt
|
123
98
|
- doc/development_notes/model_api.rb
|
124
99
|
- doc/development_notes/view_api.txt
|
125
100
|
- doc/meta.md
|
126
|
-
-
|
127
|
-
- doc/Overview diagram.graffle/image1.tiff
|
101
|
+
- lib/filterrific.rb
|
128
102
|
- lib/filterrific/action_view_extension.rb
|
129
103
|
- lib/filterrific/active_record_extension.rb
|
130
104
|
- lib/filterrific/engine.rb
|
131
105
|
- lib/filterrific/param_set.rb
|
132
106
|
- lib/filterrific/version.rb
|
133
|
-
- lib/filterrific.rb
|
134
107
|
- spec/action_view_extension_spec.rb
|
135
108
|
- spec/active_record_extension_spec.rb
|
136
109
|
- spec/filterrific_spec.rb
|
@@ -141,26 +114,25 @@ files:
|
|
141
114
|
homepage: http://filterrific.clearcove.ca
|
142
115
|
licenses:
|
143
116
|
- MIT
|
117
|
+
metadata: {}
|
144
118
|
post_install_message:
|
145
119
|
rdoc_options: []
|
146
120
|
require_paths:
|
147
121
|
- lib
|
148
122
|
required_ruby_version: !ruby/object:Gem::Requirement
|
149
|
-
none: false
|
150
123
|
requirements:
|
151
|
-
- -
|
124
|
+
- - '>='
|
152
125
|
- !ruby/object:Gem::Version
|
153
126
|
version: '0'
|
154
127
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
|
-
none: false
|
156
128
|
requirements:
|
157
|
-
- -
|
129
|
+
- - '>='
|
158
130
|
- !ruby/object:Gem::Version
|
159
131
|
version: '0'
|
160
132
|
requirements: []
|
161
133
|
rubyforge_project:
|
162
|
-
rubygems_version:
|
134
|
+
rubygems_version: 2.2.2
|
163
135
|
signing_key:
|
164
|
-
specification_version:
|
136
|
+
specification_version: 4
|
165
137
|
summary: A Rails engine plugin for filtering ActiveRecord lists.
|
166
138
|
test_files: []
|