class QuickML::GroupMembers

Public Class Methods

new(config, group, db, group_config) click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 88
def initialize(config, group, db, group_config)
  @config = config
  @group = group
  @db = db
  @group_config = group_config

  @active = IcaseArray.new
  @former = IcaseArray.new
  @error  = IcaseHash.new

  load
end

Private Class Methods

generate(active, former, error) click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 205
def self.generate(active, former, error)
  c = ''
  active.each {|address| c << address+"\n" }
  former.each {|address| c << "# "+address+"\n" }
  error.each {|address, error_info|
    t = error_info.last_error_time.to_i
    c << "; #{address} #{error_info.count} #{t}\n"
  }
  return c
end
parse(active, former, error, content) click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 188
def self.parse(active, former, error, content)
  content.each {|line| 
    line.chomp!
    next if line.empty?
    if /^# (.*)/ =~ line   # removed address
      former.push($1) if ! former.include?($1)
    elsif /^; (.*?) (\d+)(?: (\d+))?/ =~ line
      address = $1
      count= $2.to_i
      last_error_time = if $3 then Time.at($3.to_i) else Time.at(0) end
      error[address]= ErrorInfo.new(count, last_error_time)
    else
      active.push(line) if ! active.include?(line)
    end
  }
end

Public Instance Methods

active_delete(address) click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 133
def active_delete(address)
  @active.delete(address)
end
active_empty?() click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 124
def active_empty?
  return @active.empty?
end
active_include?(address) click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 127
def active_include?(address)
  return @active.include?(address)
end
active_push(address) click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 130
def active_push(address)
  @active.push(address)
end
add_member(address) click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 106
def add_member(address)
  raise TooManyMembers if too_many?
  former_delete(address)
  active_push(address)
  save
end
error_count(address) click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 176
def error_count (address)
  return @error[address].count if @error.include?(address)
  return 0
end
error_delete(address) click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 152
def error_delete(address)
  @error.delete(address)
end
error_include?(address) click to toggle source

error

# File vendor/qwik/lib/qwik/group-member.rb, line 149
def error_include?(address)
  return @error.include?(address)
end
former_delete(address) click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 144
def former_delete(address)
  @former.delete(address)
end
former_include?(address) click to toggle source

former

# File vendor/qwik/lib/qwik/group-member.rb, line 138
def former_include?(address)
  return @former.include?(address)
end
former_push(address) click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 141
def former_push(address)
  @former.push(address)
end
get_active() click to toggle source

active

# File vendor/qwik/lib/qwik/group-member.rb, line 121
def get_active
  return @active
end
inc_error_count(address) click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 166
def inc_error_count (address)
  if ! @error.include?(address)
    @error[address] = ErrorInfo.new
  end
  if ! allowable_error_interval?(@error[address].last_error_time)
    @error[address].inc_count
  end
  @error[address].count
end
list() click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 162
def list
  return @active.map {|x| MailAddress.obfuscate(x) }.join("\n")
end
remove_member(address) click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 113
def remove_member(address)
  active_delete(address)
  former_push(address)
  error_delete(address)
  save
end
save() click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 101
def save
  str = GroupMembers.generate(@active, @former, @error)
  @db.put(:Members, str)
end
too_many?() click to toggle source

Old methods.

# File vendor/qwik/lib/qwik/group-member.rb, line 157
def too_many?
  return false if @group_config.unlimited?
  return @group_config[:max_members] <= @active.length
end

Private Instance Methods

allowable_error_interval?(time) click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 216
def allowable_error_interval? (time)
  now  = Time.now
  past = now - @config.allowable_error_interval
  return past < time && time <= now
end
load() click to toggle source
# File vendor/qwik/lib/qwik/group-member.rb, line 183
def load
  content = @db.get(:Members) || ''
  GroupMembers.parse(@active, @former, @error, content)
end