Module: GlobalSession::Rails

Defined in:
lib/global_session/rails/action_controller_instance_methods.rb,
lib/global_session/rails/action_controller_class_methods.rb,
lib/global_session/rails.rb

Overview

Rails integration for GlobalSession.

The configuration file for Rails apps is located in config/global_session.yml and a generator (global_session_config) is available for creating a sensible default.

There is also a generator (global_session_authority) for creating authority keypairs.

The main integration touchpoint for Rails is the module ActionControllerInstanceMethods, which gets mixed into ActionController::Base. This is where all of the magic happens..

Defined Under Namespace

Modules: ActionControllerClassMethods, ActionControllerInstanceMethods

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.configuration ⇒ Object

Single Configuration object used by entire Rails app



46
47
48
# File 'lib/global_session/rails.rb', line 46

def configuration
  @configuration
end

.directory ⇒ Object

Single Directory object used by entire Rails app



49
50
51
# File 'lib/global_session/rails.rb', line 49

def directory
  @directory
end

Class Method Details

.activate(rails_config, &block) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/global_session/rails.rb', line 52

def self.activate(rails_config, &block)
  config_file = File.join(::Rails.root, 'config', 'global_session.yml')
  self.configuration = GlobalSession::Configuration.new(config_file, ::Rails.env)

  dir_name = self.configuration['directory'] || 'GlobalSession::Directory'
  begin
    dir_klass = dir_name.constantize
  rescue NameError => e
    raise GlobalSession::ConfigurationError,
          "Unknown/malformed directory class '#{dir_name}' in config file: #{e.message}"
  end

  unless dir_klass.ancestors.include?(GlobalSession::Directory)
    raise GlobalSession::ConfigurationError,
          "Specified directory class '#{dir_name}' does not inherit from GlobalSession::Directory"
  end

  authorities_dir = File.join(::Rails.root, 'config', 'authorities')
  self.directory = dir_klass.new(self.configuration, authorities_dir)

  # Add our middleware to the stack.
  rails_config.middleware.insert_before(ActionController::Base.session_store, ::Rack::Cookies)
  rails_config.middleware.insert_before(ActionController::Base.session_store, ::Rack::GlobalSession,
                                self.configuration,
                                self.directory,
                                &block)

  return true
end