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.
Files changed (158) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +5 -0
  3. data/Guardfile +1 -1
  4. data/README.md +1 -0
  5. data/Rakefile +2 -2
  6. data/bin/rails_best_practices +2 -1
  7. data/lib/rails_best_practices.rb +2 -1
  8. data/lib/rails_best_practices/analyzer.rb +13 -12
  9. data/lib/rails_best_practices/colorize.rb +2 -0
  10. data/lib/rails_best_practices/command.rb +6 -5
  11. data/lib/rails_best_practices/core.rb +2 -1
  12. data/lib/rails_best_practices/core/check.rb +19 -17
  13. data/lib/rails_best_practices/core/checks_loader.rb +3 -2
  14. data/lib/rails_best_practices/core/configs.rb +2 -1
  15. data/lib/rails_best_practices/core/controllers.rb +4 -1
  16. data/lib/rails_best_practices/core/error.rb +3 -2
  17. data/lib/rails_best_practices/core/gems.rb +4 -3
  18. data/lib/rails_best_practices/core/helpers.rb +4 -1
  19. data/lib/rails_best_practices/core/klasses.rb +3 -2
  20. data/lib/rails_best_practices/core/mailers.rb +2 -1
  21. data/lib/rails_best_practices/core/methods.rb +9 -10
  22. data/lib/rails_best_practices/core/model_associations.rb +6 -5
  23. data/lib/rails_best_practices/core/model_attributes.rb +2 -1
  24. data/lib/rails_best_practices/core/models.rb +2 -1
  25. data/lib/rails_best_practices/core/modules.rb +2 -1
  26. data/lib/rails_best_practices/core/routes.rb +2 -1
  27. data/lib/rails_best_practices/core/runner.rb +7 -6
  28. data/lib/rails_best_practices/core_ext/erubis.rb +4 -5
  29. data/lib/rails_best_practices/lexicals.rb +2 -1
  30. data/lib/rails_best_practices/lexicals/long_line_check.rb +2 -1
  31. data/lib/rails_best_practices/lexicals/remove_tab_check.rb +2 -1
  32. data/lib/rails_best_practices/lexicals/remove_trailing_whitespace_check.rb +2 -1
  33. data/lib/rails_best_practices/prepares.rb +2 -1
  34. data/lib/rails_best_practices/prepares/config_prepare.rb +3 -2
  35. data/lib/rails_best_practices/prepares/controller_prepare.rb +9 -8
  36. data/lib/rails_best_practices/prepares/gemfile_prepare.rb +2 -1
  37. data/lib/rails_best_practices/prepares/helper_prepare.rb +4 -3
  38. data/lib/rails_best_practices/prepares/initializer_prepare.rb +2 -1
  39. data/lib/rails_best_practices/prepares/mailer_prepare.rb +3 -2
  40. data/lib/rails_best_practices/prepares/model_prepare.rb +12 -12
  41. data/lib/rails_best_practices/prepares/route_prepare.rb +8 -7
  42. data/lib/rails_best_practices/prepares/schema_prepare.rb +3 -2
  43. data/lib/rails_best_practices/reviews.rb +2 -1
  44. data/lib/rails_best_practices/reviews/add_model_virtual_attribute_review.rb +7 -4
  45. data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +8 -7
  46. data/lib/rails_best_practices/reviews/check_destroy_return_value_review.rb +4 -3
  47. data/lib/rails_best_practices/reviews/check_save_return_value_review.rb +5 -4
  48. data/lib/rails_best_practices/reviews/default_scope_is_evil_review.rb +2 -1
  49. data/lib/rails_best_practices/reviews/dry_bundler_in_capistrano_review.rb +2 -1
  50. data/lib/rails_best_practices/reviews/hash_syntax_review.rb +2 -1
  51. data/lib/rails_best_practices/reviews/isolate_seed_data_review.rb +3 -2
  52. data/lib/rails_best_practices/reviews/keep_finders_on_their_own_model_review.rb +3 -2
  53. data/lib/rails_best_practices/reviews/law_of_demeter_review.rb +3 -2
  54. data/lib/rails_best_practices/reviews/move_code_into_controller_review.rb +3 -2
  55. data/lib/rails_best_practices/reviews/move_code_into_helper_review.rb +2 -1
  56. data/lib/rails_best_practices/reviews/move_code_into_model_review.rb +3 -2
  57. data/lib/rails_best_practices/reviews/move_finder_to_named_scope_review.rb +3 -2
  58. data/lib/rails_best_practices/reviews/move_model_logic_into_model_review.rb +3 -2
  59. data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +5 -4
  60. data/lib/rails_best_practices/reviews/not_rescue_exception_review.rb +2 -1
  61. data/lib/rails_best_practices/reviews/not_use_default_route_review.rb +2 -1
  62. data/lib/rails_best_practices/reviews/not_use_time_ago_in_words_review.rb +2 -1
  63. data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +3 -2
  64. data/lib/rails_best_practices/reviews/protect_mass_assignment_review.rb +4 -3
  65. data/lib/rails_best_practices/reviews/remove_empty_helpers_review.rb +2 -1
  66. data/lib/rails_best_practices/reviews/remove_unused_methods_in_controllers_review.rb +11 -10
  67. data/lib/rails_best_practices/reviews/remove_unused_methods_in_helpers_review.rb +4 -3
  68. data/lib/rails_best_practices/reviews/remove_unused_methods_in_models_review.rb +6 -5
  69. data/lib/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review.rb +2 -2
  70. data/lib/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review.rb +2 -1
  71. data/lib/rails_best_practices/reviews/restrict_auto_generated_routes_review.rb +8 -8
  72. data/lib/rails_best_practices/reviews/review.rb +4 -3
  73. data/lib/rails_best_practices/reviews/simplify_render_in_controllers_review.rb +2 -1
  74. data/lib/rails_best_practices/reviews/simplify_render_in_views_review.rb +3 -2
  75. data/lib/rails_best_practices/reviews/use_before_filter_review.rb +5 -4
  76. data/lib/rails_best_practices/reviews/use_model_association_review.rb +2 -2
  77. data/lib/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review.rb +5 -5
  78. data/lib/rails_best_practices/reviews/use_observer_review.rb +2 -1
  79. data/lib/rails_best_practices/reviews/use_parentheses_in_method_def_review.rb +2 -1
  80. data/lib/rails_best_practices/reviews/use_query_attribute_review.rb +4 -3
  81. data/lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb +4 -3
  82. data/lib/rails_best_practices/reviews/use_scope_access_review.rb +2 -1
  83. data/lib/rails_best_practices/reviews/use_turbo_sprockets_rails3_review.rb +2 -1
  84. data/lib/rails_best_practices/version.rb +3 -2
  85. data/rails_best_practices.gemspec +11 -10
  86. data/spec/fixtures/lib/rails_best_practices/plugins/reviews/not_use_rails_root_review.rb +3 -2
  87. data/spec/rails_best_practices/analyzer_spec.rb +6 -8
  88. data/spec/rails_best_practices/core/check_spec.rb +2 -0
  89. data/spec/rails_best_practices/core/checks_loader_spec.rb +2 -0
  90. data/spec/rails_best_practices/core/configs_spec.rb +2 -0
  91. data/spec/rails_best_practices/core/controllers_spec.rb +2 -0
  92. data/spec/rails_best_practices/core/error_spec.rb +2 -0
  93. data/spec/rails_best_practices/core/except_methods_spec.rb +2 -0
  94. data/spec/rails_best_practices/core/gems_spec.rb +2 -0
  95. data/spec/rails_best_practices/core/helpers_spec.rb +2 -0
  96. data/spec/rails_best_practices/core/klasses_spec.rb +2 -0
  97. data/spec/rails_best_practices/core/mailers_spec.rb +2 -0
  98. data/spec/rails_best_practices/core/methods_spec.rb +6 -4
  99. data/spec/rails_best_practices/core/model_associations_spec.rb +4 -2
  100. data/spec/rails_best_practices/core/model_attributes_spec.rb +2 -0
  101. data/spec/rails_best_practices/core/models_spec.rb +2 -0
  102. data/spec/rails_best_practices/core/modules_spec.rb +2 -0
  103. data/spec/rails_best_practices/core/routes_spec.rb +4 -2
  104. data/spec/rails_best_practices/core/runner_spec.rb +2 -0
  105. data/spec/rails_best_practices/core_ext/erubis_spec.rb +3 -1
  106. data/spec/rails_best_practices/lexicals/long_line_check_spec.rb +8 -7
  107. data/spec/rails_best_practices/lexicals/remove_tab_check_spec.rb +8 -6
  108. data/spec/rails_best_practices/lexicals/remove_trailing_whitespace_check_spec.rb +9 -7
  109. data/spec/rails_best_practices/prepares/config_prepare_spec.rb +3 -1
  110. data/spec/rails_best_practices/prepares/controller_prepare_spec.rb +23 -21
  111. data/spec/rails_best_practices/prepares/gemfile_prepare_spec.rb +3 -1
  112. data/spec/rails_best_practices/prepares/helper_prepare_spec.rb +7 -5
  113. data/spec/rails_best_practices/prepares/initializer_prepare_spec.rb +4 -2
  114. data/spec/rails_best_practices/prepares/mailer_prepare_spec.rb +3 -1
  115. data/spec/rails_best_practices/prepares/model_prepare_spec.rb +56 -54
  116. data/spec/rails_best_practices/prepares/route_prepare_spec.rb +39 -37
  117. data/spec/rails_best_practices/prepares/schema_prepare_spec.rb +3 -1
  118. data/spec/rails_best_practices/reviews/add_model_virtual_attribute_review_spec.rb +2 -0
  119. data/spec/rails_best_practices/reviews/always_add_db_index_review_spec.rb +7 -5
  120. data/spec/rails_best_practices/reviews/check_destroy_return_value_review_spec.rb +12 -10
  121. data/spec/rails_best_practices/reviews/check_save_return_value_review_spec.rb +20 -18
  122. data/spec/rails_best_practices/reviews/default_scope_is_evil_review_spec.rb +2 -0
  123. data/spec/rails_best_practices/reviews/dry_bundler_in_capistrano_review_spec.rb +2 -0
  124. data/spec/rails_best_practices/reviews/hash_syntax_review_spec.rb +9 -7
  125. data/spec/rails_best_practices/reviews/isolate_seed_data_review_spec.rb +2 -0
  126. data/spec/rails_best_practices/reviews/keep_finders_on_their_own_model_review_spec.rb +2 -0
  127. data/spec/rails_best_practices/reviews/law_of_demeter_review_spec.rb +2 -0
  128. data/spec/rails_best_practices/reviews/move_code_into_controller_review_spec.rb +2 -0
  129. data/spec/rails_best_practices/reviews/move_code_into_helper_review_spec.rb +2 -0
  130. data/spec/rails_best_practices/reviews/move_code_into_model_review_spec.rb +11 -9
  131. data/spec/rails_best_practices/reviews/move_finder_to_named_scope_review_spec.rb +2 -0
  132. data/spec/rails_best_practices/reviews/move_model_logic_into_model_review_spec.rb +2 -0
  133. data/spec/rails_best_practices/reviews/needless_deep_nesting_review_spec.rb +2 -0
  134. data/spec/rails_best_practices/reviews/not_rescue_exception_review_spec.rb +9 -7
  135. data/spec/rails_best_practices/reviews/not_use_default_route_review_spec.rb +2 -0
  136. data/spec/rails_best_practices/reviews/not_use_time_ago_in_words_review_spec.rb +7 -5
  137. data/spec/rails_best_practices/reviews/overuse_route_customizations_review_spec.rb +2 -0
  138. data/spec/rails_best_practices/reviews/protect_mass_assignment_review_spec.rb +21 -19
  139. data/spec/rails_best_practices/reviews/remove_empty_helpers_review_spec.rb +6 -4
  140. data/spec/rails_best_practices/reviews/remove_unused_methods_in_controllers_review_spec.rb +33 -31
  141. data/spec/rails_best_practices/reviews/remove_unused_methods_in_helpers_review_spec.rb +13 -11
  142. data/spec/rails_best_practices/reviews/remove_unused_methods_in_models_review_spec.rb +65 -63
  143. data/spec/rails_best_practices/reviews/replace_complex_creation_with_factory_method_review_spec.rb +2 -0
  144. data/spec/rails_best_practices/reviews/replace_instance_variable_with_local_variable_review_spec.rb +2 -0
  145. data/spec/rails_best_practices/reviews/restrict_auto_generated_routes_review_spec.rb +24 -22
  146. data/spec/rails_best_practices/reviews/simplify_render_in_controllers_review_spec.rb +9 -7
  147. data/spec/rails_best_practices/reviews/simplify_render_in_views_review_spec.rb +13 -11
  148. data/spec/rails_best_practices/reviews/use_before_filter_review_spec.rb +3 -1
  149. data/spec/rails_best_practices/reviews/use_model_association_review_spec.rb +2 -0
  150. data/spec/rails_best_practices/reviews/use_multipart_alternative_as_content_type_of_email_review_spec.rb +2 -0
  151. data/spec/rails_best_practices/reviews/use_observer_review_spec.rb +7 -5
  152. data/spec/rails_best_practices/reviews/use_parentheses_in_method_def_review_spec.rb +2 -0
  153. data/spec/rails_best_practices/reviews/use_query_attribute_review_spec.rb +3 -1
  154. data/spec/rails_best_practices/reviews/use_say_with_time_in_migrations_review_spec.rb +9 -7
  155. data/spec/rails_best_practices/reviews/use_scope_access_review_spec.rb +2 -0
  156. data/spec/rails_best_practices/reviews/use_turbo_sprockets_rails3_review_spec.rb +2 -0
  157. data/spec/spec_helper.rb +2 -0
  158. 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 =<<-EOF
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 =<<-EOF
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(['used', 'unused'])
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 =<<-EOF
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 =<<-EOF
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 =<<-EOF
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 =<<-EOF
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 =<<-EOF
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 =<<-EOF
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 =<<-EOF
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 =<<-EOF
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 =<<-EOF
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({'meta' => 'belongs_to', 'class_name' => 'Portfolio'})
45
- expect(model_associations.get_association('Project', 'project_manager')).to eq({'meta' => 'has_one', 'class_name' => 'ProjectManager'})
46
- expect(model_associations.get_association('Project', 'milestones')).to eq({'meta' => 'has_many', 'class_name' => 'Milestone'})
47
- expect(model_associations.get_association('Project', 'categories')).to eq({'meta' => 'has_and_belongs_to_many', 'class_name' => 'Category'})
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 =<<-EOF
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({'meta' => 'belongs_to', 'class_name' => 'Person'})
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 =<<-EOF
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({'meta' => 'has_one', 'class_name' => 'Person'})
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 =<<-EOF
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({'meta' => 'has_many', 'class_name' => 'Person'})
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 =<<-EOF
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({'meta' => 'has_and_belongs_to_many', 'class_name' => 'Country'})
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 =<<-EOF
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 =<<-EOF
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({'meta' => 'has_many', 'class_name' => 'Community::Member'})
112
- expect(model_associations.get_association('Community::Member', 'community')).to eq({'meta' => 'belongs_to', 'class_name' => 'Community'})
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 =<<-EOF
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 =<<-EOF
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({'meta' => 'belongs_to', 'class_name' => 'Community::Member'})
131
- expect(model_associations.get_association('Community::Member', 'ratings')).to eq({'meta' => 'has_many', 'class_name' => 'Community::Member::Rating'})
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 =<<-EOF
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({'meta' => 'embeds_many', 'class_name' => 'Address'})
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 =<<-EOF
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({'meta' => 'embeds_one', 'class_name' => 'Drink'})
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 =<<-EOF
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({'meta' => 'embedded_in', 'class_name' => 'Lush'})
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 =<<-EOF
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({'meta' => 'one', 'class_name' => 'Desk'})
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 =<<-EOF
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({'meta' => 'many', 'class_name' => 'Bird'})
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 =<<-EOF
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(['save', 'find'])
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 =<<-EOF
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(['save', 'find', 'create_or_update', 'find_by_sql'])
228
- expect(methods.get_methods('Post', 'public').map(&:method_name)).to eq(['save', 'find'])
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 =<<-EOF
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(['save', 'find'])
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 =<<-EOF
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(['save', 'find'])
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 =<<-EOF
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 =<<-EOF
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 =<<-EOF
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 =<<-EOF
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 =<<-EOF
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 =<<-EOF
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 =<<-EOF
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(['method_with_feature', 'method'])
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 =<<-EOF
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 =<<-EOF
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 =<<-EOF
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!('?', '\'SELECT event_notification_templates.* from event_notification_templates where event_type_id=#{event_type_id} and delivery_method_id=#{delivery_method_id}\'')
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