Module: Kernel

Defined in:
lib/test_toolbox/kernel.rb,
lib/open_classes/kernel/null.rb,
lib/open_classes/kernel/evalb.rb,
lib/open_classes/kernel/p_evals.rb,
lib/open_classes/kernel/booleans.rb,
lib/open_classes/kernel/exchange.rb,
lib/open_classes/kernel/aa_ancestors.rb,
lib/open_classes/kernel/hash_to_attributes.rb,
lib/open_classes/kernel/bulk_define_methods.rb

Overview

Kernel

Instance Method Summary collapse

Instance Method Details

#aa_ancestorsObject

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  |
----------------------


40
41
42
43
44
45
46
# 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) ⇒ Object

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


34
35
36
37
38
39
40
41
42
43
44
# 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) ⇒ Object

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


34
35
36
37
38
# 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_stdoutObject

capture STDOUT

capture print

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

if block have no STDOUT, capture_stdout returns empty.

print capture_stdout {  }.empty? # => true


13
14
15
16
17
18
19
20
21
22
# 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: '-' }) ⇒ Object

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|@@@@@@@@@@@@@@@@@@@@


41
42
43
44
45
# 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, &proc) ⇒ Object

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


19
20
21
# File 'lib/open_classes/kernel/evalb.rb', line 19

def evalb(bind = nil, &proc)
  eval yield, bind
end

#exchange(one, other) ⇒ Object

exchange variable a for b

Example

a = 1
b = 2
a, b = exchange(a, b)
a # => 2
b # => 1


15
16
17
18
19
20
# 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) ⇒ Object

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">


20
21
22
# 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

#nullObject



4
5
6
# File 'lib/open_classes/kernel/null.rb', line 4

def null
  nil
end

Print code + eval result

print_eval 8/4, binding  # => 8/4 # => 2
message = 'msg';print_eval "hoge-#{message}", binding # => "hoge-#{message}" # => "hoge-msg"


10
11
12
# File 'lib/open_classes/kernel/p_evals.rb', line 10

def print_eval(code, binding)
  print exec_eval code, binding
end

#puts_eval(code, binding) ⇒ Object

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


18
19
20
# File 'lib/open_classes/kernel/p_evals.rb', line 18

def puts_eval(code, binding)
  puts exec_eval code, binding
end