class Fog::Attributes::Default

Fog Default Attribute

This class handles the attributes without a type force. The attributes returned from the provider will keep its original values.

Attributes

aliases[R]
as[R]
default[R]
model[R]
name[R]
squash[R]

Public Class Methods

new(model, name, options) click to toggle source
# File lib/fog/core/attributes/default.rb, line 10
def initialize(model, name, options)
  @model = model
  @model.attributes << name
  @name = name
  @squash = options.fetch(:squash, false)
  @aliases = options.fetch(:aliases, [])
  @default = options[:default]
  @as = options.fetch(:as, name)
  create_setter
  create_getter
  create_aliases
  set_defaults
  create_mask
end

Public Instance Methods

create_aliases() click to toggle source
# File lib/fog/core/attributes/default.rb, line 63
def create_aliases
  Array(aliases).each do |alias_name|
    model.aliases[alias_name] = name
  end
end
create_getter() click to toggle source
# File lib/fog/core/attributes/default.rb, line 51
      def create_getter
        model.class_eval <<-EOS, __FILE__, __LINE__
          def #{name}
            return attributes[:#{name}] unless attributes[:#{name}].nil?
            if !attributes.key?(:#{name}) && !self.class.default_values[:#{name}].nil? && !persisted?
              return self.class.default_values[:#{name}]
            end
            attributes[:#{name}]
          end
        EOS
      end
create_mask() click to toggle source
# File lib/fog/core/attributes/default.rb, line 73
def create_mask
  model.masks[name] = as
end
create_setter() click to toggle source
# File lib/fog/core/attributes/default.rb, line 25
      def create_setter
        if squash
          model.class_eval <<-EOS, __FILE__, __LINE__
              def #{name}=(new_data)
                if new_data.is_a?(Hash)
                  if new_data.has_key?(:'#{squash}')
                    attributes[:#{name}] = new_data[:'#{squash}']
                  elsif new_data.has_key?("#{squash}")
                    attributes[:#{name}] = new_data["#{squash}"]
                  else
                    attributes[:#{name}] = [ new_data ]
                  end
                else
                  attributes[:#{name}] = new_data
                end
              end
          EOS
        else
          model.class_eval <<-EOS, __FILE__, __LINE__
              def #{name}=(new_#{name})
                attributes[:#{name}] = new_#{name}
              end
          EOS
        end
      end
set_defaults() click to toggle source
# File lib/fog/core/attributes/default.rb, line 69
def set_defaults
  model.default_values[name] = default unless default.nil?
end