filterrific 2.0.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5771d0552efaa97955d18305f8199f7691148d93
4
- data.tar.gz: 037e7d5b634f6183cd6315d35cdd5a8874c47f3c
3
+ metadata.gz: 11a56a1d6587f1b007103d3f23906fe5cda61466
4
+ data.tar.gz: 7f33fc8e000fe7f7969cc6b8dfd057e6364c0518
5
5
  SHA512:
6
- metadata.gz: 6da890161d37d8884debfff82b057f1fe304ebcf858b6a0493cc756739428cc33fdc131abd0f174fd4ea449704404adc10204c33fa22d89b96c623001aefdafc
7
- data.tar.gz: 192de17ea6192932f6e6c262fa6888fa35b39188ec0c99dcaf76bedd94434671f2754968ac4e9cc0fad8d2fc461c95dbb122e1b11074afc7fe1567b46920258d
6
+ metadata.gz: 812ea2580b378e23db574823a3fa561d116773392698a7b5fa51e3bbbc90a7053fe000dc98622e15666d85b6e81a11e4560b08d578e7449e84a3d1de50a2728e
7
+ data.tar.gz: df6c4d694d297697fd3befc2702af6b65094a0631e457f22732cc44e216fb5c98b29c520a1ca23e754917675f46cca349d69ec6bb87f76ababed04791797bd8d
@@ -39,6 +39,10 @@
39
39
  },
40
40
  )
41
41
 
