Class: R10K::Settings::Container

Inherits:
Object
  • Object
show all
Defined in:
lib/r10k/settings/container.rb

Overview

Defines a collection for application settings

This implements a hierarchical interface to application settings. Containers can define an optional parent container that will be used for default options if those options aren’t set on the given container.

Defined Under Namespace

Classes: InvalidKey

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parent = nil) ⇒ Container



13
14
15
16
17
18
# File 'lib/r10k/settings/container.rb', line 13

def initialize(parent = nil)
  @parent = parent

  @valid_keys = Set.new
  @settings = {}
end

Instance Attribute Details

#valid_keysSet<Symbol>



10
11
12
# File 'lib/r10k/settings/container.rb', line 10

def valid_keys
  @valid_keys
end

Instance Method Details

#[](key) ⇒ Object?

Look up a value in the container. The lookup checks the current container, and then falls back to the parent container if it’s given.

Raises:



29
30
31
32
33
34
35
36
37
38
# File 'lib/r10k/settings/container.rb', line 29

def [](key)
  validate_key! key

  if @settings[key]
    @settings[key]
  elsif @parent && (pkey = @parent[key])
    @settings[key] = pkey.dup
    @settings[key]
  end
end

#[]=(key, value) ⇒ Object

Set a value on the container

Raises:



47
48
49
50
51
# File 'lib/r10k/settings/container.rb', line 47

def []=(key, value)
  validate_key! key

  @settings[key] = value
end

#add_valid_key(key) ⇒ void

Note:

This should only be used by R10K::Settings::Container#R10K#R10K::Settings#R10K::Settings::ClassSettings

This method returns an undefined value.

Define a valid container key



59
60
61
# File 'lib/r10k/settings/container.rb', line 59

def add_valid_key(key)
  @valid_keys.add(key)
end

#reset!void

This method returns an undefined value.

Clear all existing settings in this container. Valid settings are left alone.



79
80
81
# File 'lib/r10k/settings/container.rb', line 79

def reset!
  @settings = {}
end

#valid_key?(key) ⇒ true, false

Determine if a key is a valid setting.



68
69
70
71
72
73
74
75
# File 'lib/r10k/settings/container.rb', line 68

def valid_key?(key)
  if @valid_keys.include?(key)
    true
  elsif @parent and @parent.valid_key?(key)
    @valid_keys.add(key)
    true
  end
end