Sha256: 94db5194e9fc67d3ebae74942228460e22651ac335879abfeafb280c83dd9501

Contents?: true

Size: 956 Bytes

Versions: 1

Compression:

Stored size: 956 Bytes

Contents

module Saxy
  class Element
    attr_reader :attributes, :value

    def initialize
      @attributes = {}
      @value = nil
    end

    def set_attribute(name, value)
      name = attribute_name(name)
      attributes[name] ||= []
      attributes[name] << value
    end

    def append_value(string)
      unless (string = string.strip).empty?
        @value ||= ""
        @value << string
      end
    end

    def to_h
      return value unless attributes.any?
      data = attributes.reduce({}) do |memo, (name, value)|
        memo[name] = value.size == 1 ? value.first : value
        memo
      end
      data["contents"] = value
      data
    end

    def attribute_name(name)
      underscore(name)
    end

    private

    def underscore(word)
      word = word.dup
      word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
      word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
      word.tr!("-", "_")
      word.downcase!
      word
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
saxy-0.7.0 lib/saxy/element.rb