rcap 2.5.0 → 2.7.4
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 +4 -2
- data/lib/rcap/base/alert.rb +70 -73
- data/lib/rcap/base/area.rb +19 -13
- data/lib/rcap/base/circle.rb +15 -4
- data/lib/rcap/base/event_code.rb +2 -0
- data/lib/rcap/base/geocode.rb +2 -0
- data/lib/rcap/base/info.rb +81 -75
- data/lib/rcap/base/parameter.rb +8 -6
- data/lib/rcap/base/point.rb +4 -2
- data/lib/rcap/base/polygon.rb +16 -8
- data/lib/rcap/base/resource.rb +13 -13
- data/lib/rcap/cap_1_0/alert.rb +36 -39
- data/lib/rcap/cap_1_0/area.rb +2 -0
- data/lib/rcap/cap_1_0/circle.rb +2 -0
- 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 -1
- data/lib/rcap/cap_1_0/parameter.rb +3 -2
- data/lib/rcap/cap_1_0/point.rb +2 -0
- data/lib/rcap/cap_1_0/polygon.rb +3 -1
- data/lib/rcap/cap_1_0/resource.rb +2 -0
- data/lib/rcap/cap_1_1/alert.rb +4 -2
- data/lib/rcap/cap_1_1/area.rb +2 -0
- data/lib/rcap/cap_1_1/circle.rb +2 -0
- 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 +48 -46
- data/lib/rcap/cap_1_1/parameter.rb +2 -1
- data/lib/rcap/cap_1_1/point.rb +2 -0
- data/lib/rcap/cap_1_1/polygon.rb +3 -1
- data/lib/rcap/cap_1_1/resource.rb +12 -11
- data/lib/rcap/cap_1_2/alert.rb +4 -2
- data/lib/rcap/cap_1_2/area.rb +2 -0
- data/lib/rcap/cap_1_2/circle.rb +2 -0
- 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 +55 -51
- data/lib/rcap/cap_1_2/parameter.rb +2 -1
- data/lib/rcap/cap_1_2/point.rb +2 -0
- data/lib/rcap/cap_1_2/polygon.rb +4 -2
- data/lib/rcap/cap_1_2/resource.rb +14 -12
- data/lib/rcap/config.rb +2 -0
- data/lib/rcap/custom_validators.rb +30 -27
- data/lib/rcap/extensions/array.rb +2 -0
- data/lib/rcap/extensions/date.rb +3 -1
- data/lib/rcap/extensions/date_time.rb +4 -1
- 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 +3 -1
- data/lib/rcap/extensions/time.rb +3 -0
- data/lib/rcap/formatters/yaml.rb +5 -0
- data/lib/rcap/info.rb +2 -0
- data/lib/rcap/utilities.rb +8 -10
- data/lib/rcap/validation.rb +19 -14
- data/lib/rcap/version.rb +3 -1
- data/rcap.gemspec +5 -5
- data/spec/alert_spec.rb +8 -9
- data/spec/cap_1_0/alert_spec.rb +4 -5
- data/spec/cap_1_0/area_spec.rb +7 -10
- data/spec/cap_1_0/circle_spec.rb +9 -0
- data/spec/cap_1_0/event_code_spec.rb +1 -1
- data/spec/cap_1_0/geocode_spec.rb +1 -1
- data/spec/cap_1_0/info_spec.rb +38 -38
- data/spec/cap_1_0/polygon_spec.rb +7 -5
- data/spec/cap_1_0/resource_spec.rb +6 -7
- data/spec/cap_1_1/alert_spec.rb +6 -7
- data/spec/cap_1_1/area_spec.rb +6 -8
- data/spec/cap_1_1/circle_spec.rb +9 -0
- data/spec/cap_1_1/info_spec.rb +26 -26
- data/spec/cap_1_1/parameter_spec.rb +1 -2
- data/spec/cap_1_1/polygon_spec.rb +12 -10
- data/spec/cap_1_1/resource_spec.rb +13 -13
- data/spec/cap_1_2/alert_spec.rb +7 -8
- data/spec/cap_1_2/area_spec.rb +6 -6
- data/spec/cap_1_2/circle_spec.rb +9 -0
- data/spec/cap_1_2/info_spec.rb +25 -26
- data/spec/cap_1_2/polygon_spec.rb +8 -0
- data/spec/cap_1_2/resource_spec.rb +13 -13
- data/spec/extensions_spec.rb +2 -2
- data/spec/spec_helper.rb +2 -2
- data/spec/validations_spec.rb +0 -1
- metadata +15 -15
- data/lib/rcap/extensions/fixnum.rb +0 -5
data/lib/rcap/cap_1_1/point.rb
CHANGED
data/lib/rcap/cap_1_1/polygon.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_1
|
3
5
|
# A Polygon object is valid if
|
4
|
-
# * it has a minimum of three points
|
6
|
+
# * if points are given it has a minimum of three points
|
5
7
|
# * each Point object in the points collection is valid
|
6
8
|
class Polygon < RCAP::Base::Polygon
|
7
9
|
# @return [Class]
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_1
|
3
5
|
# A Resource object is valid if
|
@@ -6,19 +8,18 @@ module RCAP
|
|
6
8
|
# @return [String] Dereferenced URI - contents of URI Base64 encoded
|
7
9
|
attr_accessor(:deref_uri)
|
8
10
|
|
9
|
-
DEREF_URI_ELEMENT_NAME
|
10
|
-
DEREF_URI_XPATH
|
11
|
+
DEREF_URI_ELEMENT_NAME = 'derefUri'
|
12
|
+
DEREF_URI_XPATH = "cap:#{DEREF_URI_ELEMENT_NAME}"
|
11
13
|
|
12
14
|
# @return [REXML::Element]
|
13
15
|
def to_xml_element
|
14
|
-
xml_element = super
|
15
16
|
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)
|
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
|
17
|
+
xml_element.add_element(RESOURCE_DESC_ELEMENT_NAME).add_text(@resource_desc.to_s)
|
18
|
+
xml_element.add_element(MIME_TYPE_ELEMENT_NAME).add_text(@mime_type.to_s) 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.to_s) if @uri
|
21
|
+
xml_element.add_element(DEREF_URI_ELEMENT_NAME).add_text(@deref_uri.to_s) if @deref_uri
|
22
|
+
xml_element.add_element(DIGEST_ELEMENT_NAME).add_text(@digest.to_s) if @digest
|
22
23
|
xml_element
|
23
24
|
end
|
24
25
|
|
@@ -51,7 +52,7 @@ module RCAP
|
|
51
52
|
end
|
52
53
|
end
|
53
54
|
|
54
|
-
DEREF_URI_YAML
|
55
|
+
DEREF_URI_YAML = 'Derefrenced URI Data'
|
55
56
|
|
56
57
|
def to_yaml_data
|
57
58
|
RCAP.attribute_values_to_hash([RESOURCE_DESC_YAML, @resource_desc],
|
@@ -76,7 +77,7 @@ module RCAP
|
|
76
77
|
end
|
77
78
|
end
|
78
79
|
|
79
|
-
DEREF_URI_KEY
|
80
|
+
DEREF_URI_KEY = 'deref_uri'
|
80
81
|
|
81
82
|
# @return [Hash]
|
82
83
|
def to_h
|
data/lib/rcap/cap_1_2/alert.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_2
|
3
5
|
# An Alert object is valid if
|
@@ -12,9 +14,9 @@ module RCAP
|
|
12
14
|
XMLNS = 'urn:oasis:names:tc:emergency:cap:1.2'
|
13
15
|
CAP_VERSION = '1.2'
|
14
16
|
|
15
|
-
STATUS_DRAFT
|
17
|
+
STATUS_DRAFT = 'Draft'
|
16
18
|
# Valid values for status
|
17
|
-
VALID_STATUSES = [STATUS_ACTUAL, STATUS_EXERCISE, STATUS_SYSTEM, STATUS_TEST, STATUS_DRAFT]
|
19
|
+
VALID_STATUSES = [STATUS_ACTUAL, STATUS_EXERCISE, STATUS_SYSTEM, STATUS_TEST, STATUS_DRAFT].freeze
|
18
20
|
|
19
21
|
# @return [String]
|
20
22
|
def xmlns
|
data/lib/rcap/cap_1_2/area.rb
CHANGED
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,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_2
|
3
5
|
# In Info object is valid if
|
@@ -9,26 +11,28 @@ module RCAP
|
|
9
11
|
# * all Resource objects in the resources collection are valid
|
10
12
|
# * all Area objects in the areas collection are valid
|
11
13
|
class Info < RCAP::Base::Info
|
12
|
-
RESPONSE_TYPE_SHELTER
|
13
|
-
RESPONSE_TYPE_EVACUATE
|
14
|
-
RESPONSE_TYPE_PREPARE
|
15
|
-
RESPONSE_TYPE_EXECUTE
|
16
|
-
RESPONSE_TYPE_MONITOR
|
17
|
-
|
18
|
-
|
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'
|
19
23
|
# Valid values for response_type
|
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
|
+
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
|
21
25
|
|
22
26
|
CERTAINTY_OBSERVED = 'Observed'
|
23
27
|
# Valid valies for certainty
|
24
|
-
VALID_CERTAINTIES = [CERTAINTY_OBSERVED, CERTAINTY_LIKELY, CERTAINTY_POSSIBLE, CERTAINTY_UNLIKELY, CERTAINTY_UNKNOWN]
|
28
|
+
VALID_CERTAINTIES = [CERTAINTY_OBSERVED, CERTAINTY_LIKELY, CERTAINTY_POSSIBLE, CERTAINTY_UNLIKELY, CERTAINTY_UNKNOWN].freeze
|
25
29
|
|
26
30
|
RESPONSE_TYPE_ELEMENT_NAME = 'responseType'
|
27
|
-
RESPONSE_TYPE_XPATH = "cap:#{
|
31
|
+
RESPONSE_TYPE_XPATH = "cap:#{RESPONSE_TYPE_ELEMENT_NAME}"
|
28
32
|
|
29
33
|
validates_length_of(:categories, minimum: 1)
|
30
34
|
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: #{
|
35
|
+
validates_inclusion_of(:certainty, allow_nil: true, in: VALID_CERTAINTIES, message: "can only be assigned the following values: #{VALID_CERTAINTIES.join(', ')}")
|
32
36
|
|
33
37
|
# @return [Array<String>] Collection of textual response types; elements must be from {VALID_RESPONSE_TYPES}
|
34
38
|
attr_reader(:response_types)
|
@@ -70,30 +74,30 @@ module RCAP
|
|
70
74
|
# @return [REXML::Element]
|
71
75
|
def to_xml_element
|
72
76
|
xml_element = REXML::Element.new(XML_ELEMENT_NAME)
|
73
|
-
xml_element.add_element(LANGUAGE_ELEMENT_NAME).add_text(@language) if @language
|
77
|
+
xml_element.add_element(LANGUAGE_ELEMENT_NAME).add_text(@language.to_s) if @language
|
74
78
|
@categories.each do |category|
|
75
|
-
xml_element.add_element(CATEGORY_ELEMENT_NAME).add_text(category)
|
79
|
+
xml_element.add_element(CATEGORY_ELEMENT_NAME).add_text(category.to_s)
|
76
80
|
end
|
77
|
-
xml_element.add_element(EVENT_ELEMENT_NAME).add_text(@event)
|
81
|
+
xml_element.add_element(EVENT_ELEMENT_NAME).add_text(@event.to_s)
|
78
82
|
@response_types.each do |response_type|
|
79
83
|
xml_element.add_element(RESPONSE_TYPE_ELEMENT_NAME).add_text(response_type)
|
80
84
|
end
|
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
|
85
|
+
xml_element.add_element(URGENCY_ELEMENT_NAME).add_text(@urgency.to_s)
|
86
|
+
xml_element.add_element(SEVERITY_ELEMENT_NAME).add_text(@severity.to_s)
|
87
|
+
xml_element.add_element(CERTAINTY_ELEMENT_NAME).add_text(@certainty.to_s)
|
88
|
+
xml_element.add_element(AUDIENCE_ELEMENT_NAME).add_text(@audience.to_s) if @audience
|
85
89
|
@event_codes.each do |event_code|
|
86
90
|
xml_element.add_element(event_code.to_xml_element)
|
87
91
|
end
|
88
92
|
xml_element.add_element(EFFECTIVE_ELEMENT_NAME).add_text(@effective.to_s_for_cap) if @effective
|
89
93
|
xml_element.add_element(ONSET_ELEMENT_NAME).add_text(@onset.to_s_for_cap) if @onset
|
90
94
|
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)
|
92
|
-
xml_element.add_element(HEADLINE_ELEMENT_NAME).add_text(@headline)
|
93
|
-
xml_element.add_element(DESCRIPTION_ELEMENT_NAME).add_text(@description)
|
94
|
-
xml_element.add_element(INSTRUCTION_ELEMENT_NAME).add_text(@instruction)
|
95
|
-
xml_element.add_element(WEB_ELEMENT_NAME).add_text(@web)
|
96
|
-
xml_element.add_element(CONTACT_ELEMENT_NAME).add_text(@contact)
|
95
|
+
xml_element.add_element(SENDER_NAME_ELEMENT_NAME).add_text(@sender_name.to_s) if @sender_name
|
96
|
+
xml_element.add_element(HEADLINE_ELEMENT_NAME).add_text(@headline.to_s) if @headline
|
97
|
+
xml_element.add_element(DESCRIPTION_ELEMENT_NAME).add_text(@description.to_s) if @description
|
98
|
+
xml_element.add_element(INSTRUCTION_ELEMENT_NAME).add_text(@instruction.to_s) if @instruction
|
99
|
+
xml_element.add_element(WEB_ELEMENT_NAME).add_text(@web.to_s) if @web
|
100
|
+
xml_element.add_element(CONTACT_ELEMENT_NAME).add_text(@contact.to_s) if @contact
|
97
101
|
@parameters.each do |parameter|
|
98
102
|
xml_element.add_element(parameter.to_xml_element)
|
99
103
|
end
|
@@ -113,27 +117,27 @@ module RCAP
|
|
113
117
|
|
114
118
|
# @return [String]
|
115
119
|
def inspect
|
116
|
-
info_inspect = "Language: #{
|
117
|
-
"Categories: #{
|
118
|
-
"Event: #{
|
119
|
-
"Response Types: #{
|
120
|
-
"Urgency: #{
|
121
|
-
"Severity: #{
|
122
|
-
"Certainty: #{
|
123
|
-
"Audience: #{
|
124
|
-
"Event Codes: #{
|
125
|
-
"Effective: #{
|
126
|
-
"Onset: #{
|
127
|
-
"Expires: #{
|
128
|
-
"Sender Name: #{
|
129
|
-
"Headline: #{
|
130
|
-
"Description:\n" +
|
131
|
-
"Instruction: #{
|
132
|
-
"Web: #{
|
133
|
-
"Contact: #{
|
134
|
-
"Parameters:\n" +
|
135
|
-
"Resources:\n" +
|
136
|
-
"Area:\n" +
|
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"
|
137
141
|
RCAP.format_lines_for_inspect('INFO', info_inspect)
|
138
142
|
end
|
139
143
|
|
@@ -142,7 +146,7 @@ module RCAP
|
|
142
146
|
#
|
143
147
|
# @return [String]
|
144
148
|
def to_s
|
145
|
-
"#{
|
149
|
+
"#{@event}(#{@urgency}/#{@severity}/#{@certainty})"
|
146
150
|
end
|
147
151
|
|
148
152
|
# @param [REXML::Element] info_xml_element
|
@@ -159,7 +163,7 @@ module RCAP
|
|
159
163
|
|
160
164
|
# @return [Hash]
|
161
165
|
def to_yaml_data
|
162
|
-
parameter_to_hash =
|
166
|
+
parameter_to_hash = ->(hash, parameter) { hash.merge(parameter.name => parameter.value) }
|
163
167
|
|
164
168
|
RCAP.attribute_values_to_hash([LANGUAGE_YAML, @language],
|
165
169
|
[CATEGORIES_YAML, @categories],
|
@@ -220,10 +224,10 @@ module RCAP
|
|
220
224
|
[INSTRUCTION_KEY, @instruction],
|
221
225
|
[WEB_KEY, @web],
|
222
226
|
[CONTACT_KEY, @contact],
|
223
|
-
[RESOURCES_KEY, @resources.map
|
224
|
-
[EVENT_CODES_KEY, @event_codes.map
|
225
|
-
[PARAMETERS_KEY, @parameters.map
|
226
|
-
[AREAS_KEY, @areas.map
|
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)])
|
227
231
|
end
|
228
232
|
|
229
233
|
# @param [Hash] info_hash
|
data/lib/rcap/cap_1_2/point.rb
CHANGED
data/lib/rcap/cap_1_2/polygon.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_2
|
3
5
|
# A Polygon object is valid if
|
4
|
-
# * it has a minimum of three points
|
6
|
+
# * if points are given it has a minimum of three points
|
5
7
|
# * each Point object in the points collection is valid
|
6
8
|
class Polygon < RCAP::Base::Polygon
|
7
|
-
validates_length_of(:points, minimum: 4)
|
9
|
+
validates_length_of(:points, minimum: 4, allow_blank: true)
|
8
10
|
|
9
11
|
# @return [Class]
|
10
12
|
def point_class
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module RCAP
|
2
4
|
module CAP_1_2
|
3
5
|
# A Resource object is valid if
|
@@ -9,20 +11,19 @@ module RCAP
|
|
9
11
|
|
10
12
|
validates_presence_of(:mime_type)
|
11
13
|
|
12
|
-
DEREF_URI_ELEMENT_NAME
|
14
|
+
DEREF_URI_ELEMENT_NAME = 'derefUri'
|
13
15
|
|
14
|
-
DEREF_URI_XPATH
|
16
|
+
DEREF_URI_XPATH = "cap:#{DEREF_URI_ELEMENT_NAME}"
|
15
17
|
|
16
18
|
# @return [REXML::Element]
|
17
19
|
def to_xml_element
|
18
|
-
xml_element = super
|
19
20
|
xml_element = REXML::Element.new(XML_ELEMENT_NAME)
|
20
|
-
xml_element.add_element(RESOURCE_DESC_ELEMENT_NAME).add_text(@resource_desc)
|
21
|
-
xml_element.add_element(MIME_TYPE_ELEMENT_NAME).add_text(@mime_type) if @mime_type
|
22
|
-
xml_element.add_element(SIZE_ELEMENT_NAME).add_text(@size.to_s)
|
23
|
-
xml_element.add_element(URI_ELEMENT_NAME).add_text(@uri) if @uri
|
24
|
-
xml_element.add_element(DEREF_URI_ELEMENT_NAME).add_text(@deref_uri) if @deref_uri
|
25
|
-
xml_element.add_element(DIGEST_ELEMENT_NAME).add_text(@digest) if @digest
|
21
|
+
xml_element.add_element(RESOURCE_DESC_ELEMENT_NAME).add_text(@resource_desc.to_s)
|
22
|
+
xml_element.add_element(MIME_TYPE_ELEMENT_NAME).add_text(@mime_type.to_s) if @mime_type
|
23
|
+
xml_element.add_element(SIZE_ELEMENT_NAME).add_text(@size.to_s) if @size
|
24
|
+
xml_element.add_element(URI_ELEMENT_NAME).add_text(@uri.to_s) if @uri
|
25
|
+
xml_element.add_element(DEREF_URI_ELEMENT_NAME).add_text(@deref_uri.to_s) if @deref_uri
|
26
|
+
xml_element.add_element(DIGEST_ELEMENT_NAME).add_text(@digest.to_s) if @digest
|
26
27
|
xml_element
|
27
28
|
end
|
28
29
|
|
@@ -55,7 +56,7 @@ module RCAP
|
|
55
56
|
end
|
56
57
|
end
|
57
58
|
|
58
|
-
DEREF_URI_YAML
|
59
|
+
DEREF_URI_YAML = 'Derefrenced URI Data'
|
59
60
|
|
60
61
|
# @param [Hash] options
|
61
62
|
# @return [String]
|
@@ -66,7 +67,8 @@ module RCAP
|
|
66
67
|
[MIME_TYPE_YAML, @mime_type],
|
67
68
|
[DEREF_URI_YAML, @deref_uri],
|
68
69
|
[SIZE_YAML, @size],
|
69
|
-
[DIGEST_YAML, @digest]
|
70
|
+
[DIGEST_YAML, @digest]
|
71
|
+
).to_yaml(options)
|
70
72
|
end
|
71
73
|
|
72
74
|
# @param [Hash] resource_yaml_data
|
@@ -77,7 +79,7 @@ module RCAP
|
|
77
79
|
end
|
78
80
|
end
|
79
81
|
|
80
|
-
DEREF_URI_KEY
|
82
|
+
DEREF_URI_KEY = 'deref_uri'
|
81
83
|
|
82
84
|
# @return [Hash]
|
83
85
|
def to_h
|
data/lib/rcap/config.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Validation
|
2
4
|
module ClassMethods
|
3
5
|
CAP_NUMBER_REGEX = Regexp.new('^-{0,1}\d*\.{0,1}\d+$')
|
@@ -12,9 +14,8 @@ module Validation
|
|
12
14
|
|
13
15
|
validates_each(*attributes) do |object, attribute, value|
|
14
16
|
next if value.nil? && options[:allow_nil]
|
15
|
-
|
16
|
-
|
17
|
-
end
|
17
|
+
|
18
|
+
object.errors[attribute] << options[:message] unless options[:in].include?(value)
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
@@ -27,10 +28,9 @@ module Validation
|
|
27
28
|
}.merge!(attributes.extract_options!)
|
28
29
|
|
29
30
|
validates_each(*attributes) do |object, attribute, collection|
|
30
|
-
next if (
|
31
|
-
|
32
|
-
|
33
|
-
end
|
31
|
+
next if (collection.nil? && options[:allow_nil]) || (collection.empty? && options[:allow_empty])
|
32
|
+
|
33
|
+
object.errors[attribute] << options[:message] unless collection.all? { |member| options[:in].include?(member) }
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -40,10 +40,9 @@ module Validation
|
|
40
40
|
}.merge!(attributes.extract_options!)
|
41
41
|
|
42
42
|
validates_each(*attributes) do |object, attribute, collection|
|
43
|
-
next if (
|
44
|
-
|
45
|
-
|
46
|
-
end
|
43
|
+
next if (collection.nil? && options[:allow_nil]) || (collection.empty? && options[:allow_empty])
|
44
|
+
|
45
|
+
object.errors[attribute] << options[:message] unless options[:minimum] && collection.length >= options[:minimum]
|
47
46
|
end
|
48
47
|
end
|
49
48
|
|
@@ -54,9 +53,8 @@ module Validation
|
|
54
53
|
|
55
54
|
validates_each(*attributes) do |object, attribute, value|
|
56
55
|
next if value.nil? && options[:allow_nil]
|
57
|
-
|
58
|
-
|
59
|
-
end
|
56
|
+
|
57
|
+
object.errors[attribute] << options[:message] unless value&.valid?
|
60
58
|
end
|
61
59
|
end
|
62
60
|
|
@@ -66,10 +64,9 @@ module Validation
|
|
66
64
|
}.merge!(attributes.extract_options!)
|
67
65
|
|
68
66
|
validates_each(*attributes) do |object, attribute, collection|
|
69
|
-
next if (
|
70
|
-
|
71
|
-
|
72
|
-
end
|
67
|
+
next if (collection.nil? && options[:allow_nil]) || (collection.empty? && options[:allow_empty])
|
68
|
+
|
69
|
+
object.errors[attribute] << options[:message] unless collection.all?(&:valid?)
|
73
70
|
end
|
74
71
|
end
|
75
72
|
|
@@ -80,6 +77,7 @@ module Validation
|
|
80
77
|
|
81
78
|
validates_each(*attributes) do |object, attribute, value|
|
82
79
|
next if value.blank?
|
80
|
+
|
83
81
|
contingent_on_attribute = object.send(options[:on])
|
84
82
|
contingent_on_attribute_value = options[:with_value]
|
85
83
|
|
@@ -98,7 +96,10 @@ module Validation
|
|
98
96
|
contingent_attribute_value = object.send(options[:when])
|
99
97
|
required_contingent_attribute_value = options[:is]
|
100
98
|
|
101
|
-
|
99
|
+
if contingent_attribute_value.nil? || contingent_attribute_value != required_contingent_attribute_value && !options[:is].blank?
|
100
|
+
next
|
101
|
+
end
|
102
|
+
|
102
103
|
if value.blank?
|
103
104
|
object.errors[attribute] << options[:message].gsub(/:contingent_attribute/, options[:whenn].to_s)
|
104
105
|
end
|
@@ -107,16 +108,17 @@ module Validation
|
|
107
108
|
|
108
109
|
def validates_numericality_of(*attributes)
|
109
110
|
options = {
|
110
|
-
message: 'is not a number or does not meet a conditional requirement'
|
111
|
+
message: 'is not a number or does not meet a conditional requirement'
|
111
112
|
}.merge!(attributes.extract_options!)
|
112
113
|
|
113
114
|
re = options[:only_integer] ? CAP_INTEGER_REGEX : CAP_NUMBER_REGEX
|
114
115
|
|
115
116
|
validates_each(*attributes) do |object, attribute, value|
|
116
117
|
next if value.nil? && options[:allow_nil]
|
117
|
-
|
118
|
-
|
119
|
-
|
118
|
+
|
119
|
+
unless (value.to_s =~ re) &&
|
120
|
+
(options[:greater_than].nil? || value && value > options[:greater_than]) &&
|
121
|
+
(options[:greater_than_or_equal].nil? || value && value >= options[:greater_than_or_equal])
|
120
122
|
object.errors[attribute] << options[:message]
|
121
123
|
end
|
122
124
|
end
|
@@ -129,6 +131,7 @@ module Validation
|
|
129
131
|
|
130
132
|
validates_each(*attributes) do |object, attribute, _value|
|
131
133
|
next if collection.nil? && options[:allow_nil]
|
134
|
+
|
132
135
|
unless options[:to].all? { |method_name| object.respond_to?(method_name) }
|
133
136
|
object.errors[attribute] << options [:message]
|
134
137
|
end
|
@@ -141,10 +144,10 @@ module Validation
|
|
141
144
|
}.merge!(attributes.extract_options!)
|
142
145
|
|
143
146
|
validates_each(*attributes) do |object, attribute, collection|
|
144
|
-
next if
|
145
|
-
|
146
|
-
|
147
|
-
|
147
|
+
next if collection.nil? && options[:allow_nil]
|
148
|
+
next if collection.empty? && options[:allow_empty]
|
149
|
+
|
150
|
+
object.errors[attribute] << options[:message] unless collection.first == collection.last
|
148
151
|
end
|
149
152
|
end
|
150
153
|
end
|