Sha256: f0b52af98ffe2f9ebc1fcddee22bd716778b8f221605ec40f213ffa673ccdabb

Contents?: true

Size: 1.46 KB

Versions: 1

Compression:

Stored size: 1.46 KB

Contents

# encoding: utf-8
require 'open_classes/string'

# Kernel
module Kernel
  # Ascii Art Ancestors
  #
  # === Examples
  #
  # define class
  #
  #   class BaseHogeForAncestors;end
  #   class HogeForAncestors < BaseHogeForAncestors;end
  #
  # execute aa_ancestors
  #
  #   puts HogeForAncestors.aa_ancestors
  #
  # result is ...
  #
  #   ----------------------
  #   |     BasicObject    |
  #   ----------------------
  #             |
  #   ----------------------
  #   |       Kernel       |
  #   ----------------------
  #             |
  #   ----------------------
  #   |       Object       |
  #   ----------------------
  #             |
  #   ----------------------
  #   |BaseHogeForAncestors|
  #   ----------------------
  #             |
  #   ----------------------
  #   |  HogeForAncestors  |
  #   ----------------------
  def aa_ancestors
    max_class = max_size_class
    max = max_class.to_s.size
    ca = centered_ancestors(max)
    ba = surrounded_ancestors(ca)
    connected_box_ancestors(ba, max)
  end

  private

    def max_size_class
      ancestors.max_by {|v|v.to_s.size}
    end

    def centered_ancestors(max)
      ancestors.reverse.map {|v|v.to_s.center max}
    end

    def surrounded_ancestors(ca)
      ca.reduce([]) {|ret, k|ret << k.surround}
    end

    def connected_box_ancestors(ba, max)
      ba.join(ancestors_connector(max))
    end

    def ancestors_connector(max)
      connector = "|".rjust((max + 2)/2)
      "\n#{connector}\n"
    end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tbpgr_utils-0.0.40 lib/open_classes/kernel/aa_ancestors.rb