lib/inch/code_object/proxy/method_object.rb in inch-0.2.3 vs lib/inch/code_object/proxy/method_object.rb in inch-0.3.0.rc1

- old
+ new

@@ -1,37 +1,22 @@ module Inch module CodeObject module Proxy # Proxy class for methods class MethodObject < Base - def constructor? - name == :initialize + self[:constructor?] end - - def comment_and_abbrev_source - comments.join('') + abbrev_source - end def bang_name? - name =~ /\!$/ + self[:bang_name?] end def getter? - attr_info = object.attr_info || {} - read_info = attr_info[:read] - if read_info - read_info.path == path - else - parent.child(:"#{name}=") - end + self[:getter?] end - def has_doc? - super && !implicit_docstring? - end - def has_parameters? !parameters.empty? end MANY_PARAMETERS_THRESHOLD = 3 @@ -40,121 +25,57 @@ end MANY_LINES_THRESHOLD = 20 def has_many_lines? # for now, this includes the 'def' line and comments - if source = object.source + if source size = source.lines.count size > MANY_LINES_THRESHOLD else false end end - def method? - true + def parameter(name) + parameters.detect { |p| p.name == name.to_s } end def parameters - @parameters ||= all_parameter_names.map do |name| - in_signature = signature_parameter_names.include?(name) - tag = parameter_tag(name) - MethodParameterObject.new(self, name, tag, in_signature) + @parameters ||= self[:parameters].map do |param_attr| + MethodParameterObject.new(param_attr) end end - def parameter(name) - parameters.detect { |p| p.name == name.to_s } - end - def overridden? - !!object.overridden_method + self[:overridden?] end def overridden_method - @overridden_method ||= Proxy.for(object.overridden_method) + @overridden_method ||= object_lookup.find(self[:overridden_method_fullname]) end def return_mentioned? - !!return_tag || docstring.mentions_return? + self[:return_mentioned?] end def return_described? - (return_tag && !return_tag.text.empty?) || docstring.describes_return? + self[:return_described?] end - def setter? - name =~ /\=$/ && parameters.size == 1 + def return_typed? + self[:return_typed?] end - def questioning_name? - name =~ /\?$/ + def setter? + self[:setter?] end - private - - def all_parameter_names - names = signature_parameter_names - names.concat parameter_tags.map(&:name) - names.compact.uniq + def source + self[:source?] end - def abbrev_source - lines = object.source.to_s.lines.to_a - if lines.size >= 5 - indent = lines[1].scan(/^(\s+)/).flatten.join('') - lines = lines[0..1] + - ["#{indent}# ... snip ...\n"] + - lines[-2..-1] - end - lines.join('') - end - - def comments - @comments ||= files.map do |(filename, line_no)| - get_lines_up_while(filename, line_no - 1) do |line| - line =~ /^\s*#/ - end.flatten.join('') - end - end - - def get_lines_up_while(filename, line_no, &block) - lines = [] - line = get_line_no(filename, line_no) - if yield(line) && line_no > 0 - lines << line.gsub(/^(\s+)/, '') - lines << get_lines_up_while(filename, line_no - 1, &block) - end - lines.reverse - end - - def implicit_docstring? - if getter? - docstring == "Returns the value of attribute #{name}" - elsif setter? - basename = name.to_s.gsub(/(\=)$/, '') - docstring == "Sets the attribute #{basename}" - else - false - end - end - - def signature_parameter_names - object.parameters.map(&:first) - end - - def parameter_tag(param_name) - parameter_tags.detect do |tag| - tag.name == param_name - end - end - - def parameter_tags - object.tags(:param) - end - - def return_tag - object.tags(:return).first + def questioning_name? + self[:questioning_name?] end end end end end