Module: Modelish::PropertyTypes::ClassMethods
- Defined in:
- lib/modelish/property_types.rb
Overview
Class methods for managing typed properties
Instance Method Summary collapse
-
#add_property_type(property_name, property_type = String) ⇒ Object
Adds a typed property to the model.
- #property_types ⇒ Object
Instance Method Details
#add_property_type(property_name, property_type = String) ⇒ Object
Adds a typed property to the model. This dynamically generates accessor/mutator methods that perform the appropriate type conversions on the property's value.
Generated methods:
-
<property_name>=(new_value)-- sets the property value. -
<property_name>-- returns the property value, converted to the configured type. If the value cannot be converted, no error will be raised, and the raw unconverted value will be returned. -
<property_name>!-- returns the property value, converted to the configured type. If the value cannot be converted, a TypeError will be raised. -
+raw_<property_name> -- the original property value, without any type conversions.
-
Integer -
Float -
Array -
Date-- converts using Date.parse on value.to_s -
DateTime-- converts using DateTime.parse on value.to_s -
Symbol-- also converts from camel case to snake case -
String -
any arbitrary
Class-- will attempt conversion by passing the raw value into the class's initializer -
an instance of
Proc-- will convert the value by executing the proc, passing in the raw value
44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/modelish/property_types.rb', line 44 def add_property_type(property_name, property_type = String) accessor = property_name.to_sym return if property_types[accessor] == property_type property_types[accessor] = property_type # Protected attributes used during type conversion define_raw_attribute(accessor) define_bang_attribute(accessor) define_typed_attribute(accessor) define_safe_attribute(accessor) define_public_attribute(accessor) end |
#property_types ⇒ Object
59 60 61 |
# File 'lib/modelish/property_types.rb', line 59 def property_types @property_types ||= {} end |