filter_decrufter 0.0.3
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 +12 -0
- data/README.md +29 -0
- data/lib/filter_decrufter.rb +2 -0
- data/lib/filter_decrufter/checker.rb +103 -0
- data/lib/filter_decrufter/tasks.rb +8 -0
- data/lib/filter_decrufter/version.rb +3 -0
- metadata +77 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: cd9c4f9c59da12771bbf12d09fadb5ce6fe282a3
|
4
|
+
data.tar.gz: 115f66febd38a0cefc999919eccb2ae03a2f09af
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 25fa82579c3e2c0daf3b620b1fd1800632cc20a1108dac15bc359e7d38a0082b40dd49aa3ca8a8e068bebdbdb0de274e59005d0d1fb2620888378a8059bdf4ca
|
7
|
+
data.tar.gz: a469df57be33490c3dcc4ea499085a3f61b215815a6859b8954da39d38f73e7c04382360599594ee64188de23636a4bee50f55ff0105d124f2f2aab2a407a4bd
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
## 0.0.3 (2015-02-18)
|
2
|
+
|
3
|
+
* [FIXED] No longer reports all violations as being for before_filters
|
4
|
+
* [NEW] Rake tasks are required automatically now
|
5
|
+
|
6
|
+
## 0.0.2 (2015-02-17)
|
7
|
+
|
8
|
+
* [NEW] Works fine with Ruby 1.9.3
|
9
|
+
|
10
|
+
## 0.0.1 (2015-02-16)
|
11
|
+
|
12
|
+
* [NEW] Initial release
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# FilterDecrufter
|
2
|
+
|
3
|
+
FilterDecrufter is a little utility for cleaning up before_filters.
|
4
|
+
|
5
|
+
Suppose you have a Rails controller with a before_filter:
|
6
|
+
|
7
|
+
before_filter :load_widget, :only => [:show, :frobnicate]
|
8
|
+
|
9
|
+
If you've deleted the frobnicate action, Rails won't complain. But FilterDecrufter will!
|
10
|
+
|
11
|
+
# Usage
|
12
|
+
|
13
|
+
Add it to your Gemfile in the development group:
|
14
|
+
|
15
|
+
# In your Gemfile
|
16
|
+
gem 'filter_decrufter'
|
17
|
+
|
18
|
+
Run the task!
|
19
|
+
|
20
|
+
$ bundle exec rake filter_decrufter:check
|
21
|
+
Api::V1::WidgetsController before_filter 'find_widget' has an :only constraint with a non-existent action name 'show'
|
22
|
+
EmployeesController after_filter 'set_name' has an :only constraint with a non-existent action name 'frobnicate'
|
23
|
+
|
24
|
+
Tested with Rails 3.2.
|
25
|
+
|
26
|
+
# Credits
|
27
|
+
|
28
|
+
* Tom Copeland - author
|
29
|
+
* John Moon - design discussions
|
@@ -0,0 +1,103 @@
|
|
1
|
+
module FilterDecrufter
|
2
|
+
|
3
|
+
class Hit
|
4
|
+
|
5
|
+
attr_accessor :controller_class, :before_filter_name, :options, :filter_type
|
6
|
+
|
7
|
+
def initialize(controller_class, before_filter_name, options, filter_type)
|
8
|
+
@controller_class = controller_class
|
9
|
+
@before_filter_name = before_filter_name
|
10
|
+
@options = options
|
11
|
+
@filter_type = filter_type
|
12
|
+
end
|
13
|
+
|
14
|
+
def actions_include?(action_name)
|
15
|
+
action_methods.include?(action_name)
|
16
|
+
end
|
17
|
+
|
18
|
+
def populated_only_except_options
|
19
|
+
options.select {|opt_name,opt_value| [:only,:except].include?(opt_name) && !opt_value.empty? }
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def action_methods
|
25
|
+
controller_class.action_methods.map &:to_sym
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
30
|
+
class Report
|
31
|
+
|
32
|
+
attr_accessor :hits
|
33
|
+
|
34
|
+
def self.instance
|
35
|
+
@instance ||= Report.new
|
36
|
+
end
|
37
|
+
|
38
|
+
def initialize
|
39
|
+
@hits = []
|
40
|
+
end
|
41
|
+
|
42
|
+
def add(hit)
|
43
|
+
raise "Oops filter_decrufter can't handle this version of Rails" unless hit.controller_class.respond_to?(:action_methods)
|
44
|
+
hits << hit
|
45
|
+
end
|
46
|
+
|
47
|
+
def find_problems
|
48
|
+
hits.each do |hit|
|
49
|
+
hit.populated_only_except_options.each do |k,v|
|
50
|
+
[:only, :except].each do |constraint_name|
|
51
|
+
check_constraint(constraint_name, hit) if hit.populated_only_except_options[constraint_name].present?
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def check_constraint(name, hit)
|
58
|
+
[hit.populated_only_except_options[name]].flatten.each do |action_syms|
|
59
|
+
[action_syms].flatten.each do |action_name|
|
60
|
+
if !hit.actions_include?(action_name)
|
61
|
+
puts "#{hit.controller_class} #{hit.filter_type} '#{hit.before_filter_name}' has an :#{name} constraint with a non-existent action name '#{action_name}'"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
class Checker
|
70
|
+
|
71
|
+
def initialize
|
72
|
+
raise "This is a Rails utility" unless defined?(Rails)
|
73
|
+
raise "Oops filter_decrufter can't handle this version of Rails" unless Rails.respond_to?(:application)
|
74
|
+
end
|
75
|
+
|
76
|
+
def check
|
77
|
+
[:before_filter, :around_filter, :after_filter].each {|s| patch_method(s) }
|
78
|
+
load_all_controllers
|
79
|
+
show_report
|
80
|
+
nil
|
81
|
+
end
|
82
|
+
|
83
|
+
private
|
84
|
+
|
85
|
+
def show_report
|
86
|
+
Report.instance.find_problems
|
87
|
+
end
|
88
|
+
|
89
|
+
def patch_method(filter_sym)
|
90
|
+
ApplicationController.define_singleton_method(filter_sym) do |*args, &blk|
|
91
|
+
if args.many? && (args[1][:only].present? || args[1][:except].present?)
|
92
|
+
Report.instance.add(FilterDecrufter::Hit.new(self, args[0], args[1], filter_sym))
|
93
|
+
end
|
94
|
+
super(*args, &blk)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
def load_all_controllers
|
99
|
+
Rails.application.eager_load!
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
end
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: filter_decrufter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Tom Copeland
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-02-23 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '10.1'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '10.1'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: minitest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '5.0'
|
41
|
+
description: Finds old action symbols in Rails before / after / around filters
|
42
|
+
email: tom@thomasleecopeland.com
|
43
|
+
executables: []
|
44
|
+
extensions: []
|
45
|
+
extra_rdoc_files: []
|
46
|
+
files:
|
47
|
+
- CHANGELOG.md
|
48
|
+
- README.md
|
49
|
+
- lib/filter_decrufter.rb
|
50
|
+
- lib/filter_decrufter/checker.rb
|
51
|
+
- lib/filter_decrufter/tasks.rb
|
52
|
+
- lib/filter_decrufter/version.rb
|
53
|
+
homepage: https://github.com/tcopeland/filter_decrufter
|
54
|
+
licenses:
|
55
|
+
- MIT
|
56
|
+
metadata: {}
|
57
|
+
post_install_message:
|
58
|
+
rdoc_options: []
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 1.9.3
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
requirements: []
|
72
|
+
rubyforge_project: none
|
73
|
+
rubygems_version: 2.2.2
|
74
|
+
signing_key:
|
75
|
+
specification_version: 4
|
76
|
+
summary: Finds cruft in Rails filters
|
77
|
+
test_files: []
|