lib/rcap/cap_1_0/alert.rb in rcap-2.4.1 vs lib/rcap/cap_1_0/alert.rb in rcap-2.5.0

- old
+ new

@@ -1,23 +1,21 @@ module RCAP module CAP_1_0 - # An Alert object is valid if # * it has an identifier # * it has a sender # * it has a sent time # * it has a valid status value # * it has a valid messge type value # * it has a valid scope value # * all Info objects contained in infos are valid class Alert < RCAP::Base::Alert + XMLNS = 'http://www.incident.com/cap/1.0' + CAP_VERSION = '1.0' - XMLNS = "http://www.incident.com/cap/1.0" - CAP_VERSION = "1.0" - # @return [String] - attr_accessor( :password ) + attr_accessor(:password) # @return [String] def xmlns XMLNS end @@ -29,137 +27,135 @@ PASSWORD_ELEMENT_NAME = 'password' # @return [REXML::Element] def to_xml_element - xml_element = REXML::Element.new( XML_ELEMENT_NAME ) - xml_element.add_namespace( XMLNS ) - xml_element.add_element( IDENTIFIER_ELEMENT_NAME ).add_text( @identifier ) if @identifier - xml_element.add_element( SENDER_ELEMENT_NAME ).add_text( @sender ) if @sender - xml_element.add_element( SENT_ELEMENT_NAME ).add_text( @sent.to_s_for_cap ) if @sent - xml_element.add_element( STATUS_ELEMENT_NAME ).add_text( @status ) if @status - xml_element.add_element( MSG_TYPE_ELEMENT_NAME ).add_text( @msg_type ) if @msg_type - xml_element.add_element( PASSWORD_ELEMENT_NAME ).add_text( @password ) if @password - xml_element.add_element( SOURCE_ELEMENT_NAME ).add_text( @source ) if @source - xml_element.add_element( SCOPE_ELEMENT_NAME ).add_text( @scope ) if @scope - xml_element.add_element( RESTRICTION_ELEMENT_NAME ).add_text( @restriction ) if @restriction + xml_element = REXML::Element.new(XML_ELEMENT_NAME) + xml_element.add_namespace(XMLNS) + xml_element.add_element(IDENTIFIER_ELEMENT_NAME).add_text(@identifier) if @identifier + xml_element.add_element(SENDER_ELEMENT_NAME).add_text(@sender) if @sender + xml_element.add_element(SENT_ELEMENT_NAME).add_text(@sent.to_s_for_cap) if @sent + xml_element.add_element(STATUS_ELEMENT_NAME).add_text(@status) if @status + xml_element.add_element(MSG_TYPE_ELEMENT_NAME).add_text(@msg_type) if @msg_type + xml_element.add_element(PASSWORD_ELEMENT_NAME).add_text(@password) if @password + xml_element.add_element(SOURCE_ELEMENT_NAME).add_text(@source) if @source + xml_element.add_element(SCOPE_ELEMENT_NAME).add_text(@scope) if @scope + xml_element.add_element(RESTRICTION_ELEMENT_NAME).add_text(@restriction) if @restriction if @addresses.any? - xml_element.add_element( ADDRESSES_ELEMENT_NAME ).add_text( @addresses.to_s_for_cap ) + xml_element.add_element(ADDRESSES_ELEMENT_NAME).add_text(@addresses.to_s_for_cap) end @codes.each do |code| - xml_element.add_element( CODE_ELEMENT_NAME ).add_text( code ) + xml_element.add_element(CODE_ELEMENT_NAME).add_text(code) end - xml_element.add_element( NOTE_ELEMENT_NAME ).add_text( @note ) if @note + xml_element.add_element(NOTE_ELEMENT_NAME).add_text(@note) if @note if @references.any? - xml_element.add_element( REFERENCES_ELEMENT_NAME ).add_text( @references.join( ' ' )) + xml_element.add_element(REFERENCES_ELEMENT_NAME).add_text(@references.join(' ')) end if @incidents.any? - xml_element.add_element( INCIDENTS_ELEMENT_NAME ).add_text( @incidents.join( ' ' )) + xml_element.add_element(INCIDENTS_ELEMENT_NAME).add_text(@incidents.join(' ')) end @infos.each do |info| - xml_element.add_element( info.to_xml_element ) + xml_element.add_element(info.to_xml_element) end xml_element end # @return [String] def inspect - alert_inspect = [ "CAP Version: #{ CAP_VERSION }", - "Identifier: #{ @identifier }", - "Sender: #{ @sender }", - "Sent: #{ @sent }", - "Status: #{ @status }", - "Message Type: #{ @msg_type }", - "Password: #{ @password }", - "Source: #{ @source }", - "Scope: #{ @scope }", - "Restriction: #{ @restriction }", - "Addresses: #{ @addresses.to_s_for_cap }", - "Codes:", - @codes.map{ |code| " " + code }.join("\n"), - "Note: #{ @note }", - "References: #{ @references.join( ' ' )}", - "Incidents: #{ @incidents.join( ' ')}", - "Information:", - @infos.map{ |info| " " + info.to_s }.join( "\n" )].join("\n") - RCAP.format_lines_for_inspect( 'ALERT', alert_inspect ) + alert_inspect = ["CAP Version: #{ CAP_VERSION }", + "Identifier: #{ @identifier }", + "Sender: #{ @sender }", + "Sent: #{ @sent }", + "Status: #{ @status }", + "Message Type: #{ @msg_type }", + "Password: #{ @password }", + "Source: #{ @source }", + "Scope: #{ @scope }", + "Restriction: #{ @restriction }", + "Addresses: #{ @addresses.to_s_for_cap }", + 'Codes:', + @codes.map { |code| ' ' + code }.join("\n"), + "Note: #{ @note }", + "References: #{ @references.join(' ')}", + "Incidents: #{ @incidents.join(' ')}", + 'Information:', + @infos.map { |info| ' ' + info.to_s }.join("\n")].join("\n") + RCAP.format_lines_for_inspect('ALERT', alert_inspect) end - PASSWORD_XPATH = "cap:#{ PASSWORD_ELEMENT_NAME }" # @param [REXML::Element] alert_xml_element # @return [RCAP::CAP_1_0::Alert] - def self.from_xml_element( alert_xml_element ) + def self.from_xml_element(alert_xml_element) super.tap do |alert| - alert.password = RCAP.xpath_text( alert_xml_element, PASSWORD_XPATH, Alert::XMLNS ) + alert.password = RCAP.xpath_text(alert_xml_element, PASSWORD_XPATH, Alert::XMLNS) end end + PASSWORD_YAML = 'Password' - PASSWORD_YAML = "Password" - # Returns a string containing the YAML representation of the alert. # # @return [String] - def to_yaml( options = {} ) - RCAP.attribute_values_to_hash( [ CAP_VERSION_YAML, CAP_VERSION ], - [ IDENTIFIER_YAML, @identifier ], - [ SENDER_YAML, @sender ], - [ SENT_YAML, @sent ], - [ STATUS_YAML, @status ], - [ MSG_TYPE_YAML, @msg_type ], - [ PASSWORD_YAML, @password ], - [ SOURCE_YAML, @source ], - [ SCOPE_YAML, @scope ], - [ RESTRICTION_YAML, @restriction ], - [ ADDRESSES_YAML, @addresses ], - [ CODES_YAML, @codes ], - [ NOTE_YAML, @note ], - [ REFERENCES_YAML, @references ], - [ INCIDENTS_YAML, @incidents ], - [ INFOS_YAML, @infos.map( &:to_yaml_data )]).to_yaml( options ) + def to_yaml(options = {}) + RCAP.attribute_values_to_hash([CAP_VERSION_YAML, CAP_VERSION], + [IDENTIFIER_YAML, @identifier], + [SENDER_YAML, @sender], + [SENT_YAML, @sent], + [STATUS_YAML, @status], + [MSG_TYPE_YAML, @msg_type], + [PASSWORD_YAML, @password], + [SOURCE_YAML, @source], + [SCOPE_YAML, @scope], + [RESTRICTION_YAML, @restriction], + [ADDRESSES_YAML, @addresses], + [CODES_YAML, @codes], + [NOTE_YAML, @note], + [REFERENCES_YAML, @references], + [INCIDENTS_YAML, @incidents], + [INFOS_YAML, @infos.map(&:to_yaml_data)]).to_yaml(options) end # @param [Hash] alert_yaml_data # @return [RCAP::CAP_1_0::Alert] - def self.from_yaml_data( alert_yaml_data ) + def self.from_yaml_data(alert_yaml_data) super.tap do |alert| - alert.password = RCAP.strip_if_given( alert_yaml_data[ PASSWORD_YAML ]) + alert.password = RCAP.strip_if_given(alert_yaml_data[PASSWORD_YAML]) end end PASSWORD_KEY = 'password' # Returns a Hash representation of an Alert object # # @return [Hash] def to_h - RCAP.attribute_values_to_hash( [ CAP_VERSION_KEY, CAP_VERSION ], - [ IDENTIFIER_KEY, @identifier ], - [ SENDER_KEY, @sender ], - [ SENT_KEY, RCAP.to_s_for_cap( @sent )], - [ STATUS_KEY, @status ], - [ MSG_TYPE_KEY, @msg_type ], - [ PASSWORD_KEY, @password ], - [ SOURCE_KEY, @source ], - [ SCOPE_KEY, @scope ], - [ RESTRICTION_KEY, @restriction ], - [ ADDRESSES_KEY, @addresses ], - [ CODES_KEY, @codes ], - [ NOTE_KEY, @note ], - [ REFERENCES_KEY, @references ], - [ INCIDENTS_KEY, @incidents ], - [ INFOS_KEY, @infos.map{ |info| info.to_h }]) + RCAP.attribute_values_to_hash([CAP_VERSION_KEY, CAP_VERSION], + [IDENTIFIER_KEY, @identifier], + [SENDER_KEY, @sender], + [SENT_KEY, RCAP.to_s_for_cap(@sent)], + [STATUS_KEY, @status], + [MSG_TYPE_KEY, @msg_type], + [PASSWORD_KEY, @password], + [SOURCE_KEY, @source], + [SCOPE_KEY, @scope], + [RESTRICTION_KEY, @restriction], + [ADDRESSES_KEY, @addresses], + [CODES_KEY, @codes], + [NOTE_KEY, @note], + [REFERENCES_KEY, @references], + [INCIDENTS_KEY, @incidents], + [INFOS_KEY, @infos.map { |info| info.to_h }]) end # Initialises an Alert object from a Hash produced by Alert#to_h # # @param [Hash] alert_hash # @return [RCAP::CAP_1_0::Alert] - def self.from_h( alert_hash ) + def self.from_h(alert_hash) super.tap do |alert| - alert.password = RCAP.strip_if_given( alert_hash[ PASSWORD_KEY ]) + alert.password = RCAP.strip_if_given(alert_hash[PASSWORD_KEY]) end end end end end