rails_best_practices 0.4.4 → 0.4.5

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/README.textile CHANGED
@@ -24,6 +24,9 @@ Usage: rails_best_practices [options]
24
24
  --spec include spec files
25
25
  --test include test files
26
26
  --stories include stories files
27
+ -x, --exclude PATTERNS Don't analyze files matching a pattern
28
+ (comma-separated regexp list)
29
+ -v, --version Show this version
27
30
  -h, --help Show this message
28
31
  </code></pre>
29
32
 
@@ -85,6 +88,7 @@ MoveCodeIntoModelCheck: { }
85
88
  MoveCodeIntoHelperCheck: { array_count: 3 }
86
89
  ReplaceInstanceVariableWithLocalVariableCheck: { }
87
90
  DryBundlerInCapistranoCheck: { }
91
+ UseSayWithTimeInMigrationsCheck: { }
88
92
  </code></pre>
89
93
 
90
94
  *************************************************
@@ -112,6 +116,7 @@ h2. Implementation
112
116
  * Migration
113
117
  ## Isolating Seed Data
114
118
  ## Always add DB index
119
+ ## Use Say with Time in Migrations
115
120
 
116
121
  * Controller
117
122
  ## Use before_filter
@@ -11,6 +11,12 @@ module RailsBestPractices
11
11
  ['vendor', 'spec', 'test', 'stories', 'features'].each do |pattern|
12
12
  files = ignore_files(files, "#{pattern}/") unless options[pattern]
13
13
  end
14
+
15
+ # Exclude files based on exclude regexes if the option is set.
16
+ for pattern in options[:exclude]
17
+ files = ignore_files(files, pattern)
18
+ end
19
+
14
20
  files
15
21
  end
16
22
 
@@ -19,3 +19,4 @@ require 'rails_best_practices/checks/move_code_into_model_check'
19
19
  require 'rails_best_practices/checks/move_code_into_helper_check'
20
20
  require 'rails_best_practices/checks/replace_instance_variable_with_local_variable_check'
21
21
  require 'rails_best_practices/checks/dry_bundler_in_capistrano_check'
22
+ require 'rails_best_practices/checks/use_say_with_time_in_migrations_check'
@@ -6,7 +6,7 @@ module RailsBestPractices
6
6
  # Check config/deploy.rb file to make sure using the bundler's capistrano recipe.
7
7
  #
8
8
  # Implementation: check the method call,
9
- # if there is a call "namespace :bundler", then it should use bundler's capistrano recipe.
9
+ # if there is a method call "namespace" with argument ":bundler", then it should use bundler's capistrano recipe.
10
10
  class DryBundlerInCapistranoCheck < Check
11
11
 
12
12
  def interesting_nodes
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+ require 'rails_best_practices/checks/check'
3
+
4
+ module RailsBestPractices
5
+ module Checks
6
+ # Check a migration file to make sure to use say_with_time for customized data changes to produce a more readable output.
7
+ #
8
+ # Implementation: check if there are any first level messages called in self.up and self.down except say_with_time and default migration messages (such as :add_column and :create_table)
9
+ class UseSayWithTimeInMigrationsCheck < Check
10
+
11
+ DEFAULT_MIGRATION_MESSAGES = [:add_column, :add_index, :add_timestamps, :change_column, :change_column_default, :change_table, :create_table, :drop_table, :remove_column, :remove_index, :remove_timestamps, :rename_column, :rename_index, :rename_table]
12
+
13
+ def interesting_nodes
14
+ [:defs]
15
+ end
16
+
17
+ def interesting_files
18
+ MIGRATION_FILES
19
+ end
20
+
21
+ def evaluate_start(node)
22
+ block_body = node.grep_nodes(:node_type => :block).first.body
23
+ block_body.each do |iter|
24
+ if :call == iter[1].node_type and !(DEFAULT_MIGRATION_MESSAGES << :say_with_time).include? iter[1].message
25
+ add_error("use say with time in migrations", iter[1].file, iter[1].line)
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -18,7 +18,8 @@ OptionParser.new do |opts|
18
18
  end
19
19
 
20
20
  opts.on_tail('-v', '--version', 'Show this version') do
21
- puts File.read(File.dirname(__FILE__) + '/../../VERSION')
21
+ require 'rails_best_practices/version'
22
+ puts RailsBestPractices::VERSION
22
23
  exit
23
24
  end
24
25
 
@@ -26,6 +27,14 @@ OptionParser.new do |opts|
26
27
  puts opts
27
28
  exit
28
29
  end
