Module: Stitcher::DefineMethod

Includes:
Register
Included in:
Stitch
Defined in:
lib/stitcher/define_method.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Register

define_call_method, register, #stitcher_register

Class Method Details

.as_instance_executable(&block) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
# File 'lib/stitcher/define_method.rb', line 8

def self.as_instance_executable &block
	Object.new.instance_eval do
		define_singleton_method :stitcher_bind do |obj|
			proc do |*args, &block_|
				self_ = obj
				self_.instance_exec *args, block, &block
			end
		end
		self
	end
end

Instance Method Details

#stitcher_define_method(name, **opt, &block) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# File 'lib/stitcher/define_method.rb', line 20

def stitcher_define_method name, **opt, &block
	obj = DefineMethod.as_instance_executable do |*args|
		_ = args.pop		# block object
		self_ = self
		obj = Object.new
		obj.extend(Module.new{
			private
			attr_reader *opt.keys
		})
		obj.instance_eval do
			opt.each_with_index { |data, index|
				name, type = data
				instance_variable_set "@#{name}", args[index]
			}

# 				define_singleton_method :[] do |name|
# 					self_.instance_eval "@#{ name }"
# 				end
#
# 				define_singleton_method :[]= do |name, var|
# 					obj.instance_eval { self_.instance_variable_set "@#{name}", var }
# 				end
			
			define_singleton_method :method_missing do |name, *args, &block|
				self_.__send__ name, *args, &block
			end

			instance_eval &block
		end
	end
	Register.register self, name, opt.values, obj
end