class Elected::Senado

Attributes

key[W]
stats[R]
timeout[W]

Public Class Methods

new(key = nil, timeout = nil) click to toggle source
# File lib/elected/senado.rb, line 11
def initialize(key = nil, timeout = nil)
  @key     = key
  @timeout = timeout
  @stats   = Stats.new :elected, :rejected, :missing, :released
end

Public Instance Methods

inspect()
Alias for: to_s
key() click to toggle source
# File lib/elected/senado.rb, line 17
def key
  @key || Elected.key
end
leader() click to toggle source
# File lib/elected/senado.rb, line 26
def leader
  mutex.synchronize { get_leader || set_leader }
end
leader?() click to toggle source
# File lib/elected/senado.rb, line 30
def leader?
  !!leader
end
release() click to toggle source
# File lib/elected/senado.rb, line 34
def release
  return false unless @leader

  if @leader.current?
    Elected.electorado.unlock @leader.info
    @stats.increment :released
  end

  @leader = false
end
timeout() click to toggle source

In ms (milliseconds), defaults to 5 seconds

# File lib/elected/senado.rb, line 22
def timeout
  @timeout || Elected.timeout
end
to_s() click to toggle source
# File lib/elected/senado.rb, line 45
def to_s
  %{#<#{self.class.name} key=#{key.inspect} timeout=#{timeout} leader?=#{leader?}>}
end
Also aliased as: inspect

Private Instance Methods

get_leader() click to toggle source
# File lib/elected/senado.rb, line 57
def get_leader
  unless @leader
    @stats.increment :missing
    return false
  end

  return @leader if @leader.current?

  release
end
mutex() click to toggle source
# File lib/elected/senado.rb, line 53
def mutex
  @mutex ||= Mutex.new
end
set_leader() click to toggle source
# File lib/elected/senado.rb, line 68
def set_leader
  found = Elected.electorado.lock key, timeout
  if found
    @stats.increment :elected
    @leader = Lider.new found, timeout
  else
    @stats.increment :rejected
    false
  end
end