module Kernel

Kernel

Kernel

Kernel

Kernel

Kernel

Kernel

Kernel

Public Instance Methods

aa_ancestors() click to toggle source

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  |
----------------------
# File lib/open_classes/kernel/aa_ancestors.rb, line 40
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
bulk_define_methods(classes, methods, constants) click to toggle source

define methods to classes. methods have simple return value.

bulk_define_methods [NilClass, FalseClass], :blank?, true
bulk_define_methods [TrueClass, Numeric], "blank?", false

puts nil.blank?   # => true
puts false.blank? # => true
puts true.blank?  # => false
puts 1.blank?     # => false

bulk_define_methods [NilClass, FalseClass], [:blank?, :present?], [true, false]
bulk_define_methods [TrueClass, Numeric], [:blank?, :present?], [false, true]

puts nil.blank?     # => true
puts nil.present?   # => false
puts false.blank?   # => true
puts false.present? # => false
puts true.blank?    # => false
puts true.present?  # => true
puts 1.blank?       # => false
puts 1.present?     # => true

bulk_define_methods NilClass, :blank?, true is same as following code

class NilClass
  def blank?
    true
  end
end
# File lib/open_classes/kernel/bulk_define_methods.rb, line 34
def bulk_define_methods(classes, methods, constants)
  validate_bulk_define_classes!(classes)
  validate_bulk_define_methods!(methods)
  size = get_classes_size(classes)
  tmp_classes = fill_same_values(classes, size)
  tmp_methods = fill_same_values(methods, size)
  tmp_constants = fill_same_values(constants, size)
  tmp_classes.each do |klass|
    define_method_constants(klass, tmp_methods, tmp_constants)
  end
end
bulk_puts_eval(binding, codes) click to toggle source

Puts each-line-code + eval result

code

message = 'msg'
puts_eval binding, <<-EOS
"hoge-#{message}1"
"hoge-#{message}2"
EOS

result

"hoge-#{message}1" # => "hoge-msg1"\n
"hoge-#{message}2" # => "hoge-msg2"\n
# File lib/open_classes/kernel/p_evals.rb, line 34
def bulk_puts_eval(binding, codes)
  result = []
  codes.each_line { |code|result << exec_eval(code.chop, binding) }
  puts result.join("\n").justify_char '#'
end
capture_stdout() { || ... } click to toggle source

capture STDOUT

capture print

print capture_stdout { print "hoge" } # => hoge

if block have no STDOUT, capture_stdout returns empty.

print capture_stdout {  }.empty? # => true
# File lib/test_toolbox/kernel.rb, line 13
def capture_stdout
  begin
    $stdout = StringIO.new
    yield
    result = $stdout.string
  ensure
    $stdout = STDOUT
  end
  result
end
dp_line(line, options = { filename: '', char: '-' }) click to toggle source

debug print line for print-debugging

debug print default

dp_line __LINE__
# yy = call line no
# => --------------------|filename=|line=yy|--------------------

debug print with filename

dp_line __LINE__, filename: __FILE__
# xx = filename, yy = call line no
# => --------------------|filename=xx|line=yy|--------------------

debug print with no filename, specific char

dp_line __LINE__, char: '@'
# xx = filename, yy = call line no
# => @@@@@@@@@@@@@@@@@@@@|filename=|line=yy|@@@@@@@@@@@@@@@@@@@@
# File lib/test_toolbox/kernel.rb, line 41
def dp_line(line, options = { filename: '', char: '-' })
  filename = options[:filename].nil? ? '' : options[:filename]
  char = options[:char].nil? ? '-' : options[:char]
  puts "#{char * 20}|filename=#{filename}|line=#{line}|#{char * 20}"
end
evalb(bind = nil) { || ... } click to toggle source

eval block version

Example

require 'tbpgr_utils'
n = 1
actual = evalb(binding) do
  <<-EOS
n = n + 1
n = n + 2
     EOS
end

print actual # => 4
# File lib/open_classes/kernel/evalb.rb, line 19
def evalb(bind = nil, &proc)
  eval yield, bind
end
exchange(one, other) click to toggle source

exchange variable a for b

Example

