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