Sha256: 4ad5b4b3ed101b07142cb454812a06bfabcd33fab8701677be3818ffb66eb8b2

Contents?: true

Size: 1.39 KB

Versions: 1

Compression:

Stored size: 1.39 KB

Contents

# frozen_string_literal: true

require 'nokogiri'

module Vnstat
  # A class encapsulating document data.
  #
  # @!attribute [r] data
  #   @return [Nokogiri::XML::Document] The underlying XML document.
  class Document
    ##
    # Initializes the document.
    #
    # @param [String] data The raw XML data.
    def initialize(data)
      self.data = data
    end

    ##
    # @return [Document]
    def self.open(*args)
      new(*args, load_data(*args))
    end

    ##
    # A hook used by {.open} that is intended to be overridden by subclasses.
    #
    # @raise [NotImplementedError]
    def self.load_data(*_args)
      raise NotImplementedError, "Please override #{name}.#{__method__}"
    end

    attr_reader :data

    ##
    # Sets the raw XML data for the {Document}.
    #
    # @param [String] data A string representing the document.
    # @raise [ArgumentError] Raised if the specified data was nil.
    def data=(data)
      raise ArgumentError, 'No document data specified' if data.nil?
      @data = Nokogiri::XML.parse(data.to_s)
    end

    ##
    # Returns the version as specified in the vnstat element.
    #
    # @return [String]
    def version
      data.xpath('vnstat').attr('version').text
    end

    ##
    # Returns the XML version as specified in the vnstat element.
    #
    # @return [String]
    def xml_version
      data.xpath('vnstat').attr('xmlversion').text
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vnstat-ruby-2.0.0 lib/vnstat/document.rb