Class: GlobalSession::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/global_session/configuration.rb

Overview

Central point of access for GlobalSession configuration information. This is mostly a very thin wrapper around the serialized hash written to the YAML config file.

The configuration is stored as a set of nested hashes and accessed by the code using hash lookup; for example, we might ask for Configuration[‘domain’] if we wanted to know which domain the cookie should be set for.

The following settings are supported:

  • attributes

    * signed
    * insecure
    
  • ephemeral

  • timeout

  • renew

  • authority (optional - inferred from presence of private key file)

  • trust (optional - inferred from presence/name of public key files)

  • directory

  • cookie

    * version
    * name
    * domain
    

Config Environments

The operational environment of global_session defines which section of the configuration file it gets its settings from. When used with a web app, the environment should be set to the same environment as the web app. (If using Rails integration, this happens for you automatically.)

Environment-Specific Settings

The top level of keys in the configuration hash are special; they provide different sections of settings that apply in different environments. For instance, a Rails application might have one set of settings that apply in the development environment; these would appear under Configuration. Another set of settings would apply in the production environment and would appear under Configuration.

Common Settings

In addition to having one section for each operating environment, the configuration file can specify a ‘common’ section for settings that apply

Lookup Mechanism

When the code asks for Configuration, we first check whether the current environment’s config section has a value for foo. If one is found, we return that.

If no environment-specific setting is found, we check the ‘common’ section and return the value found there.

Config File Location

The name and location of the config file depend on the Web framework with which you are integrating; see GlobalSession::Rails for more information.

Instance Method Summary collapse

Constructor Details

#initialize(config, environment) ⇒ Configuration

Create a new Configuration object

Parameters

config(String|Hash)

Absolute filesystem path to the configuration file, or Hash containing configuration

environment(String)

Config file section from which to read settings

Raise

MissingConfiguration

if config file is missing or unreadable

TypeError

if config file does not contain a YAML-serialized Hash



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
# File 'lib/global_session/configuration.rb', line 96

def initialize(config, environment)
  if config.is_a?(Hash)
    @config = config
  elsif File.file?(config)
    data = YAML.load(File.read(config))
    unless data.is_a?(Hash)
      raise TypeError, "Configuration file #{File.basename(config)} must contain a hash as its top-level element"
    end
    @config = data
  else
    raise MissingConfiguration, "Missing or unreadable configuration file #{config}"
  end

  @environment = environment
  validate
end

Instance Method Details

#[](key) ⇒ Object

Reader for configuration elements. The reader first checks the current environment’s settings section for the named value; if not found, it checks the common settings section.

Parameters

key(String)

Name of configuration element to retrieve

Return

value(String)

the value of the configuration element



122
123
124
# File 'lib/global_session/configuration.rb', line 122

def [](key)
  get(key, true)
end

#[]=(key, value = {}) ⇒ Object

Writer for configuration elements. Writes to an environment-specific stanza if one is present, else writes to the common stanza. DOES NOT OVERWRITE the key’s value if it already has one!



131
132
133
134
135
136
137
138
139
# File 'lib/global_session/configuration.rb', line 131

def []=(key, value={})
  if @config.has_key?(@environment)
    @config[@environment][key] ||= value
  else
    @config['common'][key] ||= value
  end
rescue NoMethodError
  raise MissingConfiguration, "Configuration key '#{key}' not found"
end

#has_key?(k) ⇒ Boolean Also known as: key?

Determine whether a given configuration key was specified.



144
145
146
# File 'lib/global_session/configuration.rb', line 144

def has_key?(k)
  @config[@environment].has_key?(k) || @config['common'].has_key?(k)
end

#inspectObject



79
80
81
# File 'lib/global_session/configuration.rb', line 79

def inspect
  "<#{self.class.name} @environment=#{@environment.inspect}>"
end

#to_hashObject



83
84
85
# File 'lib/global_session/configuration.rb', line 83

def to_hash
  @config.dup
end

#validateObject

:nodoc



150
151
152
# File 'lib/global_session/configuration.rb', line 150

def validate # :nodoc
  ['attributes/signed', 'cookie/name', 'timeout'].each {|k| validate_presence_of k}
end