class Datasets::LIBSVMDatasetList::DetailListener

Public Class Methods

new(abort_tag, id, base_url, record) click to toggle source
# File lib/datasets/libsvm-dataset-list.rb, line 146
def initialize(abort_tag, id, base_url, record)
  @abort_tag = abort_tag
  @id = id
  @base_url = base_url
  @record = record
  @in_target = false
  @target_li_level = nil
  @key = nil
  @data = nil
  @file = nil
end

Public Instance Methods

tag_end(name) click to toggle source
# File lib/datasets/libsvm-dataset-list.rb, line 182
def tag_end(name)
  if @in_target
    case name
    when "ul"
      throw(@abort_tag) if @target_li_level == -1
    when "li"
      case @target_li_level
      when 0
        if @key
          data = @data
          data = data.gsub(/[ \t\n]+/, " ").strip if data.is_a?(String)
          @record[@key] = data
        end
      when 1
        @data << @file if @data and @file
      end
      @target_li_level -= 1
    end
  end
end
tag_start(name, attributes) click to toggle source
# File lib/datasets/libsvm-dataset-list.rb, line 158
def tag_start(name, attributes)
  if @in_target
    case name
    when "li"
      @target_li_level += 1
      case @target_li_level
      when 0
        @key = nil
        @data = nil
        @file = nil
      when 1
        @file = File.new
      end
    when "a"
      @file.url = @base_url + attributes["href"] if @file
    end
  else
    if attributes["name"] == @id
      @in_target = true
      @target_li_level = -1
    end
  end
end
text(data) click to toggle source
# File lib/datasets/libsvm-dataset-list.rb, line 203
def text(data)
  case @target_li_level
  when 0
    if @key
      @data << data
    else
      case data.gsub(/[ \t\n]+/, " ")
      when /\ASource: /
        @key = :source
        @data = $POSTMATCH
      when /\APreprocessing: /
        @key = :preprocessing
        @data = $POSTMATCH
      when /\A\# of classes: (\d+)/
        @key = :n_classes
        @data = Integer($1, 10)
      when /\A\# of data: ([\d,]+)/
        @key = :n_data
        @data = Integer($1.gsub(/,/, ""), 10)
      when /\A\# of features: ([\d,]+)/
        @key = :n_features
        @data = Integer($1.gsub(/,/, ""), 10)
      when /\AFiles:/
        @key = :files
        @data = []
      end
    end
  when 1
    if @file.name.nil?
      @file.name = data
    else
      @file.note = data.strip.gsub(/[()]/, "")
    end
  end
end