30
+
31
+ opts.on("-x", "--exclude PATTERNS", "Don't analyze files matching a pattern", "(comma-separated regexp list)") do |list|
32
+ begin
33
+ options[:exclude] = list.split(/,/).map{|x| Regexp.new x}
34
+ rescue RegexpError => e
35
+ raise OptionParser::InvalidArgument, e.message
36
+ end
37
+ end
29
38
 
30
39
  opts.parse!
31
40
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
  module RailsBestPractices
3
- VERSION = "0.4.4"
3
+ VERSION = "0.4.5"
4
4
  end
5
5
 
@@ -18,3 +18,4 @@ MoveCodeIntoModelCheck: { }
18
18
  MoveCodeIntoHelperCheck: { array_count: 3 }
19
19
  ReplaceInstanceVariableWithLocalVariableCheck: { }
20
20
  DryBundlerInCapistranoCheck: { }
21
+ UseSayWithTimeInMigrationsCheck: { }
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_best_practices
3
3
  version: !ruby/object:Gem::Version
4
- hash: 7
4
+ hash: 5
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 4
9
- - 4
10
- version: 0.4.4
9
+ - 5
10
+ version: 0.4.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Richard Huang
@@ -15,11 +15,11 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-09-28 00:00:00 +08:00
18
+ date: 2010-10-10 00:00:00 +08:00
19
19
  default_executable: rails_best_practices
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
23
  none: false
24
24
  requirements:
25
25
  - - ~>
@@ -30,12 +30,12 @@ dependencies:
30
30
  - 0
31
31
  - 4
32
32
  version: 2.0.4
33
- requirement: *id001
34
- type: :runtime
35
33
  name: ruby_parser
36
34
  prerelease: false
35
+ type: :runtime
36
+ version_requirements: *id001
37
37
  - !ruby/object:Gem::Dependency
38
- version_requirements: &id002 !ruby/object:Gem::Requirement
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -46,12 +46,12 @@ dependencies:
46
46
  - 2
47
47
  - 4
48
48
  version: 1.2.4
49
- requirement: *id002
50
- type: :runtime
51
49
  name: ruby2ruby
52
50
  prerelease: false
51
+ type: :runtime
52
+ version_requirements: *id002
53
53
  - !ruby/object:Gem::Dependency
54
- version_requirements: &id003 !ruby/object:Gem::Requirement
54
+ requirement: &id003 !ruby/object:Gem::Requirement
55
55
  none: false
56
56
  requirements:
57
57
  - - ~>
@@ -62,12 +62,12 @@ dependencies:
62
62
  - 9
63
63
  - 0
64
64
  version: 0.9.0
65
- requirement: *id003
66
- type: :runtime
67
65
  name: progressbar
68
66
  prerelease: false
67
+ type: :runtime
68
+ version_requirements: *id003
69
69
  - !ruby/object:Gem::Dependency
70
- version_requirements: &id004 !ruby/object:Gem::Requirement
70
+ requirement: &id004 !ruby/object:Gem::Requirement
71
71
  none: false
72
72
  requirements:
73
73
  - - ~>
@@ -77,12 +77,12 @@ dependencies:
77
77
  - 1
78
78
  - 2
79
79
  version: "1.2"
80
- requirement: *id004
81
- type: :runtime
82
80
  name: colored
83
81
  prerelease: false
82
+ type: :runtime
83
+ version_requirements: *id004
84
84
  - !ruby/object:Gem::Dependency
85
- version_requirements: &id005 !ruby/object:Gem::Requirement
85
+ requirement: &id005 !ruby/object:Gem::Requirement
86
86
  none: false
87
87
  requirements:
88
88
  - - "="
@@ -95,12 +95,12 @@ dependencies:
95
95
  - beta
96
96
  - 22
97
97
  version: 2.0.0.beta.22
98
- requirement: *id005
99
- type: :development
100
98
  name: rspec
101
99
  prerelease: false
100
+ type: :development
101
+ version_requirements: *id005
102
102
  - !ruby/object:Gem::Dependency
103
- version_requirements: &id006 !ruby/object:Gem::Requirement
103
+ requirement: &id006 !ruby/object:Gem::Requirement
104
104
  none: false
105
105
  requirements:
106
106
  - - "="
@@ -111,10 +111,25 @@ dependencies:
111
111
  - 0
112
112
  - 18
113
113
  version: 3.0.18
114
- requirement: *id006
115
- type: :development
116
114
  name: haml
117
115
  prerelease: false
