rcap 2.4.1 → 2.5.0
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/rcap/alert.rb +28 -29
- data/lib/rcap/base/alert.rb +192 -192
- data/lib/rcap/base/area.rb +84 -86
- data/lib/rcap/base/circle.rb +32 -32
- data/lib/rcap/base/info.rb +248 -253
- data/lib/rcap/base/parameter.rb +23 -24
- data/lib/rcap/base/point.rb +23 -23
- data/lib/rcap/base/polygon.rb +32 -32
- data/lib/rcap/base/resource.rb +57 -57
- data/lib/rcap/cap_1_0/alert.rb +79 -83
- data/lib/rcap/cap_1_0/area.rb +0 -2
- data/lib/rcap/cap_1_0/circle.rb +0 -1
- data/lib/rcap/cap_1_0/info.rb +1 -3
- data/lib/rcap/cap_1_0/parameter.rb +11 -12
- data/lib/rcap/cap_1_0/point.rb +0 -1
- data/lib/rcap/cap_1_0/polygon.rb +0 -2
- data/lib/rcap/cap_1_0/resource.rb +0 -3
- data/lib/rcap/cap_1_1/alert.rb +4 -6
- data/lib/rcap/cap_1_1/area.rb +0 -2
- data/lib/rcap/cap_1_1/circle.rb +0 -1
- data/lib/rcap/cap_1_1/info.rb +120 -129
- data/lib/rcap/cap_1_1/parameter.rb +0 -2
- data/lib/rcap/cap_1_1/point.rb +0 -1
- data/lib/rcap/cap_1_1/polygon.rb +0 -2
- data/lib/rcap/cap_1_1/resource.rb +32 -34
- data/lib/rcap/cap_1_2/alert.rb +4 -6
- data/lib/rcap/cap_1_2/area.rb +0 -2
- data/lib/rcap/cap_1_2/circle.rb +0 -1
- data/lib/rcap/cap_1_2/info.rb +114 -121
- data/lib/rcap/cap_1_2/parameter.rb +0 -2
- data/lib/rcap/cap_1_2/point.rb +0 -1
- data/lib/rcap/cap_1_2/polygon.rb +1 -3
- data/lib/rcap/cap_1_2/resource.rb +32 -34
- data/lib/rcap/config.rb +3 -3
- data/lib/rcap/custom_validators.rb +72 -76
- data/lib/rcap/extensions/array.rb +1 -1
- data/lib/rcap/extensions/date.rb +2 -2
- data/lib/rcap/extensions/date_time.rb +3 -3
- data/lib/rcap/extensions/string.rb +3 -3
- data/lib/rcap/extensions/time.rb +2 -3
- data/lib/rcap/info.rb +4 -5
- data/lib/rcap/utilities.rb +24 -25
- data/lib/rcap/validation.rb +19 -20
- data/lib/rcap/version.rb +1 -1
- data/spec/alert_spec.rb +141 -141
- data/spec/cap_1_0/alert_spec.rb +92 -94
- data/spec/cap_1_0/area_spec.rb +86 -86
- data/spec/cap_1_0/circle_spec.rb +39 -39
- data/spec/cap_1_0/event_code_spec.rb +15 -15
- data/spec/cap_1_0/geocode_spec.rb +16 -16
- data/spec/cap_1_0/info_spec.rb +175 -177
- data/spec/cap_1_0/parameter_spec.rb +27 -27
- data/spec/cap_1_0/point_spec.rb +18 -18
- data/spec/cap_1_0/polygon_spec.rb +38 -38
- data/spec/cap_1_0/resource_spec.rb +63 -64
- data/spec/cap_1_1/alert_spec.rb +107 -109
- data/spec/cap_1_1/area_spec.rb +90 -90
- data/spec/cap_1_1/circle_spec.rb +34 -34
- data/spec/cap_1_1/event_code_spec.rb +15 -16
- data/spec/cap_1_1/geocode_spec.rb +16 -16
- data/spec/cap_1_1/info_spec.rb +194 -196
- data/spec/cap_1_1/parameter_spec.rb +17 -17
- data/spec/cap_1_1/point_spec.rb +18 -18
- data/spec/cap_1_1/polygon_spec.rb +36 -36
- data/spec/cap_1_1/resource_spec.rb +106 -107
- data/spec/cap_1_2/alert_spec.rb +98 -99
- data/spec/cap_1_2/area_spec.rb +90 -90
- data/spec/cap_1_2/circle_spec.rb +43 -43
- data/spec/cap_1_2/event_code_spec.rb +19 -20
- data/spec/cap_1_2/geocode_spec.rb +20 -20
- data/spec/cap_1_2/info_spec.rb +196 -198
- data/spec/cap_1_2/parameter_spec.rb +19 -19
- data/spec/cap_1_2/point_spec.rb +21 -21
- data/spec/cap_1_2/polygon_spec.rb +47 -47
- data/spec/cap_1_2/resource_spec.rb +96 -97
- data/spec/extensions_spec.rb +29 -29
- data/spec/info_spec.rb +15 -15
- data/spec/spec_helper.rb +3 -3
- data/spec/validations_spec.rb +73 -73
- metadata +2 -2
data/lib/rcap/cap_1_1/point.rb
CHANGED
data/lib/rcap/cap_1_1/polygon.rb
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
module RCAP
|
|
2
2
|
module CAP_1_1
|
|
3
|
-
|
|
4
3
|
# A Resource object is valid if
|
|
5
4
|
# * it has a resource description
|
|
6
5
|
class Resource < RCAP::Base::Resource
|
|
7
|
-
|
|
8
6
|
# @return [String] Dereferenced URI - contents of URI Base64 encoded
|
|
9
|
-
attr_accessor(
|
|
7
|
+
attr_accessor(:deref_uri)
|
|
10
8
|
|
|
11
9
|
DEREF_URI_ELEMENT_NAME = 'derefUri'
|
|
12
10
|
DEREF_URI_XPATH = "cap:#{ DEREF_URI_ELEMENT_NAME }"
|
|
@@ -14,13 +12,13 @@ module RCAP
|
|
|
14
12
|
# @return [REXML::Element]
|
|
15
13
|
def to_xml_element
|
|
16
14
|
xml_element = super
|
|
17
|
-
xml_element = REXML::Element.new(
|
|
18
|
-
xml_element.add_element(
|
|
19
|
-
xml_element.add_element(
|
|
20
|
-
xml_element.add_element(
|
|
21
|
-
xml_element.add_element(
|
|
22
|
-
xml_element.add_element(
|
|
23
|
-
xml_element.add_element(
|
|
15
|
+
xml_element = REXML::Element.new(XML_ELEMENT_NAME)
|
|
16
|
+
xml_element.add_element(RESOURCE_DESC_ELEMENT_NAME).add_text(@resource_desc)
|
|
17
|
+
xml_element.add_element(MIME_TYPE_ELEMENT_NAME).add_text(@mime_type) if @mime_type
|
|
18
|
+
xml_element.add_element(SIZE_ELEMENT_NAME).add_text(@size.to_s) if @size
|
|
19
|
+
xml_element.add_element(URI_ELEMENT_NAME).add_text(@uri) if @uri
|
|
20
|
+
xml_element.add_element(DEREF_URI_ELEMENT_NAME).add_text(@deref_uri) if @deref_uri
|
|
21
|
+
xml_element.add_element(DIGEST_ELEMENT_NAME).add_text(@digest) if @digest
|
|
24
22
|
xml_element
|
|
25
23
|
end
|
|
26
24
|
|
|
@@ -35,9 +33,9 @@ module RCAP
|
|
|
35
33
|
#
|
|
36
34
|
# @return [Array(Integer,String)]
|
|
37
35
|
def dereference_uri!
|
|
38
|
-
content = URI.parse(
|
|
39
|
-
@deref_uri = Base64.encode64(
|
|
40
|
-
|
|
36
|
+
content = URI.parse(uri).read
|
|
37
|
+
@deref_uri = Base64.encode64(content)
|
|
38
|
+
calculate_hash_and_size
|
|
41
39
|
end
|
|
42
40
|
|
|
43
41
|
# @return [String]
|
|
@@ -47,34 +45,34 @@ module RCAP
|
|
|
47
45
|
|
|
48
46
|
# @param [REXML::Element] resource_xml_element
|
|
49
47
|
# @return [Resource]
|
|
50
|
-
def self.from_xml_element(
|
|
48
|
+
def self.from_xml_element(resource_xml_element)
|
|
51
49
|
super.tap do |resource|
|
|
52
|
-
resource.deref_uri = RCAP.xpath_text(
|
|
50
|
+
resource.deref_uri = RCAP.xpath_text(resource_xml_element, DEREF_URI_XPATH, resource.xmlns)
|
|
53
51
|
end
|
|
54
52
|
end
|
|
55
53
|
|
|
56
|
-
DEREF_URI_YAML =
|
|
54
|
+
DEREF_URI_YAML = 'Derefrenced URI Data'
|
|
57
55
|
|
|
58
56
|
def to_yaml_data
|
|
59
|
-
RCAP.attribute_values_to_hash(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
57
|
+
RCAP.attribute_values_to_hash([RESOURCE_DESC_YAML, @resource_desc],
|
|
58
|
+
[URI_YAML, @uri],
|
|
59
|
+
[MIME_TYPE_YAML, @mime_type],
|
|
60
|
+
[DEREF_URI_YAML, @deref_uri],
|
|
61
|
+
[SIZE_YAML, @size],
|
|
62
|
+
[DIGEST_YAML, @digest])
|
|
65
63
|
end
|
|
66
64
|
|
|
67
65
|
# @param [Hash] options
|
|
68
66
|
# @return [String]
|
|
69
|
-
def to_yaml(
|
|
70
|
-
|
|
67
|
+
def to_yaml(options = {})
|
|
68
|
+
to_yaml_data.to_yaml(options)
|
|
71
69
|
end
|
|
72
70
|
|
|
73
71
|
# @param [Hash] resource_yaml_data
|
|
74
72
|
# @return [Resource]
|
|
75
|
-
def self.from_yaml_data(
|
|
73
|
+
def self.from_yaml_data(resource_yaml_data)
|
|
76
74
|
super.tap do |resource|
|
|
77
|
-
resource.deref_uri = RCAP.strip_if_given(
|
|
75
|
+
resource.deref_uri = RCAP.strip_if_given(resource_yaml_data[DEREF_URI_YAML])
|
|
78
76
|
end
|
|
79
77
|
end
|
|
80
78
|
|
|
@@ -82,19 +80,19 @@ module RCAP
|
|
|
82
80
|
|
|
83
81
|
# @return [Hash]
|
|
84
82
|
def to_h
|
|
85
|
-
RCAP.attribute_values_to_hash(
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
83
|
+
RCAP.attribute_values_to_hash([RESOURCE_DESC_KEY, @resource_desc],
|
|
84
|
+
[URI_KEY, @uri],
|
|
85
|
+
[MIME_TYPE_KEY, @mime_type],
|
|
86
|
+
[DEREF_URI_KEY, @deref_uri],
|
|
87
|
+
[SIZE_KEY, @size],
|
|
88
|
+
[DIGEST_KEY, @digest])
|
|
91
89
|
end
|
|
92
90
|
|
|
93
91
|
# @param [Hash] resource_hash
|
|
94
92
|
# @return [Resource]
|
|
95
|
-
def self.from_h(
|
|
93
|
+
def self.from_h(resource_hash)
|
|
96
94
|
super.tap do |resource|
|
|
97
|
-
resource.deref_uri = RCAP.strip_if_given(
|
|
95
|
+
resource.deref_uri = RCAP.strip_if_given(resource_hash[DEREF_URI_KEY])
|
|
98
96
|
end
|
|
99
97
|
end
|
|
100
98
|
end
|
data/lib/rcap/cap_1_2/alert.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
module RCAP
|
|
2
2
|
module CAP_1_2
|
|
3
|
-
|
|
4
3
|
# An Alert object is valid if
|
|
5
4
|
# * it has an identifier
|
|
6
5
|
# * it has a sender
|
|
@@ -10,13 +9,12 @@ module RCAP
|
|
|
10
9
|
# * it has a valid scope value
|
|
11
10
|
# * all Info objects contained in infos are valid
|
|
12
11
|
class Alert < RCAP::Base::Alert
|
|
12
|
+
XMLNS = 'urn:oasis:names:tc:emergency:cap:1.2'
|
|
13
|
+
CAP_VERSION = '1.2'
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
CAP_VERSION = "1.2"
|
|
16
|
-
|
|
17
|
-
STATUS_DRAFT = "Draft"
|
|
15
|
+
STATUS_DRAFT = 'Draft'
|
|
18
16
|
# Valid values for status
|
|
19
|
-
VALID_STATUSES = [
|
|
17
|
+
VALID_STATUSES = [STATUS_ACTUAL, STATUS_EXERCISE, STATUS_SYSTEM, STATUS_TEST, STATUS_DRAFT]
|
|
20
18
|
|
|
21
19
|
# @return [String]
|
|
22
20
|
def xmlns
|
data/lib/rcap/cap_1_2/area.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
module RCAP
|
|
2
2
|
module CAP_1_2
|
|
3
|
-
|
|
4
3
|
# An Area object is valid if
|
|
5
4
|
# * it has an area description
|
|
6
5
|
# * all Circle objects contained in circles are valid
|
|
@@ -8,7 +7,6 @@ module RCAP
|
|
|
8
7
|
# * all Polygon objects contained in polygons are valid
|
|
9
8
|
# * altitude has a value if ceiling is set
|
|
10
9
|
class Area < RCAP::Base::Area
|
|
11
|
-
|
|
12
10
|
# @return [String]
|
|
13
11
|
def xmlns
|
|
14
12
|
Alert::XMLNS
|
data/lib/rcap/cap_1_2/circle.rb
CHANGED
data/lib/rcap/cap_1_2/info.rb
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
module RCAP
|
|
2
2
|
module CAP_1_2
|
|
3
|
-
|
|
4
3
|
# In Info object is valid if
|
|
5
4
|
# * it has an event
|
|
6
5
|
# * it has an urgency with a valid value
|
|
@@ -10,31 +9,29 @@ module RCAP
|
|
|
10
9
|
# * all Resource objects in the resources collection are valid
|
|
11
10
|
# * all Area objects in the areas collection are valid
|
|
12
11
|
class Info < RCAP::Base::Info
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
RESPONSE_TYPE_NONE = "None"
|
|
12
|
+
RESPONSE_TYPE_SHELTER = 'Shelter'
|
|
13
|
+
RESPONSE_TYPE_EVACUATE = 'Evacuate'
|
|
14
|
+
RESPONSE_TYPE_PREPARE = 'Prepare'
|
|
15
|
+
RESPONSE_TYPE_EXECUTE = 'Execute'
|
|
16
|
+
RESPONSE_TYPE_MONITOR = 'Monitor'
|
|
17
|
+
RESPONSE_TYPE_ASSESS = 'Assess'
|
|
18
|
+
RESPONSE_TYPE_NONE = 'None'
|
|
21
19
|
# Valid values for response_type
|
|
22
|
-
VALID_RESPONSE_TYPES = [
|
|
23
|
-
|
|
20
|
+
VALID_RESPONSE_TYPES = [RESPONSE_TYPE_SHELTER, RESPONSE_TYPE_EVACUATE, RESPONSE_TYPE_PREPARE, RESPONSE_TYPE_EXECUTE, RESPONSE_TYPE_MONITOR, RESPONSE_TYPE_ASSESS, RESPONSE_TYPE_NONE]
|
|
24
21
|
|
|
25
|
-
CERTAINTY_OBSERVED =
|
|
22
|
+
CERTAINTY_OBSERVED = 'Observed'
|
|
26
23
|
# Valid valies for certainty
|
|
27
|
-
VALID_CERTAINTIES = [
|
|
24
|
+
VALID_CERTAINTIES = [CERTAINTY_OBSERVED, CERTAINTY_LIKELY, CERTAINTY_POSSIBLE, CERTAINTY_UNLIKELY, CERTAINTY_UNKNOWN]
|
|
28
25
|
|
|
29
26
|
RESPONSE_TYPE_ELEMENT_NAME = 'responseType'
|
|
30
27
|
RESPONSE_TYPE_XPATH = "cap:#{ RESPONSE_TYPE_ELEMENT_NAME }"
|
|
31
28
|
|
|
32
|
-
validates_length_of(
|
|
33
|
-
validates_inclusion_of_members_of(
|
|
34
|
-
validates_inclusion_of(
|
|
29
|
+
validates_length_of(:categories, minimum: 1)
|
|
30
|
+
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: #{ VALID_CERTAINTIES.join(', ') }")
|
|
35
32
|
|
|
36
33
|
# @return [Array<String>] Collection of textual response types; elements must be from {VALID_RESPONSE_TYPES}
|
|
37
|
-
attr_reader(
|
|
34
|
+
attr_reader(:response_types)
|
|
38
35
|
|
|
39
36
|
# Initialises a new Info object which will be yielded to an attached block if given
|
|
40
37
|
#
|
|
@@ -72,76 +69,72 @@ module RCAP
|
|
|
72
69
|
|
|
73
70
|
# @return [REXML::Element]
|
|
74
71
|
def to_xml_element
|
|
75
|
-
xml_element = REXML::Element.new(
|
|
76
|
-
xml_element.add_element(
|
|
72
|
+
xml_element = REXML::Element.new(XML_ELEMENT_NAME)
|
|
73
|
+
xml_element.add_element(LANGUAGE_ELEMENT_NAME).add_text(@language) if @language
|
|
77
74
|
@categories.each do |category|
|
|
78
|
-
xml_element.add_element(
|
|
75
|
+
xml_element.add_element(CATEGORY_ELEMENT_NAME).add_text(category)
|
|
79
76
|
end
|
|
80
|
-
xml_element.add_element(
|
|
77
|
+
xml_element.add_element(EVENT_ELEMENT_NAME).add_text(@event)
|
|
81
78
|
@response_types.each do |response_type|
|
|
82
|
-
xml_element.add_element(
|
|
79
|
+
xml_element.add_element(RESPONSE_TYPE_ELEMENT_NAME).add_text(response_type)
|
|
83
80
|
end
|
|
84
|
-
xml_element.add_element(
|
|
85
|
-
xml_element.add_element(
|
|
86
|
-
xml_element.add_element(
|
|
87
|
-
xml_element.add_element(
|
|
81
|
+
xml_element.add_element(URGENCY_ELEMENT_NAME).add_text(@urgency)
|
|
82
|
+
xml_element.add_element(SEVERITY_ELEMENT_NAME).add_text(@severity)
|
|
83
|
+
xml_element.add_element(CERTAINTY_ELEMENT_NAME).add_text(@certainty)
|
|
84
|
+
xml_element.add_element(AUDIENCE_ELEMENT_NAME).add_text(@audience) if @audience
|
|
88
85
|
@event_codes.each do |event_code|
|
|
89
|
-
xml_element.add_element(
|
|
86
|
+
xml_element.add_element(event_code.to_xml_element)
|
|
90
87
|
end
|
|
91
|
-
xml_element.add_element(
|
|
92
|
-
xml_element.add_element(
|
|
93
|
-
xml_element.add_element(
|
|
94
|
-
xml_element.add_element(
|
|
95
|
-
xml_element.add_element(
|
|
96
|
-
xml_element.add_element(
|
|
97
|
-
xml_element.add_element(
|
|
98
|
-
xml_element.add_element(
|
|
99
|
-
xml_element.add_element(
|
|
88
|
+
xml_element.add_element(EFFECTIVE_ELEMENT_NAME).add_text(@effective.to_s_for_cap) if @effective
|
|
89
|
+
xml_element.add_element(ONSET_ELEMENT_NAME).add_text(@onset.to_s_for_cap) if @onset
|
|
90
|
+
xml_element.add_element(EXPIRES_ELEMENT_NAME).add_text(@expires.to_s_for_cap) if @expires
|
|
91
|
+
xml_element.add_element(SENDER_NAME_ELEMENT_NAME).add_text(@sender_name) if @sender_name
|
|
92
|
+
xml_element.add_element(HEADLINE_ELEMENT_NAME).add_text(@headline) if @headline
|
|
93
|
+
xml_element.add_element(DESCRIPTION_ELEMENT_NAME).add_text(@description) if @description
|
|
94
|
+
xml_element.add_element(INSTRUCTION_ELEMENT_NAME).add_text(@instruction) if @instruction
|
|
95
|
+
xml_element.add_element(WEB_ELEMENT_NAME).add_text(@web) if @web
|
|
96
|
+
xml_element.add_element(CONTACT_ELEMENT_NAME).add_text(@contact) if @contact
|
|
100
97
|
@parameters.each do |parameter|
|
|
101
|
-
xml_element.add_element(
|
|
98
|
+
xml_element.add_element(parameter.to_xml_element)
|
|
102
99
|
end
|
|
103
100
|
@resources.each do |resource|
|
|
104
|
-
xml_element.add_element(
|
|
101
|
+
xml_element.add_element(resource.to_xml_element)
|
|
105
102
|
end
|
|
106
103
|
@areas.each do |area|
|
|
107
|
-
xml_element.add_element(
|
|
104
|
+
xml_element.add_element(area.to_xml_element)
|
|
108
105
|
end
|
|
109
106
|
xml_element
|
|
110
107
|
end
|
|
111
108
|
|
|
112
109
|
# @return [String]
|
|
113
110
|
def to_xml
|
|
114
|
-
|
|
111
|
+
to_xml_element.to_s
|
|
115
112
|
end
|
|
116
113
|
|
|
117
114
|
# @return [String]
|
|
118
115
|
def inspect
|
|
119
|
-
info_inspect = "Language: #{ @language }\n"
|
|
120
|
-
"Categories: #{ @categories.to_s_for_cap }\n"
|
|
121
|
-
"Event: #{ @event }\n"
|
|
122
|
-
"Response Types: #{ @response_types.to_s_for_cap }\n"
|
|
123
|
-
"Urgency: #{ @urgency }\n"
|
|
124
|
-
"Severity: #{ @severity }\n"
|
|
125
|
-
"Certainty: #{ @certainty }\n"
|
|
126
|
-
"Audience: #{ @audience }\n"
|
|
127
|
-
"Event Codes: #{ @event_codes.inspect }\n"
|
|
128
|
-
"Effective: #{ @effective }\n"
|
|
129
|
-
"Onset: #{ @onset }\n"
|
|
130
|
-
"Expires: #{ @expires }\n"
|
|
131
|
-
"Sender Name: #{ @sender_name }\n"
|
|
132
|
-
"Headline: #{ @headline }\n"
|
|
133
|
-
"Description:\n"+
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
"
|
|
137
|
-
"
|
|
138
|
-
|
|
139
|
-
@
|
|
140
|
-
|
|
141
|
-
@resources.map{ |resource| " " + resource.inspect }.join( "\n" )+"\n"+
|
|
142
|
-
"Area:\n"+
|
|
143
|
-
@areas.map{ |area| " #{ area }" }.join( "\n" )+"\n"
|
|
144
|
-
RCAP.format_lines_for_inspect( 'INFO', info_inspect )
|
|
116
|
+
info_inspect = "Language: #{ @language }\n"\
|
|
117
|
+
"Categories: #{ @categories.to_s_for_cap }\n"\
|
|
118
|
+
"Event: #{ @event }\n"\
|
|
119
|
+
"Response Types: #{ @response_types.to_s_for_cap }\n"\
|
|
120
|
+
"Urgency: #{ @urgency }\n"\
|
|
121
|
+
"Severity: #{ @severity }\n"\
|
|
122
|
+
"Certainty: #{ @certainty }\n"\
|
|
123
|
+
"Audience: #{ @audience }\n"\
|
|
124
|
+
"Event Codes: #{ @event_codes.inspect }\n"\
|
|
125
|
+
"Effective: #{ @effective }\n"\
|
|
126
|
+
"Onset: #{ @onset }\n"\
|
|
127
|
+
"Expires: #{ @expires }\n"\
|
|
128
|
+
"Sender Name: #{ @sender_name }\n"\
|
|
129
|
+
"Headline: #{ @headline }\n"\
|
|
130
|
+
"Description:\n" + @description.to_s.lines.map { |line| ' ' + line }.join("\n") + "\n"\
|
|
131
|
+
"Instruction: #{ @instruction }\n"\
|
|
132
|
+
"Web: #{ @web }\n"\
|
|
133
|
+
"Contact: #{ @contact }\n"\
|
|
134
|
+
"Parameters:\n" + @parameters.map { |parameter| ' ' + parameter.inspect }.join("\n") + "\n"\
|
|
135
|
+
"Resources:\n" + @resources.map { |resource| ' ' + resource.inspect }.join("\n") + "\n"\
|
|
136
|
+
"Area:\n" + @areas.map { |area| " #{ area }" }.join("\n") + "\n"
|
|
137
|
+
RCAP.format_lines_for_inspect('INFO', info_inspect)
|
|
145
138
|
end
|
|
146
139
|
|
|
147
140
|
# Returns a string representation of the event of the form
|
|
@@ -154,10 +147,10 @@ module RCAP
|
|
|
154
147
|
|
|
155
148
|
# @param [REXML::Element] info_xml_element
|
|
156
149
|
# @return [Info]
|
|
157
|
-
def self.from_xml_element(
|
|
150
|
+
def self.from_xml_element(info_xml_element)
|
|
158
151
|
super.tap do |info|
|
|
159
|
-
RCAP.xpath_match(
|
|
160
|
-
info.response_types << RCAP.strip_if_given(
|
|
152
|
+
RCAP.xpath_match(info_xml_element, RESPONSE_TYPE_XPATH, Alert::XMLNS).each do |element|
|
|
153
|
+
info.response_types << RCAP.strip_if_given(element.text)
|
|
161
154
|
end
|
|
162
155
|
end
|
|
163
156
|
end
|
|
@@ -166,42 +159,42 @@ module RCAP
|
|
|
166
159
|
|
|
167
160
|
# @return [Hash]
|
|
168
161
|
def to_yaml_data
|
|
169
|
-
parameter_to_hash = lambda{ |hash, parameter| hash.merge(
|
|
170
|
-
|
|
171
|
-
RCAP.attribute_values_to_hash(
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
162
|
+
parameter_to_hash = lambda { |hash, parameter| hash.merge(parameter.name => parameter.value) }
|
|
163
|
+
|
|
164
|
+
RCAP.attribute_values_to_hash([LANGUAGE_YAML, @language],
|
|
165
|
+
[CATEGORIES_YAML, @categories],
|
|
166
|
+
[EVENT_YAML, @event],
|
|
167
|
+
[RESPONSE_TYPES_YAML, @response_types],
|
|
168
|
+
[URGENCY_YAML, @urgency],
|
|
169
|
+
[SEVERITY_YAML, @severity],
|
|
170
|
+
[CERTAINTY_YAML, @certainty],
|
|
171
|
+
[AUDIENCE_YAML, @audience],
|
|
172
|
+
[EFFECTIVE_YAML, RCAP.to_s_for_cap(@effective)],
|
|
173
|
+
[ONSET_YAML, RCAP.to_s_for_cap(@onset)],
|
|
174
|
+
[EXPIRES_YAML, RCAP.to_s_for_cap(@expires)],
|
|
175
|
+
[SENDER_NAME_YAML, @sender_name],
|
|
176
|
+
[HEADLINE_YAML, @headline],
|
|
177
|
+
[DESCRIPTION_YAML, @description],
|
|
178
|
+
[INSTRUCTION_YAML, @instruction],
|
|
179
|
+
[WEB_YAML, @web],
|
|
180
|
+
[CONTACT_YAML, @contact],
|
|
181
|
+
[EVENT_CODES_YAML, @event_codes.inject({}, ¶meter_to_hash)],
|
|
182
|
+
[PARAMETERS_YAML, @parameters.inject({}, ¶meter_to_hash)],
|
|
183
|
+
[RESOURCES_YAML, @resources.map(&:to_yaml_data)],
|
|
184
|
+
[AREAS_YAML, @areas.map(&:to_yaml_data)])
|
|
192
185
|
end
|
|
193
186
|
|
|
194
187
|
# @return [String]
|
|
195
|
-
def to_yaml(
|
|
196
|
-
|
|
188
|
+
def to_yaml(options = {})
|
|
189
|
+
to_yaml_data.to_yaml(options)
|
|
197
190
|
end
|
|
198
191
|
|
|
199
192
|
# @param [Hash] info_yaml_data
|
|
200
193
|
# @return [Info]
|
|
201
|
-
def self.from_yaml_data(
|
|
194
|
+
def self.from_yaml_data(info_yaml_data)
|
|
202
195
|
super.tap do |info|
|
|
203
|
-
Array(
|
|
204
|
-
info.response_types << RCAP.strip_if_given(
|
|
196
|
+
Array(info_yaml_data [RESPONSE_TYPES_YAML]).each do |response_type|
|
|
197
|
+
info.response_types << RCAP.strip_if_given(response_type)
|
|
205
198
|
end
|
|
206
199
|
end
|
|
207
200
|
end
|
|
@@ -210,35 +203,35 @@ module RCAP
|
|
|
210
203
|
|
|
211
204
|
# @return [Hash]
|
|
212
205
|
def to_h
|
|
213
|
-
RCAP.attribute_values_to_hash(
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
206
|
+
RCAP.attribute_values_to_hash([LANGUAGE_KEY, @language],
|
|
207
|
+
[CATEGORIES_KEY, @categories],
|
|
208
|
+
[EVENT_KEY, @event],
|
|
209
|
+
[RESPONSE_TYPES_KEY, @response_types],
|
|
210
|
+
[URGENCY_KEY, @urgency],
|
|
211
|
+
[SEVERITY_KEY, @severity],
|
|
212
|
+
[CERTAINTY_KEY, @certainty],
|
|
213
|
+
[AUDIENCE_KEY, @audience],
|
|
214
|
+
[EFFECTIVE_KEY, RCAP.to_s_for_cap(@effective)],
|
|
215
|
+
[ONSET_KEY, RCAP.to_s_for_cap(@onset)],
|
|
216
|
+
[EXPIRES_KEY, RCAP.to_s_for_cap(@expires)],
|
|
217
|
+
[SENDER_NAME_KEY, @sender_name],
|
|
218
|
+
[HEADLINE_KEY, @headline],
|
|
219
|
+
[DESCRIPTION_KEY, @description],
|
|
220
|
+
[INSTRUCTION_KEY, @instruction],
|
|
221
|
+
[WEB_KEY, @web],
|
|
222
|
+
[CONTACT_KEY, @contact],
|
|
223
|
+
[RESOURCES_KEY, @resources.map { |resource| resource.to_h }],
|
|
224
|
+
[EVENT_CODES_KEY, @event_codes.map { |event_code| event_code.to_h }],
|
|
225
|
+
[PARAMETERS_KEY, @parameters.map { |parameter| parameter.to_h }],
|
|
226
|
+
[AREAS_KEY, @areas.map { |area| area.to_h }])
|
|
234
227
|
end
|
|
235
228
|
|
|
236
229
|
# @param [Hash] info_hash
|
|
237
230
|
# @return [Info]
|
|
238
|
-
def self.from_h(
|
|
231
|
+
def self.from_h(info_hash)
|
|
239
232
|
super.tap do |info|
|
|
240
|
-
Array(
|
|
241
|
-
info.response_types << RCAP.strip_if_given(
|
|
233
|
+
Array(info_hash[RESPONSE_TYPES_KEY]).each do |response_type|
|
|
234
|
+
info.response_types << RCAP.strip_if_given(response_type)
|
|
242
235
|
end
|
|
243
236
|
end
|
|
244
237
|
end
|