rails_best_practices 1.14.0 → 1.14.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +0 -1
- data/README.md +4 -3
- data/lib/rails_best_practices/core/check.rb +1 -1
- data/lib/rails_best_practices/core/methods.rb +5 -4
- data/lib/rails_best_practices/prepares/controller_prepare.rb +5 -5
- data/lib/rails_best_practices/prepares/helper_prepare.rb +3 -3
- data/lib/rails_best_practices/prepares/model_prepare.rb +12 -12
- data/lib/rails_best_practices/reviews/always_add_db_index_review.rb +1 -1
- data/lib/rails_best_practices/reviews/move_code_into_controller_review.rb +1 -1
- data/lib/rails_best_practices/reviews/needless_deep_nesting_review.rb +1 -1
- data/lib/rails_best_practices/reviews/not_rescue_exception_review.rb +1 -1
- data/lib/rails_best_practices/reviews/overuse_route_customizations_review.rb +2 -2
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_controllers_review.rb +1 -1
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_helpers_review.rb +1 -1
- data/lib/rails_best_practices/reviews/remove_unused_methods_in_models_review.rb +1 -1
- data/lib/rails_best_practices/reviews/use_before_filter_review.rb +7 -7
- data/lib/rails_best_practices/reviews/use_query_attribute_review.rb +1 -1
- data/lib/rails_best_practices/reviews/use_say_with_time_in_migrations_review.rb +1 -1
- data/lib/rails_best_practices/version.rb +1 -1
- data/rails_best_practices.gemspec +1 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9d6e0107b4ea24053498f1c9996cf1109cd7f7ca
|
4
|
+
data.tar.gz: 136b20157ca9b1f557d69955fc320e018be97749
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c565ecd5732afe084d926f71fdd4780e4a6201d79f6fa9406a5acf115faced692731935b042b87ee7915e76adab2cce1fe481c00e718002e913854199cd21f89
|
7
|
+
data.tar.gz: 0d9f67c5435ee528e2f0f17ad1d866bb3f4ee88c340ece9732002ea8247a5f21ec3a4417eda96c994f45e43f353020cf59959f809012a875d2055c37cf6fe9fe
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,10 +1,11 @@
|
|
1
1
|
# rails_best_practices
|
2
2
|
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/rails_best_practices.png)](http://badge.fury.io/rb/rails_best_practices)
|
3
4
|
[![Build Status](https://secure.travis-ci.org/railsbp/rails_best_practices.png)](http://travis-ci.org/railsbp/rails_best_practices)
|
4
|
-
[![Coverage
|
5
|
-
|
6
|
-
[![Coderwall Endorse](http://api.coderwall.com/flyerhzm/endorsecount.png)](http://coderwall.com/flyerhzm)
|
5
|
+
[![Coverage Status](https://coveralls.io/repos/railsbp/rails_best_practices/badge.png?branch=master)](https://coveralls.io/r/railsbp/rails_best_practices)
|
6
|
+
[![Code Climate](https://codeclimate.com/repos/51eb7073f3ea00179b00db0b/badges/095127e7bb641dbc825b/gpa.png)](https://codeclimate.com/repos/51eb7073f3ea00179b00db0b/feed)
|
7
7
|
|
8
|
+
[![Coderwall Endorse](http://api.coderwall.com/flyerhzm/endorsecount.png)](http://coderwall.com/flyerhzm)
|
8
9
|
[![Click here to lend your support to: rails best practices and make a donation at www.pledgie.com !](http://www.pledgie.com/campaigns/12057.png?skin_name=chrome)](http://www.pledgie.com/campaigns/12057)
|
9
10
|
|
10
11
|
rails_best_practices is a code metric tool to check the quality of rails codes.
|
@@ -46,7 +46,7 @@ module RailsBestPractices
|
|
46
46
|
# @param [String] message, is the string message for violation of the rails best practice
|
47
47
|
# @param [String] filename, is the filename of source code
|
48
48
|
# @param [Integer] line_number, is the line number of the source code which is reviewing
|
49
|
-
def add_error(message, filename = @node.file, line_number = @node.
|
49
|
+
def add_error(message, filename = @node.file, line_number = @node.line_number)
|
50
50
|
errors << RailsBestPractices::Core::Error.new(
|
51
51
|
filename: filename,
|
52
52
|
line_number: line_number,
|
@@ -12,7 +12,7 @@ module RailsBestPractices
|
|
12
12
|
#
|
13
13
|
# @param [String] class name
|
14
14
|
# @param [String] method name
|
15
|
-
# @param [Hash] method meta, file and line, {"file" => "app/models/post.rb", "
|
15
|
+
# @param [Hash] method meta, file and line, {"file" => "app/models/post.rb", "line_number" => 5}
|
16
16
|
# @param [String] access control, public, protected or private
|
17
17
|
def add_method(class_name, method_name, meta={}, access_control="public")
|
18
18
|
return if class_name == ""
|
@@ -141,15 +141,15 @@ module RailsBestPractices
|
|
141
141
|
end
|
142
142
|
end
|
143
143
|
|
144
|
-
# Method info includes class name, method name, access control, file,
|
144
|
+
# Method info includes class name, method name, access control, file, line_number, used.
|
145
145
|
class Method
|
146
|
-
attr_reader :access_control, :class_name, :method_name, :used, :file, :
|
146
|
+
attr_reader :access_control, :class_name, :method_name, :used, :file, :line_number
|
147
147
|
|
148
148
|
def initialize(class_name, method_name, access_control, meta)
|
149
149
|
@class_name = class_name
|
150
150
|
@method_name = method_name
|
151
151
|
@file = meta["file"]
|
152
|
-
@
|
152
|
+
@line_number = meta["line_number"]
|
153
153
|
@access_control = access_control
|
154
154
|
@used = false
|
155
155
|
end
|
@@ -163,6 +163,7 @@ module RailsBestPractices
|
|
163
163
|
def publicize
|
164
164
|
@access_control = "public"
|
165
165
|
end
|
166
|
+
|
166
167
|
end
|
167
168
|
end
|
168
169
|
end
|
@@ -32,7 +32,7 @@ module RailsBestPractices
|
|
32
32
|
add_callback :end_class do |node|
|
33
33
|
if @inherited_resources && "ApplicationController" != current_class_name
|
34
34
|
@actions.each do |action|
|
35
|
-
@methods.add_method(current_class_name, action, {"file" => node.file, "
|
35
|
+
@methods.add_method(current_class_name, action, {"file" => node.file, "line_number" => node.line_number})
|
36
36
|
end
|
37
37
|
end
|
38
38
|
end
|
@@ -73,16 +73,16 @@ module RailsBestPractices
|
|
73
73
|
# the remembered methods (@methods) are like
|
74
74
|
# {
|
75
75
|
# "PostsController" => {
|
76
|
-
# "save" => {"file" => "app/controllers/posts_controller.rb", "
|
77
|
-
# "find" => {"file" => "app/controllers/posts_controller.rb", "
|
76
|
+
# "save" => {"file" => "app/controllers/posts_controller.rb", "line_number" => 10, "unused" => false},
|
77
|
+
# "find" => {"file" => "app/controllers/posts_controller.rb", "line_number" => 10, "unused" => false}
|
78
78
|
# },
|
79
79
|
# "CommentsController" => {
|
80
|
-
# "create" => {"file" => "app/controllers/comments_controller.rb", "
|
80
|
+
# "create" => {"file" => "app/controllers/comments_controller.rb", "line_number" => 10, "unused" => false},
|
81
81
|
# }
|
82
82
|
# }
|
83
83
|
add_callback :start_def do |node|
|
84
84
|
method_name = node.method_name.to_s
|
85
|
-
@methods.add_method(current_class_name, method_name, {"file" => node.file, "
|
85
|
+
@methods.add_method(current_class_name, method_name, {"file" => node.file, "line_number" => node.line_number}, current_access_control)
|
86
86
|
end
|
87
87
|
|
88
88
|
# ask Reviews::RemoveUnusedMoethodsInHelperReview to check the controllers who include helpers.
|
@@ -24,14 +24,14 @@ module RailsBestPractices
|
|
24
24
|
# the remembered methods (@methods) are like
|
25
25
|
# {
|
26
26
|
# "PostsHelper" => {
|
27
|
-
# "create_time" => {"file" => "app/helpers/posts_helper.rb", "
|
28
|
-
# "update_time" => {"file" => "app/helpers/posts_helper.rb", "
|
27
|
+
# "create_time" => {"file" => "app/helpers/posts_helper.rb", "line_number" => 10, "unused" => false},
|
28
|
+
# "update_time" => {"file" => "app/helpers/posts_helper.rb", "line_number" => 10, "unused" => false}
|
29
29
|
# }
|
30
30
|
# }
|
31
31
|
add_callback :start_def do |node|
|
32
32
|
if node.file =~ HELPER_FILES
|
33
33
|
method_name = node.method_name.to_s
|
34
|
-
@methods.add_method(current_module_name, method_name, {"file" => node.file, "
|
34
|
+
@methods.add_method(current_module_name, method_name, {"file" => node.file, "line_number" => node.line_number}, current_access_control)
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -30,11 +30,11 @@ module RailsBestPractices
|
|
30
30
|
# the remembered methods (@methods) are like
|
31
31
|
# {
|
32
32
|
# "Post" => {
|
33
|
-
# "save" => {"file" => "app/models/post.rb", "
|
34
|
-
# "find" => {"file" => "app/models/post.rb", "
|
33
|
+
# "save" => {"file" => "app/models/post.rb", "line_number" => 10, "unused" => false, "unused" => false},
|
34
|
+
# "find" => {"file" => "app/models/post.rb", "line_number" => 10, "unused" => false, "unused" => false}
|
35
35
|
# },
|
36
36
|
# "Comment" => {
|
37
|
-
# "create" => {"file" => "app/models/comment.rb", "
|
37
|
+
# "create" => {"file" => "app/models/comment.rb", "line_number" => 10, "unused" => false, "unused" => false},
|
38
38
|
# }
|
39
39
|
# }
|
40
40
|
add_callback :start_def do |node|
|
@@ -42,7 +42,7 @@ module RailsBestPractices
|
|
42
42
|
"ActionMailer::Base" != current_extend_class_name &&
|
43
43
|
(classable_modules.empty? || klasses.any?)
|
44
44
|
method_name = node.method_name.to_s
|
45
|
-
@methods.add_method(current_class_name, method_name, {"file" => node.file, "
|
45
|
+
@methods.add_method(current_class_name, method_name, {"file" => node.file, "line_number" => node.line_number}, current_access_control)
|
46
46
|
end
|
47
47
|
end
|
48
48
|
|
@@ -51,17 +51,17 @@ module RailsBestPractices
|
|
51
51
|
# the remembered methods (@methods) are like
|
52
52
|
# {
|
53
53
|
# "Post" => {
|
54
|
-
# "save" => {"file" => "app/models/post.rb", "
|
55
|
-
# "find" => {"file" => "app/models/post.rb", "
|
54
|
+
# "save" => {"file" => "app/models/post.rb", "line_number" => 10, "unused" => false, "unused" => false},
|
55
|
+
# "find" => {"file" => "app/models/post.rb", "line_number" => 10, "unused" => false, "unused" => false}
|
56
56
|
# },
|
57
57
|
# "Comment" => {
|
58
|
-
# "create" => {"file" => "app/models/comment.rb", "
|
58
|
+
# "create" => {"file" => "app/models/comment.rb", "line_number" => 10, "unused" => false, "unused" => false},
|
59
59
|
# }
|
60
60
|
# }
|
61
61
|
add_callback :start_defs do |node|
|
62
62
|
if @klass && "ActionMailer::Base" != current_extend_class_name
|
63
63
|
method_name = node.method_name.to_s
|
64
|
-
@methods.add_method(current_class_name, method_name, {"file" => node.file, "
|
64
|
+
@methods.add_method(current_class_name, method_name, {"file" => node.file, "line_number" => node.line_number}, current_access_control)
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
@@ -80,11 +80,11 @@ module RailsBestPractices
|
|
80
80
|
case node.message.to_s
|
81
81
|
when *%w(named_scope scope alias_method)
|
82
82
|
method_name = node.arguments.all.first.to_s
|
83
|
-
@methods.add_method(current_class_name, method_name, {"file" => node.file, "
|
83
|
+
@methods.add_method(current_class_name, method_name, {"file" => node.file, "line_number" => node.line_number}, current_access_control)
|
84
84
|
when "alias_method_chain"
|
85
85
|
method, feature = *node.arguments.all.map(&:to_s)
|
86
|
-
@methods.add_method(current_class_name, "#{method}_with_#{feature}", {"file" => node.file, "
|
87
|
-
@methods.add_method(current_class_name, "#{method}", {"file" => node.file, "
|
86
|
+
@methods.add_method(current_class_name, "#{method}_with_#{feature}", {"file" => node.file, "line_number" => node.line_number}, current_access_control)
|
87
|
+
@methods.add_method(current_class_name, "#{method}", {"file" => node.file, "line_number" => node.line_number}, current_access_control)
|
88
88
|
when "field"
|
89
89
|
arguments = node.arguments.all
|
90
90
|
attribute_name = arguments.first.to_s
|
@@ -102,7 +102,7 @@ module RailsBestPractices
|
|
102
102
|
# check alias node to remembr the alias methods.
|
103
103
|
add_callback :start_alias do |node|
|
104
104
|
method_name = node.new_method.to_s
|
105
|
-
@methods.add_method(current_class_name, method_name, {"file" => node.file, "
|
105
|
+
@methods.add_method(current_class_name, method_name, {"file" => node.file, "line_number" => node.line_number}, current_access_control)
|
106
106
|
end
|
107
107
|
|
108
108
|
# after prepare process, fix incorrect associations' class_name.
|
@@ -74,7 +74,7 @@ module RailsBestPractices
|
|
74
74
|
table_node = @table_nodes[table]
|
75
75
|
foreign_key.each do |column|
|
76
76
|
if not_indexed?(table, column)
|
77
|
-
add_error "always add db index (#{table} => [#{Array(column).join(', ')}])", table_node.file, table_node.
|
77
|
+
add_error "always add db index (#{table} => [#{Array(column).join(', ')}])", table_node.file, table_node.line_number
|
78
78
|
end
|
79
79
|
end
|
80
80
|
end
|
@@ -31,7 +31,7 @@ module RailsBestPractices
|
|
31
31
|
# and the message of the right value node is one of the find, all, first and last,
|
32
32
|
# then it is a finder and should be moved to controller.
|
33
33
|
add_callback :start_assign do |node|
|
34
|
-
add_error "move code into controller", node.file, node.right_value.
|
34
|
+
add_error "move code into controller", node.file, node.right_value.line_number if finder?(node.right_value)
|
35
35
|
end
|
36
36
|
|
37
37
|
private
|
@@ -70,7 +70,7 @@ module RailsBestPractices
|
|
70
70
|
end
|
71
71
|
@counter -= 1
|
72
72
|
elsif [:command_call, :command].include?(node.sexp_type) && ["resources", "resource"].include?(node.message.to_s)
|
73
|
-
add_error "needless deep nesting (nested_count > #{@nested_count})", @file, node.
|
73
|
+
add_error "needless deep nesting (nested_count > #{@nested_count})", @file, node.line_number if @counter >= @nested_count && !@shallow_nodes.include?(node)
|
74
74
|
end
|
75
75
|
end
|
76
76
|
end
|
@@ -18,7 +18,7 @@ module RailsBestPractices
|
|
18
18
|
# check rescue node to see if its type is Exception
|
19
19
|
add_callback :start_rescue do |rescue_node|
|
20
20
|
if rescue_node.exception_classes.any? { |rescue_class| "Exception" == rescue_class.to_s }
|
21
|
-
add_error "not rescue Exception", rescue_node.file, rescue_node.exception_classes.first.
|
21
|
+
add_error "not rescue Exception", rescue_node.file, rescue_node.exception_classes.first.line_number
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -46,7 +46,7 @@ module RailsBestPractices
|
|
46
46
|
# then they are overuse route customizations.
|
47
47
|
add_callback :start_command_call do |node|
|
48
48
|
if member_and_collection_count_for_rails2(node) > @customize_count
|
49
|
-
add_error "overuse route customizations (customize_count > #{@customize_count})", node.file, node.receiver.
|
49
|
+
add_error "overuse route customizations (customize_count > #{@customize_count})", node.file, node.receiver.line_number
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -59,7 +59,7 @@ module RailsBestPractices
|
|
59
59
|
# then they are overuse route customizations.
|
60
60
|
add_callback :start_method_add_block do |node|
|
61
61
|
if member_and_collection_count_for_rails3(node) > @customize_count
|
62
|
-
add_error "overuse route customizations (customize_count > #{@customize_count})", node.file, node.
|
62
|
+
add_error "overuse route customizations (customize_count > #{@customize_count})", node.file, node.line_number
|
63
63
|
end
|
64
64
|
end
|
65
65
|
|
@@ -94,7 +94,7 @@ module RailsBestPractices
|
|
94
94
|
end
|
95
95
|
@controller_methods.get_all_unused_methods.each do |method|
|
96
96
|
if !excepted?(method)
|
97
|
-
add_error "remove unused methods (#{method.class_name}##{method.method_name})", method.file, method.
|
97
|
+
add_error "remove unused methods (#{method.class_name}##{method.method_name})", method.file, method.line_number
|
98
98
|
end
|
99
99
|
end
|
100
100
|
end
|
@@ -26,7 +26,7 @@ module RailsBestPractices
|
|
26
26
|
add_callback :after_check do
|
27
27
|
@helper_methods.get_all_unused_methods.each do |method|
|
28
28
|
if !excepted?(method)
|
29
|
-
add_error "remove unused methods (#{method.class_name}##{method.method_name})", method.file, method.
|
29
|
+
add_error "remove unused methods (#{method.class_name}##{method.method_name})", method.file, method.line_number
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
@@ -80,7 +80,7 @@ module RailsBestPractices
|
|
80
80
|
add_callback :after_check do
|
81
81
|
@model_methods.get_all_unused_methods.each do |method|
|
82
82
|
if !excepted?(method) && method.method_name !~ /=$/
|
83
|
-
add_error "remove unused methods (#{method.class_name}##{method.method_name})", method.file, method.
|
83
|
+
add_error "remove unused methods (#{method.class_name}##{method.method_name})", method.file, method.line_number
|
84
84
|
end
|
85
85
|
end
|
86
86
|
end
|
@@ -2,14 +2,14 @@
|
|
2
2
|
module RailsBestPractices
|
3
3
|
module Reviews
|
4
4
|
# Review a controller file to make sure to use before_filter to remove duplicated first code
|
5
|
-
#
|
5
|
+
# line_number in different action.
|
6
6
|
#
|
7
7
|
# See the best practice detailed here http://rails-bestpractices.com/posts/22-use-before_filter.
|
8
8
|
#
|
9
9
|
# Implementation:
|
10
10
|
#
|
11
11
|
# Review process:
|
12
|
-
# check all first code
|
12
|
+
# check all first code line_number in method definitions (actions),
|
13
13
|
# if they are duplicated, then they should be moved to before_filter.
|
14
14
|
class UseBeforeFilterReview < Review
|
15
15
|
interesting_nodes :class
|
@@ -21,11 +21,11 @@ module RailsBestPractices
|
|
21
21
|
@customize_count = options['customize_count'] || 2
|
22
22
|
end
|
23
23
|
|
24
|
-
# check class define node to see if there are method define nodes whose first code
|
24
|
+
# check class define node to see if there are method define nodes whose first code line_number are duplicated.
|
25
25
|
#
|
26
26
|
# it will check every def nodes in the class node until protected or private identification,
|
27
|
-
# if there are defn nodes who have the same first code
|
28
|
-
# then these duplicated first code
|
27
|
+
# if there are defn nodes who have the same first code line_number,
|
28
|
+
# then these duplicated first code line_numbers should be moved to before_filter.
|
29
29
|
add_callback :start_class do |node|
|
30
30
|
@first_sentences = {}
|
31
31
|
|
@@ -39,7 +39,7 @@ module RailsBestPractices
|
|
39
39
|
if def_nodes.size > @customize_count
|
40
40
|
add_error "use before_filter for #{def_nodes.map { |node| node.method_name.to_s }.join(',')}",
|
41
41
|
node.file,
|
42
|
-
def_nodes.map(&:
|
42
|
+
def_nodes.map(&:line_number).join(',')
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -49,7 +49,7 @@ module RailsBestPractices
|
|
49
49
|
def remember_first_sentence(node)
|
50
50
|
first_sentence = node.body.statements.first
|
51
51
|
return unless first_sentence
|
52
|
-
first_sentence = first_sentence.
|
52
|
+
first_sentence = first_sentence.remove_line_number_and_column
|
53
53
|
unless first_sentence == s(:nil)
|
54
54
|
@first_sentences[first_sentence] ||= []
|
55
55
|
@first_sentences[first_sentence] << node
|
@@ -43,7 +43,7 @@ module RailsBestPractices
|
|
43
43
|
receiver_node = query_attribute_node.receiver
|
44
44
|
add_error "use query attribute (#{receiver_node.receiver}.#{receiver_node.message}?)",
|
45
45
|
node.file,
|
46
|
-
query_attribute_node.
|
46
|
+
query_attribute_node.line_number
|
47
47
|
end
|
48
48
|
end
|
49
49
|
end
|
@@ -39,7 +39,7 @@ module RailsBestPractices
|
|
39
39
|
child_node
|
40
40
|
end
|
41
41
|
if :call == receiver_node.sexp_type
|
42
|
-
add_error("use say with time in migrations", node.file, child_node.
|
42
|
+
add_error("use say with time in migrations", node.file, child_node.line_number)
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
|
|
16
16
|
|
17
17
|
s.add_dependency("activesupport")
|
18
18
|
s.add_dependency("awesome_print")
|
19
|
-
s.add_dependency("code_analyzer")
|
19
|
+
s.add_dependency("code_analyzer", ">= 0.4.0")
|
20
20
|
s.add_dependency("colored")
|
21
21
|
s.add_dependency("erubis")
|
22
22
|
s.add_dependency("i18n")
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_best_practices
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.14.
|
4
|
+
version: 1.14.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Huang
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-08-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -44,14 +44,14 @@ dependencies:
|
|
44
44
|
requirements:
|
45
45
|
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 0.4.0
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 0.4.0
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: colored
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -398,7 +398,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
398
398
|
version: 1.3.6
|
399
399
|
requirements: []
|
400
400
|
rubyforge_project:
|
401
|
-
rubygems_version: 2.0.
|
401
|
+
rubygems_version: 2.0.6
|
402
402
|
signing_key:
|
403
403
|
specification_version: 4
|
404
404
|
summary: a code metric tool for rails codes.
|