class Hiroiyomi::Html::Attribute

Attribute

Attributes

name[RW]
value[RW]

Public Class Methods

new(name, value = nil) click to toggle source
# File lib/hiroiyomi/html/attribute.rb, line 60
def initialize(name, value = nil)
  @name  = name
  @value = value
end
value_of(file) click to toggle source
# File lib/hiroiyomi/html/attribute.rb, line 12
def value_of(file)
  name = DOMParserHelper.extract_string(file)
  return nil if name.empty?
  value = extract_value(file)
  Attribute.new(name, value.empty? ? nil : value)
end

Private Class Methods

extract_value(file) click to toggle source

rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength, Metrics/PerceivedComplexity name=value

Check spaces and > whether value is end

name=“value” name='value'

# File lib/hiroiyomi/html/attribute.rb, line 26
def extract_value(file)
  value = ''
  open  = { "'" => false, '"' => false }
  equal = false

  while (c = file.getc)
    case c
    when "'", '"'
      break if open[c]
      open_keys = open.keys
      open_keys.delete(c)
      if open[open_keys.first]
        value += c
      else
        open[c] = true
      end
    else
      if open.values.any?
        value += c
      elsif c == '='
        equal = true
      elsif ['>', ' '].include?(c)
        file.ungetc(c)
        break
      elsif equal
        value += c
      end
    end
  end
  value
end

Public Instance Methods

to_s() click to toggle source
# File lib/hiroiyomi/html/attribute.rb, line 65
def to_s
  "#{name}=\"#{value}\""
end