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['cookie']['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
  • trust
  • 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['development']. Another set of settings would apply in the production environment and would appear under Configuration['production'].

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['foo'], 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



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

def initialize(config, environment)
  if config.is_a?(Hash)
    @config = config
  elsif File.readable?(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



120
121
122
# File 'lib/global_session/configuration.rb', line 120

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

#inspect ⇒ Object

Returns a representation of the object suitable for printing to the console.

Returns:

  • a representation of the object suitable for printing to the console



77
78
79
# File 'lib/global_session/configuration.rb', line 77

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

#to_hash ⇒ Object



81
82
83
# File 'lib/global_session/configuration.rb', line 81

def to_hash
  @config.dup
end

#validate ⇒ Object

:nodoc



124
125
126
127
# File 'lib/global_session/configuration.rb', line 124

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