File: webrick/httpauth/htgroup.rb

Overview
Module Structure
Class Hierarchy
Code

Overview

Module Structure

  module: <Toplevel Module>
  module: WEBrick#12
  module: HTTPAuth#13
  class: Htgroup#14
inherits from
  Object ( Builtin-Module )
has properties
method: initialize / 1 #15
method: reload #23
method: flush / 1 #37
method: members / 1 #51
method: add / 2 #56

Class Hierarchy

Code

   1  #
   2  # httpauth/htgroup.rb -- Apache compatible htgroup file
   3  #
   4  # Author: IPR -- Internet Programming with Ruby -- writers
   5  # Copyright (c) 2003 Internet Programming with Ruby writers. All rights
   6  # reserved.
   7  #
   8  # $IPR: htgroup.rb,v 1.1 2003/02/16 22:22:56 gotoyuzo Exp $
   9 
  10  require 'tempfile'
  11 
  12  module WEBrick
  13    module HTTPAuth
  14      class Htgroup
  15        def initialize(path)
  16          @path = path
  17          @mtime = Time.at(0)
  18          @group = Hash.new
  19          open(@path,"a").close unless File::exist?(@path)
  20          reload
  21        end
  22 
  23        def reload
  24          if (mtime = File::mtime(@path)) > @mtime
  25            @group.clear
  26            open(@path){|io|
  27              while line = io.gets
  28                line.chomp!
  29                group, members = line.split(/:\s*/)
  30                @group[group] = members.split(/\s+/)
  31              end
  32            }
  33            @mtime = mtime
  34          end
  35        end
  36 
  37        def flush(output=nil)
  38          output ||= @path
  39          tmp = Tempfile.new("htgroup", File::dirname(output))
  40          begin
  41            @group.keys.sort.each{|group|
  42              tmp.puts(format("%s: %s", group, self.members(group).join(" ")))
  43            }
  44            tmp.close
  45            File::rename(tmp.path, output)
  46          rescue
  47            tmp.close(true)
  48          end
  49        end
  50 
  51        def members(group)
  52          reload
  53          @group[group] || []
  54        end
  55 
  56        def add(group, members)
  57          @group[group] = members(group) | members
  58        end
  59      end
  60    end
  61  end