Sha256: 96e224a24559787783b7648b52ec9b8045b897e11d39c245e5266c452263e9d6

Contents?: true

Size: 1.3 KB

Versions: 2

Compression:

Stored size: 1.3 KB

Contents

module Ramaze
  module Helper
    module User
      def self.inherited(klass)
        klass.trait :user_model => ::User
      end

      def user
        if instance_variable_defined?('@user_helper')
          @user_helper
        else
          @user_helper = Wrapper.new ancestral_trait[:user_model]
        end
      end

      class Wrapper
        thread_accessor :session
        attr_accessor :user

        def initialize(model)
          raise ArgumentError, "No model defined for Helper::User" unless model
          @model = model
          @user = nil
          login(persist)
        end

        def logged_in?
          !!@user
        end

        def login?(hash)
          credentials = {}
          hash.each{|k,v| credentials[k.to_sym] = v.to_s }
          @model[credentials]
        end

        def persist
          session[:USER] ||= {}
        end

        def persist=(hash)
          session[:USER] = hash
        end

        def login(hash = Request.current.params)
          return if hash.empty?
          if found = login?(hash)
            @user = found
            self.persist = hash
          end
        end

        def logout
          persist.clear
        end

        def method_missing(meth, *args, &block)
          @user.send(meth, *args, &block)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
ramaze-0.3.9 lib/ramaze/helper/user.rb
ramaze-0.3.9.1 lib/ramaze/helper/user.rb