rails_best_practices 1.9.0 → 1.9.1
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.
- data/.travis.yml +4 -1
- data/Gemfile +0 -3
- data/Gemfile.lock +10 -9
- data/README.md +2 -0
- data/lib/rails_best_practices/analyzer.rb +40 -21
- data/lib/rails_best_practices/core.rb +1 -0
- data/lib/rails_best_practices/core/check.rb +12 -0
- data/lib/rails_best_practices/core/configs.rb +7 -0
- data/lib/rails_best_practices/core/error.rb +2 -1
- data/lib/rails_best_practices/core/routes.rb +11 -5
- data/lib/rails_best_practices/core/runner.rb +6 -2
- data/lib/rails_best_practices/core_ext/sexp.rb +3 -1
- data/lib/rails_best_practices/prepares.rb +5 -0
- data/lib/rails_best_practices/prepares/config_prepare.rb +21 -0
- data/lib/rails_best_practices/prepares/route_prepare.rb +24 -7
- data/lib/rails_best_practices/reviews/protect_mass_assignment_review.rb +11 -3
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_models_review.rb +7 -3
- data/lib/rails_best_practices/version.rb +1 -1
- data/rails_best_practices.gemspec +1 -0
- data/spec/rails_best_practices/analyzer_spec.rb +52 -32
- data/spec/rails_best_practices/core/check_spec.rb +64 -45
- data/spec/rails_best_practices/core/checking_visitor_spec.rb +65 -64
- data/spec/rails_best_practices/core/configs_spec.rb +7 -0
- data/spec/rails_best_practices/core/controllers_spec.rb +4 -2
- data/spec/rails_best_practices/core/error_spec.rb +28 -22
- data/spec/rails_best_practices/core/helpers_spec.rb +4 -2
- data/spec/rails_best_practices/core/klasses_spec.rb +8 -6
- data/spec/rails_best_practices/core/mailers_spec.rb +4 -2
- data/spec/rails_best_practices/core/methods_spec.rb +37 -35
- data/spec/rails_best_practices/core/model_associations_spec.rb +17 -15
- data/spec/rails_best_practices/core/model_attributes_spec.rb +17 -15
- data/spec/rails_best_practices/core/models_spec.rb +4 -2
- data/spec/rails_best_practices/core/modules_spec.rb +21 -19
- data/spec/rails_best_practices/core/nil_spec.rb +23 -21
- data/spec/rails_best_practices/core/routes_spec.rb +21 -14
- data/spec/rails_best_practices/core/runner_spec.rb +17 -15
- data/spec/rails_best_practices/core_ext/sexp_spec.rb +32 -7
- data/spec/rails_best_practices/lexicals/remove_tab_check_spec.rb +35 -31
- data/spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb +35 -31
- data/spec/rails_best_practices/prepares/config_prepare_spec.rb +24 -0
- data/spec/rails_best_practices/prepares/controller_prepare_spec.rb +122 -123
- data/spec/rails_best_practices/prepares/helper_prepare_spec.rb +36 -32
- data/spec/rails_best_practices/prepares/mailer_prepare_spec.rb +12 -8
- data/spec/rails_best_practices/prepares/model_prepare_spec.rb +326 -322
- data/spec/rails_best_practices/prepares/route_prepare_spec.rb +619 -573
- data/spec/rails_best_practices/prepares/schema_prepare_spec.rb +25 -21
- data/spec/rails_best_practices/reviews/add_model_virtual_attribute_review_spec.rb +85 -87
- data/spec/rails_best_practices/reviews/always_add_db_index_review_spec.rb +224 -222
- data/spec/rails_best_practices/reviews/dry_bundler_in_capistrano_review_spec.rb +30 -26
- data/spec/rails_best_practices/reviews/isolate_seed_data_review_spec.rb +79 -75
- data/spec/rails_best_practices/reviews/keep_finders_on_their_own_model_review_spec.rb +76 -72
- data/spec/rails_best_practices/reviews/law_of_demeter_review_spec.rb +138 -140
- data/spec/rails_best_practices/reviews/move_code_into_controller_review_spec.rb +38 -34
- data/spec/rails_best_practices/reviews/move_code_into_helper_review_spec.rb +22 -18
- data/spec/rails_best_practices/reviews/move_code_into_model_review_spec.rb +57 -53
- data/spec/rails_best_practices/reviews/move_finder_to_named_scope_review_spec.rb +62 -63
- data/spec/rails_best_practices/reviews/move_model_logic_into_model_review_spec.rb +51 -50
- data/spec/rails_best_practices/reviews/needless_deep_nesting_review_spec.rb +140 -136
- data/spec/rails_best_practices/reviews/not_use_default_route_review_spec.rb +48 -44
- data/spec/rails_best_practices/reviews/not_use_times_ago_in_words_review_spec.rb +42 -38
- data/spec/rails_best_practices/reviews/overuse_route_customizations_review_spec.rb +151 -149
- data/spec/rails_best_practices/reviews/protect_mass_assignment_review_spec.rb +86 -55
- data/spec/rails_best_practices/reviews/remove_empty_helpers_review_spec.rb +23 -19
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_controllers_review_spec.rb +290 -286
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_helpers_review_spec.rb +76 -72
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_models_review_spec.rb +601 -597
- data/spec/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review_spec.rb +55 -54
- data/spec/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review_spec.rb +34 -30
- data/spec/rails_best_practices/reviews/restrict_auto_generated_routes_review_spec.rb +288 -289
- data/spec/rails_best_practices/reviews/simplify_render_in_controllers_review_spec.rb +59 -55
- data/spec/rails_best_practices/reviews/simplify_render_in_views_review_spec.rb +73 -69
- data/spec/rails_best_practices/reviews/use_before_filter_review_spec.rb +89 -98
- data/spec/rails_best_practices/reviews/use_model_association_review_spec.rb +52 -52
- data/spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb +192 -190
- data/spec/rails_best_practices/reviews/use_observer_review_spec.rb +114 -121
- data/spec/rails_best_practices/reviews/use_query_attribute_review_spec.rb +189 -190
- data/spec/rails_best_practices/reviews/use_say_with_time_in_migrations_review_spec.rb +97 -93
- data/spec/rails_best_practices/reviews/use_scope_access_review_spec.rb +146 -151
- data/spec/spec_helper.rb +11 -20
- metadata +42 -26
- data/.watchr.example +0 -65
@@ -1,84 +1,88 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
3
|
+
module RailsBestPractices
|
4
|
+
module Reviews
|
5
|
+
describe RemoveUnusedMethodsInHelpersReview do
|
6
|
+
let(:runner) { Core::Runner.new(
|
7
|
+
:prepares => [Prepares::ControllerPrepare.new, Prepares::HelperPrepare.new],
|
8
|
+
:reviews => RemoveUnusedMethodsInHelpersReview.new(:except_methods => [])
|
9
|
+
) }
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
it "should not remove unused methods if called on views" do
|
23
|
-
content =<<-EOF
|
24
|
-
module PostsHelper
|
25
|
-
def used?(post); end
|
26
|
-
end
|
27
|
-
EOF
|
28
|
-
runner.prepare('app/helpers/posts_helper.rb', content)
|
29
|
-
runner.review('app/helpers/posts_helper.rb', content)
|
30
|
-
content =<<-EOF
|
31
|
-
<% if used?(@post) %>
|
32
|
-
<% end %>
|
33
|
-
EOF
|
34
|
-
runner.review('app/views/posts/show.html.erb', content)
|
35
|
-
runner.after_review
|
36
|
-
runner.should have(0).errors
|
37
|
-
end
|
11
|
+
it "should remove unused methods" do
|
12
|
+
content =<<-EOF
|
13
|
+
module PostsHelper
|
14
|
+
def unused; end
|
15
|
+
end
|
16
|
+
EOF
|
17
|
+
runner.prepare('app/helpers/posts_helper.rb', content)
|
18
|
+
runner.review('app/helpers/posts_helper.rb', content)
|
19
|
+
runner.after_review
|
20
|
+
runner.should have(1).errors
|
21
|
+
runner.errors[0].to_s.should == "app/helpers/posts_helper.rb:2 - remove unused methods (PostsHelper#unused)"
|
22
|
+
end
|
38
23
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
24
|
+
it "should not remove unused methods if called on views" do
|
25
|
+
content =<<-EOF
|
26
|
+
module PostsHelper
|
27
|
+
def used?(post); end
|
28
|
+
end
|
29
|
+
EOF
|
30
|
+
runner.prepare('app/helpers/posts_helper.rb', content)
|
31
|
+
runner.review('app/helpers/posts_helper.rb', content)
|
32
|
+
content =<<-EOF
|
33
|
+
<% if used?(@post) %>
|
34
|
+
<% end %>
|
35
|
+
EOF
|
36
|
+
runner.review('app/views/posts/show.html.erb', content)
|
37
|
+
runner.after_review
|
38
|
+
runner.should have(0).errors
|
44
39
|
end
|
45
40
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
<% if used?(@post) %>
|
53
|
-
<% end %>
|
54
|
-
EOF
|
55
|
-
runner.review('app/views/posts/show.html.erb', content)
|
56
|
-
runner.after_review
|
57
|
-
runner.should have(0).errors
|
58
|
-
end
|
41
|
+
it "should not remove unused methods if called on helpers" do
|
42
|
+
content =<<-EOF
|
43
|
+
module PostsHelper
|
44
|
+
def used?(post)
|
45
|
+
test?(post)
|
46
|
+
end
|
59
47
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
48
|
+
def test?(post); end
|
49
|
+
end
|
50
|
+
EOF
|
51
|
+
runner.prepare('app/helpers/posts_helper.rb', content)
|
52
|
+
runner.review('app/helpers/posts_helper.rb', content)
|
53
|
+
content =<<-EOF
|
54
|
+
<% if used?(@post) %>
|
55
|
+
<% end %>
|
56
|
+
EOF
|
57
|
+
runner.review('app/views/posts/show.html.erb', content)
|
58
|
+
runner.after_review
|
59
|
+
runner.should have(0).errors
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should not remove unused methods if called on controllers" do
|
63
|
+
helper_content =<<-EOF
|
64
|
+
module PostsHelper
|
65
|
+
def used?(post); end
|
66
|
+
end
|
67
|
+
EOF
|
68
|
+
controller_content =<<-EOF
|
69
|
+
class PostsController < InheritedResources::Base
|
70
|
+
include PostsHelper
|
69
71
|
|
70
|
-
|
71
|
-
|
72
|
-
|
72
|
+
def show
|
73
|
+
@post = Post.find(params[:id])
|
74
|
+
used?(@post)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
EOF
|
78
|
+
runner.prepare('app/helpers/posts_helper.rb', helper_content)
|
79
|
+
runner.prepare('app/controllers/posts_controller.rb', controller_content)
|
80
|
+
runner.after_prepare
|
81
|
+
runner.review('app/helpers/posts_helper.rb', helper_content)
|
82
|
+
runner.review('app/controllers/posts_controller.rb', controller_content)
|
83
|
+
runner.after_review
|
84
|
+
runner.should have(0).errors
|
73
85
|
end
|
74
86
|
end
|
75
|
-
EOF
|
76
|
-
runner.prepare('app/helpers/posts_helper.rb', helper_content)
|
77
|
-
runner.prepare('app/controllers/posts_controller.rb', controller_content)
|
78
|
-
runner.after_prepare
|
79
|
-
runner.review('app/helpers/posts_helper.rb', helper_content)
|
80
|
-
runner.review('app/controllers/posts_controller.rb', controller_content)
|
81
|
-
runner.after_review
|
82
|
-
runner.should have(0).errors
|
83
87
|
end
|
84
88
|
end
|
@@ -1,670 +1,674 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
3
|
+
module RailsBestPractices
|
4
|
+
module Reviews
|
5
|
+
describe RemoveUnusedMethodsInModelsReview do
|
6
|
+
let(:runner) { Core::Runner.new(
|
7
|
+
:prepares => Prepares::ModelPrepare.new,
|
8
|
+
:reviews => RemoveUnusedMethodsInModelsReview.new({'except_methods' => ["*#set_cache"]})
|
9
|
+
) }
|
10
|
+
|
11
|
+
context "private" do
|
12
|
+
it "should remove unused methods" do
|
13
|
+
content =<<-EOF
|
14
|
+
class Post < ActiveRecord::Base
|
15
|
+
def find; end
|
16
|
+
private
|
17
|
+
def find_by_sql; end
|
18
|
+
end
|
19
|
+
EOF
|
20
|
+
runner.prepare('app/models/post.rb', content)
|
21
|
+
runner.review('app/models/post.rb', content)
|
22
|
+
content =<<-EOF
|
23
|
+
class PostsController < ApplicationController
|
24
|
+
def get
|
25
|
+
Post.new.find
|
26
|
+
end
|
27
|
+
end
|
28
|
+
EOF
|
29
|
+
runner.review('app/controllers/posts_controller.rb', content)
|
30
|
+
runner.after_review
|
31
|
+
runner.should have(1).errors
|
32
|
+
runner.errors[0].to_s.should == "app/models/post.rb:4 - remove unused methods (Post#find_by_sql)"
|
24
33
|
end
|
25
|
-
end
|
26
|
-
EOF
|
27
|
-
runner.review('app/controllers/posts_controller.rb', content)
|
28
|
-
runner.after_review
|
29
|
-
runner.should have(1).errors
|
30
|
-
runner.errors[0].to_s.should == "app/models/post.rb:4 - remove unused methods (Post#find_by_sql)"
|
31
|
-
end
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
it "should not remove unused methods with var_ref" do
|
46
|
-
content =<<-EOF
|
47
|
-
class Post < ActiveRecord::Base
|
48
|
-
def find;
|
49
|
-
find_by_sql
|
50
|
-
end
|
51
|
-
private
|
52
|
-
def find_by_sql; end
|
53
|
-
end
|
54
|
-
EOF
|
55
|
-
runner.prepare('app/models/post.rb', content)
|
56
|
-
runner.review('app/models/post.rb', content)
|
57
|
-
content =<<-EOF
|
58
|
-
class PostsController < ApplicationController
|
59
|
-
def get
|
60
|
-
Post.new.find
|
35
|
+
it "should not remove unused methods with except_methods" do
|
36
|
+
content =<<-EOF
|
37
|
+
class Post < ActiveRecord::Base
|
38
|
+
def set_cache; end
|
39
|
+
end
|
40
|
+
EOF
|
41
|
+
runner.prepare('app/models/post.rb', content)
|
42
|
+
runner.review('app/models/post.rb', content)
|
43
|
+
runner.after_review
|
44
|
+
runner.should have(0).errors
|
61
45
|
end
|
62
|
-
end
|
63
|
-
EOF
|
64
|
-
runner.review('app/controllers/posts_controller.rb', content)
|
65
|
-
runner.after_review
|
66
|
-
runner.should have(0).errors
|
67
|
-
end
|
68
|
-
|
69
|
-
it "should not remove unused methods with callback" do
|
70
|
-
content =<<-EOF
|
71
|
-
class Post < ActiveRecord::Base
|
72
|
-
after_save :expire_cache
|
73
|
-
private
|
74
|
-
def expire_cache; end
|
75
|
-
end
|
76
|
-
EOF
|
77
|
-
runner.prepare('app/models/post.rb', content)
|
78
|
-
runner.review('app/models/post.rb', content)
|
79
|
-
runner.after_review
|
80
|
-
runner.should have(0).errors
|
81
|
-
end
|
82
46
|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
47
|
+
it "should not remove unused methods with var_ref" do
|
48
|
+
content =<<-EOF
|
49
|
+
class Post < ActiveRecord::Base
|
50
|
+
def find
|
51
|
+
find_by_sql
|
52
|
+
end
|
53
|
+
private
|
54
|
+
def find_by_sql; end
|
55
|
+
end
|
56
|
+
EOF
|
57
|
+
runner.prepare('app/models/post.rb', content)
|
58
|
+
runner.review('app/models/post.rb', content)
|
59
|
+
content =<<-EOF
|
60
|
+
class PostsController < ApplicationController
|
61
|
+
def get
|
62
|
+
Post.new.find
|
63
|
+
end
|
64
|
+
end
|
65
|
+
EOF
|
66
|
+
runner.review('app/controllers/posts_controller.rb', content)
|
67
|
+
runner.after_review
|
68
|
+
runner.should have(0).errors
|
99
69
|
end
|
100
|
-
end
|
101
|
-
EOF
|
102
|
-
runner.review('app/controllers/posts_controller.rb', content)
|
103
|
-
runner.after_review
|
104
|
-
runner.should have(0).errors
|
105
|
-
end
|
106
70
|
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
content =<<-EOF
|
120
|
-
class PostsController < ApplicationController
|
121
|
-
def get
|
122
|
-
Post.new.conditions
|
71
|
+
it "should not remove unused methods with callback" do
|
72
|
+
content =<<-EOF
|
73
|
+
class Post < ActiveRecord::Base
|
74
|
+
after_save :expire_cache
|
75
|
+
private
|
76
|
+
def expire_cache; end
|
77
|
+
end
|
78
|
+
EOF
|
79
|
+
runner.prepare('app/models/post.rb', content)
|
80
|
+
runner.review('app/models/post.rb', content)
|
81
|
+
runner.after_review
|
82
|
+
runner.should have(0).errors
|
123
83
|
end
|
124
|
-
end
|
125
|
-
EOF
|
126
|
-
runner.review('app/controllers/posts_controller.rb', content)
|
127
|
-
runner.after_review
|
128
|
-
runner.should have(0).errors
|
129
|
-
end
|
130
84
|
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
85
|
+
it "should not remove unused method with command" do
|
86
|
+
content =<<-EOF
|
87
|
+
class Post < ActiveRecord::Base
|
88
|
+
def fetch
|
89
|
+
get(:position => 'first')
|
90
|
+
end
|
91
|
+
private
|
92
|
+
def get(options={}); end
|
93
|
+
end
|
94
|
+
EOF
|
95
|
+
runner.prepare('app/models/post.rb', content)
|
96
|
+
runner.review('app/models/post.rb', content)
|
97
|
+
content =<<-EOF
|
98
|
+
class PostsController < ApplicationController
|
99
|
+
def get
|
100
|
+
Post.new.fetch
|
101
|
+
end
|
137
102
|
end
|
103
|
+
EOF
|
104
|
+
runner.review('app/controllers/posts_controller.rb', content)
|
105
|
+
runner.after_review
|
106
|
+
runner.should have(0).errors
|
138
107
|
end
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
108
|
+
|
109
|
+
it "should not remove unused method with call" do
|
110
|
+
content =<<-EOF
|
111
|
+
class Post < ActiveRecord::Base
|
112
|
+
def conditions
|
113
|
+
self.build_conditions({})
|
114
|
+
end
|
115
|
+
private
|
116
|
+
def build_conditions(conditions={}); end
|
117
|
+
end
|
118
|
+
EOF
|
119
|
+
runner.prepare('app/models/post.rb', content)
|
120
|
+
runner.review('app/models/post.rb', content)
|
121
|
+
content =<<-EOF
|
122
|
+
class PostsController < ApplicationController
|
123
|
+
def get
|
124
|
+
Post.new.conditions
|
125
|
+
end
|
126
|
+
end
|
127
|
+
EOF
|
128
|
+
runner.review('app/controllers/posts_controller.rb', content)
|
129
|
+
runner.after_review
|
130
|
+
runner.should have(0).errors
|
149
131
|
end
|
150
|
-
end
|
151
|
-
EOF
|
152
|
-
runner.review('app/controllers/posts_controller.rb', content)
|
153
|
-
runner.after_review
|
154
|
-
runner.should have(0).errors
|
155
|
-
end
|
156
132
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
133
|
+
it "should not remove unused method with message" do
|
134
|
+
content =<<-EOF
|
135
|
+
class Post < ActiveRecord::Base
|
136
|
+
def save
|
137
|
+
transaction true do
|
138
|
+
self.update
|
139
|
+
end
|
140
|
+
end
|
141
|
+
private
|
142
|
+
def transaction(force); end
|
143
|
+
end
|
144
|
+
EOF
|
145
|
+
runner.prepare('app/models/post.rb', content)
|
146
|
+
runner.review('app/models/post.rb', content)
|
147
|
+
content =<<-EOF
|
148
|
+
class PostsController < ApplicationController
|
149
|
+
def create
|
150
|
+
Post.new.save
|
151
|
+
end
|
152
|
+
end
|
153
|
+
EOF
|
154
|
+
runner.review('app/controllers/posts_controller.rb', content)
|
155
|
+
runner.after_review
|
156
|
+
runner.should have(0).errors
|
157
|
+
end
|
170
158
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
159
|
+
it "should not remove unused method with validation condition" do
|
160
|
+
content =<<-EOF
|
161
|
+
class Post < ActiveRecord::Base
|
162
|
+
validates_uniqueness_of :login, :if => :email_blank?
|
163
|
+
private
|
164
|
+
def email_blank?; end
|
165
|
+
end
|
166
|
+
EOF
|
167
|
+
runner.prepare('app/models/post.rb', content)
|
168
|
+
runner.review('app/models/post.rb', content)
|
169
|
+
runner.after_review
|
170
|
+
runner.should have(0).errors
|
171
|
+
end
|
184
172
|
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
173
|
+
it "should not remove unused method with aasm" do
|
174
|
+
content =<<-EOF
|
175
|
+
class Post < ActiveRecord::Base
|
176
|
+
aasm_state :accepted, :enter => [:update_datetime]
|
177
|
+
private
|
178
|
+
def update_datetime; end
|
179
|
+
end
|
180
|
+
EOF
|
181
|
+
runner.prepare('app/models/post.rb', content)
|
182
|
+
runner.review('app/models/post.rb', content)
|
183
|
+
runner.after_review
|
184
|
+
runner.should have(0).errors
|
185
|
+
end
|
198
186
|
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
187
|
+
it "should not remove unused method with initialize" do
|
188
|
+
content =<<-EOF
|
189
|
+
class Post < ActiveRecord::Base
|
190
|
+
private
|
191
|
+
def initialize; end
|
192
|
+
end
|
193
|
+
EOF
|
194
|
+
runner.prepare('app/models/post.rb', content)
|
195
|
+
runner.review('app/models/post.rb', content)
|
196
|
+
runner.after_review
|
197
|
+
runner.should have(0).errors
|
198
|
+
end
|
204
199
|
end
|
205
|
-
EOF
|
206
|
-
runner.prepare('app/models/post.rb', content)
|
207
|
-
runner.after_review
|
208
|
-
runner.should have(1).errors
|
209
|
-
runner.errors[0].to_s.should == "app/models/post.rb:2 - remove unused methods (Post#fetch)"
|
210
|
-
end
|
211
200
|
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
201
|
+
context "public" do
|
202
|
+
it "should remove unused methods" do
|
203
|
+
content =<<-EOF
|
204
|
+
class Post < ActiveRecord::Base
|
205
|
+
def fetch; end
|
206
|
+
end
|
207
|
+
EOF
|
208
|
+
runner.prepare('app/models/post.rb', content)
|
209
|
+
runner.after_review
|
210
|
+
runner.should have(1).errors
|
211
|
+
runner.errors[0].to_s.should == "app/models/post.rb:2 - remove unused methods (Post#fetch)"
|
223
212
|
end
|
224
|
-
end
|
225
|
-
EOF
|
226
|
-
runner.review('app/controllers/posts_controller.rb', content)
|
227
|
-
runner.after_review
|
228
|
-
runner.should have(0).errors
|
229
|
-
end
|
230
213
|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
214
|
+
it "should not remove unused methods" do
|
215
|
+
content =<<-EOF
|
216
|
+
class Post < ActiveRecord::Base
|
217
|
+
def fetch; end
|
218
|
+
end
|
219
|
+
EOF
|
220
|
+
runner.prepare('app/models/post.rb', content)
|
221
|
+
content =<<-EOF
|
222
|
+
class PostsController < ApplicationController
|
223
|
+
def show
|
224
|
+
@post.fetch
|
225
|
+
end
|
226
|
+
end
|
227
|
+
EOF
|
228
|
+
runner.review('app/controllers/posts_controller.rb', content)
|
229
|
+
runner.after_review
|
230
|
+
runner.should have(0).errors
|
231
|
+
end
|
242
232
|
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
def find
|
254
|
-
Post.new.try(:find, current_user.id)
|
233
|
+
it "should not remove unused methods for attribute assignment" do
|
234
|
+
content =<<-EOF
|
235
|
+
class Post < ActiveRecord::Base
|
236
|
+
def user=(user); end
|
237
|
+
end
|
238
|
+
EOF
|
239
|
+
runner.prepare('app/models/post.rb', content)
|
240
|
+
runner.review('app/models/post.rb', content)
|
241
|
+
runner.after_review
|
242
|
+
runner.should have(0).errors
|
255
243
|
end
|
256
|
-
end
|
257
|
-
EOF
|
258
|
-
runner.review('app/controllers/posts_controller.rb', content)
|
259
|
-
runner.after_review
|
260
|
-
runner.should have(0).errors
|
261
|
-
end
|
262
244
|
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
245
|
+
it "should not remove unused methods for try" do
|
246
|
+
content =<<-EOF
|
247
|
+
class Post < ActiveRecord::Base
|
248
|
+
def find(user_id); end
|
249
|
+
end
|
250
|
+
EOF
|
251
|
+
runner.prepare('app/models/post.rb', content)
|
252
|
+
runner.review('app/models/post.rb', content)
|
253
|
+
content =<<-EOF
|
254
|
+
class PostsController < ApplicationController
|
255
|
+
def find
|
256
|
+
Post.new.try(:find, current_user.id)
|
257
|
+
end
|
258
|
+
end
|
259
|
+
EOF
|
260
|
+
runner.review('app/controllers/posts_controller.rb', content)
|
261
|
+
runner.after_review
|
262
|
+
runner.should have(0).errors
|
275
263
|
end
|
276
|
-
end
|
277
|
-
EOF
|
278
|
-
runner.review('app/controllers/posts_controller.rb', content)
|
279
|
-
runner.after_review
|
280
|
-
runner.should have(0).errors
|
281
|
-
end
|
282
264
|
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
265
|
+
it "should not remove unused methods for send" do
|
266
|
+
content =<<-EOF
|
267
|
+
class Post < ActiveRecord::Base
|
268
|
+
def find(user_id); end
|
269
|
+
end
|
270
|
+
EOF
|
271
|
+
runner.prepare('app/models/post.rb', content)
|
272
|
+
runner.review('app/models/post.rb', content)
|
273
|
+
content =<<-EOF
|
274
|
+
class PostsController < ApplicationController
|
275
|
+
def find
|
276
|
+
Post.new.send(:find, current_user.id)
|
277
|
+
end
|
278
|
+
end
|
279
|
+
EOF
|
280
|
+
runner.review('app/controllers/posts_controller.rb', content)
|
281
|
+
runner.after_review
|
282
|
+
runner.should have(0).errors
|
296
283
|
end
|
297
|
-
end
|
298
|
-
EOF
|
299
|
-
runner.review('app/controllers/posts_controller.rb', content)
|
300
|
-
runner.after_review
|
301
|
-
runner.should have(1).errors
|
302
|
-
end
|
303
284
|
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
|
315
|
-
|
316
|
-
|
285
|
+
it "should remove unused methods for send string_embexpre" do
|
286
|
+
content =<<-EOF
|
287
|
+
class Post < ActiveRecord::Base
|
288
|
+
def find_first; end
|
289
|
+
end
|
290
|
+
EOF
|
291
|
+
runner.prepare('app/models/post.rb', content)
|
292
|
+
runner.review('app/models/post.rb', content)
|
293
|
+
content =<<-EOF
|
294
|
+
class PostsController < ApplicationController
|
295
|
+
def find
|
296
|
+
type = "first"
|
297
|
+
Post.new.send("find_\#{type}")
|
298
|
+
end
|
299
|
+
end
|
300
|
+
EOF
|
301
|
+
runner.review('app/controllers/posts_controller.rb', content)
|
302
|
+
runner.after_review
|
303
|
+
runner.should have(1).errors
|
317
304
|
end
|
318
|
-
end
|
319
|
-
EOF
|
320
|
-
runner.review('app/controllers/posts_controller.rb', content)
|
321
|
-
runner.after_review
|
322
|
-
runner.should have(1).errors
|
323
|
-
end
|
324
|
-
end
|
325
305
|
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
306
|
+
it "should remove unused methods for send variable" do
|
307
|
+
content =<<-EOF
|
308
|
+
class Post < ActiveRecord::Base
|
309
|
+
def first; end
|
310
|
+
end
|
311
|
+
EOF
|
312
|
+
runner.prepare('app/models/post.rb', content)
|
313
|
+
runner.review('app/models/post.rb', content)
|
314
|
+
content =<<-EOF
|
315
|
+
class PostsController < ApplicationController
|
316
|
+
def find
|
317
|
+
type = "first"
|
318
|
+
Post.new.send(type)
|
319
|
+
end
|
320
|
+
end
|
321
|
+
EOF
|
322
|
+
runner.review('app/controllers/posts_controller.rb', content)
|
323
|
+
runner.after_review
|
324
|
+
runner.should have(1).errors
|
340
325
|
end
|
341
326
|
end
|
342
|
-
EOF
|
343
|
-
runner.review('app/controllers/posts_controller.rb', content)
|
344
|
-
runner.after_review
|
345
|
-
runner.should have(1).errors
|
346
|
-
runner.errors[0].to_s.should == "app/models/post.rb:3 - remove unused methods (Post#test)"
|
347
|
-
end
|
348
327
|
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
328
|
+
context "protected" do
|
329
|
+
it "should not remove unused methods" do
|
330
|
+
content =<<-EOF
|
331
|
+
class Post < ActiveRecord::Base
|
332
|
+
protected
|
333
|
+
def test; end
|
334
|
+
end
|
335
|
+
EOF
|
336
|
+
runner.prepare("app/models/post.rb", content)
|
337
|
+
runner.review("app/models/post.rb", content)
|
338
|
+
content =<<-EOF
|
339
|
+
class PostsController < ApplicationController
|
340
|
+
def test
|
341
|
+
Post.new.test
|
342
|
+
end
|
343
|
+
end
|
344
|
+
EOF
|
345
|
+
runner.review('app/controllers/posts_controller.rb', content)
|
346
|
+
runner.after_review
|
347
|
+
runner.should have(1).errors
|
348
|
+
runner.errors[0].to_s.should == "app/models/post.rb:3 - remove unused methods (Post#test)"
|
360
349
|
end
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
BlogPost
|
350
|
+
|
351
|
+
it "should not remove unused methods" do
|
352
|
+
post_content =<<-EOF
|
353
|
+
class Post < ActiveRecord::Base
|
354
|
+
protected
|
355
|
+
def test; end
|
356
|
+
end
|
357
|
+
EOF
|
358
|
+
blog_post_content =<<-EOF
|
359
|
+
class BlogPost < Post
|
360
|
+
def play
|
361
|
+
test
|
362
|
+
end
|
363
|
+
end
|
364
|
+
EOF
|
365
|
+
runner.prepare("app/models/post.rb", post_content)
|
366
|
+
runner.prepare("app/models/blog_post.rb", blog_post_content)
|
367
|
+
runner.review("app/models/post.rb", post_content)
|
368
|
+
runner.review("app/models/blog_post.rb", blog_post_content)
|
369
|
+
content =<<-EOF
|
370
|
+
class BlogPostsController < ApplicationController
|
371
|
+
def play
|
372
|
+
BlogPost.new.play
|
373
|
+
end
|
374
|
+
end
|
375
|
+
EOF
|
376
|
+
runner.review('app/controllers/posts_controller.rb', content)
|
377
|
+
runner.after_review
|
378
|
+
runner.should have(0).errors
|
371
379
|
end
|
372
380
|
end
|
373
|
-
EOF
|
374
|
-
runner.review('app/controllers/posts_controller.rb', content)
|
375
|
-
runner.after_review
|
376
|
-
runner.should have(0).errors
|
377
|
-
end
|
378
|
-
end
|
379
381
|
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
382
|
+
context "named_scope" do
|
383
|
+
it "should not remove unused named_scope" do
|
384
|
+
content =<<-EOF
|
385
|
+
class Post < ActiveRecord::Base
|
386
|
+
named_scope :active, :conditions => {:active => true}
|
387
|
+
end
|
388
|
+
EOF
|
389
|
+
runner.prepare("app/models/post.rb", content)
|
390
|
+
runner.review("app/models/post.rb", content)
|
391
|
+
content =<<-EOF
|
392
|
+
class PostsController < ApplicationController
|
393
|
+
def index
|
394
|
+
@posts = Post.active
|
395
|
+
end
|
396
|
+
end
|
397
|
+
EOF
|
398
|
+
runner.review("app/controllers/posts_controller.rb", content)
|
399
|
+
runner.after_review
|
400
|
+
runner.should have(0).errors
|
393
401
|
end
|
394
|
-
end
|
395
|
-
EOF
|
396
|
-
runner.review("app/controllers/posts_controller.rb", content)
|
397
|
-
runner.after_review
|
398
|
-
runner.should have(0).errors
|
399
|
-
end
|
400
402
|
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
403
|
+
it "should remove unused named_scope" do
|
404
|
+
content =<<-EOF
|
405
|
+
class Post < ActiveRecord::Base
|
406
|
+
named_scope :active, :conditions => {:active => true}
|
407
|
+
end
|
408
|
+
EOF
|
409
|
+
runner.prepare("app/models/post.rb", content)
|
410
|
+
runner.review("app/models/post.rb", content)
|
411
|
+
runner.after_review
|
412
|
+
runner.should have(1).errors
|
413
|
+
runner.errors[0].to_s.should == "app/models/post.rb:2 - remove unused methods (Post#active)"
|
414
|
+
end
|
405
415
|
end
|
406
|
-
EOF
|
407
|
-
runner.prepare("app/models/post.rb", content)
|
408
|
-
runner.review("app/models/post.rb", content)
|
409
|
-
runner.after_review
|
410
|
-
runner.should have(1).errors
|
411
|
-
runner.errors[0].to_s.should == "app/models/post.rb:2 - remove unused methods (Post#active)"
|
412
|
-
end
|
413
|
-
end
|
414
416
|
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
417
|
+
context "scope" do
|
418
|
+
it "should not remove unused scope" do
|
419
|
+
content =<<-EOF
|
420
|
+
class Post < ActiveRecord::Base
|
421
|
+
scope :active, where(:active => true)
|
422
|
+
end
|
423
|
+
EOF
|
424
|
+
runner.prepare("app/models/post.rb", content)
|
425
|
+
runner.review("app/models/post.rb", content)
|
426
|
+
content =<<-EOF
|
427
|
+
class PostsController < ApplicationController
|
428
|
+
def index
|
429
|
+
@posts = Post.active
|
430
|
+
end
|
431
|
+
end
|
432
|
+
EOF
|
433
|
+
runner.review("app/controllers/posts_controller.rb", content)
|
434
|
+
runner.after_review
|
435
|
+
runner.should have(0).errors
|
428
436
|
end
|
429
|
-
end
|
430
|
-
EOF
|
431
|
-
runner.review("app/controllers/posts_controller.rb", content)
|
432
|
-
runner.after_review
|
433
|
-
runner.should have(0).errors
|
434
|
-
end
|
435
437
|
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
438
|
+
it "should remove unused named_scope" do
|
439
|
+
content =<<-EOF
|
440
|
+
class Post < ActiveRecord::Base
|
441
|
+
scope :active, where(:active => true)
|
442
|
+
end
|
443
|
+
EOF
|
444
|
+
runner.prepare("app/models/post.rb", content)
|
445
|
+
runner.review("app/models/post.rb", content)
|
446
|
+
runner.after_review
|
447
|
+
runner.should have(1).errors
|
448
|
+
runner.errors[0].to_s.should == "app/models/post.rb:2 - remove unused methods (Post#active)"
|
449
|
+
end
|
440
450
|
end
|
441
|
-
EOF
|
442
|
-
runner.prepare("app/models/post.rb", content)
|
443
|
-
runner.review("app/models/post.rb", content)
|
444
|
-
runner.after_review
|
445
|
-
runner.should have(1).errors
|
446
|
-
runner.errors[0].to_s.should == "app/models/post.rb:2 - remove unused methods (Post#active)"
|
447
|
-
end
|
448
|
-
end
|
449
451
|
|
450
|
-
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
|
455
|
-
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
460
|
-
|
461
|
-
|
462
|
-
|
463
|
-
|
452
|
+
context "alias" do
|
453
|
+
it "should not remove unused method with alias" do
|
454
|
+
content =<<-EOF
|
455
|
+
class Post < ActiveRecord::Base
|
456
|
+
def old; end
|
457
|
+
alias new old
|
458
|
+
end
|
459
|
+
EOF
|
460
|
+
runner.prepare("app/models/post.rb", content)
|
461
|
+
runner.review("app/models/post.rb", content)
|
462
|
+
content =<<-EOF
|
463
|
+
class PostsController < ApplicationController
|
464
|
+
def show
|
465
|
+
@post.new
|
466
|
+
end
|
467
|
+
end
|
468
|
+
EOF
|
469
|
+
runner.review("app/controllers/posts_controller.rb", content)
|
470
|
+
runner.after_review
|
471
|
+
runner.should have(0).errors
|
464
472
|
end
|
465
|
-
end
|
466
|
-
EOF
|
467
|
-
runner.review("app/controllers/posts_controller.rb", content)
|
468
|
-
runner.after_review
|
469
|
-
runner.should have(0).errors
|
470
|
-
end
|
471
473
|
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
|
476
|
-
|
477
|
-
|
478
|
-
|
479
|
-
|
480
|
-
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
474
|
+
it "should not remove unused method with symbol alias" do
|
475
|
+
content =<<-EOF
|
476
|
+
class Post < ActiveRecord::Base
|
477
|
+
def old; end
|
478
|
+
alias :new :old
|
479
|
+
end
|
480
|
+
EOF
|
481
|
+
runner.prepare("app/models/post.rb", content)
|
482
|
+
runner.review("app/models/post.rb", content)
|
483
|
+
content =<<-EOF
|
484
|
+
class PostsController < ApplicationController
|
485
|
+
def show
|
486
|
+
@post.new
|
487
|
+
end
|
488
|
+
end
|
489
|
+
EOF
|
490
|
+
runner.review("app/controllers/posts_controller.rb", content)
|
491
|
+
runner.after_review
|
492
|
+
runner.should have(0).errors
|
485
493
|
end
|
486
|
-
end
|
487
|
-
EOF
|
488
|
-
runner.review("app/controllers/posts_controller.rb", content)
|
489
|
-
runner.after_review
|
490
|
-
runner.should have(0).errors
|
491
|
-
end
|
492
494
|
|
493
|
-
|
494
|
-
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
505
|
-
|
495
|
+
it "should not remove unused method with alias_method" do
|
496
|
+
content =<<-EOF
|
497
|
+
class Post < ActiveRecord::Base
|
498
|
+
def old; end
|
499
|
+
alias_method :new, :old
|
500
|
+
end
|
501
|
+
EOF
|
502
|
+
runner.prepare("app/models/post.rb", content)
|
503
|
+
runner.review("app/models/post.rb", content)
|
504
|
+
content =<<-EOF
|
505
|
+
class PostsController < ApplicationController
|
506
|
+
def show
|
507
|
+
@post.new
|
508
|
+
end
|
509
|
+
end
|
510
|
+
EOF
|
511
|
+
runner.review("app/controllers/posts_controller.rb", content)
|
512
|
+
runner.after_review
|
513
|
+
runner.should have(0).errors
|
506
514
|
end
|
507
|
-
end
|
508
|
-
EOF
|
509
|
-
runner.review("app/controllers/posts_controller.rb", content)
|
510
|
-
runner.after_review
|
511
|
-
runner.should have(0).errors
|
512
|
-
end
|
513
515
|
|
514
|
-
|
515
|
-
|
516
|
-
|
517
|
-
|
518
|
-
|
519
|
-
|
520
|
-
|
521
|
-
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
|
516
|
+
it "should not remove unused method with alias_method_chain" do
|
517
|
+
content =<<-EOF
|
518
|
+
class Post < ActiveRecord::Base
|
519
|
+
def method_with_feature; end
|
520
|
+
alias_method_chain :method, :feature
|
521
|
+
end
|
522
|
+
EOF
|
523
|
+
runner.prepare("app/models/post.rb", content)
|
524
|
+
runner.review("app/models/post.rb", content)
|
525
|
+
content =<<-EOF
|
526
|
+
class PostsController < ApplicationController
|
527
|
+
def show
|
528
|
+
@post.method
|
529
|
+
end
|
530
|
+
end
|
531
|
+
EOF
|
532
|
+
runner.review("app/controllers/posts_controller.rb", content)
|
533
|
+
runner.after_review
|
534
|
+
runner.should have(0).errors
|
527
535
|
end
|
528
536
|
end
|
529
|
-
EOF
|
530
|
-
runner.review("app/controllers/posts_controller.rb", content)
|
531
|
-
runner.after_review
|
532
|
-
runner.should have(0).errors
|
533
|
-
end
|
534
|
-
end
|
535
537
|
|
536
|
-
|
537
|
-
|
538
|
-
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
538
|
+
context "methods hash" do
|
539
|
+
it "should not remove unused method with methods hash" do
|
540
|
+
content =<<-EOF
|
541
|
+
class Post < ActiveRecord::Base
|
542
|
+
def to_xml(options = {})
|
543
|
+
super options.merge(:exclude => :visible, :methods => [:is_discussion_conversation])
|
544
|
+
end
|
543
545
|
|
544
|
-
|
546
|
+
def is_discussion_conversation; end
|
547
|
+
end
|
548
|
+
EOF
|
549
|
+
runner.prepare("app/models/post.rb", content)
|
550
|
+
runner.review("app/models/post.rb", content)
|
551
|
+
runner.after_review
|
552
|
+
runner.should have(0).errors
|
553
|
+
end
|
545
554
|
end
|
546
|
-
EOF
|
547
|
-
runner.prepare("app/models/post.rb", content)
|
548
|
-
runner.review("app/models/post.rb", content)
|
549
|
-
runner.after_review
|
550
|
-
runner.should have(0).errors
|
551
|
-
end
|
552
|
-
end
|
553
555
|
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
|
558
|
-
|
559
|
-
|
556
|
+
context "callbacks" do
|
557
|
+
it "should not remove unused method" do
|
558
|
+
content =<<-EOF
|
559
|
+
class Post < ActiveRecord::Base
|
560
|
+
before_save :init_columns
|
561
|
+
after_destroy :remove_dependencies
|
560
562
|
|
561
|
-
|
562
|
-
|
563
|
-
|
563
|
+
protected
|
564
|
+
def init_columns; end
|
565
|
+
def remove_dependencies; end
|
566
|
+
end
|
567
|
+
EOF
|
568
|
+
runner.prepare("app/models/post.rb", content)
|
569
|
+
runner.review("app/models/post.rb", content)
|
570
|
+
runner.after_review
|
571
|
+
runner.should have(0).errors
|
572
|
+
end
|
564
573
|
end
|
565
|
-
EOF
|
566
|
-
runner.prepare("app/models/post.rb", content)
|
567
|
-
runner.review("app/models/post.rb", content)
|
568
|
-
runner.after_review
|
569
|
-
runner.should have(0).errors
|
570
|
-
end
|
571
|
-
end
|
572
574
|
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
575
|
+
context "validates" do
|
576
|
+
it "should not remove unused method" do
|
577
|
+
content =<<-EOF
|
578
|
+
class Post < ActiveRecord::Base
|
579
|
+
validate :valid_birth_date
|
578
580
|
|
579
|
-
|
580
|
-
|
581
|
-
|
582
|
-
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
581
|
+
protected
|
582
|
+
def valid_birth_date; end
|
583
|
+
end
|
584
|
+
EOF
|
585
|
+
runner.prepare("app/models/post.rb", content)
|
586
|
+
runner.review("app/models/post.rb", content)
|
587
|
+
runner.after_review
|
588
|
+
runner.should have(0).errors
|
589
|
+
end
|
588
590
|
|
589
|
-
|
590
|
-
|
591
|
-
|
592
|
-
|
593
|
-
|
591
|
+
it "should not remove unused method for validate_on_create and validate_on_update" do
|
592
|
+
content =<<-EOF
|
593
|
+
class Post < ActiveRecord::Base
|
594
|
+
validate_on_create :valid_email
|
595
|
+
validate_on_update :valid_birth_date
|
594
596
|
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
600
|
-
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
|
597
|
+
protected
|
598
|
+
def valid_email; end
|
599
|
+
def valid_birth_date; end
|
600
|
+
end
|
601
|
+
EOF
|
602
|
+
runner.prepare("app/models/post.rb", content)
|
603
|
+
runner.review("app/models/post.rb", content)
|
604
|
+
runner.after_review
|
605
|
+
runner.should have(0).errors
|
606
|
+
end
|
605
607
|
|
606
|
-
|
607
|
-
|
608
|
-
|
609
|
-
|
610
|
-
|
608
|
+
it "should not remove unused methods for to_param" do
|
609
|
+
content =<<-EOF
|
610
|
+
class Post < ActiveRecord::Base
|
611
|
+
def to_param
|
612
|
+
id
|
613
|
+
end
|
614
|
+
end
|
615
|
+
EOF
|
616
|
+
runner.prepare("app/models/post.rb", content)
|
617
|
+
runner.review("app/models/post.rb", content)
|
618
|
+
runner.after_review
|
619
|
+
runner.should have(0).errors
|
611
620
|
end
|
612
621
|
end
|
613
|
-
EOF
|
614
|
-
runner.prepare("app/models/post.rb", content)
|
615
|
-
runner.review("app/models/post.rb", content)
|
616
|
-
runner.after_review
|
617
|
-
runner.should have(0).errors
|
618
|
-
end
|
619
|
-
end
|
620
622
|
|
621
|
-
|
622
|
-
|
623
|
-
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
|
636
|
-
|
623
|
+
context "helper method" do
|
624
|
+
it "should not remove unused method for coommand_call collection_select" do
|
625
|
+
content =<<-EOF
|
626
|
+
class Category < ActiveRecord::Base
|
627
|
+
def indented_name; end
|
628
|
+
end
|
629
|
+
EOF
|
630
|
+
runner.prepare("app/models/category.rb", content)
|
631
|
+
runner.review("app/models/category.rb", content)
|
632
|
+
content =<<-EOF
|
633
|
+
<%= f.collection_select :parent_id, Category.all_hierarchic(except: @category), :id, :indented_name, {include_blank: true} %>
|
634
|
+
EOF
|
635
|
+
runner.review("app/views/categories/_form.html.erb", content)
|
636
|
+
runner.after_review
|
637
|
+
runner.should have(0).errors
|
638
|
+
end
|
637
639
|
|
638
|
-
|
639
|
-
|
640
|
-
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
|
648
|
-
|
649
|
-
|
650
|
-
|
651
|
-
|
652
|
-
|
640
|
+
it "should not remove unused method for command collection_select" do
|
641
|
+
content =<<-EOF
|
642
|
+
class Category < ActiveRecord::Base
|
643
|
+
def indented_name; end
|
644
|
+
end
|
645
|
+
EOF
|
646
|
+
runner.prepare("app/models/category.rb", content)
|
647
|
+
runner.review("app/models/category.rb", content)
|
648
|
+
content =<<-EOF
|
649
|
+
<%= collection_select :category, :parent_id, Category.all_hierarchic(except: @category), :id, :indented_name, {include_blank: true} %>
|
650
|
+
EOF
|
651
|
+
runner.review("app/views/categories/_form.html.erb", content)
|
652
|
+
runner.after_review
|
653
|
+
runner.should have(0).errors
|
654
|
+
end
|
653
655
|
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
656
|
+
it "should not remove unused method for options_from_collection_for_select" do
|
657
|
+
content =<<-EOF
|
658
|
+
class Category < ActiveRecord::Base
|
659
|
+
def indented_name; end
|
660
|
+
end
|
661
|
+
EOF
|
662
|
+
runner.prepare("app/models/category.rb", content)
|
663
|
+
runner.review("app/models/category.rb", content)
|
664
|
+
content =<<-EOF
|
665
|
+
<%= select_tag 'category', options_from_collection_for_select(Category.all_hierachic(except: @category), :id, :indented_name) %>
|
666
|
+
EOF
|
667
|
+
runner.review("app/views/categories/_form.html.erb", content)
|
668
|
+
runner.after_review
|
669
|
+
runner.should have(0).errors
|
670
|
+
end
|
658
671
|
end
|
659
|
-
EOF
|
660
|
-
runner.prepare("app/models/category.rb", content)
|
661
|
-
runner.review("app/models/category.rb", content)
|
662
|
-
content =<<-EOF
|
663
|
-
<%= select_tag 'category', options_from_collection_for_select(Category.all_hierachic(except: @category), :id, :indented_name) %>
|
664
|
-
EOF
|
665
|
-
runner.review("app/views/categories/_form.html.erb", content)
|
666
|
-
runner.after_review
|
667
|
-
runner.should have(0).errors
|
668
672
|
end
|
669
673
|
end
|
670
674
|
end
|