Module: AccessorUtilities::Swizzle

Defined in:
lib/accessor-utilities.rb,
lib/accessor-utilities/AccessorUtilities/Swizzle.rb

Instance Method Summary collapse

Instance Method Details

#swizzle_method(method_name, swizzled_method_prefix = nil, append_equals_to_method_name = false, &method_definition) ⇒ Object

swizzle_method #



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/accessor-utilities/AccessorUtilities/Swizzle.rb', line 8

def swizzle_method( method_name, swizzled_method_prefix = nil, append_equals_to_method_name = false, & method_definition )
	
	swizzling_method_name = ( append_equals_to_method_name ? method_name.write_accessor_name : method_name )
	
	swizzled_method_prefix = :swizzle__ unless swizzled_method_prefix

	# alias existing method
	swizzled_method_name = method_name.swizzle_name( swizzled_method_prefix, append_equals_to_method_name )
	alias_method( swizzled_method_name, swizzling_method_name )
	
	# declare new method in place of old
	define_method( ( append_equals_to_method_name ? method_name.write_accessor_name : method_name ), & method_definition )
	
	return swizzled_method_name
	
end

#unswizzle_method(method_name, swizzled_method_prefix = nil, append_equals_to_method_name = false) ⇒ Object

unswizzle_method #



29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/accessor-utilities/AccessorUtilities/Swizzle.rb', line 29

def unswizzle_method( method_name, swizzled_method_prefix = nil, append_equals_to_method_name = false )
	
	swizzling_method_name = ( append_equals_to_method_name ? method_name.write_accessor_name : method_name )
	
	# if we have an aliased method, alias it back
	swizzle_name = method_name.swizzle_name( swizzled_method_prefix, append_equals_to_method_name )
	alias_method( swizzling_method_name, swizzle_name ) if method_defined?( swizzle_name )

	# remove swizzled method
	unswizzled_method = remove_method( swizzle_name )
	
	return unswizzled_method
	
end