Class: Fog::Attributes::Enum
- Inherits:
-
Default
- Object
- Default
- Fog::Attributes::Enum
- Defined in:
- lib/fog/hyperv/fog_extensions/enum.rb
Instance Attribute Summary collapse
-
#values ⇒ Object
readonly
Returns the value of attribute values.
Instance Method Summary collapse
- #create_getter ⇒ Object
- #create_setter ⇒ Object
- #ensure_value_getter ⇒ Object
-
#initialize(model, name, options) ⇒ Enum
constructor
A new instance of Enum.
Constructor Details
#initialize(model, name, options) ⇒ Enum
Returns a new instance of Enum.
6 7 8 9 10 11 12 13 |
# File 'lib/fog/hyperv/fog_extensions/enum.rb', line 6 def initialize(model, name, ) @values = .fetch(:values, []) raise Fog::Hyperv::Errors::ServiceError, "#{values} is not a valid array or hash" \ unless values.class.to_s == 'Array' || values.class.to_s == 'Hash' super end |
Instance Attribute Details
#values ⇒ Object (readonly)
Returns the value of attribute values.
4 5 6 |
# File 'lib/fog/hyperv/fog_extensions/enum.rb', line 4 def values @values end |
Instance Method Details
#create_getter ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/fog/hyperv/fog_extensions/enum.rb', line 58 def create_getter ensure_value_getter # Add a getter for <enum>_num to get the numeric value model.class_eval <<-EOS, __FILE__, __LINE__ def #{name}_num _values = #{name}_values _value = attributes[:#{name}] return nil if _value.nil? if _value.is_a?(Numeric) _value else if _values.is_a?(Hash) _values.send(:[], _value) else _values.index(_value) end end end EOS # Add the default getter for the symbol value super end |
#create_setter ⇒ Object
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/fog/hyperv/fog_extensions/enum.rb', line 26 def create_setter ensure_value_getter # Add a setter that always stores a symbol value model.class_eval <<-EOS, __FILE__, __LINE__ def #{name}=(new_value) _values = #{name}_values if new_value.is_a?(Numeric) # TODO: Better way to do class comparison in generated code if _values.class.to_s == 'Array' raise Fog::Hyperv::Errors::ServiceError, "\#{new_value} is not in the range (0..\#{_values.length - 1})" \ unless new_value >= 0 && new_value < _values.length attributes[:#{name}] = _values[new_value] elsif _values.class.to_s == 'Hash' raise Fog::Hyperv::Errors::ServiceError, "\#{new_value} is not one of \#{_values.values})" \ unless _values.values.include? new_value attributes[:#{name}] = _values.key(new_value) end elsif new_value.nil? attributes[:#{name}] = nil else new_value = new_value.to_s.to_sym unless new_value.is_a? Symbol # Ensure values is the array of enum symbols _values = (_values.is_a?(Hash) ? _values.keys : _values) raise Fog::Hyperv::Errors::ServiceError, "\#{new_value.inspect} is not one of \#{_values})" \ unless _values.include? new_value attributes[:#{name}] = new_value end end EOS end |
#ensure_value_getter ⇒ Object
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/fog/hyperv/fog_extensions/enum.rb', line 15 def ensure_value_getter return if model.private_methods.include?("#{name}_values".to_sym) model.class_eval <<-EOS, __FILE__, __LINE__ private def #{name}_values #{values}.freeze end EOS end |