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.
@@ -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
@@ -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
+ [![Code Climate](https://codeclimate.com/github/jhund/filterrific.png)](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
- # Raise exception if not filter_names are given
29
- self.filterrific_filter_names = (
30
- options['filter_names'] || options['scope_names'] || []
31
- ).map { |e| e.to_s }
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
- # condition filterrific_params
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
@@ -1,3 +1,3 @@
1
1
  module Filterrific
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -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
@@ -80,7 +80,7 @@ Filterrific.submitFilterForm = function(){
80
80
 
81
81
 
82
82
  // Initialize event observers on document ready
83
- jQuery(function($){
83
+ jQuery(document).ready(function($) {
84
84
  // Add change event handler to all Filterrific filter inputs.
85
85
  $(document).on(
86
86
  "change",
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.2.0
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: 2013-05-16 00:00:00.000000000 Z
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
- - doc/Overview diagram.graffle/data.plist
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: 1.8.25
134
+ rubygems_version: 2.2.2
163
135
  signing_key:
164
- specification_version: 3
136
+ specification_version: 4
165
137
  summary: A Rails engine plugin for filtering ActiveRecord lists.
166
138
  test_files: []