Sha256: e96a11b357c43591522ea2a5e2b93ef5961ddea0180cb6d0df6432f5ee41e377

Contents?: true

Size: 1.65 KB

Versions: 3

Compression:

Stored size: 1.65 KB

Contents

module Nmap
  class XML
    module CPE
      #
      # Represents a [Common Platform Enumeration (CPE)][CPE] URL.
      #
      # [CPE]: http://nmap.org/book/output-formats-cpe.html
      #
      # @since 1.0.0
      #
      class URL < Struct.new(:part,:vendor,:product,:version,:update,:edition,
                             :language)

        # CPE part codes
        PARTS = {
          '/a' => :application,
          '/h' => :hardware,
          '/o' => :os
        }

        #
        # Parses a CPE URL.
        #
        # @param [String] url
        #   The raw URL.
        #
        # @return [URL]
        #   The parsed URL.
        #
        def self.parse(url)
          scheme,
            part,
            vendor,
            product,
            version,
            update,
            edition,
            language = url.split(':',8)

          unless scheme == 'cpe'
            raise(ArgumentError,"CPE URLs must begin with 'cpe:'")
          end

          vendor   = vendor.to_sym
          product  = product.to_sym
          language = language.to_sym if language

          return new(
            PARTS[part],
            vendor,
            product,
            version,
            update,
            edition,
            language
          )
        end

        #
        # Converts the CPE URL back into a String.
        #
        # @return [String]
        #   The raw CPE URL.
        #
        def to_s
          'cpe:' + [
            PARTS.invert[part],
            vendor,
            product,
            version,
            update,
            edition,
            language
          ].compact.join(':')
        end

      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
ruby-nmap-1.0.2 lib/nmap/xml/cpe/url.rb
ruby-nmap-1.0.1 lib/nmap/xml/cpe/url.rb
ruby-nmap-1.0.0 lib/nmap/xml/cpe/url.rb