Module: ClassProp::ClassMethods

Defined in:
lib/classprop.rb

Overview


ClassMethods

Instance Method Summary collapse

Instance Method Details

#define_class_prop(prop_name) ⇒ Object

Defines the set and get methods for the given property.



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/classprop.rb', line 54

def define_class_prop(prop_name)
	prop_name = normalize(prop_name)
	
	# set
	self.define_singleton_method("#{prop_name}=") do |val|
		instance_variable_set "@#{prop_name}", val
	end
	
	# get
	self.define_singleton_method(prop_name) do
		if instance_variable_defined?("@#{prop_name}")
			rv = instance_variable_get("@#{prop_name}")
			
			if rv == ClassProp::MustDefine
				raise "must-define-class-class-property: #{prop_name}" 
			else
				return rv
			end
		else
			if superclass.respond_to?(prop_name)
				return superclass.public_send(prop_name)
			else
				return nil
			end
		end
	end
end

#delete_class_prop(prop_name) ⇒ Object

delete_class_prop



83
84
85
86
87
88
89
# File 'lib/classprop.rb', line 83

def delete_class_prop(prop_name)
	prop_name = normalize(prop_name)
	
	if instance_variable_defined?("@#{prop_name}")
		remove_instance_variable "@#{prop_name}"
	end
end

#normalize(prop_name) ⇒ Object

Normalizes a property name so that any leading @ is removed.



47
48
49
50
51
# File 'lib/classprop.rb', line 47

def normalize(prop_name)
	prop_name = prop_name.to_s
	prop_name = prop_name.sub(/\A\@/mu, '')
	return prop_name
end