@@ -29,9 +29,14 @@ def keyword_arguments
2929 class_variable_get ( :@@keyword_arguments )
3030 end
3131
32+ def owner_name
33+ class_variable_get ( :@@owner_name )
34+ end
35+
3236 def inherited ( subclass )
3337 subclass . init_arguments
3438 subclass . init_keyword_arguments
39+ subclass . init_owner_name
3540 end
3641
3742 protected
@@ -42,6 +47,8 @@ def method_missing(method_name, *args)
4247 parse_argument ( method_name , *args )
4348 when 'keyword_argument'
4449 parse_keyword_argument ( *args )
50+ when 'owner'
51+ parse_method_owner ( *args )
4552 else
4653 super
4754 end
@@ -67,6 +74,10 @@ def parse_keyword_argument(name, opts = {})
6774 end
6875 end
6976
77+ def parse_method_owner ( name )
78+ class_variable_set ( :@@owner_name , name )
79+ end
80+
7081 def init_arguments
7182 return if self . class_variable_defined? ( :@@arguments )
7283
@@ -78,6 +89,12 @@ def init_keyword_arguments
7889
7990 self . class_variable_set ( :@@keyword_arguments , [ ] )
8091 end
92+
93+ def init_owner_name
94+ return if self . class_variable_defined? ( :@@owner_name )
95+
96+ self . class_variable_set ( :@@owner_name , nil )
97+ end
8198 end
8299
83100 def initialize ( *args )
@@ -104,9 +121,13 @@ def initialize(*args)
104121 def __set_owner ( owner )
105122 @__method_owner = owner
106123
107- klass = owner . is_a? ( Class ) ? owner : owner . class
108- instance_name = Util . snake_case ( klass . name . split ( "::" ) . last )
109- self . define_singleton_method instance_name do
124+ @__owner_name = self . class . owner_name
125+ if @__owner_name . nil?
126+ klass = owner . is_a? ( Class ) ? owner : owner . class
127+ @__owner_name = Util . snake_case ( klass . name . split ( "::" ) . last )
128+ end
129+
130+ self . define_singleton_method @__owner_name do
110131 @__method_owner
111132 end
112133 end
0 commit comments