class Necromancy::Necromancy
Public Class Methods
new(necromancy = "args", references = [])
click to toggle source
# File lib/necromancy/necromancy.rb, line 8 def initialize(necromancy = "args", references = []) @necromancy = necromancy @references = references end
Protected Instance Methods
add_val(v)
click to toggle source
# File lib/necromancy/necromancy.rb, line 50 def add_val(v) i = @references.size @references[i] = v i end
class()
click to toggle source
# File lib/necromancy/necromancy.rb, line 38 def class @class ||= (class << self; self end).superclass end
get_ref(i)
click to toggle source
# File lib/necromancy/necromancy.rb, line 42 def get_ref(i) @references[i] end
make_evaluable_literal(anyref)
click to toggle source
# File lib/necromancy/necromancy.rb, line 56 def make_evaluable_literal(anyref) case anyref when nil, ::Integer, ::Float, ::Symbol anyref.inspect else i = add_val(anyref) "self.get_ref(i + #{i})" end end
make_evaluable_string(anyref)
click to toggle source
# File lib/necromancy/necromancy.rb, line 66 def make_evaluable_string(anyref) case anyref when Necromancy references = anyref.instance_eval {@references} necromancy = anyref.instance_eval {@necromancy} @references.concat(references) "stack << i; i = #{references.size}; xs = (#{necromancy}); i = stack.pop; xs" when ::Symbol "[:#{anyref}.to_proc.(*args)]" else prc = anyref.to_proc i = add_val(prc) "[self.get_ref(i + #{i}).(*args)]" end end
method_missing(name, *args, &block)
click to toggle source
# File lib/necromancy/necromancy.rb, line 13 def method_missing(name, *args, &block) getproc = ":#{name}.to_proc" if args.size == 0 getargs = nil elsif args.size == 1 getargs = ", (#{make_evaluable_literal(args[0])})" else getargs = ", *(#{make_evaluable_literal(args)})" end if block getblock = ", &(#{make_evaluable_literal(block)})" else getblock = nil end necromancy = "[#{getproc}.(*(#{@necromancy})#{getargs}#{getblock})]" self.class.new(necromancy, @references.dup) end
set_ref(i, v)
click to toggle source
# File lib/necromancy/necromancy.rb, line 46 def set_ref(i, v) @references[i] = v end
to_proc()
click to toggle source
# File lib/necromancy/necromancy.rb, line 34 def to_proc instance_eval("->(*args) { i = 0; stack = []; xs = (#{@necromancy}); xs.size == 1 ? xs.first : xs }") end