Class: Fog::Attributes::Enum

Inherits:
Default
  • Object
show all
Defined in:
lib/fog/hyperv/fog_extensions/enum.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

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, options)
  @values = options.fetch(:values, [])
  super
end

Instance Attribute Details

#valuesObject (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_getterObject



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_setterObject



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_getterObject



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