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.
Files changed (99) hide show
  1. checksums.yaml +5 -5
  2. data/.ruby-version +1 -0
  3. data/CHANGELOG.md +18 -0
  4. data/README.md +1 -0
  5. data/lib/rcap.rb +3 -1
  6. data/lib/rcap/alert.rb +30 -29
  7. data/lib/rcap/base/alert.rb +208 -205
  8. data/lib/rcap/base/area.rb +95 -91
  9. data/lib/rcap/base/circle.rb +45 -34
  10. data/lib/rcap/base/event_code.rb +2 -0
  11. data/lib/rcap/base/geocode.rb +2 -0
  12. data/lib/rcap/base/info.rb +273 -272
  13. data/lib/rcap/base/parameter.rb +29 -28
  14. data/lib/rcap/base/point.rb +26 -24
  15. data/lib/rcap/base/polygon.rb +43 -35
  16. data/lib/rcap/base/resource.rb +65 -65
  17. data/lib/rcap/cap_1_0/alert.rb +85 -86
  18. data/lib/rcap/cap_1_0/area.rb +2 -2
  19. data/lib/rcap/cap_1_0/circle.rb +2 -1
  20. data/lib/rcap/cap_1_0/event_code.rb +3 -1
  21. data/lib/rcap/cap_1_0/geocode.rb +3 -1
  22. data/lib/rcap/cap_1_0/info.rb +3 -3
  23. data/lib/rcap/cap_1_0/parameter.rb +13 -13
  24. data/lib/rcap/cap_1_0/point.rb +2 -1
  25. data/lib/rcap/cap_1_0/polygon.rb +3 -3
  26. data/lib/rcap/cap_1_0/resource.rb +2 -3
  27. data/lib/rcap/cap_1_1/alert.rb +6 -6
  28. data/lib/rcap/cap_1_1/area.rb +2 -2
  29. data/lib/rcap/cap_1_1/circle.rb +2 -1
  30. data/lib/rcap/cap_1_1/event_code.rb +3 -1
  31. data/lib/rcap/cap_1_1/geocode.rb +3 -1
  32. data/lib/rcap/cap_1_1/info.rb +125 -132
  33. data/lib/rcap/cap_1_1/parameter.rb +2 -3
  34. data/lib/rcap/cap_1_1/point.rb +2 -1
  35. data/lib/rcap/cap_1_1/polygon.rb +3 -3
  36. data/lib/rcap/cap_1_1/resource.rb +37 -38
  37. data/lib/rcap/cap_1_2/alert.rb +6 -6
  38. data/lib/rcap/cap_1_2/area.rb +2 -2
  39. data/lib/rcap/cap_1_2/circle.rb +2 -1
  40. data/lib/rcap/cap_1_2/event_code.rb +3 -1
  41. data/lib/rcap/cap_1_2/geocode.rb +3 -1
  42. data/lib/rcap/cap_1_2/info.rb +120 -123
  43. data/lib/rcap/cap_1_2/parameter.rb +2 -3
  44. data/lib/rcap/cap_1_2/point.rb +2 -1
  45. data/lib/rcap/cap_1_2/polygon.rb +4 -4
  46. data/lib/rcap/cap_1_2/resource.rb +38 -38
  47. data/lib/rcap/config.rb +5 -3
  48. data/lib/rcap/custom_validators.rb +75 -78
  49. data/lib/rcap/extensions/array.rb +3 -1
  50. data/lib/rcap/extensions/date.rb +3 -1
  51. data/lib/rcap/extensions/date_time.rb +5 -2
  52. data/lib/rcap/extensions/float.rb +2 -0
  53. data/lib/rcap/extensions/integer.rb +7 -0
  54. data/lib/rcap/extensions/nil_class.rb +2 -0
  55. data/lib/rcap/extensions/string.rb +6 -4
  56. data/lib/rcap/extensions/time.rb +5 -3
  57. data/lib/rcap/formatters/yaml.rb +5 -0
  58. data/lib/rcap/info.rb +6 -5
  59. data/lib/rcap/utilities.rb +27 -30
  60. data/lib/rcap/validation.rb +22 -21
  61. data/lib/rcap/version.rb +3 -1
  62. data/rcap.gemspec +5 -5
  63. data/spec/alert_spec.rb +141 -141
  64. data/spec/cap_1_0/alert_spec.rb +92 -94
  65. data/spec/cap_1_0/area_spec.rb +86 -86
  66. data/spec/cap_1_0/circle_spec.rb +48 -39
  67. data/spec/cap_1_0/event_code_spec.rb +15 -15
  68. data/spec/cap_1_0/geocode_spec.rb +16 -16
  69. data/spec/cap_1_0/info_spec.rb +175 -177
  70. data/spec/cap_1_0/parameter_spec.rb +27 -27
  71. data/spec/cap_1_0/point_spec.rb +18 -18
  72. data/spec/cap_1_0/polygon_spec.rb +43 -41
  73. data/spec/cap_1_0/resource_spec.rb +63 -64
  74. data/spec/cap_1_1/alert_spec.rb +107 -109
  75. data/spec/cap_1_1/area_spec.rb +90 -90
  76. data/spec/cap_1_1/circle_spec.rb +43 -34
  77. data/spec/cap_1_1/event_code_spec.rb +15 -16
  78. data/spec/cap_1_1/geocode_spec.rb +16 -16
  79. data/spec/cap_1_1/info_spec.rb +194 -196
  80. data/spec/cap_1_1/parameter_spec.rb +17 -17
  81. data/spec/cap_1_1/point_spec.rb +18 -18
  82. data/spec/cap_1_1/polygon_spec.rb +43 -41
  83. data/spec/cap_1_1/resource_spec.rb +106 -107
  84. data/spec/cap_1_2/alert_spec.rb +98 -99
  85. data/spec/cap_1_2/area_spec.rb +90 -90
  86. data/spec/cap_1_2/circle_spec.rb +52 -43
  87. data/spec/cap_1_2/event_code_spec.rb +19 -20
  88. data/spec/cap_1_2/geocode_spec.rb +20 -20
  89. data/spec/cap_1_2/info_spec.rb +196 -198
  90. data/spec/cap_1_2/parameter_spec.rb +19 -19
  91. data/spec/cap_1_2/point_spec.rb +21 -21
  92. data/spec/cap_1_2/polygon_spec.rb +55 -47
  93. data/spec/cap_1_2/resource_spec.rb +96 -97
  94. data/spec/extensions_spec.rb +29 -29
  95. data/spec/info_spec.rb +15 -15
  96. data/spec/spec_helper.rb +3 -3
  97. data/spec/validations_spec.rb +73 -73
  98. metadata +12 -11
  99. data/lib/rcap/extensions/fixnum.rb +0 -5
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_1
3
-
4
5
  # A Circle object is valid if
