rack-filter-param 0.2.1 → 0.3

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: 4bc10c6c7321ddd7522aba2a97ea89fbdef76418
4
- data.tar.gz: bd8da917b51e818687433dac3e52f628806fd4cd
3
+ metadata.gz: 1dff13e084ee634e79836638befe1cb562254b75
4
+ data.tar.gz: cd5962bb0fb1adb14a47c5810cf3a69ab8e82309
5
5
  SHA512:
6
- metadata.gz: da3de8e23c850ab80e1287017823e48e1f4897a0a7da475f9ccd84019bb282f1f5054d40dd04ce5a0ad3edac5d55d64457ae7ba8f4d13f904b36e282db6cf988
7
- data.tar.gz: 5d65041d63fdb6e62aedc9429e10f9a9c98a23832ef07d584851e05f62fc8f16011dba3bb014bef657f7d330ecf0fff5df332db80e75edc76689961e557623a4
6
+ metadata.gz: c78c5b5c06bab366d0664a87515448b532e42ead19bdb8352cd7d45451136751613ef29e57e7e510fb173821a4e581412266b6ef0191055b44e11322f410a299
7
+ data.tar.gz: a3b9a06802b3f7de047f9cabe01801f939fa94adb339132ea9b72c1818f7b4c6ead9e68148dd40c59d99adb54de6264d7c6b24f46fa7cd140bb49c9030a9c536
data/README.md CHANGED
@@ -2,6 +2,8 @@
2
2
 
3
3
  Refactoring something behind an API? Plagued by extraneous HTTP params? `rack-filter-param` might be for you.
4
4
 
