class Rin

Public Class Methods

instance() click to toggle source
# File lib/rin.rb, line 6
def self.instance
  @instance ||= begin
    instance = new(10)
    instance.enable!
    instance
  end
end
new(base) click to toggle source
# File lib/rin.rb, line 14
def initialize(base)
  @base = base
  @inspects = {
    Fixnum => Fixnum.instance_method(:inspect),
    Bignum => Bignum.instance_method(:inspect),
  }
end

Public Instance Methods

base(set_base=false, &block) click to toggle source

uhm… returns the base if no base is given if base is given, it sets the base to that and calls the block

# File lib/rin.rb, line 38
def base(set_base=false, &block)
  return @base unless set_base
  temporary_base set_base, &block
end
bin(&block) click to toggle source
# File lib/rin.rb, line 63
def bin(&block)
  temporary_base 2, &block
end
bin!() click to toggle source
# File lib/rin.rb, line 67
def bin!
  @base = 2
end
dec(&block) click to toggle source
# File lib/rin.rb, line 71
def dec(&block)
  temporary_base 10, &block
end
dec!() click to toggle source
# File lib/rin.rb, line 75
def dec!
  @base = 10
end
disable!() click to toggle source
# File lib/rin.rb, line 22
def disable!
  @inspects.each do |klass, original|
    define_inspect klass, original
  end
end
enable!() click to toggle source
# File lib/rin.rb, line 28
def enable!
  @inspects.each do |klass, _original|
    define_inspect klass, Proc.new {
      Rin.instance.inspect_num self
    }
  end
end
hex(&block) click to toggle source
# File lib/rin.rb, line 47
def hex(&block)
  temporary_base 16, &block
end
hex!() click to toggle source
# File lib/rin.rb, line 51
def hex!
  @base = 16
end
inspect_num(n) click to toggle source
# File lib/rin.rb, line 43
def inspect_num(n)
  n.to_s(@base).upcase
end
oct(&block) click to toggle source
# File lib/rin.rb, line 55
def oct(&block)
  temporary_base 8, &block
end
oct!() click to toggle source
# File lib/rin.rb, line 59
def oct!
  @base = 8
end

Private Instance Methods

define_inspect(klass, method_def) click to toggle source
# File lib/rin.rb, line 81
def define_inspect(klass, method_def)
  klass.class_eval do
    define_method :inspect, method_def
  end
end
temporary_base(overriden_base, &block) click to toggle source
# File lib/rin.rb, line 87
def temporary_base(overriden_base, &block)
  validate_base! overriden_base
  initial_base = @base
  @base = overriden_base
  block.call
ensure
  @base = initial_base if initial_base # don't reset to nil, when error is raised
end
validate_base!(base) click to toggle source
# File lib/rin.rb, line 96
def validate_base!(base)
  1.to_s base
rescue ArgumentError
  raise ArgumentError, "Invalid base: #{base.inspect}"
end