5
6
  # * it has a valid lattitude and longitude
6
7
  # * it has a radius with a value greater than zero
@@ -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:#{ XML_ELEMENT_NAME }"
8
+ XPATH = "cap:#{XML_ELEMENT_NAME}"
7
9
 
8
10
  # @return [String]
9
11
  def xmlns
@@ -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:#{ XML_ELEMENT_NAME }"
8
+ XPATH = "cap:#{XML_ELEMENT_NAME}"
7
9
 
8
10
  def xmlns
9
11
  Alert::XMLNS
@@ -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
- 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"
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 = [ RESPONSE_TYPE_SHELTER, RESPONSE_TYPE_EVACUATE,
23
- RESPONSE_TYPE_PREPARE, RESPONSE_TYPE_EXECUTE, RESPONSE_TYPE_MONITOR,
24
- RESPONSE_TYPE_ASSESS, RESPONSE_TYPE_NONE ]
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 = [ CERTAINTY_OBSERVED, CERTAINTY_LIKELY,
30
- CERTAINTY_POSSIBLE, CERTAINTY_UNLIKELY, CERTAINTY_UNKNOWN ]
31
-
28
+ VALID_CERTAINTIES = [CERTAINTY_OBSERVED, CERTAINTY_LIKELY,
29
+ CERTAINTY_POSSIBLE, CERTAINTY_UNLIKELY, CERTAINTY_UNKNOWN].freeze
32
30
 
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(', ') }")
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( :response_types )
36
+ attr_reader(:response_types)
39
37
  # @return [Array<EventCode>] Collection of {EventCode} objects
