rcap 2.4.1 → 2.7.3

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