Class: Lusnoc::Session

Inherits:
Object
  • Object
show all
Includes:
Helper
Defined in:
lib/lusnoc/session.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Helper

#build_url, #logger

Constructor Details

#initialize(name, ttl: 20, &block) ⇒ Session

Returns a new instance of Session.



11
12
13
14
15
16
# File 'lib/lusnoc/session.rb', line 11

def initialize(name, ttl: 20, &block)
  @name = name
  @ttl = ttl

  run(&block) if block_given?
end

Instance Attribute Details

#aliveObject (readonly)

Returns the value of attribute alive.



9
10
11
# File 'lib/lusnoc/session.rb', line 9

def alive
  @alive
end

#expired_atObject (readonly)

Returns the value of attribute expired_at.



9
10
11
# File 'lib/lusnoc/session.rb', line 9

def expired_at
  @expired_at
end

#idObject (readonly)

Returns the value of attribute id.



9
10
11
# File 'lib/lusnoc/session.rb', line 9

def id
  @id
end

#nameObject (readonly)

Returns the value of attribute name.



9
10
11
# File 'lib/lusnoc/session.rb', line 9

def name
  @name
end

#ttlObject (readonly)

Returns the value of attribute ttl.



9
10
11
# File 'lib/lusnoc/session.rb', line 9

def ttl
  @ttl
end

Instance Method Details

#alive!(exception_class = ExpiredError) ⇒ Object



44
45
46
# File 'lib/lusnoc/session.rb', line 44

def alive!(exception_class = ExpiredError)
  @alive || (raise exception_class.new("Session[#{@name}:#{@id}] expired"))
end

#alive?Boolean

Returns:

  • (Boolean)


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

def alive?
  @alive
end

#expired?Boolean

Returns:

  • (Boolean)


28
29
30
# File 'lib/lusnoc/session.rb', line 28

def expired?
  !alive?
end

#need_renew?Boolean

Returns:

  • (Boolean)


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

def need_renew?
  time_to_expiration && time_to_expiration < (@ttl / 2.0)
end

#on_session_die(&block) ⇒ Object



55
56
57
58
59
# File 'lib/lusnoc/session.rb', line 55

def on_session_die(&block)
  @session_die_cb = block
  @session_die_cb&.call(self) if @alive == false
  self
end

#renewObject



48
49
50
51
52
53
# File 'lib/lusnoc/session.rb', line 48

def renew
  alive!
  Lusnoc.http_put(build_url("/v1/session/renew/#{@id}"), nil, timeout: 1)
  @expired_at = Time.now + ttl
  logger.info "Session[#{@name}:#{@id}] renewed. Next expiration: #{@expired_at}"
end

#runObject



18
19
20
21
22
23
24
25
26
# File 'lib/lusnoc/session.rb', line 18

def run
  @id = create_session(name, ttl)

  prepare_guard(@id).run do
    yield(self)
  end
ensure
  destroy_session(@id) if @id
end

#time_to_expirationObject



32
33
34
# File 'lib/lusnoc/session.rb', line 32

def time_to_expiration
  @expired_at && @expired_at - Time.now
end