Sha256: ae89598d4cfa6b69913ab9be68343983a4c7ccd1bba93e062fa0bd25728b015f

Contents?: true

Size: 1.93 KB

Versions: 1

Compression:

Stored size: 1.93 KB

Contents

module Fog
  module Attributes
    class Default
      attr_reader :model, :name, :squash, :aliases, :default

      def initialize(model, name, options)
        @model = model
        @model.attributes << name
        @name = name
        @squash = options.fetch(:squash, false)
        @aliases = options.fetch(:aliases, [])
        @default = options[:default]
        create_setter
        create_getter
        create_aliases
        set_defaults
      end

      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

      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

      def create_aliases
        Array(aliases).each do |alias_name|
          model.aliases[alias_name] = name
        end
      end

      def set_defaults
        model.default_values[name] = default unless default.nil?
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fog-core-1.24.0 lib/fog/core/attributes/default.rb