rails_best_practices 0.3.16 → 0.3.17

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.16
1
+ 0.3.17
@@ -22,6 +22,7 @@ module RailsBestPractices
22
22
  super
23
23
  @files = []
24
24
  @@indexes = {}
25
+ @@tables = []
25
26
  @parse = false
26
27
  end
27
28
 
@@ -41,7 +42,7 @@ module RailsBestPractices
41
42
  if @parse
42
43
  check_references(node.body)
43
44
  else
44
- remember_indexes(node.body)
45
+ remember(node.body)
45
46
  end
46
47
  end
47
48
  end
@@ -53,6 +54,7 @@ module RailsBestPractices
53
54
  create_table_node = node.grep_nodes({:node_type => :call, :message => :create_table}).first
54
55
  if create_table_node
55
56
  table_name = create_table_node.arguments[1].to_ruby_string
57
+ next unless @@tables.include? table_name
56
58
  node.grep_nodes({:node_type => :call, :message => :integer}).each do |integer_node|
57
59
  column_name = integer_node.arguments[1].to_ruby_string
58
60
  if column_name =~ /_id$/ and !@@indexes[table_name].include? column_name
@@ -76,6 +78,18 @@ module RailsBestPractices
76
78
  end
77
79
  end
78
80
  end
81
+
82
+ def remember(nodes)
83
+ nodes.grep_nodes({:node_type => :call, :message => :create_table}).each do |create_table_node|
84
+ @@tables << create_table_node.arguments[1].to_ruby_string
85
+ end
86
+ nodes.grep_nodes({:node_type => :call, :message => :drop_table}).each do |drop_table_node|
87
+ @@tables.delete(drop_table_node.arguments[1].to_ruby_string)
88
+ end
89
+ @@tables.compact!
90
+
91
+ remember_indexes(nodes)
92
+ end
79
93
 
80
94
  # dynamically execute add_index because static parser can't handle
81
95
  #
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rails_best_practices}
8
- s.version = "0.3.16"
8
+ s.version = "0.3.17"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Richard Huang"]
12
- s.date = %q{2009-12-22}
12
+ s.date = %q{2010-01-25}
13
13
  s.default_executable = %q{rails_best_practices}
