module 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
exchange(one, other)
click to toggle source
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"
# 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)
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