class Tsundere::Imouto
Public Class Methods
new(parent, level)
click to toggle source
# File lib/tsundere/imouto.rb, line 5 def initialize parent, level @parent = parent @level = level end
Public Instance Methods
method_missing(meth, *args, &block)
click to toggle source
Calls superclass method
# File lib/tsundere/imouto.rb, line 10 def method_missing meth, *args, &block conditions = [] conditions << lambda do :[] == meth and @parent.dere_for? @level, process_args( *args ) end conditions << lambda do :[]= == meth and @parent.dere_for? @level, process_args( *args[0..-2] ) end conditions << lambda do @parent.dere_for? @level, meth end if @parent.respond_to? meth if conditions.inject(false) { |mem, c| mem or c.call } case meth when :[] @parent[*args, &block] unless block.nil? @parent[*args] if block.nil? when :[]= tail = args.pop @parent[*args] = tail else @parent.send(meth, *args, &block) unless block.nil? @parent.send(meth, *args) if block.nil? end # meth else return @parent.tsun_for @level end # if conditions inject else super end # if has method end
respond_to?(meth)
click to toggle source
# File lib/tsundere/imouto.rb, line 45 def respond_to? meth if @parent.dere_for? @level, meth @parent.respond_to? meth elsif :[] == meth or :[]= == meth @parent.respond_to? meth else false end # if-dere end
Private Instance Methods
process_args(*args)
click to toggle source
# File lib/tsundere/imouto.rb, line 57 def process_args *args args.inject("") { |mem, arg| mem += arg.to_s }.to_sym end