Sha256: cbe0dd8a1292f3340766907693e4c55477063e5f7dafb7433e2b680125db1ee6

Contents?: true

Size: 795 Bytes

Versions: 3

Compression:

Stored size: 795 Bytes

Contents

module Pickle
  module Injector
    def self.inject(session_class, options = {})
      target = options[:into] || ActionController::Integration::Session
      session_method = options[:name] || session_class.name.underscore.gsub('/','_')
      session_options = options[:options] || {}
      
      # create a session object on demand (in target)
      target.send(:define_method, session_method) do
        instance_variable_get("@#{session_method}") || instance_variable_set("@#{session_method}", session_class.new(session_options))
      end
      
      # delegate session methods to the session object (in target)
      delegate_methods = session_class.public_instance_methods - Object.instance_methods
      target.delegate *(delegate_methods + [{:to => session_method}])
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ianwhite-pickle-0.1.2 lib/pickle/injector.rb
ianwhite-pickle-0.1.3 lib/pickle/injector.rb
ianwhite-pickle-0.1.4 lib/pickle/injector.rb