rails_best_practices 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -111,6 +111,7 @@ Now you can customize this configuration file, the default configuration is as f
111
111
  SimplifyRenderInViewsCheck: {}
112
112
  SimplifyRenderInControllersCheck: {}
113
113
  RemoveEmptyHelpersCheck: {}
114
+ RemoveTabCheck: {}
114
115
 
115
116
  You can remove or comment one review to disable it, and you can change the options.
116
117
 
@@ -173,6 +174,7 @@ Deployment
173
174
  Other
174
175
 
175
176
  1. Remove Trailing Whitespace
177
+ 2. Remove Tab
176
178
 
177
179
  Write Your Own Check List
178
180
  -------------------------
@@ -0,0 +1,26 @@
1
+ # encoding: utf-8
2
+ require 'rails_best_practices/core/check'
3
+
4
+ module RailsBestPractices
5
+ module Lexicals
6
+ # Make sure there are no tabs in files.
7
+ #
8
+ # See the best practice details here http://rails-bestpractices.com/posts/81-remove-tab
9
+ class RemoveTabCheck < Core::Check
10
+ def url
11
+ "http://rails-bestpractices.com/posts/81-remove-tab"
12
+ end
13
+
14
+ # check if the content of file contains a tab.
15
+ #
16
+ # @param [String] filename name of the file
17
+ # @param [String] content content of the file
18
+ def check(filename, content)
19
+ if content =~ /\t/m
20
+ line_no = $`.count("\n") + 1
21
+ add_error("remove tab, use spaces instead", filename, line_no)
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -1,2 +1,3 @@
1
1
  # encoding: utf-8
2
2
  require 'rails_best_practices/lexicals/remove_trailing_whitespace_check'
3
+ require 'rails_best_practices/lexicals/remove_tab_check'
@@ -54,8 +54,8 @@ module RailsBestPractices
54
54
  #
55
55
  # @param [String] name method name in action_mailer
56
56
  def rails3_canonical_mailer_views?(name)
57
- (exist?("#{name}.html.erb") && !exist?("#{name}.text.erb")) ||
58
- (exist?("#{name}.html.haml") && !exist?("#{name}.text.haml"))
57
+ (exist?("#{name}.html.erb") && !haml_or_erb_exists?("#{name}.text")) ||
58
+ (exist?("#{name}.html.haml") && !haml_or_erb_exists?("#{name}.text") )
59
59
  end
60
60
 
61
61
  # check if the filename existed in the mailer directory.
@@ -63,6 +63,11 @@ module RailsBestPractices
63
63
  File.exist? File.join(mailer_directory, filename)
64
64
  end
65
65
 
66
+ # check if haml or erb exists
67
+ def haml_or_erb_exists?(filename)
68
+ exist?("#{filename}.erb") || exist?("#{filename}.haml")
69
+ end
70
+
66
71
  # check if the method is a deliver_method.
67
72
  #
68
73
  # @param [String] name the name of the method
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
  module RailsBestPractices
3
- VERSION = "0.9.0"
3
+ VERSION = "0.10.0"
4
4
  end
5
5
 
@@ -166,19 +166,30 @@ module RailsBestPractices
166
166
  # @param [Array] files
167
167
  # @return [Array] sorted files
168
168
  def file_sort files
169
- files.sort { |a, b|
170
- if a =~ Core::Check::MODEL_FILES
171
- -1
172
- elsif b =~ Core::Check::MODEL_FILES
173
- 1
174
- elsif a =~ Core::Check::MAILER_FILES
175
- -1
176
- elsif b =~ Core::Check::MAILER_FILES
177
- 1
178
- else
179
- a <=> b
180
- end
181
- }
169
+ models = []
170
+ mailers = []
171
+ files.each do |a|
172
+ if a =~ Core::Check::MODEL_FILES
173
+ models << a
174
+ end
175
+ end
176
+ files.each do |a|
177
+ if a =~ Core::Check::MAILER_FILES
178
+ mailers << a
179
+ end
180
+ end
181
+ files.collect! do |a|
182
+ if a =~ Core::Check::MAILER_FILES || a =~ Core::Check::MODEL_FILES
183
+ #nil
184
+ else
185
+ a
186
+ end
187
+ end
188
+ files.compact!
189
+ models.sort
190
+ mailers.sort
191
+ files.sort
192
+ return models + mailers + files
182
193
  end
183
194
 
184
195
  # ignore specific files.
@@ -6,7 +6,7 @@ ReplaceComplexCreationWithFactoryMethodCheck: { attribute_assignment_count: 2 }
6
6
  MoveModelLogicIntoModelCheck: { use_count: 4 }
7
7
  OveruseRouteCustomizationsCheck: { customize_count: 3 }
8
8
  NeedlessDeepNestingCheck: { nested_count: 2 }
9
- NotUseDefaultRouteCheck: { }
9
+ NotUseDefaultRouteCheck: { }
10
10
  KeepFindersOnTheirOwnModelCheck: { }
11
11
  LawOfDemeterCheck: { }
12
12
  UseObserverCheck: { }
@@ -21,7 +21,8 @@ DryBundlerInCapistranoCheck: { }
21
21
  UseSayWithTimeInMigrationsCheck: { }
22
22
  UseQueryAttributeCheck: { }
23
23
  RemoveTrailingWhitespaceCheck: { }
24
- UseMultipartAlternativeAsContentTypeOfEmailCheck: {}
25
- SimplifyRenderInViewsCheck: {}
26
- SimplifyRenderInControllersCheck: {}
27
- RemoveEmptyHelpersCheck: {}
24
+ UseMultipartAlternativeAsContentTypeOfEmailCheck: { }
25
+ SimplifyRenderInViewsCheck: { }
26
+ SimplifyRenderInControllersCheck: { }
27
+ RemoveEmptyHelpersCheck: { }
28
+ RemoveTabCheck: { }
@@ -0,0 +1,39 @@
1
+ require 'spec_helper'
2
+
3
+ describe RailsBestPractices::Lexicals::RemoveTabCheck do
4
+ let(:runner) { RailsBestPractices::Core::Runner.new(:lexicals => RailsBestPractices::Lexicals::RemoveTabCheck.new) }
5
+
6
+ it "should remove tab" do
7
+ content =<<-EOF
8
+ class User < ActiveRecord::Base
9
+ has_many :projects
10
+ end
11
+ EOF
12
+ content.gsub!("\n", "\t\n")
13
+ runner.lexical('app/models/user.rb', content)
14
+ runner.should have(1).errors
15
+ runner.errors[0].to_s.should == "app/models/user.rb:1 - remove tab, use spaces instead"
16
+ end
17
+
18
+ it "should remove tab with third line" do
19
+ content =<<-EOF
20
+ class User < ActiveRecord::Base
21
+ has_many :projects
22
+ \t
23
+ end
24
+ EOF
25
+ runner.lexical('app/models/user.rb', content)
26
+ runner.should have(1).errors
27
+ runner.errors[0].to_s.should == "app/models/user.rb:3 - remove tab, use spaces instead"
28
+ end
29
+
30
+ it "should not remove trailing whitespace" do
31
+ content =<<-EOF
32
+ class User < ActiveRecord::Base
33
+ has_many :projects
34
+ end
35
+ EOF
36
+ runner.lexical('app/models/user.rb', content)
37
+ runner.should have(0).errors
38
+ end
39
+ end
@@ -160,7 +160,7 @@ describe RailsBestPractices::Reviews::UseMultipartAlternativeAsContentTypeOfEmai
160
160
  end
161
161
 
162
162
  it "should not use multipart/alternative as content_type of email" do
163
- mock_email_files(["send_email.html.haml"], "text.haml" => true, "html.haml" => true)
163
+ mock_email_files(["send_email.html.haml", "send_email.text.haml"], "html.haml" => true, "text.haml" => true)
164
164
  runner.review('app/mailers/project_mailer.rb', content)
165
165
  runner.should have(0).errors
166
166
  end
@@ -171,6 +171,18 @@ describe RailsBestPractices::Reviews::UseMultipartAlternativeAsContentTypeOfEmai
171
171
  runner.should have(0).errors
172
172
  end
173
173
  end
174
+
175
+ context "haml/erb mix" do
176
+ it "should not suggest using multipart/alternative when mixing html.haml and text.erb" do
177
+ mock_email_files(["send_email.html.haml", "send_email.text.erb"], "html.haml" => true, "text.erb" => true)
178
+ runner.review('app/mailers/project_mailer.rb', content)
179
+ runner.should have(0).errors
180
+
181
+ mock_email_files(["send_email.html.erb", "send_email.text.haml"], "html.erb" => true, "text.haml" => true)
182
+ runner.review('app/mailers/project_mailer.rb', content)
183
+ runner.should have(0).errors
184
+ end
185
+ end
174
186
  end
175
187
  end
176
188
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: rails_best_practices
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.9.0
5
+ version: 0.10.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Richard Huang
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-15 00:00:00 +08:00
13
+ date: 2011-07-04 00:00:00 +08:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -173,6 +173,7 @@ files:
173
173
  - lib/rails_best_practices/core/visitable_sexp.rb
174
174
  - lib/rails_best_practices/core_ext/enumerable.rb
175
175
  - lib/rails_best_practices/lexicals.rb
176
+ - lib/rails_best_practices/lexicals/remove_tab_check.rb
176
177
  - lib/rails_best_practices/lexicals/remove_trailing_whitespace_check.rb
177
178
  - lib/rails_best_practices/prepares.rb
178
179
  - lib/rails_best_practices/prepares/mailer_prepare.rb
@@ -219,6 +220,7 @@ files:
219
220
  - spec/rails_best_practices/core/nil_spec.rb
220
221
  - spec/rails_best_practices/core/visitable_sexp_spec.rb
221
222
  - spec/rails_best_practices/core_ext/enumerable_spec.rb
223
+ - spec/rails_best_practices/lexicals/remove_tab_check_spec.rb
222
224
  - spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb
223
225
  - spec/rails_best_practices/prepares/mailer_prepare_spec.rb
224
226
  - spec/rails_best_practices/prepares/model_prepare_spec.rb
@@ -280,7 +282,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
280
282
  requirements:
281
283
  - - ">="
282
284
  - !ruby/object:Gem::Version
283
- hash: 251922047825024421
285
+ hash: 25522351918325657
284
286
  segments:
285
287
  - 0
286
288
  version: "0"
@@ -307,6 +309,7 @@ test_files:
307
309
  - spec/rails_best_practices/core/nil_spec.rb
308
310
  - spec/rails_best_practices/core/visitable_sexp_spec.rb
309
311
  - spec/rails_best_practices/core_ext/enumerable_spec.rb
312
+ - spec/rails_best_practices/lexicals/remove_tab_check_spec.rb
310
313
  - spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb
311
314
  - spec/rails_best_practices/prepares/mailer_prepare_spec.rb
312
315
  - spec/rails_best_practices/prepares/model_prepare_spec.rb