Class: Spider::Session

Inherits:
Object show all
Defined in:
lib/spiderfw/controller/session.rb

Direct Known Subclasses

FileSession, MemorySession

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(sid = nil) ⇒ Session

Returns a new instance of Session.



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

def initialize(sid=nil)
    @sid = sid || generate_sid
end

Instance Attribute Details

#sidObject (readonly)

Returns the value of attribute sid.



8
9
10
# File 'lib/spiderfw/controller/session.rb', line 8

def sid
  @sid
end

Class Method Details

.check_purgeObject



29
30
31
32
33
34
# File 'lib/spiderfw/controller/session.rb', line 29

def self.check_purge
    if (!@last_purge || (Time.now - @last_purge) > Spider.conf.get('session.purge_check'))
        purge(Spider.conf.get('session.life'))
        @last_purge = Time.now
    end
end

.get(sid = nil) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/spiderfw/controller/session.rb', line 10

def self.get(sid=nil)
    klass = nil
    case Spider.conf.get('session.store')
    when 'db'
    when 'memcached'
    when 'file'
        klass = FileSession
    else
        klass = MemorySession
    end
    klass.setup
    return klass.new(sid)
end

.purgeObject

Raises:

  • (RuntimeError)


36
37
38
# File 'lib/spiderfw/controller/session.rb', line 36

def self.purge
    raise RuntimeError, "Unimplemented"
end

.setupObject



24
25
26
27
# File 'lib/spiderfw/controller/session.rb', line 24

def self.setup
    return if @setup
    @setup = true
end

Instance Method Details

#[](key) ⇒ Object



57
58
59
60
# File 'lib/spiderfw/controller/session.rb', line 57

def [](key)
    restore unless @restored
    @data[key]
end

#[]=(key, val) ⇒ Object



62
63
64
65
66
67
# File 'lib/spiderfw/controller/session.rb', line 62

def []=(key, val)
    restore unless @restored
    raise "You can't overwrite the :_flash Hash" if key == :_flash
    raise "You can't overwrite the :_transient Hash" if key == :_transient
    @data[key] = val
end

#clear_empty_hashes!(h) ⇒ Object



97
98
99
100
101
102
103
104
105
106
107
# File 'lib/spiderfw/controller/session.rb', line 97

def clear_empty_hashes!(h)
    h.each do |k, v|
        if (v.is_a?(Hash))
            if (v.empty?)
                h.delete(k)
            else
                clear_empty_hashes!(v)
            end
        end
    end
end

#delete(key = nil) ⇒ Object



44
45
46
47
48
49
50
51
# File 'lib/spiderfw/controller/session.rb', line 44

def delete(key=nil)
    if key
        restore unless @restored
        @data.delete(key)
    else
        self.class.delete(@sid)
    end
end

#flashObject



87
88
89
90
# File 'lib/spiderfw/controller/session.rb', line 87

def flash
    restore unless @restored
    @data[:_flash] ||= FlashHash.new
end

#generate_sidObject



53
54
55
# File 'lib/spiderfw/controller/session.rb', line 53

def generate_sid
    UUIDTools::UUID.random_create.to_s
end

#persistObject



70
71
72
73
74
75
76
77
78
# File 'lib/spiderfw/controller/session.rb', line 70

def persist
    return unless @restored
    clear_empty_hashes!(@data)
    @data[:_flash].purge if @data[:_flash]
    @data[:_transient].purge if @data[:_transient]
    # Spider::Logger.debug("PERSISTING SESSION:")
    # Spider::Logger.debug(@data)
    self.class[@sid] = @data
end

#restoreObject



80
81
82
83
84
85
# File 'lib/spiderfw/controller/session.rb', line 80

def restore
    @data = self.class[@sid] || {}
    @data[:_flash].reset if @data[:_flash]
    Spider.logger.debug("Session restored: #{@data.inspect}")
    @restored = true
end

#transientObject



92
93
94
95
# File 'lib/spiderfw/controller/session.rb', line 92

def transient
    restore unless @restored
    @data[:_transient] ||= TransientHash.new
end