5
+ [![Build Status](https://travis-ci.org/rfwatson/rack-filter-param.svg?branch=master)](https://travis-ci.org/rfwatson/rack-filter-param)
6
+
5
7
  ## What is it?
6
8
 
7
9
  [Rack](https://github.com/rack/rack) middleware to remove specific params from HTTP requests.
@@ -1,86 +1,14 @@
1
- require "rack/filter_param/version"
1
+ require 'rack/filter_param/version'
2
+ require 'rack/filter_param/middleware'
3
+ require 'rack/filter_param/filter'
4
+ require 'rack/filter_param/apply_filter'
2
5
 
3
6
  module Rack
4
- class FilterParam
7
+ module FilterParam
5
8
  ACTION_DISPATCH_KEY = 'action_dispatch.request.request_parameters'.freeze
6
9
  FILTERED_PARAMS_KEY = 'rack.filtered_params'.freeze
7
10
 
8
- def initialize(app, *params)
9
- @app = app
10
- @params = params.flatten
11
- end
12
-
13
- def call(env)
14
- @request = Rack::Request.new(env)
15
- @params.each { |param| process_param(param) }
16
-
17
- @app.call(env)
18
- end
19
-
20
- private
21
-
22
- attr_reader :request
23
-
24
- def process_param(param)
25
- return unless path_matches?(param)
26
- return unless param_exists?(param)
27
- return unless affirmative_conditional?(param)
28
-
29
- param = param[:param] if param.is_a?(Hash)
30
-
31
- if delete_from_action_dispatch(param) || delete_from_request(param)
32
- filtered_params << [ param.to_s, nil ]
33
- end
34
- end
35
-
36
- def path_matches?(param)
37
- return true unless param.is_a?(Hash)
38
-
39
- path = param[:path]
40
- return true unless path = param[:path]
41
-
42
- return request.env['PATH_INFO'] == path if path.is_a?(String)
43
- return request.env['PATH_INFO'] =~ path if path.is_a?(Regexp)
44
-
45
- false
46
- end
47
-
48
- def param_exists?(param)
49
- param = param.is_a?(Hash) ? param[:param] : param
50
- params.has_key?(param.to_s)
51
- end
52
-
53
- def params
54
- action_dispatch_parsed? ? action_dispatch_params : request.params
55
- end
56
-
57
- def affirmative_conditional?(param)
58
- return true unless param.is_a?(Hash)
59
-
60
- callable, param = param[:if], param[:param]
61
- return true if callable.nil?
62
-
63
- callable.call(params[param.to_s])
64
- end
65
-
66
- def delete_from_action_dispatch(param)
67
- action_dispatch_parsed? && !!action_dispatch_params.delete(param.to_s)
68
- end
69
-
70
- def delete_from_request(param)
71
- !!request.delete_param(param.to_s)
72
- end
73
-
74
- def action_dispatch_params
75
- request.env[ACTION_DISPATCH_KEY]
76
- end
77
-
78
- def action_dispatch_parsed?
79
- !action_dispatch_params.nil?
80
- end
81
-
82
- def filtered_params
83
- request.env[FILTERED_PARAMS_KEY] ||= []
84
- end
11
+ extend SingleForwardable
12
+ def_delegators :'Rack::FilterParam::Middleware', :new
85
13
  end
86
14
  end
@@ -0,0 +1,73 @@
1
+ module Rack
2
+ class ApplyFilter
3
+ extend Forwardable
4
+
5
+ def initialize(filter, request)
6
+ @filter = filter
7
+ @request = request
8
+ end
9
+
10
+ def call
11
+ return unless param_exists?
12
+ return unless path_matches?
13
+ return unless if_proc_affirmative?
14
+
15
+ if delete_from_action_dispatch || delete_from_request
16
+ filtered_params << [ param, nil ]
17
+ end
18
+ end
19
+
20
+ private
21
+ attr_reader :filter, :request
22
+
23
+ def_delegators :@filter, :param, :path, :if_proc
24
+ def_delegators :@request, :env
25
+
26
+ def params
27
+ action_dispatch_parsed? ? action_dispatch_params : request.params
28
+ end
29
+
30
+ def param_exists?
31
+ params.has_key?(param)
32
+ end
33
+
34
+ def param_value
35
+ params[param]
36
+ end
37
+
38
+ def action_dispatch_params
39
+ env[FilterParam::ACTION_DISPATCH_KEY]
40
+ end
41
+
42
+ def action_dispatch_parsed?
43
+ !action_dispatch_params.nil?
44
+ end
45
+
46
+ def path_matches?
47
+ return true if path.nil?
48
+
49
+ return env['PATH_INFO'] == path if path.is_a?(String)
50
+ return env['PATH_INFO'] =~ path if path.is_a?(Regexp)
51
+
52
+ false
53
+ end
54
+
55
+ def if_proc_affirmative?
56
+ return true if if_proc.nil?
57
+
58
+ if_proc.call(param_value)
59
+ end
60
+
61
+ def delete_from_action_dispatch
62
+ action_dispatch_parsed? && !!action_dispatch_params.delete(param)
63
+ end
64
+
65
+ def delete_from_request
66
+ !!request.delete_param(param)
67
+ end
68
+
69
+ def filtered_params
70
+ env[FilterParam::FILTERED_PARAMS_KEY] ||= []
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,21 @@
1
+ module Rack
2
+ class Filter
3
+ attr_reader :param, :path, :if_proc
4
+
5
+ def initialize(options)
6
+ if options.is_a?(Hash)
7
+ @param = parse_param(options[:param])
8
+ @path = options[:path]
9
+ @if_proc = options[:if]
10
+ else
11
+ @param = parse_param(options)
12
+ end
13
+ end
14
+
15
+ private
16
+
17
+ def parse_param(param)
18
+ param.is_a?(Symbol) ? param.to_s : param
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ module Rack
2
+ module FilterParam
3
+ class Middleware
4
+ def initialize(app, *filters)
5
+ @app = app
6
+ @filters = filters.flatten.map(&Filter.public_method(:new))
7
+ end
8
+
9
+ def call(env)
10
+ request = Request.new(env)
11
+
12
+ @filters.each { |filter| ApplyFilter.new(filter, request).call }
13
+ @app.call(env)
14
+ end
15
+ end
16
+ end
17
+ end
@@ -1,5 +1,5 @@
1
1
  module Rack
2
- class FilterParam
3
- VERSION = "0.2.1"
2
+ module FilterParam
3
+ VERSION = '0.3'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-filter-param
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: '0.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rob Watson
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-07-14 00:00:00.000000000 Z
11
+ date: 2017-07-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -111,6 +111,9 @@ files:
111
111
  - bin/console
112
112
  - bin/setup
113
113
  - lib/rack/filter_param.rb
114
+ - lib/rack/filter_param/apply_filter.rb
115
+ - lib/rack/filter_param/filter.rb
116
+ - lib/rack/filter_param/middleware.rb
114
117
  - lib/rack/filter_param/version.rb
115
118
  - rack-filter-param.gemspec
116
119
  homepage: https://github.com/rfwatson