lib/inch/evaluation/method_object.rb in inch-0.1.4 vs lib/inch/evaluation/method_object.rb in inch-0.2.0
- old
+ new
@@ -1,20 +1,43 @@
module Inch
module Evaluation
class MethodObject < Base
- DOC_SCORE = 50
- EXAMPLE_SCORE = 10
- MULTIPLE_EXAMPLES_SCORE = 25
- PARAM_SCORE = 40
- RETURN_SCORE = 10
-
def evaluate
eval_doc
eval_parameters
eval_return_type
eval_code_example
+ eval_method
+ eval_misc
+ end
+ private
+
+ def eval_doc
+ if object.has_doc?
+ add_role Role::Object::WithDoc.new(object, score_for(:docstring))
+ else
+ add_role Role::Object::WithoutDoc.new(object, score_for(:docstring))
+ end
+ end
+
+ def eval_code_example
+ if object.has_code_example?
+ if object.has_multiple_code_examples?
+ add_role Role::Object::WithMultipleCodeExamples.new(object, score_for(:code_example_multi))
+ else
+ add_role Role::Object::WithCodeExample.new(object, score_for(:code_example_single))
+ end
+ else
+ add_role Role::Object::WithoutCodeExample.new(object, score_for(:code_example_single))
+ end
+ end
+
+ def eval_method
+ if object.constructor?
+ add_role Role::Method::Constructor.new(object)
+ end
if object.overridden?
add_role Role::Method::Overridden.new(object, object.overridden_method.score)
end
if object.has_many_lines?
add_role Role::Method::WithManyLines.new(object)
@@ -26,16 +49,26 @@
add_role Role::Method::WithQuestioningName.new(object)
end
if object.has_alias?
add_role Role::Method::HasAlias.new(object)
end
+ end
+
+ def eval_misc
if object.nodoc?
add_role Role::Object::TaggedAsNodoc.new(object)
end
+ if object.api_tag?
+ if object.private_api_tag?
+ add_role Role::Object::TaggedAsPrivateAPI.new(object)
+ else
+ add_role Role::Object::TaggedAsAPI.new(object)
+ end
+ end
if object.has_unconsidered_tags?
count = object.unconsidered_tags.size
- add_role Role::Object::Tagged.new(object, TAGGED_SCORE * count)
+ add_role Role::Object::Tagged.new(object, score_for(:unconsidered_tag) * count)
end
if object.in_root?
add_role Role::Object::InRoot.new(object)
end
if object.public?
@@ -47,53 +80,31 @@
if object.private?
add_role Role::Object::Private.new(object)
end
end
- private
-
- def eval_doc
- if object.has_doc?
- add_role Role::Object::WithDoc.new(object, DOC_SCORE)
- else
- add_role Role::Object::WithoutDoc.new(object, DOC_SCORE)
- end
- end
-
- def eval_code_example
- if object.has_code_example?
- if object.has_multiple_code_examples?
- add_role Role::Object::WithMultipleCodeExamples.new(object, MULTIPLE_EXAMPLES_SCORE)
- else
- add_role Role::Object::WithCodeExample.new(object, EXAMPLE_SCORE)
- end
- else
- add_role Role::Object::WithoutCodeExample.new(object, EXAMPLE_SCORE)
- end
- end
-
def eval_parameters
if object.has_parameters?
eval_all_parameters
else
eval_no_parameters
end
end
def eval_no_parameters
if score > min_score
- add_role Role::Method::WithoutParameters.new(object, PARAM_SCORE)
+ add_role Role::Method::WithoutParameters.new(object, score_for(:parameters))
end
end
def eval_all_parameters
params = object.parameters
- per_param = PARAM_SCORE.to_f / params.size
+ per_param = score_for(:parameters) / params.size
params.each do |param|
if param.mentioned?
if param.wrongly_mentioned?
- add_role Role::MethodParameter::WithWrongMention.new(param, -PARAM_SCORE)
+ add_role Role::MethodParameter::WithWrongMention.new(param, -score_for(:parameters))
else
add_role Role::MethodParameter::WithMention.new(param, per_param * 0.5)
end
else
add_role Role::MethodParameter::WithoutMention.new(param, per_param * 0.5)
@@ -118,20 +129,17 @@
end
end
def eval_return_type
if object.return_mentioned?
- if object.questioning_name? && !object.return_described?
- # annotating a question mark method with the return type boolean
- # does not give any points
- # also, this could to be one of those cases where YARD
- # automatically assigns a @return tag to methods ending in a
- # question mark
- else
- add_role Role::Method::WithReturnType.new(object, RETURN_SCORE)
- end
+ add_role Role::Method::WithReturnType.new(object, score_for(:return_type))
else
- add_role Role::Method::WithoutReturnType.new(object, RETURN_SCORE)
+ add_role Role::Method::WithoutReturnType.new(object, score_for(:return_type))
+ end
+ if object.return_described?
+ add_role Role::Method::WithReturnDescription.new(object, score_for(:return_description))
+ else
+ add_role Role::Method::WithoutReturnDescription.new(object, score_for(:return_description))
end
end
end
end
end