40
- attr_reader( :event_codes )
38
+ attr_reader(:event_codes)
41
39
  # @return [Array<Parameter>] Collection of {Parameter} objects
42
- attr_reader( :parameters )
40
+ attr_reader(:parameters)
43
41
  # @return [Array<Resource> Collection of {Resource} objects
44
- attr_reader( :resources )
42
+ attr_reader(:resources)
45
43
  # @return [Array<Area>] Collection of {Area} objects
46
- attr_reader( :areas )
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:#{ RESPONSE_TYPE_ELEMENT_NAME }"
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( XML_ELEMENT_NAME )
101
- xml_element.add_element( LANGUAGE_ELEMENT_NAME ).add_text( @language ) if @language
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( CATEGORY_ELEMENT_NAME ).add_text( category )
101
+ xml_element.add_element(CATEGORY_ELEMENT_NAME).add_text(category)
104
102
  end
105
- xml_element.add_element( EVENT_ELEMENT_NAME ).add_text( @event )
103
+ xml_element.add_element(EVENT_ELEMENT_NAME).add_text(@event)
106
104
  @response_types.each do |response_type|
107
- xml_element.add_element( RESPONSE_TYPE_ELEMENT_NAME ).add_text( response_type )
105
+ xml_element.add_element(RESPONSE_TYPE_ELEMENT_NAME).add_text(response_type)
108
106
  end
109
- xml_element.add_element( URGENCY_ELEMENT_NAME ).add_text( @urgency )
110
- xml_element.add_element( SEVERITY_ELEMENT_NAME ).add_text( @severity )
111
- xml_element.add_element( CERTAINTY_ELEMENT_NAME ).add_text( @certainty )
112
- xml_element.add_element( AUDIENCE_ELEMENT_NAME ).add_text( @audience ) if @audience
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( event_code.to_xml_element )
112
+ xml_element.add_element(event_code.to_xml_element)
115
113
  end
116
- xml_element.add_element( EFFECTIVE_ELEMENT_NAME ).add_text( @effective.to_s_for_cap ) if @effective
117
- xml_element.add_element( ONSET_ELEMENT_NAME ).add_text( @onset.to_s_for_cap ) if @onset
118
- xml_element.add_element( EXPIRES_ELEMENT_NAME ).add_text( @expires.to_s_for_cap ) if @expires
119
- xml_element.add_element( SENDER_NAME_ELEMENT_NAME ).add_text( @sender_name ) if @sender_name
120
- xml_element.add_element( HEADLINE_ELEMENT_NAME ).add_text( @headline ) if @headline
121
- xml_element.add_element( DESCRIPTION_ELEMENT_NAME ).add_text( @description ) if @description
122
- xml_element.add_element( INSTRUCTION_ELEMENT_NAME ).add_text( @instruction ) if @instruction
123
- xml_element.add_element( WEB_ELEMENT_NAME ).add_text( @web ) if @web
124
- xml_element.add_element( CONTACT_ELEMENT_NAME ).add_text( @contact ) if @contact
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( parameter.to_xml_element )
124
+ xml_element.add_element(parameter.to_xml_element)
127
125
  end
128
126
  @resources.each do |resource|
129
- xml_element.add_element( resource.to_xml_element )
127
+ xml_element.add_element(resource.to_xml_element)
130
128
  end
131
129
  @areas.each do |area|