a = 1
b = 2
a, b = exchange(a, b)
a # => 2
b # => 1
# File lib/open_classes/kernel/exchange.rb, line 15
def exchange(one, other)
  tmp = one
  one = other
  other = tmp
  [one, other]
end
hash_to_attributes(hash) click to toggle source

set attributes from hash

Example

class Person
  attr_accessor :name, :age
end

person = Person.new
person.hash_to_attributes({name: 'hoge', age: 33})

result

#<PersonForHashToAttributes:0x3957858 @age=33, @not_exists="hoge">
# File lib/open_classes/kernel/hash_to_attributes.rb, line 20
def hash_to_attributes(hash)
  hash.each { |key, value|instance_variable_set "@#{key}", value }
end
null() click to toggle source
# File lib/open_classes/kernel/null.rb, line 4
def null
  nil
end
print_eval(code, binding) click to toggle source

Print code + eval result

print_eval 8/4, binding  # => 8/4 # => 2
message = 'msg';print_eval "hoge-#{message}", binding # => "hoge-#{message}" # => "hoge-msg"
puts_eval(code, binding) click to toggle source

Puts code + eval result

puts_eval 8/4, binding  # => 8/4 # => 2\n
message = 'msg';puts_eval "hoge-#{message}", binding # => "hoge-#{message}" # => "hoge-msg"\n
# File lib/open_classes/kernel/p_evals.rb, line 18
def puts_eval(code, binding)
  puts exec_eval code, binding
end

Private Instance Methods

ancestors_connector(max) click to toggle source
# File lib/open_classes/kernel/aa_ancestors.rb, line 66
def ancestors_connector(max)
  connector = '|'.rjust((max + 2) / 2)
  "\n#{connector}\n"
end
centered_ancestors(max) click to toggle source
# File lib/open_classes/kernel/aa_ancestors.rb, line 54
def centered_ancestors(max)
  ancestors.reverse.map { |v|v.to_s.center max }
end
connected_box_ancestors(ba, max) click to toggle source
# File lib/open_classes/kernel/aa_ancestors.rb, line 62
def connected_box_ancestors(ba, max)
  ba.join(ancestors_connector(max))
end
define_method_constants(klass, methods, constants) click to toggle source
# File lib/open_classes/kernel/bulk_define_methods.rb, line 68
def define_method_constants(klass, methods, constants)
  methods.each_with_index do |m, i|
    klass.class_eval do
      define_method m do |*args|
        constants[i]
      end
    end
  end
end
exec_eval(code, binding) click to toggle source
# File lib/open_classes/kernel/p_evals.rb, line 41
def exec_eval(code, binding)
  ret = eval code, binding
  "#{code} # => #{ret.inspect}"
end
fill_same_values(ary, size) click to toggle source
# File lib/open_classes/kernel/bulk_define_methods.rb, line 51
def fill_same_values(ary, size)
  return ary if ary.is_a?(Array)
  tmp = []
  size.times { tmp << ary }
  tmp
end
get_classes_size(classes) click to toggle source
# File lib/open_classes/kernel/bulk_define_methods.rb, line 47
def get_classes_size(classes)
  size = classes.is_a?(Array) ? classes.size : 1
end
max_size_class() click to toggle source
# File lib/open_classes/kernel/aa_ancestors.rb, line 50
def max_size_class
  ancestors.max_by { |v|v.to_s.size }
end
surrounded_ancestors(ca) click to toggle source
# File lib/open_classes/kernel/aa_ancestors.rb, line 58
def surrounded_ancestors(ca)
  ca.reduce([]) { |a, e|a << e.surround }
end
validate_bulk_define_classes!(classes) click to toggle source
# File lib/open_classes/kernel/bulk_define_methods.rb, line 58
def validate_bulk_define_classes!(classes)
  return if classes.class.any_of?(Array, Class)
  fail TypeError, "invalid type #{a.class}. you have to use Array or Class or String or Symbol"
end
validate_bulk_define_methods!(methods) click to toggle source
# File lib/open_classes/kernel/bulk_define_methods.rb, line 63
def validate_bulk_define_methods!(methods)
  return if methods.class.any_of?(Array, String, Symbol)
  fail TypeError, "invalid type #{a.class}. you have to use Array or Class or String or Symbol"
end