rcap 2.4.1 → 2.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|