Class: ActiveResourceable::Sessionable

Inherits:
Module
  • Object
show all
Extended by:
ActiveSupport::Concern
Defined in:
app/models/concerns/active_resourceable/sessionable.rb

Instance Method Summary collapse

Constructor Details

#initialize(attrs) ⇒ Sessionable

Returns a new instance of Sessionable.



4
5
6
# File 'app/models/concerns/active_resourceable/sessionable.rb', line 4

def initialize(attrs)
  @session_attrs = attrs
end

Instance Method Details

#included(base) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'app/models/concerns/active_resourceable/sessionable.rb', line 8

def included(base)
  session_attrs = @session_attrs

  base.class_eval do

    attr_accessor :session

    define_method(:session_attrs) do
      session_attrs
    end

    def delete_session *attrs
      attrs = session_attrs if attrs.empty?
      attrs.each do |name, opt|
        send(:"delete_#{name}")
      end
    end

    session_attrs.each do |name, opt|

      define_method(:"session_name_for_#{name}") do
        "#{self.class.name.tableize}_#{name}"
      end

      define_method(:"modified_at_session_name_for_#{name}") do
        "#{self.class.name.tableize}_#{name}_modified_at"
      end

      define_method(name) do
        raise "Session is not set" if self.session.nil?
        is_expired = send(:"is_#{name}_expired?")
        is_expired ? nil : self.session[send(:"session_name_for_#{name}")]
      end

      define_method(:"#{name}=") do |value|
        raise "Session is not set" if self.session.nil?
        self.session[send(:"session_name_for_#{name}")] = value
        self.session[send(:"modified_at_session_name_for_#{name}")] = Time.now
      end

      define_method(:"delete_#{name}") do
        raise "Session is not set" if self.session.nil?
        self.session.delete send(:"modified_at_session_name_for_#{name}")
        self.session.delete send(:"session_name_for_#{name}")
      end

      define_method(:"is_#{name}_expired?") do
        raise "Session is not set" if self.session.nil?
        modified_at = self.session[send(:"modified_at_session_name_for_#{name}")]
        (not opt[:expire_after].nil? and not modified_at.nil?) ? modified_at.to_datetime + opt[:expire_after] < Time.now : false
      end

    end

  end

end