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_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,6 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_1
|
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,40 +11,37 @@ 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
|
-
|
20
|
-
RESPONSE_TYPE_NONE = "None"
|
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_ASSESS = 'Assess'
|
20
|
+
RESPONSE_TYPE_NONE = 'None'
|
21
21
|
# Valid values for response_type
|
22
|
-
VALID_RESPONSE_TYPES = [
|
23
|
-
|
24
|
-
|
22
|
+
VALID_RESPONSE_TYPES = [RESPONSE_TYPE_SHELTER, RESPONSE_TYPE_EVACUATE,
|
23
|
+
RESPONSE_TYPE_PREPARE, RESPONSE_TYPE_EXECUTE, RESPONSE_TYPE_MONITOR,
|
24
|
+
RESPONSE_TYPE_ASSESS, RESPONSE_TYPE_NONE].freeze
|
25
25
|
|
26
|
-
|
27
|
-
CERTAINTY_OBSERVED = "Observed"
|
26
|
+
CERTAINTY_OBSERVED = 'Observed'
|
28
27
|
# Valid valies for certainty
|
29
|
-
VALID_CERTAINTIES = [
|
30
|
-
|
31
|
-
|
28
|
+
VALID_CERTAINTIES = [CERTAINTY_OBSERVED, CERTAINTY_LIKELY,
|
29
|
+
CERTAINTY_POSSIBLE, CERTAINTY_UNLIKELY, CERTAINTY_UNKNOWN].freeze
|
32
30
|
|
33
|
-
validates_length_of(
|
34
|
-
validates_inclusion_of_members_of(
|
35
|
-
validates_inclusion_of(
|
31
|
+
validates_length_of(:categories, minimum: 1)
|
32
|
+
validates_inclusion_of_members_of(:response_types, in: VALID_RESPONSE_TYPES, allow_blank: true)
|
33
|
+
validates_inclusion_of(:certainty, allow_nil: true, in: VALID_CERTAINTIES, message: "can only be assigned the following values: #{VALID_CERTAINTIES.join(', ')}")
|
36
34
|
|
37
35
|
# @return [Array<String>] Collection of textual response types; elements must be from {VALID_RESPONSE_TYPES}
|
38
|
-
attr_reader(
|
36
|
+
attr_reader(:response_types)
|
39
37
|
# @return [Array<EventCode>] Collection of {EventCode} objects
|
40
|
-
attr_reader(
|
38
|
+
attr_reader(:event_codes)
|
41
39
|
# @return [Array<Parameter>] Collection of {Parameter} objects
|
42
|
-
attr_reader(
|
40
|
+
attr_reader(:parameters)
|
43
41
|
# @return [Array<Resource> Collection of {Resource} objects
|
44
|
-
attr_reader(
|
42
|
+
attr_reader(:resources)
|
45
43
|
# @return [Array<Area>] Collection of {Area} objects
|
46
|
-
attr_reader(
|
44
|
+
attr_reader(:areas)
|
47
45
|
|
48
46
|
# @param [Hash] attributes
|
49
47
|
# @option attributes [String] :language Defaults to {DEFAULT_LANGUAGE}
|
@@ -68,7 +66,7 @@ module RCAP
|
|
68
66
|
# @option attributes [Array<Resource>] :resources Collection of {Resource} objects
|
69
67
|
# @option attributes [Array<Area>] :areas Collection of {Area} objects
|
70
68
|
def initialize
|
71
|
-
@response_types =
|
69
|
+
@response_types = []
|
72
70
|
super
|
73
71
|
end
|
74
72
|
|
@@ -93,90 +91,86 @@ module RCAP
|
|
93
91
|
end
|
94
92
|
|
95
93
|
RESPONSE_TYPE_ELEMENT_NAME = 'responseType'
|
96
|
-
RESPONSE_TYPE_XPATH = "cap:#{
|
94
|
+
RESPONSE_TYPE_XPATH = "cap:#{RESPONSE_TYPE_ELEMENT_NAME}"
|
97
95
|
|
98
96
|
# @return [REXML::Element]
|
99
97
|
def to_xml_element
|
100
|
-
xml_element = REXML::Element.new(
|
101
|
-
xml_element.add_element(
|
98
|
+
xml_element = REXML::Element.new(XML_ELEMENT_NAME)
|
99
|
+
xml_element.add_element(LANGUAGE_ELEMENT_NAME).add_text(@language) if @language
|
102
100
|
@categories.each do |category|
|
103
|
-
xml_element.add_element(
|
101
|
+
xml_element.add_element(CATEGORY_ELEMENT_NAME).add_text(category)
|
104
102
|
end
|
105
|
-
xml_element.add_element(
|
103
|
+
xml_element.add_element(EVENT_ELEMENT_NAME).add_text(@event)
|
106
104
|
@response_types.each do |response_type|
|
107
|
-
xml_element.add_element(
|
105
|
+
xml_element.add_element(RESPONSE_TYPE_ELEMENT_NAME).add_text(response_type)
|
108
106
|
end
|
109
|
-
xml_element.add_element(
|
110
|
-
xml_element.add_element(
|
111
|
-
xml_element.add_element(
|
112
|
-
xml_element.add_element(
|
107
|
+
xml_element.add_element(URGENCY_ELEMENT_NAME).add_text(@urgency)
|
108
|
+
xml_element.add_element(SEVERITY_ELEMENT_NAME).add_text(@severity)
|
109
|
+
xml_element.add_element(CERTAINTY_ELEMENT_NAME).add_text(@certainty)
|
110
|
+
xml_element.add_element(AUDIENCE_ELEMENT_NAME).add_text(@audience) if @audience
|
113
111
|
@event_codes.each do |event_code|
|
114
|
-
xml_element.add_element(
|
112
|
+
xml_element.add_element(event_code.to_xml_element)
|
115
113
|
end
|
116
|
-
xml_element.add_element(
|
117
|
-
xml_element.add_element(
|
118
|
-
xml_element.add_element(
|
119
|
-
xml_element.add_element(
|
120
|
-
xml_element.add_element(
|
121
|
-
xml_element.add_element(
|
122
|
-
xml_element.add_element(
|
123
|
-
xml_element.add_element(
|
124
|
-
xml_element.add_element(
|
114
|
+
xml_element.add_element(EFFECTIVE_ELEMENT_NAME).add_text(@effective.to_s_for_cap) if @effective
|
115
|
+
xml_element.add_element(ONSET_ELEMENT_NAME).add_text(@onset.to_s_for_cap) if @onset
|
116
|
+
xml_element.add_element(EXPIRES_ELEMENT_NAME).add_text(@expires.to_s_for_cap) if @expires
|
117
|
+
xml_element.add_element(SENDER_NAME_ELEMENT_NAME).add_text(@sender_name) if @sender_name
|
118
|
+
xml_element.add_element(HEADLINE_ELEMENT_NAME).add_text(@headline) if @headline
|
119
|
+
xml_element.add_element(DESCRIPTION_ELEMENT_NAME).add_text(@description) if @description
|
120
|
+
xml_element.add_element(INSTRUCTION_ELEMENT_NAME).add_text(@instruction) if @instruction
|
121
|
+
xml_element.add_element(WEB_ELEMENT_NAME).add_text(@web) if @web
|
122
|
+
xml_element.add_element(CONTACT_ELEMENT_NAME).add_text(@contact) if @contact
|
125
123
|
@parameters.each do |parameter|
|
126
|
-
xml_element.add_element(
|
124
|
+
xml_element.add_element(parameter.to_xml_element)
|
127
125
|
end
|
128
126
|
@resources.each do |resource|
|
129
|
-
xml_element.add_element(
|
127
|
+
xml_element.add_element(resource.to_xml_element)
|
130
128
|
end
|
131
129
|
@areas.each do |area|
|
132
|
-
xml_element.add_element(
|
130
|
+
xml_element.add_element(area.to_xml_element)
|
133
131
|
end
|
134
132
|
xml_element
|
135
133
|
end
|
136
134
|
|
137
135
|
# @return [String]
|
138
136
|
def to_xml
|
139
|
-
|
137
|
+
to_xml_element.to_s
|
140
138
|
end
|
141
139
|
|
142
140
|
# @param [REXML::Element] info_xml_element
|
143
141
|
# @return [Info]
|
144
|
-
def self.from_xml_element(
|
142
|
+
def self.from_xml_element(info_xml_element)
|
145
143
|
super.tap do |info|
|
146
|
-
RCAP.xpath_match(
|
147
|
-
info.response_types << RCAP.strip_if_given(
|
144
|
+
RCAP.xpath_match(info_xml_element, RESPONSE_TYPE_XPATH, info.xmlns).each do |element|
|
145
|
+
info.response_types << RCAP.strip_if_given(element.text)
|
148
146
|
end
|
149
147
|
end
|
150
148
|
end
|
151
149
|
|
152
150
|
# @return [String]
|
153
151
|
def inspect
|
154
|
-
info_inspect = "Language: #{
|
155
|
-
"Categories: #{
|
156
|
-
"Event: #{
|
157
|
-
"Response Types: #{
|
158
|
-
"Urgency: #{
|
159
|
-
"Severity: #{
|
160
|
-
"Certainty: #{
|
161
|
-
"Audience: #{
|
162
|
-
"Event Codes: #{
|
163
|
-
"Effective: #{
|
164
|
-
"Onset: #{
|
165
|
-
"Expires: #{
|
166
|
-
"Sender Name: #{
|
167
|
-
"Headline: #{
|
168
|
-
"Description:\n"+
|
169
|
-
@
|
170
|
-
|
171
|
-
"
|
172
|
-
"
|
173
|
-
|
174
|
-
@
|
175
|
-
|
176
|
-
@resources.map{ |resource| " " + resource.inspect }.join( "\n" )+"\n"+
|
177
|
-
"Area:\n"+
|
178
|
-
@areas.map{ |area| " #{ area }" }.join( "\n" )+"\n"
|
179
|
-
RCAP.format_lines_for_inspect( 'INFO', info_inspect )
|
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"
|
173
|
+
RCAP.format_lines_for_inspect('INFO', info_inspect)
|
180
174
|
end
|
181
175
|
|
182
176
|
# Returns a string representation of the event of the form
|
@@ -184,50 +178,49 @@ module RCAP
|
|
184
178
|
#
|
185
179
|
# @return [String]
|
186
180
|
def to_s
|
187
|
-
"#{
|
181
|
+
"#{@event}(#{@urgency}/#{@severity}/#{@certainty})"
|
188
182
|
end
|
189
183
|
|
190
|
-
|
191
184
|
RESPONSE_TYPES_YAML = 'Response Types'
|
192
185
|
|
193
186
|
# @return [Hash]
|
194
187
|
def to_yaml_data
|
195
|
-
|
188
|
+
parameter_to_hash = ->(hash, parameter) { hash.merge(parameter.name => parameter.value) }
|
196
189
|
|
197
|
-
RCAP.attribute_values_to_hash(
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
190
|
+
RCAP.attribute_values_to_hash([LANGUAGE_YAML, @language],
|
191
|
+
[CATEGORIES_YAML, @categories],
|
192
|
+
[EVENT_YAML, @event],
|
193
|
+
[RESPONSE_TYPES_YAML, @response_types],
|
194
|
+
[URGENCY_YAML, @urgency],
|
195
|
+
[SEVERITY_YAML, @severity],
|
196
|
+
[CERTAINTY_YAML, @certainty],
|
197
|
+
[AUDIENCE_YAML, @audience],
|
198
|
+
[EFFECTIVE_YAML, @effective],
|
199
|
+
[ONSET_YAML, @onset],
|
200
|
+
[EXPIRES_YAML, @expires],
|
201
|
+
[SENDER_NAME_YAML, @sender_name],
|
202
|
+
[HEADLINE_YAML, @headline],
|
203
|
+
[DESCRIPTION_YAML, @description],
|
204
|
+
[INSTRUCTION_YAML, @instruction],
|
205
|
+
[WEB_YAML, @web],
|
206
|
+
[CONTACT_YAML, @contact],
|
207
|
+
[EVENT_CODES_YAML, @event_codes.inject({}, ¶meter_to_hash)],
|
208
|
+
[PARAMETERS_YAML, @parameters.inject({}, ¶meter_to_hash)],
|
209
|
+
[RESOURCES_YAML, @resources.map(&:to_yaml_data)],
|
210
|
+
[AREAS_YAML, @areas.map(&:to_yaml_data)])
|
218
211
|
end
|
219
212
|
|
220
213
|
# @return [String]
|
221
|
-
def to_yaml(
|
222
|
-
|
214
|
+
def to_yaml(options = {})
|
215
|
+
to_yaml_data.to_yaml(options)
|
223
216
|
end
|
224
217
|
|
225
218
|
# @param [Hash] info_yaml_data
|
226
219
|
# @return [Info]
|
227
|
-
def self.from_yaml_data(
|
220
|
+
def self.from_yaml_data(info_yaml_data)
|
228
221
|
super.tap do |info|
|
229
|
-
Array(
|
230
|
-
info.response_types << RCAP.strip_if_given(
|
222
|
+
Array(info_yaml_data [RESPONSE_TYPES_YAML]).each do |response_type|
|
223
|
+
info.response_types << RCAP.strip_if_given(response_type)
|
231
224
|
end
|
232
225
|
end
|
233
226
|
end
|
@@ -236,35 +229,35 @@ module RCAP
|
|
236
229
|
|
237
230
|
# @return [Hash]
|
238
231
|
def to_h
|
239
|
-
RCAP.attribute_values_to_hash(
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
232
|
+
RCAP.attribute_values_to_hash([LANGUAGE_KEY, @language],
|
233
|
+
[CATEGORIES_KEY, @categories],
|
234
|
+
[EVENT_KEY, @event],
|
235
|
+
[RESPONSE_TYPES_KEY, @response_types],
|
236
|
+
[URGENCY_KEY, @urgency],
|
237
|
+
[SEVERITY_KEY, @severity],
|
238
|
+
[CERTAINTY_KEY, @certainty],
|
239
|
+
[AUDIENCE_KEY, @audience],
|
240
|
+
[EFFECTIVE_KEY, RCAP.to_s_for_cap(@effective)],
|
241
|
+
[ONSET_KEY, RCAP.to_s_for_cap(@onset)],
|
242
|
+
[EXPIRES_KEY, RCAP.to_s_for_cap(@expires)],
|
243
|
+
[SENDER_NAME_KEY, @sender_name],
|
244
|
+
[HEADLINE_KEY, @headline],
|
245
|
+
[DESCRIPTION_KEY, @description],
|
246
|
+
[INSTRUCTION_KEY, @instruction],
|
247
|
+
[WEB_KEY, @web],
|
248
|
+
[CONTACT_KEY, @contact],
|
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)])
|
260
253
|
end
|
261
254
|
|
262
255
|
# @param [Hash] info_hash
|
263
256
|
# @return [Info]
|
264
|
-
def self.from_h(
|
257
|
+
def self.from_h(info_hash)
|
265
258
|
super.tap do |info|
|
266
|
-
Array(
|
267
|
-
info.response_types << RCAP.strip_if_given(
|
259
|
+
Array(info_hash[RESPONSE_TYPES_KEY]).each do |response_type|
|
260
|
+
info.response_types << RCAP.strip_if_given(response_type)
|
268
261
|
end
|
269
262
|
end
|
270
263
|
end
|
data/lib/rcap/cap_1_1/point.rb
CHANGED
data/lib/rcap/cap_1_1/polygon.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_1
|
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
9
|
# @return [Class]
|
10
10
|
def point_class
|
11
11
|
Point
|
@@ -1,26 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_1
|
3
|
-
|
4
5
|
# A Resource object is valid if
|
5
6
|
# * it has a resource description
|
6
7
|
class Resource < RCAP::Base::Resource
|
7
|
-
|
8
8
|
# @return [String] Dereferenced URI - contents of URI Base64 encoded
|
9
|
-
attr_accessor(
|
9
|
+
attr_accessor(:deref_uri)
|
10
10
|
|
11
|
-
DEREF_URI_ELEMENT_NAME
|
12
|
-
DEREF_URI_XPATH
|
11
|
+
DEREF_URI_ELEMENT_NAME = 'derefUri'
|
12
|
+
DEREF_URI_XPATH = "cap:#{DEREF_URI_ELEMENT_NAME}"
|
13
13
|
|
14
14
|
# @return [REXML::Element]
|
15
15
|
def to_xml_element
|
16
|
-
xml_element =
|
17
|
-
xml_element
|
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( DIGEST_ELEMENT_NAME ).add_text( @digest ) if @digest
|
16
|
+
xml_element = REXML::Element.new(XML_ELEMENT_NAME)
|
17
|
+
xml_element.add_element(RESOURCE_DESC_ELEMENT_NAME).add_text(@resource_desc)
|
18
|
+
xml_element.add_element(MIME_TYPE_ELEMENT_NAME).add_text(@mime_type) if @mime_type
|
19
|
+
xml_element.add_element(SIZE_ELEMENT_NAME).add_text(@size.to_s) if @size
|
20
|
+
xml_element.add_element(URI_ELEMENT_NAME).add_text(@uri) if @uri
|
21
|
+
xml_element.add_element(DEREF_URI_ELEMENT_NAME).add_text(@deref_uri) if @deref_uri
|
22
|
+
xml_element.add_element(DIGEST_ELEMENT_NAME).add_text(@digest) if @digest
|
24
23
|
xml_element
|
25
24
|
end
|
26
25
|
|
@@ -35,9 +34,9 @@ module RCAP
|
|
35
34
|
#
|
36
35
|
# @return [Array(Integer,String)]
|
37
36
|
def dereference_uri!
|
38
|
-
content = URI.parse(
|
39
|
-
@deref_uri = Base64.encode64(
|
40
|
-
|
37
|
+
content = URI.parse(uri).read
|
38
|
+
@deref_uri = Base64.encode64(content)
|
39
|
+
calculate_hash_and_size
|
41
40
|
end
|
42
41
|
|
43
42
|
# @return [String]
|
@@ -47,54 +46,54 @@ module RCAP
|
|
47
46
|
|
48
47
|
# @param [REXML::Element] resource_xml_element
|
49
48
|
# @return [Resource]
|
50
|
-
def self.from_xml_element(
|
49
|
+
def self.from_xml_element(resource_xml_element)
|
51
50
|
super.tap do |resource|
|
52
|
-
resource.deref_uri = RCAP.xpath_text(
|
51
|
+
resource.deref_uri = RCAP.xpath_text(resource_xml_element, DEREF_URI_XPATH, resource.xmlns)
|
53
52
|
end
|
54
53
|
end
|
55
54
|
|
56
|
-
DEREF_URI_YAML
|
55
|
+
DEREF_URI_YAML = 'Derefrenced URI Data'
|
57
56
|
|
58
57
|
def to_yaml_data
|
59
|
-
RCAP.attribute_values_to_hash(
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
58
|
+
RCAP.attribute_values_to_hash([RESOURCE_DESC_YAML, @resource_desc],
|
59
|
+
[URI_YAML, @uri],
|
60
|
+
[MIME_TYPE_YAML, @mime_type],
|
61
|
+
[DEREF_URI_YAML, @deref_uri],
|
62
|
+
[SIZE_YAML, @size],
|
63
|
+
[DIGEST_YAML, @digest])
|
65
64
|
end
|
66
65
|
|
67
66
|
# @param [Hash] options
|
68
67
|
# @return [String]
|
69
|
-
def to_yaml(
|
70
|
-
|
68
|
+
def to_yaml(options = {})
|
69
|
+
to_yaml_data.to_yaml(options)
|
71
70
|
end
|
72
71
|
|
73
72
|
# @param [Hash] resource_yaml_data
|
74
73
|
# @return [Resource]
|
75
|
-
def self.from_yaml_data(
|
74
|
+
def self.from_yaml_data(resource_yaml_data)
|
76
75
|
super.tap do |resource|
|
77
|
-
resource.deref_uri = RCAP.strip_if_given(
|
76
|
+
resource.deref_uri = RCAP.strip_if_given(resource_yaml_data[DEREF_URI_YAML])
|
78
77
|
end
|
79
78
|
end
|
80
79
|
|
81
|
-
DEREF_URI_KEY
|
80
|
+
DEREF_URI_KEY = 'deref_uri'
|
82
81
|
|
83
82
|
# @return [Hash]
|
84
83
|
def to_h
|
85
|
-
RCAP.attribute_values_to_hash(
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
84
|
+
RCAP.attribute_values_to_hash([RESOURCE_DESC_KEY, @resource_desc],
|
85
|
+
[URI_KEY, @uri],
|
86
|
+
[MIME_TYPE_KEY, @mime_type],
|
87
|
+
[DEREF_URI_KEY, @deref_uri],
|
88
|
+
[SIZE_KEY, @size],
|
89
|
+
[DIGEST_KEY, @digest])
|
91
90
|
end
|
92
91
|
|
93
92
|
# @param [Hash] resource_hash
|
94
93
|
# @return [Resource]
|
95
|
-
def self.from_h(
|
94
|
+
def self.from_h(resource_hash)
|
96
95
|
super.tap do |resource|
|
97
|
-
resource.deref_uri = RCAP.strip_if_given(
|
96
|
+
resource.deref_uri = RCAP.strip_if_given(resource_hash[DEREF_URI_KEY])
|
98
97
|
end
|
99
98
|
end
|
100
99
|
end
|