rcap 2.5.0 → 2.7.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.ruby-version +1 -0
- data/CHANGELOG.md +18 -0
- data/README.md +1 -0
- data/lib/rcap.rb +3 -1
- data/lib/rcap/alert.rb +4 -2
- data/lib/rcap/base/alert.rb +70 -73
- data/lib/rcap/base/area.rb +19 -13
- data/lib/rcap/base/circle.rb +15 -4
- data/lib/rcap/base/event_code.rb +2 -0
- data/lib/rcap/base/geocode.rb +2 -0
- data/lib/rcap/base/info.rb +81 -75
- data/lib/rcap/base/parameter.rb +8 -6
- data/lib/rcap/base/point.rb +4 -2
- data/lib/rcap/base/polygon.rb +16 -8
- data/lib/rcap/base/resource.rb +13 -13
- data/lib/rcap/cap_1_0/alert.rb +36 -39
- data/lib/rcap/cap_1_0/area.rb +2 -0
- data/lib/rcap/cap_1_0/circle.rb +2 -0
- data/lib/rcap/cap_1_0/event_code.rb +3 -1
- data/lib/rcap/cap_1_0/geocode.rb +3 -1
- data/lib/rcap/cap_1_0/info.rb +3 -1
- data/lib/rcap/cap_1_0/parameter.rb +3 -2
- data/lib/rcap/cap_1_0/point.rb +2 -0
- data/lib/rcap/cap_1_0/polygon.rb +3 -1
- data/lib/rcap/cap_1_0/resource.rb +2 -0
- data/lib/rcap/cap_1_1/alert.rb +4 -2
- data/lib/rcap/cap_1_1/area.rb +2 -0
- data/lib/rcap/cap_1_1/circle.rb +2 -0
- data/lib/rcap/cap_1_1/event_code.rb +3 -1
- data/lib/rcap/cap_1_1/geocode.rb +3 -1
- data/lib/rcap/cap_1_1/info.rb +48 -46
- data/lib/rcap/cap_1_1/parameter.rb +2 -1
- data/lib/rcap/cap_1_1/point.rb +2 -0
- data/lib/rcap/cap_1_1/polygon.rb +3 -1
- data/lib/rcap/cap_1_1/resource.rb +12 -11
- data/lib/rcap/cap_1_2/alert.rb +4 -2
- data/lib/rcap/cap_1_2/area.rb +2 -0
- data/lib/rcap/cap_1_2/circle.rb +2 -0
- data/lib/rcap/cap_1_2/event_code.rb +3 -1
- data/lib/rcap/cap_1_2/geocode.rb +3 -1
- data/lib/rcap/cap_1_2/info.rb +55 -51
- data/lib/rcap/cap_1_2/parameter.rb +2 -1
- data/lib/rcap/cap_1_2/point.rb +2 -0
- data/lib/rcap/cap_1_2/polygon.rb +4 -2
- data/lib/rcap/cap_1_2/resource.rb +14 -12
- data/lib/rcap/config.rb +2 -0
- data/lib/rcap/custom_validators.rb +30 -27
- data/lib/rcap/extensions/array.rb +2 -0
- data/lib/rcap/extensions/date.rb +3 -1
- data/lib/rcap/extensions/date_time.rb +4 -1
- data/lib/rcap/extensions/float.rb +2 -0
- data/lib/rcap/extensions/integer.rb +7 -0
- data/lib/rcap/extensions/nil_class.rb +2 -0
- data/lib/rcap/extensions/string.rb +3 -1
- data/lib/rcap/extensions/time.rb +3 -0
- data/lib/rcap/formatters/yaml.rb +5 -0
- data/lib/rcap/info.rb +2 -0
- data/lib/rcap/utilities.rb +8 -10
- data/lib/rcap/validation.rb +19 -14
- data/lib/rcap/version.rb +3 -1
- data/rcap.gemspec +5 -5
- data/spec/alert_spec.rb +8 -9
- data/spec/cap_1_0/alert_spec.rb +4 -5
- data/spec/cap_1_0/area_spec.rb +7 -10
- data/spec/cap_1_0/circle_spec.rb +9 -0
- data/spec/cap_1_0/event_code_spec.rb +1 -1
- data/spec/cap_1_0/geocode_spec.rb +1 -1
- data/spec/cap_1_0/info_spec.rb +38 -38
- data/spec/cap_1_0/polygon_spec.rb +7 -5
- data/spec/cap_1_0/resource_spec.rb +6 -7
- data/spec/cap_1_1/alert_spec.rb +6 -7
- data/spec/cap_1_1/area_spec.rb +6 -8
- data/spec/cap_1_1/circle_spec.rb +9 -0
- data/spec/cap_1_1/info_spec.rb +26 -26
- data/spec/cap_1_1/parameter_spec.rb +1 -2
- data/spec/cap_1_1/polygon_spec.rb +12 -10
- data/spec/cap_1_1/resource_spec.rb +13 -13
- data/spec/cap_1_2/alert_spec.rb +7 -8
- data/spec/cap_1_2/area_spec.rb +6 -6
- data/spec/cap_1_2/circle_spec.rb +9 -0
- data/spec/cap_1_2/info_spec.rb +25 -26
- data/spec/cap_1_2/polygon_spec.rb +8 -0
- data/spec/cap_1_2/resource_spec.rb +13 -13
- data/spec/extensions_spec.rb +2 -2
- data/spec/spec_helper.rb +2 -2
- data/spec/validations_spec.rb +0 -1
- metadata +15 -15
- data/lib/rcap/extensions/fixnum.rb +0 -5
data/lib/rcap/cap_1_0/alert.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_0
|
3
5
|
# An Alert object is valid if
|
@@ -25,34 +27,28 @@ module RCAP
|
|
25
27
|
Info
|
26
28
|
end
|
27
29
|
|
28
|
-
PASSWORD_ELEMENT_NAME
|
30
|
+
PASSWORD_ELEMENT_NAME = 'password'
|
29
31
|
|
30
32
|
# @return [REXML::Element]
|
31
33
|
def to_xml_element
|
32
34
|
xml_element = REXML::Element.new(XML_ELEMENT_NAME)
|
33
35
|
xml_element.add_namespace(XMLNS)
|
34
|
-
xml_element.add_element(IDENTIFIER_ELEMENT_NAME).add_text(@identifier) if @identifier
|
35
|
-
xml_element.add_element(SENDER_ELEMENT_NAME).add_text(@sender) if @sender
|
36
|
-
xml_element.add_element(SENT_ELEMENT_NAME).add_text(@sent.to_s_for_cap) if @sent
|
37
|
-
xml_element.add_element(STATUS_ELEMENT_NAME).add_text(@status) if @status
|
38
|
-
xml_element.add_element(MSG_TYPE_ELEMENT_NAME).add_text(@msg_type) if @msg_type
|
39
|
-
xml_element.add_element(PASSWORD_ELEMENT_NAME).add_text(@password) if @password
|
40
|
-
xml_element.add_element(SOURCE_ELEMENT_NAME).add_text(@source) if @source
|
41
|
-
xml_element.add_element(SCOPE_ELEMENT_NAME).add_text(@scope) if @scope
|
42
|
-
xml_element.add_element(RESTRICTION_ELEMENT_NAME).add_text(@restriction) if @restriction
|
43
|
-
if @addresses.any?
|
44
|
-
xml_element.add_element(ADDRESSES_ELEMENT_NAME).add_text(@addresses.to_s_for_cap)
|
45
|
-
end
|
36
|
+
xml_element.add_element(IDENTIFIER_ELEMENT_NAME).add_text(@identifier.to_s) if @identifier
|
37
|
+
xml_element.add_element(SENDER_ELEMENT_NAME).add_text(@sender.to_s) if @sender
|
38
|
+
xml_element.add_element(SENT_ELEMENT_NAME).add_text(@sent.to_s_for_cap.to_s) if @sent
|
39
|
+
xml_element.add_element(STATUS_ELEMENT_NAME).add_text(@status.to_s) if @status
|
40
|
+
xml_element.add_element(MSG_TYPE_ELEMENT_NAME).add_text(@msg_type.to_s) if @msg_type
|
41
|
+
xml_element.add_element(PASSWORD_ELEMENT_NAME).add_text(@password.to_s) if @password
|
42
|
+
xml_element.add_element(SOURCE_ELEMENT_NAME).add_text(@source.to_s) if @source
|
43
|
+
xml_element.add_element(SCOPE_ELEMENT_NAME).add_text(@scope.to_s) if @scope
|
44
|
+
xml_element.add_element(RESTRICTION_ELEMENT_NAME).add_text(@restriction.to_s) if @restriction
|
45
|
+
xml_element.add_element(ADDRESSES_ELEMENT_NAME).add_text(@addresses.to_s_for_cap) if @addresses.any?
|
46
46
|
@codes.each do |code|
|
47
|
-
xml_element.add_element(CODE_ELEMENT_NAME).add_text(code)
|
48
|
-
end
|
49
|
-
xml_element.add_element(NOTE_ELEMENT_NAME).add_text(@note) if @note
|
50
|
-
if @references.any?
|
51
|
-
xml_element.add_element(REFERENCES_ELEMENT_NAME).add_text(@references.join(' '))
|
52
|
-
end
|
53
|
-
if @incidents.any?
|
54
|
-
xml_element.add_element(INCIDENTS_ELEMENT_NAME).add_text(@incidents.join(' '))
|
47
|
+
xml_element.add_element(CODE_ELEMENT_NAME).add_text(code.to_s)
|
55
48
|
end
|
49
|
+
xml_element.add_element(NOTE_ELEMENT_NAME).add_text(@note.to_s) if @note
|
50
|
+
xml_element.add_element(REFERENCES_ELEMENT_NAME).add_text(@references.join(' ')) if @references.any?
|
51
|
+
xml_element.add_element(INCIDENTS_ELEMENT_NAME).add_text(@incidents.join(' ')) if @incidents.any?
|
56
52
|
@infos.each do |info|
|
57
53
|
xml_element.add_element(info.to_xml_element)
|
58
54
|
end
|
@@ -61,28 +57,29 @@ module RCAP
|
|
61
57
|
|
62
58
|
# @return [String]
|
63
59
|
def inspect
|
64
|
-
alert_inspect = ["CAP Version: #{
|
65
|
-
"Identifier: #{
|
66
|
-
"Sender: #{
|
67
|
-
"Sent: #{
|
68
|
-
"Status: #{
|
69
|
-
"Message Type: #{
|
70
|
-
"Password: #{
|
71
|
-
"Source: #{
|
72
|
-
"Scope: #{
|
73
|
-
"Restriction: #{
|
74
|
-
"Addresses: #{
|
60
|
+
alert_inspect = ["CAP Version: #{CAP_VERSION}",
|
61
|
+
"Identifier: #{@identifier}",
|
62
|
+
"Sender: #{@sender}",
|
63
|
+
"Sent: #{@sent}",
|
64
|
+
"Status: #{@status}",
|
65
|
+
"Message Type: #{@msg_type}",
|
66
|
+
"Password: #{@password}",
|
67
|
+
"Source: #{@source}",
|
68
|
+
"Scope: #{@scope}",
|
69
|
+
"Restriction: #{@restriction}",
|
70
|
+
"Addresses: #{@addresses.to_s_for_cap}",
|
75
71
|
'Codes:',
|
76
72
|
@codes.map { |code| ' ' + code }.join("\n"),
|
77
|
-
"Note: #{
|
78
|
-
|
79
|
-
|
73
|
+
"Note: #{@note}",
|
74
|
+
'References:',
|
75
|
+
@references.join("\n "),
|
76
|
+
"Incidents: #{@incidents.join(' ')}",
|
80
77
|
'Information:',
|
81
78
|
@infos.map { |info| ' ' + info.to_s }.join("\n")].join("\n")
|
82
79
|
RCAP.format_lines_for_inspect('ALERT', alert_inspect)
|
83
80
|
end
|
84
81
|
|
85
|
-
PASSWORD_XPATH
|
82
|
+
PASSWORD_XPATH = "cap:#{PASSWORD_ELEMENT_NAME}"
|
86
83
|
|
87
84
|
# @param [REXML::Element] alert_xml_element
|
88
85
|
# @return [RCAP::CAP_1_0::Alert]
|
@@ -92,7 +89,7 @@ module RCAP
|
|
92
89
|
end
|
93
90
|
end
|
94
91
|
|
95
|
-
PASSWORD_YAML
|
92
|
+
PASSWORD_YAML = 'Password'
|
96
93
|
|
97
94
|
# Returns a string containing the YAML representation of the alert.
|
98
95
|
#
|
@@ -124,7 +121,7 @@ module RCAP
|
|
124
121
|
end
|
125
122
|
end
|
126
123
|
|
127
|
-
PASSWORD_KEY
|
124
|
+
PASSWORD_KEY = 'password'
|
128
125
|
|
129
126
|
# Returns a Hash representation of an Alert object
|
130
127
|
#
|
@@ -145,7 +142,7 @@ module RCAP
|
|
145
142
|
[NOTE_KEY, @note],
|
146
143
|
[REFERENCES_KEY, @references],
|
147
144
|
[INCIDENTS_KEY, @incidents],
|
148
|
-
[INFOS_KEY, @infos.map
|
145
|
+
[INFOS_KEY, @infos.map(&:to_h)])
|
149
146
|
end
|
150
147
|
|
151
148
|
# Initialises an Alert object from a Hash produced by Alert#to_h
|
data/lib/rcap/cap_1_0/area.rb
CHANGED
data/lib/rcap/cap_1_0/circle.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_0
|
3
5
|
# Subclass of {Parameter}
|
4
6
|
class EventCode < RCAP::Base::EventCode
|
5
7
|
XML_ELEMENT_NAME = 'eventCode'
|
6
|
-
XPATH = "cap:#{
|
8
|
+
XPATH = "cap:#{XML_ELEMENT_NAME}"
|
7
9
|
|
8
10
|
# @return [String]
|
9
11
|
def xmlns
|
data/lib/rcap/cap_1_0/geocode.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_0
|
3
5
|
# Subclass of {Parameter}
|
4
6
|
class Geocode < RCAP::Base::Geocode
|
5
7
|
XML_ELEMENT_NAME = 'geocode'
|
6
|
-
XPATH = "cap:#{
|
8
|
+
XPATH = "cap:#{XML_ELEMENT_NAME}"
|
7
9
|
|
8
10
|
# @return [String]
|
9
11
|
def xmlns
|
data/lib/rcap/cap_1_0/info.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_0
|
3
5
|
# In Info object is valid if
|
@@ -9,7 +11,7 @@ module RCAP
|
|
9
11
|
# * all Resource objects in the resources collection are valid
|
10
12
|
# * all Area objects in the areas collection are valid
|
11
13
|
class Info < RCAP::Base::Info
|
12
|
-
validates_inclusion_of(:certainty, allow_nil: true, in: VALID_CERTAINTIES, message: "can only be assigned the following values: #{
|
14
|
+
validates_inclusion_of(:certainty, allow_nil: true, in: VALID_CERTAINTIES, message: "can only be assigned the following values: #{VALID_CERTAINTIES.join(', ')}")
|
13
15
|
|
14
16
|
# @return [String]
|
15
17
|
def xmlns
|
@@ -1,13 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_0
|
3
5
|
# A Parameter object is valid if
|
4
6
|
# * it has a name
|
5
|
-
# * it has a value
|
6
7
|
class Parameter < RCAP::Base::Parameter
|
7
8
|
# @return [REXML::Element]
|
8
9
|
def to_xml_element
|
9
10
|
xml_element = REXML::Element.new(self.class::XML_ELEMENT_NAME)
|
10
|
-
xml_element.add_text("#{
|
11
|
+
xml_element.add_text("#{@name}=#{@value}")
|
11
12
|
xml_element
|
12
13
|
end
|
13
14
|
|
data/lib/rcap/cap_1_0/point.rb
CHANGED
data/lib/rcap/cap_1_0/polygon.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_0
|
3
5
|
# A Polygon object is valid if
|
4
|
-
# * it has a minimum of three points
|
6
|
+
# * if points are given it has a minimum of three points
|
5
7
|
# * each Point object in the points collection is valid
|
6
8
|
class Polygon < RCAP::Base::Polygon
|
7
9
|
# @return [Class]
|
data/lib/rcap/cap_1_1/alert.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_1
|
3
5
|
# An Alert object is valid if
|
@@ -12,9 +14,9 @@ module RCAP
|
|
12
14
|
XMLNS = 'urn:oasis:names:tc:emergency:cap:1.1'
|
13
15
|
CAP_VERSION = '1.1'
|
14
16
|
|
15
|
-
STATUS_DRAFT
|
17
|
+
STATUS_DRAFT = 'Draft'
|
16
18
|
# Valid values for status
|
17
|
-
VALID_STATUSES = [STATUS_ACTUAL, STATUS_EXERCISE, STATUS_SYSTEM, STATUS_TEST, STATUS_DRAFT]
|
19
|
+
VALID_STATUSES = [STATUS_ACTUAL, STATUS_EXERCISE, STATUS_SYSTEM, STATUS_TEST, STATUS_DRAFT].freeze
|
18
20
|
|
19
21
|
# @return [String]
|
20
22
|
def xmlns
|
data/lib/rcap/cap_1_1/area.rb
CHANGED
data/lib/rcap/cap_1_1/circle.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_1
|
3
5
|
# Subclass of {Parameter}
|
4
6
|
class EventCode < RCAP::Base::EventCode
|
5
7
|
XML_ELEMENT_NAME = 'eventCode'
|
6
|
-
XPATH = "cap:#{
|
8
|
+
XPATH = "cap:#{XML_ELEMENT_NAME}"
|
7
9
|
|
8
10
|
# @return [String]
|
9
11
|
def xmlns
|
data/lib/rcap/cap_1_1/geocode.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_1
|
3
5
|
# Subclass of {Parameter}
|
4
6
|
class Geocode < RCAP::Base::Geocode
|
5
7
|
XML_ELEMENT_NAME = 'geocode'
|
6
|
-
XPATH = "cap:#{
|
8
|
+
XPATH = "cap:#{XML_ELEMENT_NAME}"
|
7
9
|
|
8
10
|
def xmlns
|
9
11
|
Alert::XMLNS
|
data/lib/rcap/cap_1_1/info.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_1
|
3
5
|
# In Info object is valid if
|
@@ -19,16 +21,16 @@ module RCAP
|
|
19
21
|
# Valid values for response_type
|
20
22
|
VALID_RESPONSE_TYPES = [RESPONSE_TYPE_SHELTER, RESPONSE_TYPE_EVACUATE,
|
21
23
|
RESPONSE_TYPE_PREPARE, RESPONSE_TYPE_EXECUTE, RESPONSE_TYPE_MONITOR,
|
22
|
-
RESPONSE_TYPE_ASSESS, RESPONSE_TYPE_NONE]
|
24
|
+
RESPONSE_TYPE_ASSESS, RESPONSE_TYPE_NONE].freeze
|
23
25
|
|
24
26
|
CERTAINTY_OBSERVED = 'Observed'
|
25
27
|
# Valid valies for certainty
|
26
28
|
VALID_CERTAINTIES = [CERTAINTY_OBSERVED, CERTAINTY_LIKELY,
|
27
|
-
CERTAINTY_POSSIBLE, CERTAINTY_UNLIKELY, CERTAINTY_UNKNOWN]
|
29
|
+
CERTAINTY_POSSIBLE, CERTAINTY_UNLIKELY, CERTAINTY_UNKNOWN].freeze
|
28
30
|
|
29
31
|
validates_length_of(:categories, minimum: 1)
|
30
32
|
validates_inclusion_of_members_of(:response_types, in: VALID_RESPONSE_TYPES, allow_blank: true)
|
31
|
-
validates_inclusion_of(:certainty, allow_nil: true, in: VALID_CERTAINTIES, message: "can only be assigned the following values: #{
|
33
|
+
validates_inclusion_of(:certainty, allow_nil: true, in: VALID_CERTAINTIES, message: "can only be assigned the following values: #{VALID_CERTAINTIES.join(', ')}")
|
32
34
|
|
33
35
|
# @return [Array<String>] Collection of textual response types; elements must be from {VALID_RESPONSE_TYPES}
|
34
36
|
attr_reader(:response_types)
|
@@ -64,7 +66,7 @@ module RCAP
|
|
64
66
|
# @option attributes [Array<Resource>] :resources Collection of {Resource} objects
|
65
67
|
# @option attributes [Array<Area>] :areas Collection of {Area} objects
|
66
68
|
def initialize
|
67
|
-
@response_types =
|
69
|
+
@response_types = []
|
68
70
|
super
|
69
71
|
end
|
70
72
|
|
@@ -89,35 +91,35 @@ module RCAP
|
|
89
91
|
end
|
90
92
|
|
91
93
|
RESPONSE_TYPE_ELEMENT_NAME = 'responseType'
|
92
|
-
RESPONSE_TYPE_XPATH = "cap:#{
|
94
|
+
RESPONSE_TYPE_XPATH = "cap:#{RESPONSE_TYPE_ELEMENT_NAME}"
|
93
95
|
|
94
96
|
# @return [REXML::Element]
|
95
97
|
def to_xml_element
|
96
98
|
xml_element = REXML::Element.new(XML_ELEMENT_NAME)
|
97
|
-
xml_element.add_element(LANGUAGE_ELEMENT_NAME).add_text(@language) if @language
|
99
|
+
xml_element.add_element(LANGUAGE_ELEMENT_NAME).add_text(@language.to_s) if @language
|
98
100
|
@categories.each do |category|
|
99
|
-
xml_element.add_element(CATEGORY_ELEMENT_NAME).add_text(category)
|
101
|
+
xml_element.add_element(CATEGORY_ELEMENT_NAME).add_text(category.to_s)
|
100
102
|
end
|
101
|
-
xml_element.add_element(EVENT_ELEMENT_NAME).add_text(@event)
|
103
|
+
xml_element.add_element(EVENT_ELEMENT_NAME).add_text(@event.to_s)
|
102
104
|
@response_types.each do |response_type|
|
103
|
-
xml_element.add_element(RESPONSE_TYPE_ELEMENT_NAME).add_text(response_type)
|
105
|
+
xml_element.add_element(RESPONSE_TYPE_ELEMENT_NAME).add_text(response_type.to_s)
|
104
106
|
end
|
105
|
-
xml_element.add_element(URGENCY_ELEMENT_NAME).add_text(@urgency)
|
106
|
-
xml_element.add_element(SEVERITY_ELEMENT_NAME).add_text(@severity)
|
107
|
-
xml_element.add_element(CERTAINTY_ELEMENT_NAME).add_text(@certainty)
|
108
|
-
xml_element.add_element(AUDIENCE_ELEMENT_NAME).add_text(@audience) if @audience
|
107
|
+
xml_element.add_element(URGENCY_ELEMENT_NAME).add_text(@urgency.to_s)
|
108
|
+
xml_element.add_element(SEVERITY_ELEMENT_NAME).add_text(@severity.to_s)
|
109
|
+
xml_element.add_element(CERTAINTY_ELEMENT_NAME).add_text(@certainty.to_s)
|
110
|
+
xml_element.add_element(AUDIENCE_ELEMENT_NAME).add_text(@audience.to_s) if @audience
|
109
111
|
@event_codes.each do |event_code|
|
110
112
|
xml_element.add_element(event_code.to_xml_element)
|
111
113
|
end
|
112
114
|
xml_element.add_element(EFFECTIVE_ELEMENT_NAME).add_text(@effective.to_s_for_cap) if @effective
|
113
115
|
xml_element.add_element(ONSET_ELEMENT_NAME).add_text(@onset.to_s_for_cap) if @onset
|
114
116
|
xml_element.add_element(EXPIRES_ELEMENT_NAME).add_text(@expires.to_s_for_cap) if @expires
|
115
|
-
xml_element.add_element(SENDER_NAME_ELEMENT_NAME).add_text(@sender_name)
|
116
|
-
xml_element.add_element(HEADLINE_ELEMENT_NAME).add_text(@headline)
|
117
|
-
xml_element.add_element(DESCRIPTION_ELEMENT_NAME).add_text(@description)
|
118
|
-
xml_element.add_element(INSTRUCTION_ELEMENT_NAME).add_text(@instruction)
|
119
|
-
xml_element.add_element(WEB_ELEMENT_NAME).add_text(@web)
|
120
|
-
xml_element.add_element(CONTACT_ELEMENT_NAME).add_text(@contact)
|
117
|
+
xml_element.add_element(SENDER_NAME_ELEMENT_NAME).add_text(@sender_name.to_s) if @sender_name
|
118
|
+
xml_element.add_element(HEADLINE_ELEMENT_NAME).add_text(@headline.to_s) if @headline
|
119
|
+
xml_element.add_element(DESCRIPTION_ELEMENT_NAME).add_text(@description.to_s) if @description
|
120
|
+
xml_element.add_element(INSTRUCTION_ELEMENT_NAME).add_text(@instruction.to_s) if @instruction
|
121
|
+
xml_element.add_element(WEB_ELEMENT_NAME).add_text(@web.to_s) if @web
|
122
|
+
xml_element.add_element(CONTACT_ELEMENT_NAME).add_text(@contact.to_s) if @contact
|
121
123
|
@parameters.each do |parameter|
|
122
124
|
xml_element.add_element(parameter.to_xml_element)
|
123
125
|
end
|
@@ -147,27 +149,27 @@ module RCAP
|
|
147
149
|
|
148
150
|
# @return [String]
|
149
151
|
def inspect
|
150
|
-
info_inspect = "Language: #{
|
151
|
-
"Categories: #{
|
152
|
-
"Event: #{
|
153
|
-
"Response Types: #{
|
154
|
-
"Urgency: #{
|
155
|
-
"Severity: #{
|
156
|
-
"Certainty: #{
|
157
|
-
"Audience: #{
|
158
|
-
"Event Codes: #{
|
159
|
-
"Effective: #{
|
160
|
-
"Onset: #{
|
161
|
-
"Expires: #{
|
162
|
-
"Sender Name: #{
|
163
|
-
"Headline: #{
|
164
|
-
"Description:\n" +
|
165
|
-
"Instruction: #{
|
166
|
-
"Web: #{
|
167
|
-
"Contact: #{
|
168
|
-
"Parameters:\n" +
|
169
|
-
"Resources:\n" +
|
170
|
-
"Area:\n" +
|
152
|
+
info_inspect = "Language: #{@language}\n"\
|
153
|
+
"Categories: #{@categories.to_s_for_cap}\n"\
|
154
|
+
"Event: #{@event}\n"\
|
155
|
+
"Response Types: #{@response_types.to_s_for_cap}\n"\
|
156
|
+
"Urgency: #{@urgency}\n"\
|
157
|
+
"Severity: #{@severity}\n"\
|
158
|
+
"Certainty: #{@certainty}\n"\
|
159
|
+
"Audience: #{@audience}\n"\
|
160
|
+
"Event Codes: #{@event_codes.inspect}\n"\
|
161
|
+
"Effective: #{@effective}\n"\
|
162
|
+
"Onset: #{@onset}\n"\
|
163
|
+
"Expires: #{@expires}\n"\
|
164
|
+
"Sender Name: #{@sender_name}\n"\
|
165
|
+
"Headline: #{@headline}\n"\
|
166
|
+
"Description:\n" + @description.to_s.lines.map { |line| ' ' + line }.join("\n") + "\n"\
|
167
|
+
"Instruction: #{@instruction}\n"\
|
168
|
+
"Web: #{@web}\n"\
|
169
|
+
"Contact: #{@contact}\n"\
|
170
|
+
"Parameters:\n" + @parameters.map { |parameter| ' ' + parameter.inspect }.join("\n") + "\n"\
|
171
|
+
"Resources:\n" + @resources.map { |resource| ' ' + resource.inspect }.join("\n") + "\n"\
|
172
|
+
"Area:\n" + @areas.map { |area| " #{area}" }.join("\n") + "\n"
|
171
173
|
RCAP.format_lines_for_inspect('INFO', info_inspect)
|
172
174
|
end
|
173
175
|
|
@@ -176,14 +178,14 @@ module RCAP
|
|
176
178
|
#
|
177
179
|
# @return [String]
|
178
180
|
def to_s
|
179
|
-
"#{
|
181
|
+
"#{@event}(#{@urgency}/#{@severity}/#{@certainty})"
|
180
182
|
end
|
181
183
|
|
182
184
|
RESPONSE_TYPES_YAML = 'Response Types'
|
183
185
|
|
184
186
|
# @return [Hash]
|
185
187
|
def to_yaml_data
|
186
|
-
parameter_to_hash =
|
188
|
+
parameter_to_hash = ->(hash, parameter) { hash.merge(parameter.name => parameter.value) }
|
187
189
|
|
188
190
|
RCAP.attribute_values_to_hash([LANGUAGE_YAML, @language],
|
189
191
|
[CATEGORIES_YAML, @categories],
|
@@ -244,10 +246,10 @@ module RCAP
|
|
244
246
|
[INSTRUCTION_KEY, @instruction],
|
245
247
|
[WEB_KEY, @web],
|
246
248
|
[CONTACT_KEY, @contact],
|
247
|
-
[RESOURCES_KEY, @resources.map
|
248
|
-
[EVENT_CODES_KEY, @event_codes.map
|
249
|
-
[PARAMETERS_KEY, @parameters.map
|
250
|
-
[AREAS_KEY, @areas.map
|
249
|
+
[RESOURCES_KEY, @resources.map(&:to_h)],
|
250
|
+
[EVENT_CODES_KEY, @event_codes.map(&:to_h)],
|
251
|
+
[PARAMETERS_KEY, @parameters.map(&:to_h)],
|
252
|
+
[AREAS_KEY, @areas.map(&:to_h)])
|
251
253
|
end
|
252
254
|
|
253
255
|
# @param [Hash] info_hash
|