Sha256: be50a68fa412563d9228f4cf80173c5aa43f3d3fcdc5ead67bc1e6b3ff5927dc

Contents?: true

Size: 1.05 KB

Versions: 1

Compression:

Stored size: 1.05 KB

Contents

module Mmmm

  class FileLineMethod
    attr_reader :file, :line, :method
    def initialize src_loc, m
      @file = src_loc[0]
      @line = src_loc[1]
      @method = m
    end
  end

  class << self

    def [](obj, method = nil)
      return src_loc obj, method if method
      all_src_loc obj
      nil
    end

    private

    def src_loc obj, method
      file, line = obj.method(method).source_location
      puts [cyan(file), line].join ' '
    end

    def all_src_loc obj
      file = nil
      file_line_method_arr(obj).sort_by do |flm|
        [flm.file, flm.line]
      end.each do |flm|
        unless file == flm.file
          file = flm.file
          puts cyan file
        end
        puts [format('%5d', flm.line), flm.method].join ' '
      end
    end

    def file_line_method_arr obj
      obj.methods.reduce([]) do |rs, m|
        file_line = obj.method(m).source_location
        if file_line
          rs << FileLineMethod.new(file_line, m)
        end
        rs
      end
    end

    def cyan str
      "\e[36m#{str}\e[0m"
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
mmmm-0.1.0 lib/mmmm/src_loc.rb