rails_best_practices 1.19.1 → 1.19.2
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/Guardfile +1 -1
- data/README.md +1 -0
- data/Rakefile +2 -2
- data/bin/rails_best_practices +2 -1
- data/lib/rails_best_practices.rb +2 -1
- data/lib/rails_best_practices/analyzer.rb +13 -12
- data/lib/rails_best_practices/colorize.rb +2 -0
- data/lib/rails_best_practices/command.rb +6 -5
- data/lib/rails_best_practices/core.rb +2 -1
- data/lib/rails_best_practices/core/check.rb +19 -17
- data/lib/rails_best_practices/core/checks_loader.rb +3 -2
- data/lib/rails_best_practices/core/configs.rb +2 -1
- data/lib/rails_best_practices/core/controllers.rb +4 -1
- data/lib/rails_best_practices/core/error.rb +3 -2
- data/lib/rails_best_practices/core/gems.rb +4 -3
- data/lib/rails_best_practices/core/helpers.rb +4 -1
- data/lib/rails_best_practices/core/klasses.rb +3 -2
- data/lib/rails_best_practices/core/mailers.rb +2 -1
- data/lib/rails_best_practices/core/methods.rb +9 -10
- data/lib/rails_best_practices/core/model_associations.rb +6 -5
- data/lib/rails_best_practices/core/model_attributes.rb +2 -1
- data/lib/rails_best_practices/core/models.rb +2 -1
- data/lib/rails_best_practices/core/modules.rb +2 -1
- data/lib/rails_best_practices/core/routes.rb +2 -1
- data/lib/rails_best_practices/core/runner.rb +7 -6
- data/lib/rails_best_practices/core_ext/erubis.rb +4 -5
- data/lib/rails_best_practices/lexicals.rb +2 -1
- data/lib/rails_best_practices/lexicals/long_line_check.rb +2 -1
- data/lib/rails_best_practices/lexicals/remove_tab_check.rb +2 -1
- data/lib/rails_best_practices/lexicals/remove_trailing_whitespace_check.rb +2 -1
- data/lib/rails_best_practices/prepares.rb +2 -1
- data/lib/rails_best_practices/prepares/config_prepare.rb +3 -2
- data/lib/rails_best_practices/prepares/controller_prepare.rb +9 -8
- data/lib/rails_best_practices/prepares/gemfile_prepare.rb +2 -1
- data/lib/rails_best_practices/prepares/helper_prepare.rb +4 -3
- data/lib/rails_best_practices/prepares/initializer_prepare.rb +2 -1
- data/lib/rails_best_practices/prepares/mailer_prepare.rb +3 -2
- data/lib/rails_best_practices/prepares/model_prepare.rb +12 -12
- data/lib/rails_best_practices/prepares/route_prepare.rb +8 -7
- data/lib/rails_best_practices/prepares/schema_prepare.rb +3 -2
- data/lib/rails_best_practices/reviews.rb +2 -1
- data/lib/rails_best_practices/reviews/add_model_virtual_attribute_review.rb +7 -4
- data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +8 -7
- data/lib/rails_best_practices/reviews/check_destroy_return_value_review.rb +4 -3
- data/lib/rails_best_practices/reviews/check_save_return_value_review.rb +5 -4
- data/lib/rails_best_practices/reviews/default_scope_is_evil_review.rb +2 -1
- data/lib/rails_best_practices/reviews/dry_bundler_in_capistrano_review.rb +2 -1
- data/lib/rails_best_practices/reviews/hash_syntax_review.rb +2 -1
- data/lib/rails_best_practices/reviews/isolate_seed_data_review.rb +3 -2
- data/lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb +3 -2
- data/lib/rails_best_practices/reviews/law_of_demeter_review.rb +3 -2
- data/lib/rails_best_practices/reviews/move_code_into_controller_review.rb +3 -2
- data/lib/rails_best_practices/reviews/move_code_into_helper_review.rb +2 -1
- data/lib/rails_best_practices/reviews/move_code_into_model_review.rb +3 -2
- data/lib/rails_best_practices/reviews/move_finder_to_named_scope_review.rb +3 -2
- data/lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb +3 -2
- data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +5 -4
- data/lib/rails_best_practices/reviews/not_rescue_exception_review.rb +2 -1
- data/lib/rails_best_practices/reviews/not_use_default_route_review.rb +2 -1
- data/lib/rails_best_practices/reviews/not_use_time_ago_in_words_review.rb +2 -1
- data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +3 -2
- data/lib/rails_best_practices/reviews/protect_mass_assignment_review.rb +4 -3
- data/lib/rails_best_practices/reviews/remove_empty_helpers_review.rb +2 -1
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_controllers_review.rb +11 -10
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_helpers_review.rb +4 -3
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_models_review.rb +6 -5
- data/lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb +2 -2
- data/lib/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review.rb +2 -1
- data/lib/rails_best_practices/reviews/restrict_auto_generated_routes_review.rb +8 -8
- data/lib/rails_best_practices/reviews/review.rb +4 -3
- data/lib/rails_best_practices/reviews/simplify_render_in_controllers_review.rb +2 -1
- data/lib/rails_best_practices/reviews/simplify_render_in_views_review.rb +3 -2
- data/lib/rails_best_practices/reviews/use_before_filter_review.rb +5 -4
- data/lib/rails_best_practices/reviews/use_model_association_review.rb +2 -2
- data/lib/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review.rb +5 -5
- data/lib/rails_best_practices/reviews/use_observer_review.rb +2 -1
- data/lib/rails_best_practices/reviews/use_parentheses_in_method_def_review.rb +2 -1
- data/lib/rails_best_practices/reviews/use_query_attribute_review.rb +4 -3
- data/lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb +4 -3
- data/lib/rails_best_practices/reviews/use_scope_access_review.rb +2 -1
- data/lib/rails_best_practices/reviews/use_turbo_sprockets_rails3_review.rb +2 -1
- data/lib/rails_best_practices/version.rb +3 -2
- data/rails_best_practices.gemspec +11 -10
- data/spec/fixtures/lib/rails_best_practices/plugins/reviews/not_use_rails_root_review.rb +3 -2
- data/spec/rails_best_practices/analyzer_spec.rb +6 -8
- data/spec/rails_best_practices/core/check_spec.rb +2 -0
- data/spec/rails_best_practices/core/checks_loader_spec.rb +2 -0
- data/spec/rails_best_practices/core/configs_spec.rb +2 -0
- data/spec/rails_best_practices/core/controllers_spec.rb +2 -0
- data/spec/rails_best_practices/core/error_spec.rb +2 -0
- data/spec/rails_best_practices/core/except_methods_spec.rb +2 -0
- data/spec/rails_best_practices/core/gems_spec.rb +2 -0
- data/spec/rails_best_practices/core/helpers_spec.rb +2 -0
- data/spec/rails_best_practices/core/klasses_spec.rb +2 -0
- data/spec/rails_best_practices/core/mailers_spec.rb +2 -0
- data/spec/rails_best_practices/core/methods_spec.rb +6 -4
- data/spec/rails_best_practices/core/model_associations_spec.rb +4 -2
- data/spec/rails_best_practices/core/model_attributes_spec.rb +2 -0
- data/spec/rails_best_practices/core/models_spec.rb +2 -0
- data/spec/rails_best_practices/core/modules_spec.rb +2 -0
- data/spec/rails_best_practices/core/routes_spec.rb +4 -2
- data/spec/rails_best_practices/core/runner_spec.rb +2 -0
- data/spec/rails_best_practices/core_ext/erubis_spec.rb +3 -1
- data/spec/rails_best_practices/lexicals/long_line_check_spec.rb +8 -7
- data/spec/rails_best_practices/lexicals/remove_tab_check_spec.rb +8 -6
- data/spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb +9 -7
- data/spec/rails_best_practices/prepares/config_prepare_spec.rb +3 -1
- data/spec/rails_best_practices/prepares/controller_prepare_spec.rb +23 -21
- data/spec/rails_best_practices/prepares/gemfile_prepare_spec.rb +3 -1
- data/spec/rails_best_practices/prepares/helper_prepare_spec.rb +7 -5
- data/spec/rails_best_practices/prepares/initializer_prepare_spec.rb +4 -2
- data/spec/rails_best_practices/prepares/mailer_prepare_spec.rb +3 -1
- data/spec/rails_best_practices/prepares/model_prepare_spec.rb +56 -54
- data/spec/rails_best_practices/prepares/route_prepare_spec.rb +39 -37
- data/spec/rails_best_practices/prepares/schema_prepare_spec.rb +3 -1
- data/spec/rails_best_practices/reviews/add_model_virtual_attribute_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/always_add_db_index_review_spec.rb +7 -5
- data/spec/rails_best_practices/reviews/check_destroy_return_value_review_spec.rb +12 -10
- data/spec/rails_best_practices/reviews/check_save_return_value_review_spec.rb +20 -18
- data/spec/rails_best_practices/reviews/default_scope_is_evil_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/dry_bundler_in_capistrano_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/hash_syntax_review_spec.rb +9 -7
- data/spec/rails_best_practices/reviews/isolate_seed_data_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/keep_finders_on_their_own_model_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/law_of_demeter_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/move_code_into_controller_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/move_code_into_helper_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/move_code_into_model_review_spec.rb +11 -9
- data/spec/rails_best_practices/reviews/move_finder_to_named_scope_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/move_model_logic_into_model_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/needless_deep_nesting_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/not_rescue_exception_review_spec.rb +9 -7
- data/spec/rails_best_practices/reviews/not_use_default_route_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/not_use_time_ago_in_words_review_spec.rb +7 -5
- data/spec/rails_best_practices/reviews/overuse_route_customizations_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/protect_mass_assignment_review_spec.rb +21 -19
- data/spec/rails_best_practices/reviews/remove_empty_helpers_review_spec.rb +6 -4
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_controllers_review_spec.rb +33 -31
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_helpers_review_spec.rb +13 -11
- data/spec/rails_best_practices/reviews/remove_unused_methods_in_models_review_spec.rb +65 -63
- data/spec/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/restrict_auto_generated_routes_review_spec.rb +24 -22
- data/spec/rails_best_practices/reviews/simplify_render_in_controllers_review_spec.rb +9 -7
- data/spec/rails_best_practices/reviews/simplify_render_in_views_review_spec.rb +13 -11
- data/spec/rails_best_practices/reviews/use_before_filter_review_spec.rb +3 -1
- data/spec/rails_best_practices/reviews/use_model_association_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/use_observer_review_spec.rb +7 -5
- data/spec/rails_best_practices/reviews/use_parentheses_in_method_def_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/use_query_attribute_review_spec.rb +3 -1
- data/spec/rails_best_practices/reviews/use_say_with_time_in_migrations_review_spec.rb +9 -7
- data/spec/rails_best_practices/reviews/use_scope_access_review_spec.rb +2 -0
- data/spec/rails_best_practices/reviews/use_turbo_sprockets_rails3_review_spec.rb +2 -0
- data/spec/spec_helper.rb +2 -0
- metadata +26 -26
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
module RailsBestPractices
|
@@ -7,7 +9,7 @@ module RailsBestPractices
|
|
7
9
|
|
8
10
|
context 'gemfile' do
|
9
11
|
it 'should parse gems' do
|
10
|
-
content
|
12
|
+
content = <<-EOF
|
11
13
|
GEM
|
12
14
|
remote: https://rubygems.org/
|
13
15
|
specs:
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
module RailsBestPractices
|
@@ -7,7 +9,7 @@ module RailsBestPractices
|
|
7
9
|
|
8
10
|
context 'methods' do
|
9
11
|
it 'should parse helper methods' do
|
10
|
-
content
|
12
|
+
content = <<-EOF
|
11
13
|
module PostsHelper
|
12
14
|
def used; end
|
13
15
|
def unused; end
|
@@ -15,21 +17,21 @@ module RailsBestPractices
|
|
15
17
|
EOF
|
16
18
|
runner.prepare('app/helpers/posts_helper.rb', content)
|
17
19
|
methods = Prepares.helper_methods
|
18
|
-
expect(methods.get_methods('PostsHelper').map(&:method_name)).to eq([
|
20
|
+
expect(methods.get_methods('PostsHelper').map(&:method_name)).to eq(%w[used unused])
|
19
21
|
end
|
20
22
|
|
21
23
|
it 'should parse helpers' do
|
22
|
-
content
|
24
|
+
content = <<-EOF
|
23
25
|
module PostsHelper
|
24
26
|
end
|
25
27
|
EOF
|
26
28
|
runner.prepare('app/helpers/posts_helper.rb', content)
|
27
|
-
content
|
29
|
+
content = <<-EOF
|
28
30
|
module Admin::UsersHelper
|
29
31
|
end
|
30
32
|
EOF
|
31
33
|
runner.prepare('app/helpers/users_helper.rb', content)
|
32
|
-
content
|
34
|
+
content = <<-EOF
|
33
35
|
module Admin
|
34
36
|
module BaseHelper
|
35
37
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
module RailsBestPractices
|
@@ -7,7 +9,7 @@ module RailsBestPractices
|
|
7
9
|
|
8
10
|
context 'initializers' do
|
9
11
|
it 'should set include_forbidden_attributes_protection config' do
|
10
|
-
content
|
12
|
+
content = <<-EOF
|
11
13
|
class AR
|
12
14
|
ActiveRecord::Base.send(:include, ActiveModel::ForbiddenAttributesProtection)
|
13
15
|
end
|
@@ -18,7 +20,7 @@ module RailsBestPractices
|
|
18
20
|
end
|
19
21
|
|
20
22
|
it 'should not set include_forbidden_attributes_protection config' do
|
21
|
-
content
|
23
|
+
content = <<-EOF
|
22
24
|
class AR
|
23
25
|
end
|
24
26
|
EOF
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
module RailsBestPractices
|
@@ -6,7 +8,7 @@ module RailsBestPractices
|
|
6
8
|
let(:runner) { Core::Runner.new(prepares: MailerPrepare.new) }
|
7
9
|
|
8
10
|
it 'should parse mailer names' do
|
9
|
-
content
|
11
|
+
content = <<-EOF
|
10
12
|
class ProjectMailer < ActionMailer::Base
|
11
13
|
end
|
12
14
|
EOF
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'spec_helper'
|
2
4
|
|
3
5
|
module RailsBestPractices
|
@@ -7,7 +9,7 @@ module RailsBestPractices
|
|
7
9
|
|
8
10
|
context 'models' do
|
9
11
|
it 'class_name with modules ::' do
|
10
|
-
content
|
12
|
+
content = <<-EOF
|
11
13
|
class Blog::Post < ActiveRecord::Base
|
12
14
|
end
|
13
15
|
EOF
|
@@ -17,7 +19,7 @@ module RailsBestPractices
|
|
17
19
|
end
|
18
20
|
|
19
21
|
it 'class_name with modules' do
|
20
|
-
content
|
22
|
+
content = <<-EOF
|
21
23
|
module Blog
|
22
24
|
class Post < ActiveRecord::Base
|
23
25
|
end
|
@@ -31,7 +33,7 @@ module RailsBestPractices
|
|
31
33
|
|
32
34
|
context 'associations' do
|
33
35
|
it 'should parse model associations' do
|
34
|
-
content
|
36
|
+
content = <<-EOF
|
35
37
|
class Project < ActiveRecord::Base
|
36
38
|
belongs_to :portfolio
|
37
39
|
has_one :project_manager
|
@@ -41,66 +43,66 @@ module RailsBestPractices
|
|
41
43
|
EOF
|
42
44
|
runner.prepare('app/models/project.rb', content)
|
43
45
|
model_associations = Prepares.model_associations
|
44
|
-
expect(model_associations.get_association('Project', 'portfolio')).to eq(
|
45
|
-
expect(model_associations.get_association('Project', 'project_manager')).to eq(
|
46
|
-
expect(model_associations.get_association('Project', 'milestones')).to eq(
|
47
|
-
expect(model_associations.get_association('Project', 'categories')).to eq(
|
46
|
+
expect(model_associations.get_association('Project', 'portfolio')).to eq('meta' => 'belongs_to', 'class_name' => 'Portfolio')
|
47
|
+
expect(model_associations.get_association('Project', 'project_manager')).to eq('meta' => 'has_one', 'class_name' => 'ProjectManager')
|
48
|
+
expect(model_associations.get_association('Project', 'milestones')).to eq('meta' => 'has_many', 'class_name' => 'Milestone')
|
49
|
+
expect(model_associations.get_association('Project', 'categories')).to eq('meta' => 'has_and_belongs_to_many', 'class_name' => 'Category')
|
48
50
|
end
|
49
51
|
|
50
52
|
context 'with class_name option' do
|
51
53
|
it 'should parse belongs_to' do
|
52
|
-
content
|
54
|
+
content = <<-EOF
|
53
55
|
class Post < ActiveRecord::Base
|
54
56
|
belongs_to :author, "class_name" => "Person"
|
55
57
|
end
|
56
58
|
EOF
|
57
59
|
runner.prepare('app/models/post.rb', content)
|
58
60
|
model_associations = Prepares.model_associations
|
59
|
-
expect(model_associations.get_association('Post', 'author')).to eq(
|
61
|
+
expect(model_associations.get_association('Post', 'author')).to eq('meta' => 'belongs_to', 'class_name' => 'Person')
|
60
62
|
end
|
61
63
|
|
62
64
|
it 'should parse has_one' do
|
63
|
-
content
|
65
|
+
content = <<-EOF
|
64
66
|
class Project < ActiveRecord::Base
|
65
67
|
has_one :project_manager, "class_name" => "Person"
|
66
68
|
end
|
67
69
|
EOF
|
68
70
|
runner.prepare('app/models/post.rb', content)
|
69
71
|
model_associations = Prepares.model_associations
|
70
|
-
expect(model_associations.get_association('Project', 'project_manager')).to eq(
|
72
|
+
expect(model_associations.get_association('Project', 'project_manager')).to eq('meta' => 'has_one', 'class_name' => 'Person')
|
71
73
|
end
|
72
74
|
|
73
75
|
it 'should parse has_many' do
|
74
|
-
content
|
76
|
+
content = <<-EOF
|
75
77
|
class Project < ActiveRecord::Base
|
76
78
|
has_many :people, "class_name" => "Person"
|
77
79
|
end
|
78
80
|
EOF
|
79
81
|
runner.prepare('app/models/project.rb', content)
|
80
82
|
model_associations = Prepares.model_associations
|
81
|
-
expect(model_associations.get_association('Project', 'people')).to eq(
|
83
|
+
expect(model_associations.get_association('Project', 'people')).to eq('meta' => 'has_many', 'class_name' => 'Person')
|
82
84
|
end
|
83
85
|
|
84
86
|
it 'should parse has_and_belongs_to_many' do
|
85
|
-
content
|
87
|
+
content = <<-EOF
|
86
88
|
class Citizen < ActiveRecord::Base
|
87
89
|
has_and_belongs_to_many :nations, "class_name" => "Country"
|
88
90
|
end
|
89
91
|
EOF
|
90
92
|
runner.prepare('app/models/citizen.rb', content)
|
91
93
|
model_associations = Prepares.model_associations
|
92
|
-
expect(model_associations.get_association('Citizen', 'nations')).to eq(
|
94
|
+
expect(model_associations.get_association('Citizen', 'nations')).to eq('meta' => 'has_and_belongs_to_many', 'class_name' => 'Country')
|
93
95
|
end
|
94
96
|
|
95
97
|
context 'namespace' do
|
96
98
|
it 'should parse with namespace' do
|
97
|
-
content
|
99
|
+
content = <<-EOF
|
98
100
|
class Community < ActiveRecord::Base
|
99
101
|
has_many :members
|
100
102
|
end
|
101
103
|
EOF
|
102
104
|
runner.prepare('app/models/community.rb', content)
|
103
|
-
content
|
105
|
+
content = <<-EOF
|
104
106
|
class Community::Member < ActiveRecord::Base
|
105
107
|
belongs_to :community
|
106
108
|
end
|
@@ -108,18 +110,18 @@ module RailsBestPractices
|
|
108
110
|
runner.prepare('app/models/community/member.rb', content)
|
109
111
|
runner.after_prepare
|
110
112
|
model_associations = Prepares.model_associations
|
111
|
-
expect(model_associations.get_association('Community', 'members')).to eq(
|
112
|
-
expect(model_associations.get_association('Community::Member', 'community')).to eq(
|
113
|
+
expect(model_associations.get_association('Community', 'members')).to eq('meta' => 'has_many', 'class_name' => 'Community::Member')
|
114
|
+
expect(model_associations.get_association('Community::Member', 'community')).to eq('meta' => 'belongs_to', 'class_name' => 'Community')
|
113
115
|
end
|
114
116
|
|
115
117
|
it 'should parse without namespace' do
|
116
|
-
content
|
118
|
+
content = <<-EOF
|
117
119
|
class Community::Member::Rating < ActiveRecord::Base
|
118
120
|
belongs_to :member
|
119
121
|
end
|
120
122
|
EOF
|
121
123
|
runner.prepare('app/models/community/member/rating.rb', content)
|
122
|
-
content
|
124
|
+
content = <<-EOF
|
123
125
|
class Community::Member < ActiveRecord::Base
|
124
126
|
has_many :ratings
|
125
127
|
end
|
@@ -127,15 +129,15 @@ module RailsBestPractices
|
|
127
129
|
runner.prepare('app/models/community/member.rb', content)
|
128
130
|
runner.after_prepare
|
129
131
|
model_associations = Prepares.model_associations
|
130
|
-
expect(model_associations.get_association('Community::Member::Rating', 'member')).to eq(
|
131
|
-
expect(model_associations.get_association('Community::Member', 'ratings')).to eq(
|
132
|
+
expect(model_associations.get_association('Community::Member::Rating', 'member')).to eq('meta' => 'belongs_to', 'class_name' => 'Community::Member')
|
133
|
+
expect(model_associations.get_association('Community::Member', 'ratings')).to eq('meta' => 'has_many', 'class_name' => 'Community::Member::Rating')
|
132
134
|
end
|
133
135
|
end
|
134
136
|
end
|
135
137
|
|
136
138
|
context 'mongoid embeds' do
|
137
139
|
it 'should parse embeds_many' do
|
138
|
-
content
|
140
|
+
content = <<-EOF
|
139
141
|
class Person
|
140
142
|
include Mongoid::Document
|
141
143
|
embeds_many :addresses
|
@@ -143,11 +145,11 @@ module RailsBestPractices
|
|
143
145
|
EOF
|
144
146
|
runner.prepare('app/models/person.rb', content)
|
145
147
|
model_associations = Prepares.model_associations
|
146
|
-
expect(model_associations.get_association('Person', 'addresses')).to eq(
|
148
|
+
expect(model_associations.get_association('Person', 'addresses')).to eq('meta' => 'embeds_many', 'class_name' => 'Address')
|
147
149
|
end
|
148
150
|
|
149
151
|
it 'should parse embeds_one' do
|
150
|
-
content
|
152
|
+
content = <<-EOF
|
151
153
|
class Lush
|
152
154
|
include Mongoid::Document
|
153
155
|
embeds_one :whiskey, class_name: "Drink", inverse_of: :alcoholic
|
@@ -155,11 +157,11 @@ module RailsBestPractices
|
|
155
157
|
EOF
|
156
158
|
runner.prepare('app/models/lush.rb', content)
|
157
159
|
model_associations = Prepares.model_associations
|
158
|
-
expect(model_associations.get_association('Lush', 'whiskey')).to eq(
|
160
|
+
expect(model_associations.get_association('Lush', 'whiskey')).to eq('meta' => 'embeds_one', 'class_name' => 'Drink')
|
159
161
|
end
|
160
162
|
|
161
163
|
it 'should parse embedded_in' do
|
162
|
-
content
|
164
|
+
content = <<-EOF
|
163
165
|
class Drink
|
164
166
|
include Mongoid::Document
|
165
167
|
embedded_in :alcoholic, class_name: "Lush", inverse_of: :whiskey
|
@@ -167,13 +169,13 @@ module RailsBestPractices
|
|
167
169
|
EOF
|
168
170
|
runner.prepare('app/models/drink.rb', content)
|
169
171
|
model_associations = Prepares.model_associations
|
170
|
-
expect(model_associations.get_association('Drink', 'alcoholic')).to eq(
|
172
|
+
expect(model_associations.get_association('Drink', 'alcoholic')).to eq('meta' => 'embedded_in', 'class_name' => 'Lush')
|
171
173
|
end
|
172
174
|
end
|
173
175
|
|
174
176
|
context 'mongomapper many/one' do
|
175
177
|
it 'should parse one' do
|
176
|
-
content
|
178
|
+
content = <<-EOF
|
177
179
|
class Employee
|
178
180
|
include MongoMapper::Document
|
179
181
|
one :desk
|
@@ -181,11 +183,11 @@ module RailsBestPractices
|
|
181
183
|
EOF
|
182
184
|
runner.prepare('app/models/employee.rb', content)
|
183
185
|
model_associations = Prepares.model_associations
|
184
|
-
expect(model_associations.get_association('Employee', 'desk')).to eq(
|
186
|
+
expect(model_associations.get_association('Employee', 'desk')).to eq('meta' => 'one', 'class_name' => 'Desk')
|
185
187
|
end
|
186
188
|
|
187
189
|
it 'should parse many' do
|
188
|
-
content
|
190
|
+
content = <<-EOF
|
189
191
|
class Tree
|
190
192
|
include MongoMapper::Document
|
191
193
|
many :birds
|
@@ -193,14 +195,14 @@ module RailsBestPractices
|
|
193
195
|
EOF
|
194
196
|
runner.prepare('app/models/tree.rb', content)
|
195
197
|
model_associations = Prepares.model_associations
|
196
|
-
expect(model_associations.get_association('Tree', 'birds')).to eq(
|
198
|
+
expect(model_associations.get_association('Tree', 'birds')).to eq('meta' => 'many', 'class_name' => 'Bird')
|
197
199
|
end
|
198
200
|
end
|
199
201
|
end
|
200
202
|
|
201
203
|
context 'methods' do
|
202
204
|
it 'should parse model methods' do
|
203
|
-
content
|
205
|
+
content = <<-EOF
|
204
206
|
class Post < ActiveRecord::Base
|
205
207
|
def save; end
|
206
208
|
def find; end
|
@@ -208,11 +210,11 @@ module RailsBestPractices
|
|
208
210
|
EOF
|
209
211
|
runner.prepare('app/models/post.rb', content)
|
210
212
|
methods = Prepares.model_methods
|
211
|
-
expect(methods.get_methods('Post').map(&:method_name)).to eq([
|
213
|
+
expect(methods.get_methods('Post').map(&:method_name)).to eq(%w[save find])
|
212
214
|
end
|
213
215
|
|
214
216
|
it 'should parse model methods with access control' do
|
215
|
-
content
|
217
|
+
content = <<-EOF
|
216
218
|
class Post < ActiveRecord::Base
|
217
219
|
def save; end
|
218
220
|
def find; end
|
@@ -224,14 +226,14 @@ module RailsBestPractices
|
|
224
226
|
EOF
|
225
227
|
runner.prepare('app/models/post.rb', content)
|
226
228
|
methods = Prepares.model_methods
|
227
|
-
expect(methods.get_methods('Post').map(&:method_name)).to eq([
|
228
|
-
expect(methods.get_methods('Post', 'public').map(&:method_name)).to eq([
|
229
|
+
expect(methods.get_methods('Post').map(&:method_name)).to eq(%w[save find create_or_update find_by_sql])
|
230
|
+
expect(methods.get_methods('Post', 'public').map(&:method_name)).to eq(%w[save find])
|
229
231
|
expect(methods.get_methods('Post', 'protected').map(&:method_name)).to eq(['create_or_update'])
|
230
232
|
expect(methods.get_methods('Post', 'private').map(&:method_name)).to eq(['find_by_sql'])
|
231
233
|
end
|
232
234
|
|
233
235
|
it 'should parse model methods with module ::' do
|
234
|
-
content
|
236
|
+
content = <<-EOF
|
235
237
|
class Admin::Blog::Post < ActiveRecord::Base
|
236
238
|
def save; end
|
237
239
|
def find; end
|
@@ -239,11 +241,11 @@ module RailsBestPractices
|
|
239
241
|
EOF
|
240
242
|
runner.prepare('app/models/admin/blog/post.rb', content)
|
241
243
|
methods = Prepares.model_methods
|
242
|
-
expect(methods.get_methods('Admin::Blog::Post').map(&:method_name)).to eq([
|
244
|
+
expect(methods.get_methods('Admin::Blog::Post').map(&:method_name)).to eq(%w[save find])
|
243
245
|
end
|
244
246
|
|
245
247
|
it 'should parse model methods with module' do
|
246
|
-
content
|
248
|
+
content = <<-EOF
|
247
249
|
module Admin
|
248
250
|
module Blog
|
249
251
|
class Post < ActiveRecord::Base
|
@@ -255,16 +257,16 @@ module RailsBestPractices
|
|
255
257
|
EOF
|
256
258
|
runner.prepare('app/models/admin/blog/post.rb', content)
|
257
259
|
methods = Prepares.model_methods
|
258
|
-
expect(methods.get_methods('Admin::Blog::Post').map(&:method_name)).to eq([
|
260
|
+
expect(methods.get_methods('Admin::Blog::Post').map(&:method_name)).to eq(%w[save find])
|
259
261
|
end
|
260
262
|
|
261
263
|
it 'should not add methods from module' do
|
262
|
-
content
|
264
|
+
content = <<-EOF
|
263
265
|
class Model < ActiveRecord::Base
|
264
266
|
end
|
265
267
|
EOF
|
266
268
|
runner.prepare('app/models/model.rb', content)
|
267
|
-
content
|
269
|
+
content = <<-EOF
|
268
270
|
module Mixin
|
269
271
|
def mixed_method
|
270
272
|
end
|
@@ -278,7 +280,7 @@ module RailsBestPractices
|
|
278
280
|
|
279
281
|
context 'scope' do
|
280
282
|
it 'should treat named_scope as method' do
|
281
|
-
content
|
283
|
+
content = <<-EOF
|
282
284
|
class Post < ActiveRecord::Base
|
283
285
|
named_scope :active, conditions: {active: true}
|
284
286
|
end
|
@@ -289,7 +291,7 @@ module RailsBestPractices
|
|
289
291
|
end
|
290
292
|
|
291
293
|
it 'should treat scope as method' do
|
292
|
-
content
|
294
|
+
content = <<-EOF
|
293
295
|
class Post < ActiveRecord::Base
|
294
296
|
scope :active, where(active: true)
|
295
297
|
end
|
@@ -302,7 +304,7 @@ module RailsBestPractices
|
|
302
304
|
|
303
305
|
context 'alias' do
|
304
306
|
it 'should treat alias as method' do
|
305
|
-
content
|
307
|
+
content = <<-EOF
|
306
308
|
class Post < ActiveRecord::Base
|
307
309
|
alias :new :old
|
308
310
|
end
|
@@ -313,7 +315,7 @@ module RailsBestPractices
|
|
313
315
|
end
|
314
316
|
|
315
317
|
it 'should treat alias_method as method' do
|
316
|
-
content
|
318
|
+
content = <<-EOF
|
317
319
|
class Post < ActiveRecord::Base
|
318
320
|
alias_method :new, :old
|
319
321
|
end
|
@@ -324,20 +326,20 @@ module RailsBestPractices
|
|
324
326
|
end
|
325
327
|
|
326
328
|
it 'should treat alias_method_chain as method' do
|
327
|
-
content
|
329
|
+
content = <<-EOF
|
328
330
|
class Post < ActiveRecord::Base
|
329
331
|
alias_method_chain :method, :feature
|
330
332
|
end
|
331
333
|
EOF
|
332
334
|
runner.prepare('app/models/post.rb', content)
|
333
335
|
methods = Prepares.model_methods
|
334
|
-
expect(methods.get_methods('Post').map(&:method_name)).to eq([
|
336
|
+
expect(methods.get_methods('Post').map(&:method_name)).to eq(%w[method_with_feature method])
|
335
337
|
end
|
336
338
|
end
|
337
339
|
|
338
340
|
context 'attributes' do
|
339
341
|
it 'should parse mongoid field' do
|
340
|
-
content
|
342
|
+
content = <<-EOF
|
341
343
|
class Post
|
342
344
|
include Mongoid::Document
|
343
345
|
field :title
|
@@ -357,7 +359,7 @@ module RailsBestPractices
|
|
357
359
|
end
|
358
360
|
|
359
361
|
it 'should parse mongomapper field' do
|
360
|
-
content
|
362
|
+
content = <<-EOF
|
361
363
|
class Post
|
362
364
|
include MongoMapper::Document
|
363
365
|
key :first_name, String
|
@@ -381,12 +383,12 @@ module RailsBestPractices
|
|
381
383
|
|
382
384
|
context 'no error' do
|
383
385
|
it 'should raised for finder_sql option' do
|
384
|
-
content
|
386
|
+
content = <<-EOF
|
385
387
|
class EventSubscription < ActiveRecord::Base
|
386
388
|
has_many :event_notification_template, finder_sql: ?
|
387
389
|
end
|
388
390
|
EOF
|
389
|
-
content.sub
|
391
|
+
content = content.sub('?', '\'SELECT event_notification_templates.* from event_notification_templates where event_type_id=#{event_type_id} and delivery_method_id=#{delivery_method_id}\'')
|
390
392
|
expect { runner.prepare('app/models/event_subscription.rb', content) }.not_to raise_error
|
391
393
|
end
|
392
394
|
end
|