filterrific 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []