Class: Challah::Session

Inherits:
Object
  • Object
show all
Extended by:
ActiveModel::Naming
Includes:
ActiveModel::Conversion
Defined in:
lib/challah/session.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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.options[: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

#ipObject

Returns the value of attribute ip.



6
7
8
# File 'lib/challah/session.rb', line 6

def ip
  @ip
end

#paramsObject (readonly)

Returns the value of attribute params.



7
8
9
# File 'lib/challah/session.rb', line 7

def params
  @params
end

#persistObject

Returns the value of attribute persist.



6
7
8
# File 'lib/challah/session.rb', line 6

def persist
  @persist
end

#requestObject (readonly)

Returns the value of attribute request.



7
8
9
# File 'lib/challah/session.rb', line 7

def request
  @request
end

#return_toObject

Returns the value of attribute return_to.



6
7
8
# File 'lib/challah/session.rb', line 6

def return_to
  @return_to
end

#storeObject

Returns the value of attribute store.



6
7
8
# File 'lib/challah/session.rb', line 6

def store
  @store
end

#userObject

Returns the value of attribute user.



6
7
8
# File 'lib/challah/session.rb', line 6

def user
  @user
end

#user_modelObject (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

.destroyObject

Clear out any existing sessions



145
146
147
148
149
# File 'lib/challah/session.rb', line 145

def self.destroy
  session = Session.find
  session.destroy if session
  session
end

.find(*args) ⇒ Object

Load any existing session from the session store



152
153
154
155
156
# File 'lib/challah/session.rb', line 152

def self.find(*args)
  session = Session.new(*args)
  session.find
  session
end

Instance Method Details

#destroyObject



16
17
18
19
20
21
# File 'lib/challah/session.rb', line 16

def destroy
  self.store.destroy

  @valid = false
  @user = nil
end

#findObject



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

#inspectObject



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

Returns:

  • (Boolean)


40
41
42
# File 'lib/challah/session.rb', line 40

def persist?
  !!@persist
end

#readObject



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

#saveObject



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_idObject

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

#usernameObject



82
83
84
# File 'lib/challah/session.rb', line 82

def username
  params[:username] || params[:email] || ""
end

#username?Boolean

Returns:

  • (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.

Returns:

  • (Boolean)


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