Sha256: c3d456bb71563d55e798dfceab3f4e0fad598fb6018b45f98a8d64d5d303a49f

Contents?: true

Size: 1.38 KB

Versions: 80

Compression:

Stored size: 1.38 KB

Contents

module R10K::Settings::Mixin

  def self.included(klass)
    klass.send(:include, InstanceMethods)
    klass.send(:extend, ClassMethods)
  end

  module InstanceMethods

    # @return [R10K::Settings::Container] A settings container for the given instance.
    def settings
      @settings ||= R10K::Settings::Container.new(self.class.settings)
    end
  end

  module ClassMethods

    # Define a setting and optional default on the extending class.
    #
    # @param key [Symbol]
    # @param default [Object]
    #
    # @return [void]
    def def_setting_attr(key, default = nil)
      defaults.add_valid_key(key)
      defaults[key] = default if default
    end

    # A singleton settings container for storing immutable default configuration
    # on the extending class.
    #
    # @return [R10K::Settings::Container]
    def defaults
      @defaults ||= R10K::Settings::Container.new
    end

    # A singleton settings container for storing manual setting configurations
    # on the extending class.
    #
    # @return [R10K::Settings::Container]
    def settings
      @settings ||= R10K::Settings::Container.new(defaults)
    end

    # Allow subclasses to use the settings of the parent class as default values
    #
    # @return [void]
    def inherited(subclass)
      subclass.instance_eval do
        @settings = R10K::Settings::Container.new(superclass.settings)
      end
    end
  end
end

Version data entries

80 entries across 80 versions & 2 rubygems

Version Path
r10k-5.0.0 lib/r10k/settings/mixin.rb
r10k-4.1.0 lib/r10k/settings/mixin.rb
r10k-4.0.2 lib/r10k/settings/mixin.rb
r10k-4.0.1 lib/r10k/settings/mixin.rb
r10k-4.0.0 lib/r10k/settings/mixin.rb
r10k-4.0.0.pre lib/r10k/settings/mixin.rb
r10k-3.16.0 lib/r10k/settings/mixin.rb
r10k-3.15.4 lib/r10k/settings/mixin.rb
r10k-3.15.3 lib/r10k/settings/mixin.rb
r10k-3.15.2 lib/r10k/settings/mixin.rb
r10k-3.15.1 lib/r10k/settings/mixin.rb
r10k-3.15.0 lib/r10k/settings/mixin.rb
akerl-r10k-3.14.2.1 lib/r10k/settings/mixin.rb
r10k-3.14.2 lib/r10k/settings/mixin.rb
r10k-3.14.1 lib/r10k/settings/mixin.rb
r10k-3.14.0 lib/r10k/settings/mixin.rb
r10k-3.13.0 lib/r10k/settings/mixin.rb
r10k-3.12.1 lib/r10k/settings/mixin.rb
r10k-3.12.0 lib/r10k/settings/mixin.rb
r10k-3.11.0 lib/r10k/settings/mixin.rb