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

.configurationObject

Single Configuration object used by entire Rails app



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

def configuration
  @configuration
end

.directoryObject

Single Directory object used by entire Rails app



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

def directory
  @directory
end

.keystoreObject

Single Keystore object used by entire Rails app



52
53
54
# File 'lib/global_session/rails.rb', line 52

def keystore
  @keystore
end

Class Method Details

.activate(rails_config, &block) ⇒ Object



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
81
82
83
84
85
86
87
88
89
90
# File 'lib/global_session/rails.rb', line 55

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

  if self.configuration['keystore'].blank? || self.configuration['keystore']['public'].blank?
    # Support legacy behavior (config/authorities dir always contains pub keys)
    authorities_dir = File.join(::Rails.root, 'config', 'authorities')
    self.directory = dir_klass.new(self.configuration, authorities_dir)
    self.keystore = self.directory.keystore
  else
    # Prefer modern behavior (configuration tells us where to find pub keys)
    self.directory = dir_klass.new(self.configuration)
  end

  # 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