rails_best_practices 0.3.16 → 0.3.17

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/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