Class: Challah::Session
- Inherits:
-
Object
- Object
- Challah::Session
- Extended by:
- ActiveModel::Naming
- Includes:
- ActiveModel::Conversion
- Defined in:
- lib/challah/session.rb
Instance Attribute Summary collapse
-
#ip ⇒ Object
Returns the value of attribute ip.
-
#params ⇒ Object
readonly
Returns the value of attribute params.
-
#persist ⇒ Object
Returns the value of attribute persist.
-
#request ⇒ Object
readonly
Returns the value of attribute request.
-
#return_to ⇒ Object
Returns the value of attribute return_to.
-
#store ⇒ Object
Returns the value of attribute store.
-
#user ⇒ Object
Returns the value of attribute user.
-
#user_model ⇒ Object
readonly
Returns the value of attribute user_model.
Class Method Summary collapse
-
.create(user_or_user_id, request = nil, params = nil, user_model = nil) ⇒ Object
Manually create a new Session.
-
.create!(user_or_user_id, request = nil, params = nil, user_model = nil) ⇒ Object
Manually create a session, and save it.
-
.destroy ⇒ Object
Clear out any existing sessions.
-
.find(*args) ⇒ Object
Load any existing session from the session store.
Instance Method Summary collapse
- #destroy ⇒ Object
- #find ⇒ Object
-
#initialize(request = nil, params = {}, user_model = nil) ⇒ Session
constructor
A new instance of Session.
- #inspect ⇒ Object
-
#method_missing(sym, *args, &block) ⇒ Object
Allow for dynamic setting of instance variables.
- #persist? ⇒ Boolean
- #read ⇒ Object
- #save ⇒ Object
-
#user_id ⇒ Object
Id of the current user.
- #username ⇒ Object
- #username? ⇒ Boolean
-
#valid? ⇒ Boolean
Returns true if this session has been authenticated and is ready to save.
Constructor Details
#initialize(request = nil, params = {}, user_model = nil) ⇒ Session
Returns a new instance of Session.
9 10 11 12 13 14 |
# File 'lib/challah/session.rb', line 9 def initialize(request = nil, params = {}, user_model = nil) @request = request @params = params || {} @user_model = user_model || Challah.user @store = Challah.[:storage_class].new(self) end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(sym, *args, &block) ⇒ Object
Allow for dynamic setting of instance variables. also allows for variable? to see if it was provided
99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/challah/session.rb', line 99 def method_missing(sym, *args, &block) if @params.has_key?(sym) return @params[sym] elsif sym.to_s =~ /^[a-z0-9_]*=$/ return @params[sym.to_s.sub(/^(.*?)=$/, '\1').to_sym] = args.shift elsif sym.to_s =~ /^[a-z0-9_]*\?$/ return !!@params[sym.to_s.sub(/^(.*?)\?$/, '\1').to_sym] end super(sym, *args, &block) end |
Instance Attribute Details
#ip ⇒ Object
Returns the value of attribute ip.
6 7 8 |
# File 'lib/challah/session.rb', line 6 def ip @ip end |
#params ⇒ Object (readonly)
Returns the value of attribute params.
7 8 9 |
# File 'lib/challah/session.rb', line 7 def params @params end |
#persist ⇒ Object
Returns the value of attribute persist.
6 7 8 |
# File 'lib/challah/session.rb', line 6 def persist @persist end |
#request ⇒ Object (readonly)
Returns the value of attribute request.
7 8 9 |
# File 'lib/challah/session.rb', line 7 def request @request end |
#return_to ⇒ Object
Returns the value of attribute return_to.
6 7 8 |
# File 'lib/challah/session.rb', line 6 def return_to @return_to end |
#store ⇒ Object
Returns the value of attribute store.
6 7 8 |
# File 'lib/challah/session.rb', line 6 def store @store end |
#user ⇒ Object
Returns the value of attribute user.
6 7 8 |
# File 'lib/challah/session.rb', line 6 def user @user end |
#user_model ⇒ Object (readonly)
Returns the value of attribute user_model.
7 8 9 |
# File 'lib/challah/session.rb', line 7 def user_model @user_model end |
Class Method Details
.create(user_or_user_id, request = nil, params = nil, user_model = nil) ⇒ Object
Manually create a new Session
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/challah/session.rb', line 112 def self.create(user_or_user_id, request = nil, params = nil, user_model = nil) if user_model.nil? user_model = Challah.user end session = Session.new(request, params, user_model) user_record = if user_model === user_or_user_id user_or_user_id else begin GlobalID::Locator.locate(user_or_user_id) rescue ActiveRecord::RecordNotFound nil end end if user_record and user_record.valid_session? session.user = user_record session.persist = true end session end |
.create!(user_or_user_id, request = nil, params = nil, user_model = nil) ⇒ Object
Manually create a session, and save it.
138 139 140 141 142 |
# File 'lib/challah/session.rb', line 138 def self.create!(user_or_user_id, request = nil, params = nil, user_model = nil) session = create(user_or_user_id, request, params, user_model) session.save session end |
Instance Method Details
#destroy ⇒ Object
16 17 18 19 20 21 |
# File 'lib/challah/session.rb', line 16 def destroy self.store.destroy @valid = false @user = nil end |
#find ⇒ Object
23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/challah/session.rb', line 23 def find self.read # If no session was found, try and authenticate valid? if @valid.nil? self.authenticate! end self end |
#inspect ⇒ Object
36 37 38 |
# File 'lib/challah/session.rb', line 36 def inspect "#<Session:0x#{object_id.to_s(16)} valid=#{valid?} store=#{self.store.inspect} user=#{user_id || 'nil'}>" end |
#persist? ⇒ Boolean
40 41 42 |
# File 'lib/challah/session.rb', line 40 def persist? !!@persist end |
#read ⇒ Object
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/challah/session.rb', line 44 def read persistence_token, user_id = self.store.read return false if persistence_token.nil? or user_id.nil? store_user = nil begin store_user = GlobalID::Locator.locate(user_id) rescue ActiveRecord::RecordNotFound nil end if store_user and store_user.valid_session? and store_user.persistence_token == persistence_token if store_user.valid_session? self.user = store_user @valid = true end end self end |
#save ⇒ Object
66 67 68 69 70 71 72 73 74 75 |
# File 'lib/challah/session.rb', line 66 def save return false unless valid? if self.user and persist? self.store.save(self.user.persistence_token, user_id) return true end false end |
#user_id ⇒ Object
Id of the current user.
78 79 80 |
# File 'lib/challah/session.rb', line 78 def user_id @user_id ||= self.user ? self.user.to_global_id : nil end |
#username ⇒ Object
82 83 84 |
# File 'lib/challah/session.rb', line 82 def username params[:username] || params[:email] || "" end |
#username? ⇒ Boolean
86 87 88 |
# File 'lib/challah/session.rb', line 86 def username? !username.empty? end |
#valid? ⇒ Boolean
Returns true if this session has been authenticated and is ready to save.
91 92 93 94 95 |
# File 'lib/challah/session.rb', line 91 def valid? return @valid if @valid != nil return true if self.user and self.user.valid_session? authenticate! end |