14
14
  s.description = %q{check rails files according to ihower's presentation 'rails best practices'}
15
15
  s.email = %q{flyerhzm@gmail.com}
@@ -91,28 +91,28 @@ Gem::Specification.new do |s|
91
91
  s.rubygems_version = %q{1.3.5}
92
92
  s.summary = %q{check rails files according to ihower's presentation 'rails best practices'}
93
93
  s.test_files = [
94
- "spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb",
95
- "spec/rails_best_practices/checks/always_add_db_index_check_spec.rb",
96
- "spec/rails_best_practices/checks/isolate_seed_data_check_spec.rb",
97
- "spec/rails_best_practices/checks/keep_finders_on_their_own_model_check_spec.rb",
98
- "spec/rails_best_practices/checks/law_of_demeter_check_spec.rb",
99
- "spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb",
100
- "spec/rails_best_practices/checks/move_code_into_controller_check_spec.rb",
101
- "spec/rails_best_practices/checks/move_code_into_helper_check_spec.rb",
102
- "spec/rails_best_practices/checks/move_code_into_model_check_spec.rb",
103
- "spec/rails_best_practices/checks/move_finder_to_named_scope_check_spec.rb",
94
+ "spec/rails_best_practices/checks/isolate_seed_data_check_spec.rb",
104
95
  "spec/rails_best_practices/checks/move_model_logic_into_model_check_spec.rb",
105
- "spec/rails_best_practices/checks/needless_deep_nesting_check_spec.rb",
106
- "spec/rails_best_practices/checks/nested_model_forms_check_spec.rb",
107
- "spec/rails_best_practices/checks/not_use_default_route_check_spec.rb",
96
+ "spec/rails_best_practices/checks/move_code_into_helper_check_spec.rb",
97
+ "spec/rails_best_practices/checks/move_code_into_controller_check_spec.rb",
98
+ "spec/rails_best_practices/checks/use_observer_check_spec.rb",
108
99
  "spec/rails_best_practices/checks/overuse_route_customizations_check_spec.rb",
100
+ "spec/rails_best_practices/checks/nested_model_forms_check_spec.rb",
101
+ "spec/rails_best_practices/checks/always_add_db_index_check_spec.rb",
102
+ "spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb",
103
+ "spec/rails_best_practices/checks/use_before_filter_check_spec.rb",
104
+ "spec/rails_best_practices/checks/law_of_demeter_check_spec.rb",
105
+ "spec/rails_best_practices/checks/use_scope_access_check_spec.rb",
109
106
  "spec/rails_best_practices/checks/replace_complex_creation_with_factory_method_check_spec.rb",
107
+ "spec/rails_best_practices/checks/not_use_default_route_check_spec.rb",
108
+ "spec/rails_best_practices/checks/move_finder_to_named_scope_check_spec.rb",
109
+ "spec/rails_best_practices/checks/use_model_callback_check_spec.rb",
110
+ "spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb",
110
111
  "spec/rails_best_practices/checks/replace_instance_variable_with_local_variable_check_spec.rb",
111
- "spec/rails_best_practices/checks/use_before_filter_check_spec.rb",
112
112
  "spec/rails_best_practices/checks/use_model_association_check_spec.rb",
113
- "spec/rails_best_practices/checks/use_model_callback_check_spec.rb",
114
- "spec/rails_best_practices/checks/use_observer_check_spec.rb",
115
- "spec/rails_best_practices/checks/use_scope_access_check_spec.rb",
113
+ "spec/rails_best_practices/checks/move_code_into_model_check_spec.rb",
114
+ "spec/rails_best_practices/checks/needless_deep_nesting_check_spec.rb",
115
+ "spec/rails_best_practices/checks/keep_finders_on_their_own_model_check_spec.rb",
116
116
  "spec/spec_helper.rb"
117
117
  ]
118
118
 
@@ -262,4 +262,38 @@ describe RailsBestPractices::Checks::AlwaysAddDbIndexCheck do
262
262
  errors[0].to_s.should == "db/migrate/20090204160203_all_tables.rb:9 - always add db index (lab_data => input_biologist_id)"
263
263
  errors[1].to_s.should == "db/migrate/20090204160203_all_tables.rb:10 - always add db index (lab_data => owner_biologist_id)"
264
264
  end
265
+
266
+ it "should not always add db index when table is created and droped" do
267
+ content = <<-EOF
268
+ class CreateComments < ActiveRecord::Migration
269
+ def self.up
270
+ create_table "comments", :force => true do |t|
271
+ t.string :content
272
+ t.integer :post_id
273
+ t.integer :user_id
274
+ end
275
+ end
276
+
277
+ def self.down
278
+ drop_table "comments"
279
+ end
280
+ end
281
+ EOF
282
+ another_content = <<-EOF
283
+ class DropComments < ActiveRecord::Migration
284
+ def self.up
285
+ drop_table "comments"
286
+ end
287
+
288
+ def self.down
289
+ end
290
+ end
291
+ EOF
292
+ @runner.check('db/migrate/20100118140258_create_comments.rb', content)
293
+ @runner.check('db/migrate/20100118140259_drop_comments.rb', another_content)
294
+ @runner.check('db/migrate/20100118140258_create_comments.rb', content)
295
+ @runner.check('db/migrate/20100118140259_drop_comments.rb', another_content)
296
+ errors = @runner.errors
297
+ errors.should be_empty
298
+ end
265
299
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_best_practices
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.16
4
+ version: 0.3.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-12-22 00:00:00 +08:00
12
+ date: 2010-01-25 00:00:00 +08:00
13
13
  default_executable: rails_best_practices
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -136,26 +136,26 @@ signing_key:
136
136
  specification_version: 3
137
137
  summary: check rails files according to ihower's presentation 'rails best practices'
138
138
  test_files:
139
- - spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb
140
- - spec/rails_best_practices/checks/always_add_db_index_check_spec.rb
141
139
  - spec/rails_best_practices/checks/isolate_seed_data_check_spec.rb
142
- - spec/rails_best_practices/checks/keep_finders_on_their_own_model_check_spec.rb
143
- - spec/rails_best_practices/checks/law_of_demeter_check_spec.rb
144
- - spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb
145
- - spec/rails_best_practices/checks/move_code_into_controller_check_spec.rb
146
- - spec/rails_best_practices/checks/move_code_into_helper_check_spec.rb
147
- - spec/rails_best_practices/checks/move_code_into_model_check_spec.rb
148
- - spec/rails_best_practices/checks/move_finder_to_named_scope_check_spec.rb
149
140
  - spec/rails_best_practices/checks/move_model_logic_into_model_check_spec.rb
150
- - spec/rails_best_practices/checks/needless_deep_nesting_check_spec.rb
151
- - spec/rails_best_practices/checks/nested_model_forms_check_spec.rb
152
- - spec/rails_best_practices/checks/not_use_default_route_check_spec.rb
141
+ - spec/rails_best_practices/checks/move_code_into_helper_check_spec.rb
142
+ - spec/rails_best_practices/checks/move_code_into_controller_check_spec.rb
143
+ - spec/rails_best_practices/checks/use_observer_check_spec.rb
153
144
  - spec/rails_best_practices/checks/overuse_route_customizations_check_spec.rb
145
+ - spec/rails_best_practices/checks/nested_model_forms_check_spec.rb
146
+ - spec/rails_best_practices/checks/always_add_db_index_check_spec.rb
147
+ - spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb
148
+ - spec/rails_best_practices/checks/use_before_filter_check_spec.rb
149
+ - spec/rails_best_practices/checks/law_of_demeter_check_spec.rb
150
+ - spec/rails_best_practices/checks/use_scope_access_check_spec.rb
154
151
  - spec/rails_best_practices/checks/replace_complex_creation_with_factory_method_check_spec.rb
152
+ - spec/rails_best_practices/checks/not_use_default_route_check_spec.rb
153
+ - spec/rails_best_practices/checks/move_finder_to_named_scope_check_spec.rb
154
+ - spec/rails_best_practices/checks/use_model_callback_check_spec.rb
155
+ - spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb
155
156
  - spec/rails_best_practices/checks/replace_instance_variable_with_local_variable_check_spec.rb
156
- - spec/rails_best_practices/checks/use_before_filter_check_spec.rb
157
157
  - spec/rails_best_practices/checks/use_model_association_check_spec.rb
158
- - spec/rails_best_practices/checks/use_model_callback_check_spec.rb
159
- - spec/rails_best_practices/checks/use_observer_check_spec.rb
160
- - spec/rails_best_practices/checks/use_scope_access_check_spec.rb
158
+ - spec/rails_best_practices/checks/move_code_into_model_check_spec.rb
159
+ - spec/rails_best_practices/checks/needless_deep_nesting_check_spec.rb
160
+ - spec/rails_best_practices/checks/keep_finders_on_their_own_model_check_spec.rb
161
161
  - spec/spec_helper.rb