Class: Philosophal::Property
- Inherits:
-
Object
- Object
- Philosophal::Property
- Defined in:
- lib/philosophal/property.rb
Instance Attribute Summary collapse
-
#default ⇒ Object
readonly
Returns the value of attribute default.
-
#immutable ⇒ Object
readonly
Returns the value of attribute immutable.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#transform ⇒ Object
readonly
Returns the value of attribute transform.
-
#type ⇒ Object
readonly
Returns the value of attribute type.
Instance Method Summary collapse
- #check_conversion(value) ⇒ Object
- #default? ⇒ Boolean
- #default_value ⇒ Object
- #generate_boolean_method(buffer = +'')) ⇒ Object
- #generate_immutable_writer_method(buffer = +'')) ⇒ Object
- #generate_reader_method(buffer = +'')) ⇒ Object
- #generate_writer_method(buffer = +'')) ⇒ Object
-
#initialize(name:, type:, default:, transform:, immutable:) ⇒ Property
constructor
A new instance of Property.
- #transform? ⇒ Boolean
Constructor Details
#initialize(name:, type:, default:, transform:, immutable:) ⇒ Property
Returns a new instance of Property.
5 6 7 8 9 10 11 |
# File 'lib/philosophal/property.rb', line 5 def initialize(name:, type:, default:, transform:, immutable:) @name = name @type = type @default = default @transform = transform @immutable = immutable end |
Instance Attribute Details
#default ⇒ Object (readonly)
Returns the value of attribute default.
13 14 15 |
# File 'lib/philosophal/property.rb', line 13 def default @default end |
#immutable ⇒ Object (readonly)
Returns the value of attribute immutable.
13 14 15 |
# File 'lib/philosophal/property.rb', line 13 def immutable @immutable end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
13 14 15 |
# File 'lib/philosophal/property.rb', line 13 def name @name end |
#transform ⇒ Object (readonly)
Returns the value of attribute transform.
13 14 15 |
# File 'lib/philosophal/property.rb', line 13 def transform @transform end |
#type ⇒ Object (readonly)
Returns the value of attribute type.
13 14 15 |
# File 'lib/philosophal/property.rb', line 13 def type @type end |
Instance Method Details
#check_conversion(value) ⇒ Object
30 31 32 |
# File 'lib/philosophal/property.rb', line 30 def check_conversion(value) Philosophal.convert(self, value) end |
#default? ⇒ Boolean
15 16 17 |
# File 'lib/philosophal/property.rb', line 15 def default? @default != nil end |
#default_value ⇒ Object
19 20 21 22 23 24 |
# File 'lib/philosophal/property.rb', line 19 def default_value case @default when Proc then @default.call else @default end end |
#generate_boolean_method(buffer = +'')) ⇒ Object
69 70 71 72 73 74 75 76 |
# File 'lib/philosophal/property.rb', line 69 def generate_boolean_method(buffer = +'') buffer << ' def ' << @name.name << "?\n " \ '!!@' << @name.name << "\nend\n" end |
#generate_immutable_writer_method(buffer = +'')) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/philosophal/property.rb', line 45 def generate_immutable_writer_method(buffer = +'') buffer << ' def ' << @name.name << "=(value)\n " \ 'raise FrozenError, "can\'t modify frozen variable @' << @name.name << '" if defined?(@' << @name.name << ")\n" \ '@' << @name.name << ' = self.class.philosophal_properties[:' << @name.name << "].check_conversion(value).freeze\n" \ "rescue Philosophal::TypeError => error\n" \ "error.set_backtrace(caller(1))\n raise\n" \ "end\n" end |
#generate_reader_method(buffer = +'')) ⇒ Object
58 59 60 61 62 63 64 65 66 67 |
# File 'lib/philosophal/property.rb', line 58 def generate_reader_method(buffer = +'') buffer << ' def ' << @name.name << "\n " \ '@' << @name.name << ' || self.class.philosophal_properties[:' << @name.name << "].default_value\n" \ "end\n" end |
#generate_writer_method(buffer = +'')) ⇒ Object
34 35 36 37 38 39 40 41 42 43 |
# File 'lib/philosophal/property.rb', line 34 def generate_writer_method(buffer = +'') buffer << ' def ' << @name.name << "=(value)\n " \ '@' << @name.name << ' = self.class.philosophal_properties[:' << @name.name << "].check_conversion(value)\n" \ "rescue Philosophal::TypeError => error\n" \ "error.set_backtrace(caller(1))\n raise\n" \ "end\n" end |
#transform? ⇒ Boolean
26 27 28 |
# File 'lib/philosophal/property.rb', line 26 def transform? @transform != nil end |