rails_best_practices 0.2.3 → 0.2.4
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 +2 -1
- data/VERSION +1 -1
- data/lib/rails_best_practices/checks/check.rb +1 -1
- data/lib/rails_best_practices/checks/isolate_seed_data_check.rb +46 -0
- data/lib/rails_best_practices/checks.rb +1 -0
- data/rails_best_practices.gemspec +4 -1
- data/rails_best_practices.yml +1 -0
- data/spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb +18 -0
- data/spec/rails_best_practices/checks/isolate_seed_data_check_spec.rb +75 -0
- metadata +4 -1
data/README.textile
CHANGED
@@ -44,6 +44,7 @@ NotUseDefaultRouteCheck: { }
|
|
44
44
|
KeepFindersOnTheirOwnModelCheck: { }
|
45
45
|
LawOfDemeterCheck: { }
|
46
46
|
UseObserverCheck: { }
|
47
|
+
IsolateSeedDataCheck: { }
|
47
48
|
</code></pre>
|
48
49
|
|
49
50
|
*************************************************
|
@@ -77,7 +78,7 @@ h2. Progress
|
|
77
78
|
## [-Use Observer-]
|
78
79
|
|
79
80
|
* Lesson 4. Migration
|
80
|
-
## Isolating Seed Data
|
81
|
+
## [-Isolating Seed Data-]
|
81
82
|
## Always add DB index
|
82
83
|
|
83
84
|
* Lesson 5. Controller
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.4
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'rails_best_practices/checks/check'
|
2
|
+
|
3
|
+
module RailsBestPractices
|
4
|
+
module Checks
|
5
|
+
# Check a migration file to make sure not to insert data in migration, move them to seed file.
|
6
|
+
#
|
7
|
+
# Implementation: check if there are :create, :create!, and :new with :save or :save! exist, the migration file needs isolate seed data.
|
8
|
+
class IsolateSeedDataCheck < Check
|
9
|
+
|
10
|
+
def interesting_nodes
|
11
|
+
[:call, :lasgn]
|
12
|
+
end
|
13
|
+
|
14
|
+
def interesting_files
|
15
|
+
/db\/migrate\/.*rb/
|
16
|
+
end
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
super
|
20
|
+
@new_variables = []
|
21
|
+
end
|
22
|
+
|
23
|
+
def evaluate_start(node)
|
24
|
+
if [:create, :create!].include? node.message
|
25
|
+
add_error("isolate seed data")
|
26
|
+
elsif :lasgn == node.node_type
|
27
|
+
remember_new_variable(node)
|
28
|
+
elsif [:save, :save!].include? node.message
|
29
|
+
add_error("isolate seed data") if new_record?(node)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def remember_new_variable(node)
|
36
|
+
unless node.grep_nodes({:node_type => :call, :message => :new}).empty?
|
37
|
+
@new_variables << node.subject.to_s
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def new_record?(node)
|
42
|
+
@new_variables.include? node.subject.to_ruby
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -13,3 +13,4 @@ require 'rails_best_practices/checks/not_use_default_route_check'
|
|
13
13
|
require 'rails_best_practices/checks/keep_finders_on_their_own_model_check'
|
14
14
|
require 'rails_best_practices/checks/law_of_demeter_check'
|
15
15
|
require 'rails_best_practices/checks/use_observer_check'
|
16
|
+
require 'rails_best_practices/checks/isolate_seed_data_check'
|
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{rails_best_practices}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.4"
|
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"]
|
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
|
|
29
29
|
"lib/rails_best_practices/checks.rb",
|
30
30
|
"lib/rails_best_practices/checks/add_model_virtual_attribute_check.rb",
|
31
31
|
"lib/rails_best_practices/checks/check.rb",
|
32
|
+
"lib/rails_best_practices/checks/isolate_seed_data_check.rb",
|
32
33
|
"lib/rails_best_practices/checks/keep_finders_on_their_own_model_check.rb",
|
33
34
|
"lib/rails_best_practices/checks/law_of_demeter_check.rb",
|
34
35
|
"lib/rails_best_practices/checks/many_to_many_collection_check.rb",
|
@@ -53,6 +54,7 @@ Gem::Specification.new do |s|
|
|
53
54
|
"rails_best_practices.gemspec",
|
54
55
|
"rails_best_practices.yml",
|
55
56
|
"spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb",
|
57
|
+
"spec/rails_best_practices/checks/isolate_seed_data_check_spec.rb",
|
56
58
|
"spec/rails_best_practices/checks/keep_finders_on_their_own_model_check_spec.rb",
|
57
59
|
"spec/rails_best_practices/checks/law_of_demeter_check_spec.rb",
|
58
60
|
"spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb",
|
@@ -81,6 +83,7 @@ Gem::Specification.new do |s|
|
|
81
83
|
"spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb",
|
82
84
|
"spec/rails_best_practices/checks/keep_finders_on_their_own_model_check_spec.rb",
|
83
85
|
"spec/rails_best_practices/checks/use_model_callback_check_spec.rb",
|
86
|
+
"spec/rails_best_practices/checks/isolate_seed_data_check_spec.rb",
|
84
87
|
"spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb",
|
85
88
|
"spec/rails_best_practices/checks/use_model_association_check_spec.rb",
|
86
89
|
"spec/rails_best_practices/checks/move_model_logic_into_model_check_spec.rb",
|
data/rails_best_practices.yml
CHANGED
@@ -22,6 +22,24 @@ describe RailsBestPractices::Checks::AddModelVirtualAttributeCheck do
|
|
22
22
|
errors.should_not be_empty
|
23
23
|
errors[0].to_s.should == "app/controllers/users_controller.rb:3 - add model virtual attribute (for @user)"
|
24
24
|
end
|
25
|
+
|
26
|
+
it "should add model virtual attribute with local assignment" do
|
27
|
+
content = <<-EOF
|
28
|
+
class UsersController < ApplicationController
|
29
|
+
|
30
|
+
def create
|
31
|
+
user = User.new(params[:user])
|
32
|
+
user.first_name = params[:full_name].split(' ', 2).first
|
33
|
+
user.last_name = params[:full_name].split(' ', 2).last
|
34
|
+
user.save
|
35
|
+
end
|
36
|
+
end
|
37
|
+
EOF
|
38
|
+
@runner.check('app/controllers/users_controller.rb', content)
|
39
|
+
errors = @runner.errors
|
40
|
+
errors.should_not be_empty
|
41
|
+
errors[0].to_s.should == "app/controllers/users_controller.rb:3 - add model virtual attribute (for user)"
|
42
|
+
end
|
25
43
|
|
26
44
|
it "should not add model virtual attribute with differen param" do
|
27
45
|
content = <<-EOF
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe RailsBestPractices::Checks::IsolateSeedDataCheck do
|
4
|
+
before(:each) do
|
5
|
+
@runner = RailsBestPractices::Core::Runner.new(RailsBestPractices::Checks::IsolateSeedDataCheck.new)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should isolate seed data" do
|
9
|
+
content = <<-EOF
|
10
|
+
class CreateRoles < ActiveRecord::Migration
|
11
|
+
def self.up
|
12
|
+
create_table "roles", :force => true do |t|
|
13
|
+
t.string :name
|
14
|
+
end
|
15
|
+
|
16
|
+
["admin", "author", "editor", "account"].each do |name|
|
17
|
+
Role.create!(:name => name)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.down
|
22
|
+
drop_table "roles"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
EOF
|
26
|
+
@runner.check('db/migrate/20090818130258_create_roles.rb', content)
|
27
|
+
errors = @runner.errors
|
28
|
+
errors.should_not be_empty
|
29
|
+
errors[0].to_s.should == "db/migrate/20090818130258_create_roles.rb:8 - isolate seed data"
|
30
|
+
end
|
31
|
+
|
32
|
+
it "should isolate seed data with new and save" do
|
33
|
+
content = <<-EOF
|
34
|
+
class CreateRoles < ActiveRecord::Migration
|
35
|
+
def self.up
|
36
|
+
create_table "roles", :force => true do |t|
|
37
|
+
t.string :name
|
38
|
+
end
|
39
|
+
|
40
|
+
["admin", "author", "editor", "account"].each do |name|
|
41
|
+
role = Role.new(:name => name)
|
42
|
+
role.save!
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.down
|
47
|
+
drop_table "roles"
|
48
|
+
end
|
49
|
+
end
|
50
|
+
EOF
|
51
|
+
@runner.check('db/migrate/20090818130258_create_roles.rb', content)
|
52
|
+
errors = @runner.errors
|
53
|
+
errors.should_not be_empty
|
54
|
+
errors[0].to_s.should == "db/migrate/20090818130258_create_roles.rb:9 - isolate seed data"
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should not isolate seed data without data insert" do
|
58
|
+
content = <<-EOF
|
59
|
+
class CreateRoles < ActiveRecord::Migration
|
60
|
+
def self.up
|
61
|
+
create_table "roles", :force => true do |t|
|
62
|
+
t.string :name
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.down
|
67
|
+
drop_table "roles"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
EOF
|
71
|
+
@runner.check('db/migrate/20090818130258_create_roles.rb', content)
|
72
|
+
errors = @runner.errors
|
73
|
+
errors.should be_empty
|
74
|
+
end
|
75
|
+
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.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
@@ -52,6 +52,7 @@ files:
|
|
52
52
|
- lib/rails_best_practices/checks.rb
|
53
53
|
- lib/rails_best_practices/checks/add_model_virtual_attribute_check.rb
|
54
54
|
- lib/rails_best_practices/checks/check.rb
|
55
|
+
- lib/rails_best_practices/checks/isolate_seed_data_check.rb
|
55
56
|
- lib/rails_best_practices/checks/keep_finders_on_their_own_model_check.rb
|
56
57
|
- lib/rails_best_practices/checks/law_of_demeter_check.rb
|
57
58
|
- lib/rails_best_practices/checks/many_to_many_collection_check.rb
|
@@ -76,6 +77,7 @@ files:
|
|
76
77
|
- rails_best_practices.gemspec
|
77
78
|
- rails_best_practices.yml
|
78
79
|
- spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb
|
80
|
+
- spec/rails_best_practices/checks/isolate_seed_data_check_spec.rb
|
79
81
|
- spec/rails_best_practices/checks/keep_finders_on_their_own_model_check_spec.rb
|
80
82
|
- spec/rails_best_practices/checks/law_of_demeter_check_spec.rb
|
81
83
|
- spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb
|
@@ -126,6 +128,7 @@ test_files:
|
|
126
128
|
- spec/rails_best_practices/checks/add_model_virtual_attribute_check_spec.rb
|
127
129
|
- spec/rails_best_practices/checks/keep_finders_on_their_own_model_check_spec.rb
|
128
130
|
- spec/rails_best_practices/checks/use_model_callback_check_spec.rb
|
131
|
+
- spec/rails_best_practices/checks/isolate_seed_data_check_spec.rb
|
129
132
|
- spec/rails_best_practices/checks/many_to_many_collection_check_spec.rb
|
130
133
|
- spec/rails_best_practices/checks/use_model_association_check_spec.rb
|
131
134
|
- spec/rails_best_practices/checks/move_model_logic_into_model_check_spec.rb
|