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 |
# File 'lib/fog/hyperv/fog_extensions/enum.rb', line 6 def initialize(model, name, ) @values = .fetch(:values, []) 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
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/fog/hyperv/fog_extensions/enum.rb', line 48 def create_getter ensure_value_getter model.class_eval <<-EOS, __FILE__, __LINE__ def #{name}_num _values = #{name}_values return nil if self.#{name}.nil? if self.#{name}.is_a?(Fixnum) self.#{name} else if _values.is_a?(Hash) _values.key(self.#{name}) else _values.index(self.#{name}) end end end EOS super end |
#create_setter ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'lib/fog/hyperv/fog_extensions/enum.rb', line 20 def create_setter ensure_value_getter model.class_eval <<-EOS, __FILE__, __LINE__ def #{name}=(new_#{name}) _values = #{name}_values # FIXME: Prepare a key comparison array in advance if new_#{name}.is_a?(Fixnum) if _values.class.to_s == 'Array' # TODO: Better way to do class comparison in generated code puts "\#{_values} (\#{_values.class}) Is array" raise Fog::Hyperv::Errors::ServiceError, "\#{new_#{name}} is not in the range (0..\#{_values.length - 1})" unless new_#{name} >= 0 && new_#{name} < _values.length else puts "\#{_values} (\#{_values.class}) Is not array" raise Fog::Hyperv::Errors::ServiceError, "\#{new_#{name}} is not one of \#{_values.is_a?(Hash) ? _values.keys : _values})" unless (_values.is_a?(Hash) ? _values.keys : _values).include? new_#{name} end attributes[:#{name}] = _values[new_#{name}] elsif new_#{name}.nil? attributes[:#{name}] = nil else puts "Is string" new_#{name} = new_#{name}.to_s.to_sym unless new_#{name}.is_a? String raise Fog::Hyperv::Errors::ServiceError, "\#{new_#{name}} is not one of \#{_values.is_a?(Hash) ? _values.keys : _values})" unless (_values.is_a?(Hash) ? _values.keys : _values).include? new_#{name} attributes[:#{name}] = new_#{name} end end EOS end |
#ensure_value_getter ⇒ Object
11 12 13 14 15 16 17 18 |
# File 'lib/fog/hyperv/fog_extensions/enum.rb', line 11 def ensure_value_getter return if model.methods.include?("#{name}_values".to_sym) model.class_eval <<-EOS, __FILE__, __LINE__ def #{name}_values #{values}.freeze end EOS end |