42
+ ### 2.0.1
43
+
44
+ * Fixed regression with Rails 3.2 (doesn't support `#deep_stringify_keys`)
45
+
42
46
 
43
47
 
44
48
  # 2.0.0
data/README.md CHANGED
@@ -28,11 +28,12 @@ Every commit to Filterrific is automatically tested against the following scenar
28
28
 
29
29
  | Rails version | Ruby environments | Database adapters | Build status |
30
30
  |---------------|--------------------------------|------------------------------------|--------------|
31
+ | Rails 4.2 | MRI 1.9.3, 2.0.0, 2.1.2, 2.2.0 | mysql, mysql2, postgresql, sqlite3 |[![Build Status](https://travis-ci.org/jhund/filterrific_demo.svg?branch=rails-4.2)](https://travis-ci.org/jhund/filterrific_demo)|
31
32
  | Rails 4.1 | MRI 1.9.3, 2.0.0, 2.1.2, 2.2.0 | mysql, mysql2, postgresql, sqlite3 |[![Build Status](https://travis-ci.org/jhund/filterrific_demo.svg?branch=rails-4.1)](https://travis-ci.org/jhund/filterrific_demo)|
32
33
  | Rails 4.0 | MRI 1.9.3, 2.0.0, 2.1.2, 2.2.0 | mysql, mysql2, postgresql, sqlite3 |[![Build Status](https://travis-ci.org/jhund/filterrific_demo.svg?branch=rails-4.0)](https://travis-ci.org/jhund/filterrific_demo)|
33
34
  | Rails 3.2 | MRI 1.9.3, 2.0.0, 2.1.2 | mysql, mysql2, postgresql, sqlite3 |[![Build Status](https://travis-ci.org/jhund/filterrific_demo.svg?branch=rails-3.2)](https://travis-ci.org/jhund/filterrific_demo)|
34
35
 
35
- Filterrific version 1.4.0 should work on older versions of Rails and Ruby, however
36
+ Filterrific version 1.x should work on older versions of Rails and Ruby, however
36
37
  the 1.x branch is not supported any more.
37
38
 
38
39
 
@@ -10,7 +10,7 @@ module Filterrific
10
10
  # @param model_class [Class]
11
11
  # @param filterrific_params [Hash] typically the Rails request params under
12
12
  # the :filterrific key (params[:filterrific]), however can be any Hash.
13
- # @param opts [Hash]
13
+ # @param opts [Hash, optional]
14
14
  # @option opts [Array<String>, optional] :available_filters
15
15
  # further restrict which of the filters specified in the model are
16
16
  # available in this context.
@@ -24,8 +24,10 @@ module Filterrific
24
24
  # these are available in the view to populate select lists and other
25
25
  # dynamic values.
26
26
  # @return [Filterrific::ParamSet]
27
- def initialize_filterrific(model_class, filterrific_params, opts)
28
- f_params = (filterrific_params || {}).deep_stringify_keys
27
+ def initialize_filterrific(model_class, filterrific_params, opts = {})
28
+ # We used #deep_stringify_keys, however that breaks on Rails 3.x, so we
29
+ # went back to #stringify_keys which should be sufficient.
30
+ f_params = (filterrific_params || {}).stringify_keys
29
31
  opts = opts.stringify_keys
30
32
  pi = opts['persistence_id'] || compute_default_persistence_id
31
33
 
@@ -35,13 +37,7 @@ module Filterrific
35
37
  redirect_to url_for({}) and return false # works with `or return` in calling action.
36
38
  end
37
39
 
38
- f_params = f_params.presence || # start with passed in params
39
- session[pi].presence || # then try session persisted params
40
- opts['default_filter_params'] || # then use passed in opts
41
- model_class.filterrific_default_filter_params # finally use model_class defaults
42
-
43
- f_params.deep_stringify_keys!
44
- f_params.slice!(opts['available_filters'].map(&:to_s)) if opts['available_filters']
40
+ f_params = compute_filterrific_params(model_class, f_params, opts)
45
41
 
46
42
  filterrific = Filterrific::ParamSet.new(model_class, f_params)
47
43
  filterrific.select_options = opts['select_options']
@@ -54,5 +50,21 @@ module Filterrific
54
50
  [controller_name, action_name].join('#')
55
51
  end
56
52
 
53
+ # Computes filterrific params using a number of strategies. Limits params
54
+ # to 'available_filters' if given via opts.
55
+ # @param model_class [ActiveRecord::Base]
56
+ # @param filterrific_params [Hash]
57
+ # @param opts [Hash]
58
+ def compute_filterrific_params(model_class, filterrific_params, opts)
59
+ r = (
60
+ filterrific_params.presence || # start with passed in params
61
+ session[pi].presence || # then try session persisted params
62
+ opts['default_filter_params'] || # then use passed in opts
63
+ model_class.filterrific_default_filter_params # finally use model_class defaults
64
+ ).stringify_keys
65
+ r.slice!(opts['available_filters'].map(&:to_s)) if opts['available_filters']
66
+ r
67
+ end
68
+
57
69
  end
58
70
  end
@@ -1,5 +1,5 @@
1
1
  # -*- coding: utf-8 -*-
2
2
 
3
3
  module Filterrific
4
- VERSION = "2.0.0"
4
+ VERSION = "2.0.1"
5
5
  end
@@ -9,11 +9,11 @@ module Filterrific
9
9
  # Container for test data
10
10
  class TestData
11
11
 
12
- def self.filterrific_filter_names
13
- %w[sorted_by search_query with_country_id]
12
+ def self.filterrific_available_filters
13
+ %w[search_query sorted_by with_country_id]
14
14
  end
15
15
 
16
- def self.filterrific_default_settings
16
+ def self.filterrific_default_filter_params
17
17
  { 'sorted_by' => 'name_asc' }
18
18
  end
19
19
 
@@ -24,8 +24,8 @@ module Filterrific
24
24
  let(:filterrific_class){
25
25
  Class.new(ActiveRecord::Base) do
26
26
  filterrific(
27
- :filter_names => TestData.filterrific_filter_names,
28
- :default_settings => TestData.filterrific_default_settings
27
+ available_filters: TestData.filterrific_available_filters,
28
+ default_filter_params: TestData.filterrific_default_filter_params
29
29
  )
30
30
  end
31
31
  }
@@ -44,19 +44,19 @@ module Filterrific
44
44
 
45
45
  describe "Filterrific initialization" do
46
46
 
47
- it "initializes filterrific_filter_names" do
48
- filterrific_class.filterrific_filter_names.must_equal(TestData.filterrific_filter_names)
47
+ it "initializes filterrific_available_filters" do
48
+ filterrific_class.filterrific_available_filters.must_equal(TestData.filterrific_available_filters)
49
49
  end
50
50
 
51
- it "initializes filterrific_default_settings" do
52
- filterrific_class.filterrific_default_settings.must_equal(TestData.filterrific_default_settings)
51
+ it "initializes filterrific_default_filter_params" do
52
+ filterrific_class.filterrific_default_filter_params.must_equal(TestData.filterrific_default_filter_params)
53
53
  end
54
54
 
55
55
  it "raises when no filter_names are given" do
56
56
  proc {
57
57
  Class.new(ActiveRecord::Base) do
58
58
  filterrific(
59
- :filter_names => []
59
+ available_filters: []
60
60
  )
61
61
  end
62
62
  }.must_raise(ArgumentError)
@@ -66,8 +66,8 @@ module Filterrific
66
66
  proc {
67
67
  Class.new(ActiveRecord::Base) do
68
68
  filterrific(
69
- :filter_names => [:one, :two],
70
- :default_settings => { :three => '' }
69
+ available_filters: [:one, :two],
70
+ default_filter_params:{ three: '' }
71
71
  )
72
72
  end
73
73
  }.must_raise(ArgumentError)
@@ -6,17 +6,17 @@ module Filterrific
6
6
  # Container for test data
7
7
  class TestData
8
8
 
9
- def self.filterrific_filter_names
9
+ def self.filterrific_available_filters
10
10
  %w[
11
- filter_proc
12
11
  filter_array_int
13
12
  filter_array_string
14
13
  filter_int
14
+ filter_proc
15
15
  filter_string
16
16
  ]
17
17
  end
18
18
 
19
- def self.filterrific_default_settings
19
+ def self.filterrific_default_filter_params
20
20
  { 'filter_int' => 42 }
21
21
  end
22
22
 
@@ -32,10 +32,10 @@ module Filterrific
32
32
 
33
33
  def self.filterrific_params_after_sanitizing
34
34
  {
35
- 'filter_proc' => 2,
36
35
  'filter_array_int' => [1, 2, 3],
37
36
  'filter_array_string' => %w[one two three],
38
37
  'filter_int' => 42,
38
+ 'filter_proc' => 2,
39
39
  'filter_string' => 'forty-two'
40
40
  }
41
41
  end
@@ -43,13 +43,13 @@ module Filterrific
43
43
  end
44
44
 
45
45
  # Simulates a class that would include the filterrific directive
46
- class ResourceClass
46
+ class ModelClass
47
47
 
48
- def self.filterrific_default_settings
49
- TestData.filterrific_default_settings
48
+ def self.filterrific_default_filter_params
49
+ TestData.filterrific_default_filter_params
50
50
  end
51
- def self.filterrific_filter_names
52
- TestData.filterrific_filter_names
51
+ def self.filterrific_available_filters
52
+ TestData.filterrific_available_filters
53
53
  end
54
54
 
55
55
  end
@@ -57,18 +57,18 @@ module Filterrific
57
57
  describe ParamSet do
58
58
 
59
59
  let(:filterrific_param_set){
60
- Filterrific::ParamSet.new(ResourceClass, TestData.filterrific_params)
60
+ Filterrific::ParamSet.new(ModelClass, TestData.filterrific_params)
61
61
  }
62
62
 
63
63
  describe "initialization" do
64
64
 
65
65
  it "assigns resource class" do
66
- filterrific_param_set.resource_class.must_equal(ResourceClass)
66
+ filterrific_param_set.model_class.must_equal(ModelClass)
67
67
  end
68
68
 
69
69
  describe "dynamic filter_name attr_accessors" do
70
70
 
71
- TestData.filterrific_filter_names.each do |filter_name|
71
+ TestData.filterrific_available_filters.each do |filter_name|
72
72
 
73
73
  it "defines a getter for '#{ filter_name }'" do
74
74
  filterrific_param_set.must_respond_to(filter_name)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: filterrific
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jo Hund