132
- xml_element.add_element( area.to_xml_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
- self.to_xml_element.to_s
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( info_xml_element )
142
+ def self.from_xml_element(info_xml_element)
145
143
  super.tap do |info|
146
- RCAP.xpath_match( info_xml_element, RESPONSE_TYPE_XPATH, info.xmlns ).each do |element|
147
- info.response_types << RCAP.strip_if_given( element.text )
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: #{ @language }\n"+
155
- "Categories: #{ @categories.to_s_for_cap }\n"+
156
- "Event: #{ @event }\n"+
157
- "Response Types: #{ @response_types.to_s_for_cap }\n"+
158
- "Urgency: #{ @urgency }\n"+
159
- "Severity: #{ @severity }\n"+
160
- "Certainty: #{ @certainty }\n"+
161
- "Audience: #{ @audience }\n"+
162
- "Event Codes: #{ @event_codes.inspect }\n"+
163
- "Effective: #{ @effective }\n"+
164
- "Onset: #{ @onset }\n"+
165
- "Expires: #{ @expires }\n"+
166
- "Sender Name: #{ @sender_name }\n"+
167
- "Headline: #{ @headline }\n"+
168
- "Description:\n"+
169
- @description.to_s.lines.map{ |line| " " + line }.join( "\n")+"\n"+
170
- "Instruction: #{ @instruction }\n"+
171
- "Web: #{ @web }\n"+
172
- "Contact: #{ @contact }\n"+
173
- "Parameters:\n"+
174
- @parameters.map{ |parameter| " " + parameter.inspect }.join( "\n" )+"\n"+
175
- "Resources:\n"+
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
- "#{ @event }(#{ @urgency }/#{ @severity }/#{ @certainty })"
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
- parameter_to_hash = lambda{ |hash, parameter| hash.merge( parameter.name => parameter.value )}
188
+ parameter_to_hash = ->(hash, parameter) { hash.merge(parameter.name => parameter.value) }
196
189
 
197
- RCAP.attribute_values_to_hash( [ LANGUAGE_YAML, @language ],
198
- [ CATEGORIES_YAML, @categories ],
199
- [ EVENT_YAML, @event ],
200
- [ RESPONSE_TYPES_YAML, @response_types ],
201
- [ URGENCY_YAML, @urgency ],
202
- [ SEVERITY_YAML, @severity ],
203
- [ CERTAINTY_YAML, @certainty ],
204
- [ AUDIENCE_YAML, @audience ],
205
- [ EFFECTIVE_YAML, @effective ],
206
- [ ONSET_YAML, @onset ],
207
- [ EXPIRES_YAML, @expires ],
208
- [ SENDER_NAME_YAML, @sender_name ],
209
- [ HEADLINE_YAML, @headline ],
210
- [ DESCRIPTION_YAML, @description ],
211
- [ INSTRUCTION_YAML, @instruction ],
212
- [ WEB_YAML, @web ],
213
- [ CONTACT_YAML, @contact ],
214
- [ EVENT_CODES_YAML, @event_codes.inject({}, &parameter_to_hash )],
215
- [ PARAMETERS_YAML, @parameters.inject({}, &parameter_to_hash )],
216
- [ RESOURCES_YAML, @resources.map( &:to_yaml_data )],
217
- [ AREAS_YAML, @areas.map( &:to_yaml_data )])
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({}, &parameter_to_hash)],
208
+ [PARAMETERS_YAML, @parameters.inject({}, &parameter_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( options = {} )
222
- self.to_yaml_data.to_yaml( options )
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( info_yaml_data )
220
+ def self.from_yaml_data(info_yaml_data)
228
221
  super.tap do |info|
229
- Array( info_yaml_data [ RESPONSE_TYPES_YAML ] ).each do |response_type|
230
- info.response_types << RCAP.strip_if_given( response_type )
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( [ LANGUAGE_KEY, @language ],
240
- [ CATEGORIES_KEY, @categories ],
241
- [ EVENT_KEY, @event ],
242
- [ RESPONSE_TYPES_KEY, @response_types ],
243
- [ URGENCY_KEY, @urgency ],
244
- [ SEVERITY_KEY, @severity ],
245
- [ CERTAINTY_KEY, @certainty ],
246
- [ AUDIENCE_KEY, @audience ],
247
- [ EFFECTIVE_KEY, RCAP.to_s_for_cap( @effective )],
248
- [ ONSET_KEY, RCAP.to_s_for_cap( @onset )],
249
- [ EXPIRES_KEY, RCAP.to_s_for_cap( @expires )],
250
- [ SENDER_NAME_KEY, @sender_name ],
251
- [ HEADLINE_KEY, @headline ],
252
- [ DESCRIPTION_KEY, @description ],
253
- [ INSTRUCTION_KEY, @instruction ],
254
- [ WEB_KEY, @web ],
255
- [ CONTACT_KEY, @contact ],
256
- [ RESOURCES_KEY, @resources.map{ |resource| resource.to_h } ],
257
- [ EVENT_CODES_KEY, @event_codes.map{ |event_code| event_code.to_h } ],
258
- [ PARAMETERS_KEY, @parameters.map{ |parameter| parameter.to_h } ],
259
- [ AREAS_KEY, @areas.map{ |area| area.to_h }])
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( info_hash )
257
+ def self.from_h(info_hash)
265
258
  super.tap do |info|
266
- Array( info_hash[ RESPONSE_TYPES_KEY ]).each do |response_type|
267
- info.response_types << RCAP.strip_if_given( response_type )
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
@@ -1,11 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_1
3
-
4
5
  # A Parameter object is valid if
5
6
  # * it has a name
6
- # * it has a value
7
7
  class Parameter < RCAP::Base::Parameter
8
-
9
8
  # @return [String]
10
9
  def xmlns
11
10
  Alert::XMLNS
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_1
3
-
4
5
  # A Point object is valid if
5
6
  # * it has a lattitude within the minimum and maximum lattitude values
6
7
  # * it has a longitude within the minimum and maximum longitude values
@@ -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( :deref_uri )
9
+ attr_accessor(:deref_uri)
10
10
 
11
- DEREF_URI_ELEMENT_NAME = 'derefUri'
12
- DEREF_URI_XPATH = "cap:#{ DEREF_URI_ELEMENT_NAME }"
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 = super
17
- xml_element = REXML::Element.new( XML_ELEMENT_NAME )
18
- xml_element.add_element( RESOURCE_DESC_ELEMENT_NAME ).add_text( @resource_desc )
19
- xml_element.add_element( MIME_TYPE_ELEMENT_NAME ).add_text( @mime_type ) if @mime_type
20
- xml_element.add_element( SIZE_ELEMENT_NAME ).add_text( @size.to_s ) if @size
21
- xml_element.add_element( URI_ELEMENT_NAME ).add_text( @uri ) if @uri
22
- xml_element.add_element( DEREF_URI_ELEMENT_NAME ).add_text( @deref_uri ) if @deref_uri
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( self.uri ).read
39
- @deref_uri = Base64.encode64( content )
40
- self.calculate_hash_and_size
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( resource_xml_element )
49
+ def self.from_xml_element(resource_xml_element)
51
50
  super.tap do |resource|
52
- resource.deref_uri = RCAP.xpath_text( resource_xml_element, DEREF_URI_XPATH, resource.xmlns )
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 = "Derefrenced URI Data"
55
+ DEREF_URI_YAML = 'Derefrenced URI Data'
57
56
 
58
57
  def to_yaml_data
59
- RCAP.attribute_values_to_hash( [ RESOURCE_DESC_YAML, @resource_desc ],
60
- [ URI_YAML, @uri ],
61
- [ MIME_TYPE_YAML, @mime_type ],
62
- [ DEREF_URI_YAML, @deref_uri ],
63
- [ SIZE_YAML, @size ],
64
- [ DIGEST_YAML, @digest ])
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( options = {} )
70
- self.to_yaml_data.to_yaml( options )
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( resource_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( resource_yaml_data[ DEREF_URI_YAML ])
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 = 'deref_uri'
80
+ DEREF_URI_KEY = 'deref_uri'
82
81
 
83
82
  # @return [Hash]
84
83
  def to_h
85
- RCAP.attribute_values_to_hash( [ RESOURCE_DESC_KEY, @resource_desc ],
86
- [ URI_KEY, @uri],
87
- [ MIME_TYPE_KEY, @mime_type],
88
- [ DEREF_URI_KEY, @deref_uri],
89
- [ SIZE_KEY, @size ],
90
- [ DIGEST_KEY, @digest ])
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( resource_hash )
94
+ def self.from_h(resource_hash)
96
95
  super.tap do |resource|
97
- resource.deref_uri = RCAP.strip_if_given( resource_hash[ DEREF_URI_KEY ])
96
+ resource.deref_uri = RCAP.strip_if_given(resource_hash[DEREF_URI_KEY])
98
97
  end
99
98
  end
100
99
  end