116
+ type: :development
117
+ version_requirements: *id006
118
+ - !ruby/object:Gem::Dependency
119
+ requirement: &id007 !ruby/object:Gem::Requirement
120
+ none: false
121
+ requirements:
122
+ - - "="
123
+ - !ruby/object:Gem::Version
124
+ hash: 7
125
+ segments:
126
+ - 0
127
+ - 6
128
+ version: "0.6"
129
+ name: watchr
130
+ prerelease: false
131
+ type: :development
132
+ version_requirements: *id007
118
133
  description: a code metric tool for rails codes, written in Ruby.
119
134
  email:
120
135
  - flyerhzm@gmail.com
@@ -126,37 +141,38 @@ extra_rdoc_files:
126
141
  - MIT_LICENSE
127
142
  - README.textile
128
143
  files:
129
- - lib/rails_best_practices/checks/add_model_virtual_attribute_check.rb
130
- - lib/rails_best_practices/checks/always_add_db_index_check.rb
131
- - lib/rails_best_practices/checks/check.rb
132
- - lib/rails_best_practices/checks/dry_bundler_in_capistrano_check.rb
133
- - lib/rails_best_practices/checks/isolate_seed_data_check.rb
144
+ - lib/rails_best_practices.rb
145
+ - lib/rails_best_practices/version.rb
146
+ - lib/rails_best_practices/checks/move_finder_to_named_scope_check.rb
147
+ - lib/rails_best_practices/checks/use_model_association_check.rb
134
148
  - lib/rails_best_practices/checks/keep_finders_on_their_own_model_check.rb
149
+ - lib/rails_best_practices/checks/add_model_virtual_attribute_check.rb
150
+ - lib/rails_best_practices/checks/use_say_with_time_in_migrations_check.rb
135
151
  - lib/rails_best_practices/checks/law_of_demeter_check.rb
152
+ - lib/rails_best_practices/checks/use_scope_access_check.rb
136
153
  - lib/rails_best_practices/checks/move_code_into_controller_check.rb
137
- - lib/rails_best_practices/checks/move_code_into_helper_check.rb
138
- - lib/rails_best_practices/checks/move_code_into_model_check.rb
139
- - lib/rails_best_practices/checks/move_finder_to_named_scope_check.rb
140
154
  - lib/rails_best_practices/checks/move_model_logic_into_model_check.rb
141
- - lib/rails_best_practices/checks/needless_deep_nesting_check.rb
142
155
  - lib/rails_best_practices/checks/not_use_default_route_check.rb
143
- - lib/rails_best_practices/checks/overuse_route_customizations_check.rb
144
156
  - lib/rails_best_practices/checks/replace_complex_creation_with_factory_method_check.rb
157
+ - lib/rails_best_practices/checks/dry_bundler_in_capistrano_check.rb
158
+ - lib/rails_best_practices/checks/isolate_seed_data_check.rb
159
+ - lib/rails_best_practices/checks/always_add_db_index_check.rb
145
160
  - lib/rails_best_practices/checks/replace_instance_variable_with_local_variable_check.rb
146
- - lib/rails_best_practices/checks/use_before_filter_check.rb
147
- - lib/rails_best_practices/checks/use_model_association_check.rb
161
+ - lib/rails_best_practices/checks/needless_deep_nesting_check.rb
162
+ - lib/rails_best_practices/checks/move_code_into_helper_check.rb
148
163
  - lib/rails_best_practices/checks/use_observer_check.rb
149
- - lib/rails_best_practices/checks/use_scope_access_check.rb
164
+ - lib/rails_best_practices/checks/check.rb
165
+ - lib/rails_best_practices/checks/overuse_route_customizations_check.rb
166
+ - lib/rails_best_practices/checks/use_before_filter_check.rb
167
+ - lib/rails_best_practices/checks/move_code_into_model_check.rb
168
+ - lib/rails_best_practices/core.rb
150
169
  - lib/rails_best_practices/checks.rb
151
- - lib/rails_best_practices/command.rb
152
170
  - lib/rails_best_practices/core/checking_visitor.rb
153
171
  - lib/rails_best_practices/core/core_ext.rb
154
172
  - lib/rails_best_practices/core/error.rb
155
- - lib/rails_best_practices/core/runner.rb
156
173
  - lib/rails_best_practices/core/visitable_sexp.rb
157
- - lib/rails_best_practices/core.rb
158
- - lib/rails_best_practices/version.rb
159
- - lib/rails_best_practices.rb
174
+ - lib/rails_best_practices/core/runner.rb
175
+ - lib/rails_best_practices/command.rb
160
176
  - rails_best_practices.yml
161
177
  - MIT_LICENSE
162
178
  - README.textile