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