Sha256: 99876101e21ad6f155702f32670d47e8760972dd812dbb763c39c0358322fc40

Contents?: true

Size: 1.97 KB

Versions: 2

Compression:

Stored size: 1.97 KB

Contents

module RCAP
  module CAP_1_1
    # A Parameter object is valid if
    # * it has a name
    # * it has a value
    class Parameter
      include Validation

      validates_presence_of( :name, :value )

      attr_accessor( :name, :value )

      XML_ELEMENT_NAME   = "parameter" # :nodoc:
      NAME_ELEMENT_NAME  = "valueName" # :nodoc:
      VALUE_ELEMENT_NAME = "value"     # :nodoc:

      XPATH       = "cap:#{ XML_ELEMENT_NAME }"     # :nodoc:
      NAME_XPATH  = "cap:#{ NAME_ELEMENT_NAME }"    # :nodoc:
      VALUE_XPATH = "cap:#{ VALUE_ELEMENT_NAME }"   # :nodoc:

      def initialize( attributes = {} )
        @name = attributes[ :name ]
        @value = attributes[ :value ]
      end

      def to_xml_element # :nodoc:
        xml_element = REXML::Element.new( self.class::XML_ELEMENT_NAME )
        xml_element.add_element( self.class::NAME_ELEMENT_NAME ).add_text( self.name )
        xml_element.add_element( self.class::VALUE_ELEMENT_NAME ).add_text( self.value )
        xml_element
      end

      def to_xml # :nodoc:
        self.to_xml_element.to_s
      end

      def inspect # :nodoc:
        "#{ self.name }: #{ self.value }"
      end

      # Returns a string representation of the parameter of the form
      #  name: value
      def to_s
        self.inspect
      end

      def self.from_xml_element( parameter_xml_element ) # :nodoc:
        self.new( :name  => RCAP.xpath_text( parameter_xml_element, self::NAME_XPATH, Alert::XMLNS ),
                  :value => RCAP.xpath_text( parameter_xml_element, self::VALUE_XPATH, Alert::XMLNS ))
      end

      # Two parameters are equivalent if they have the same name and value.
      def ==( other )
        [ self.name, self.value ] == [ other.name, other.value ]
      end

      def to_h # :nodoc:
        RCAP.attribute_values_to_hash(
          [ @name, @value ])
      end

      def self.from_h( hash ) # :nodoc:
        key = hash.keys.first
        self.new( :name => key, :value => hash[ key ])
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rcap-1.3.0 lib/rcap/cap_1_1/parameter.rb
rcap-1.2.4 lib/rcap/cap_1_1/parameter.rb