class NodeAttr

Attributes

genders[RW]

Public Class Methods

new(filename = nil) click to toggle source
# File lib/nodeattr.rb, line 7
def initialize(filename = nil)
  
  @genders = Hash.new { |hash, key| hash[key] = [] }
  
  if not filename.nil?
    file = File.readlines(filename)
  elsif File.exists?('~/.genders')
    file = File.readlines('~/.genders')
  elsif File.exists?('/etc/genders')
    file = IO.readlines('/etc/genders', "\n")
  end
  load file

end

Public Instance Methods

explode_nodes(nodes) click to toggle source
# File lib/nodeattr.rb, line 40
def explode_nodes(nodes)
  h = Array.new
  m = nodes.match(/^(.*)\[(.*)\]$/)
  if m
    base = m[1]
    instances = m[2].split(',')
    instances.each do |i|
      if i.match(/-/)
        left, right = i.split('-')
        padding = left.match(/^0+/)
        (left.to_i .. right.to_i).each do |j|
          h << sprintf("%s%0#{padding.to_s.length + 1}d", base, j)
        end
      else
        padding = i.match(/^0+/).size - 1
        if padding.size > 1
          pad = '0' * (padding.size -1)
        end
        h << sprintf("%s%0#{padding.to_s.length + 1}d", base, j)
      end
    end
  end
  h
end
load(file) click to toggle source
# File lib/nodeattr.rb, line 22
def load(file)
  file.each do |line|
    nodes = []
    next if line =~ /^#/
    next if line =~ /^\s+$/
    line.chomp!
    nodes_part, genders_part = line.split(/\s+/)
    nodes << explode_nodes(nodes_part)
    # puts genders_part
    if genders_part
      genders = genders_part.split(',')
      genders.each do |gender|
        @genders[gender] = @genders[gender] + nodes.flatten
      end
    end
  end
end
query(filter) click to toggle source
# File lib/nodeattr.rb, line 65
def query(filter)
  if @genders.has_key?(filter)
    @genders[filter] 
  else
    []
  end
end