rcap 1.2.0 → 1.2.1
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.
- data/.gitignore +1 -0
- data/CHANGELOG.rdoc +8 -0
- data/Rakefile +4 -2
- data/lib/extensions/array.rb +5 -0
- data/lib/extensions/date_time.rb +16 -0
- data/lib/extensions/string.rb +16 -0
- data/lib/extensions/time.rb +14 -0
- data/lib/rcap.rb +6 -1
- data/lib/rcap/alert.rb +9 -3
- data/lib/rcap/cap_1_0/area.rb +1 -4
- data/lib/rcap/cap_1_0/info.rb +2 -4
- data/lib/rcap/cap_1_0/polygon.rb +1 -4
- data/lib/rcap/cap_1_1/area.rb +1 -4
- data/lib/rcap/cap_1_1/info.rb +3 -8
- data/lib/rcap/cap_1_1/polygon.rb +1 -4
- data/lib/rcap/cap_1_2/area.rb +1 -4
- data/lib/rcap/cap_1_2/info.rb +3 -8
- data/lib/rcap/cap_1_2/polygon.rb +1 -4
- data/lib/rcap/utilities.rb +0 -42
- data/lib/rcap/version.rb +1 -1
- data/rcap.gemspec +2 -2
- data/spec/alert_spec.rb +73 -6
- data/spec/assets/amber.atom +52 -0
- data/spec/assets/canada.cap +164 -0
- data/spec/assets/earthquake.cap +96 -0
- data/spec/assets/earthquake_index.atom +11 -0
- data/spec/assets/invalid.cap +19 -0
- data/spec/assets/invalid.rss +8 -0
- data/spec/assets/invalid_element.atom +14 -0
- data/spec/assets/no_id.atom +18 -0
- data/spec/assets/no_link.atom +18 -0
- data/spec/assets/no_title.atom +18 -0
- data/spec/assets/ny_index.rss +28 -0
- data/spec/assets/weather.atom +100 -0
- data/spec/assets/weather_index.atom +83 -0
- data/spec/cap_1_0/info_spec.rb +19 -19
- data/spec/cap_1_1/info_spec.rb +20 -20
- data/spec/cap_1_2/info_spec.rb +20 -20
- metadata +71 -4
data/.gitignore
CHANGED
data/CHANGELOG.rdoc
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
= Change Log
|
2
2
|
|
3
|
+
== 1.2.1 - 27 October 2011
|
4
|
+
|
5
|
+
* Fixed bug initialising 'audience' attribute in Info class
|
6
|
+
* Added CAP/Atom files from Google CAP Library project into specs
|
7
|
+
* Organised extension code into separate file
|
8
|
+
* Modifed RCAP::Alert.from_xml to auto-detect the XML namespace and CAP version. Will default to CAP 1.2 if no
|
9
|
+
namespace is found.
|
10
|
+
|
3
11
|
== 1.2.0 - 17 July 2011
|
4
12
|
|
5
13
|
* CAP 1.1 and CAP 1.2 - Resource#dereference_uri! fetches data from Resource#uri and sets Resource#deref_uri
|
data/Rakefile
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
+
require 'rubygems'
|
1
2
|
require 'bundler'
|
2
|
-
|
3
|
+
|
4
|
+
require 'rdoc/task'
|
3
5
|
require 'rspec/core/rake_task'
|
4
6
|
|
5
7
|
Bundler::GemHelper.install_tasks
|
6
8
|
|
7
|
-
|
9
|
+
RDoc::Task.new do |rdoc|
|
8
10
|
rdoc.main = 'README.rdoc'
|
9
11
|
rdoc.rdoc_files.include('README.rdoc', 'CHANGELOG.rdoc', 'lib/**/*.rb')
|
10
12
|
rdoc.rdoc_dir = 'doc'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class DateTime # :nodoc:
|
2
|
+
RCAP_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S"
|
3
|
+
RCAP_ZONE_FORMAT = "%+03i:00"
|
4
|
+
|
5
|
+
alias inspect to_s
|
6
|
+
|
7
|
+
def to_s_for_cap
|
8
|
+
t = self.strftime( RCAP_TIME_FORMAT ) + format( RCAP_ZONE_FORMAT , utc_hours_offset )
|
9
|
+
t.sub(/\+(00:\d\d)$/, '-\1')
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def utc_hours_offset
|
14
|
+
self.offset * 24
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class String # :nodoc:
|
2
|
+
CAP_LIST_REGEX = Regexp.new( '"([\w\s]+)"|(\S+)' )
|
3
|
+
WHITESPACE_REGEX = Regexp.new('^\s+$')
|
4
|
+
|
5
|
+
def for_cap_list
|
6
|
+
if self =~ /\s/
|
7
|
+
'"'+self+'"'
|
8
|
+
else
|
9
|
+
self
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def unpack_cap_list
|
14
|
+
self.split( CAP_LIST_REGEX ).reject{ |match| match == "" || match =~ WHITESPACE_REGEX }
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class Time # :nodoc:
|
2
|
+
RCAP_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S"
|
3
|
+
RCAP_ZONE_FORMAT = "%+03i:00"
|
4
|
+
|
5
|
+
def to_s_for_cap
|
6
|
+
t = self.strftime( RCAP_TIME_FORMAT ) + format( RCAP_ZONE_FORMAT , utc_hours_offset )
|
7
|
+
t.sub(/\+(00:\d\d)$/, '-\1')
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
def utc_hours_offset
|
12
|
+
self.utc_offset/3600
|
13
|
+
end
|
14
|
+
end
|
data/lib/rcap.rb
CHANGED
@@ -9,11 +9,15 @@ require 'rexml/formatters/pretty'
|
|
9
9
|
require 'open-uri'
|
10
10
|
require 'base64'
|
11
11
|
require 'digest/sha1'
|
12
|
+
# Extensions
|
13
|
+
require 'extensions/array'
|
14
|
+
require 'extensions/string'
|
15
|
+
require 'extensions/date_time'
|
16
|
+
require 'extensions/time'
|
12
17
|
# RCAP
|
13
18
|
require 'rcap/version'
|
14
19
|
require 'rcap/utilities'
|
15
20
|
require 'rcap/validations'
|
16
|
-
require 'rcap/alert'
|
17
21
|
require 'rcap/cap_1_0/alert'
|
18
22
|
require 'rcap/cap_1_0/parameter'
|
19
23
|
require 'rcap/cap_1_0/event_code'
|
@@ -44,5 +48,6 @@ require 'rcap/cap_1_2/circle'
|
|
44
48
|
require 'rcap/cap_1_2/polygon'
|
45
49
|
require 'rcap/cap_1_2/geocode'
|
46
50
|
require 'rcap/cap_1_2/area'
|
51
|
+
require 'rcap/alert'
|
47
52
|
# Configuration
|
48
53
|
require 'config'
|
data/lib/rcap/alert.rb
CHANGED
@@ -5,13 +5,20 @@ module RCAP
|
|
5
5
|
YAML_CAP_VERSION_KEY = "CAP Version"
|
6
6
|
JSON_CAP_VERSION_KEY = "cap_version"
|
7
7
|
|
8
|
+
CAP_NAMESPACES = [ RCAP::CAP_1_0::Alert::XMLNS, RCAP::CAP_1_1::Alert::XMLNS, RCAP::CAP_1_2::Alert::XMLNS ]
|
9
|
+
|
8
10
|
# Initialise a RCAP Alert from a XML document. The namespace of the
|
9
11
|
# document is inspected and a CAP_1_0::Alert, CAP_1_1::Alert
|
10
12
|
# or CAP_1_2::Alert is instantiated.
|
11
|
-
|
13
|
+
#
|
14
|
+
# The namespace key ('cap' if the CAP document is stored under 'xmlns:cap')
|
15
|
+
# can be specified explicitly by passing it in as a second parameter.
|
16
|
+
def self.from_xml( xml, namespace_key = nil )
|
12
17
|
xml_document = REXML::Document.new( xml )
|
18
|
+
document_namespaces = xml_document.root.namespaces.invert
|
19
|
+
namespace = namespace_key || CAP_NAMESPACES.find{ |namepsace| document_namespaces[ namepsace ]}
|
13
20
|
|
14
|
-
case
|
21
|
+
case namespace
|
15
22
|
when CAP_1_0::Alert::XMLNS
|
16
23
|
CAP_1_0::Alert.from_xml_document( xml_document )
|
17
24
|
when CAP_1_1::Alert::XMLNS
|
@@ -19,7 +26,6 @@ module RCAP
|
|
19
26
|
else
|
20
27
|
CAP_1_2::Alert.from_xml_document( xml_document )
|
21
28
|
end
|
22
|
-
|
23
29
|
end
|
24
30
|
|
25
31
|
# Initialise a RCAP Alert from a YAML document produced by
|
data/lib/rcap/cap_1_0/area.rb
CHANGED
@@ -126,14 +126,11 @@ module RCAP
|
|
126
126
|
POLYGONS_YAML = 'Polygons' # :nodoc:
|
127
127
|
|
128
128
|
def to_yaml( options = {} ) # :nodoc:
|
129
|
-
circles_yaml = self.circles.map{ |circle| [ circle.lattitude, circle.longitude, circle.radius ]}
|
130
|
-
def circles_yaml.to_yaml_style; :inline; end
|
131
|
-
|
132
129
|
RCAP.attribute_values_to_hash(
|
133
130
|
[ AREA_DESC_YAML, self.area_desc ],
|
134
131
|
[ ALTITUDE_YAML, self.altitude ],
|
135
132
|
[ CEILING_YAML, self.ceiling ],
|
136
|
-
[ CIRCLES_YAML,
|
133
|
+
[ CIRCLES_YAML, self.circles.map{ |circle| [ circle.lattitude, circle.longitude, circle.radius ]} ],
|
137
134
|
[ GEOCODES_YAML, self.geocodes.inject({}){|h,geocode| h.merge( geocode.name => geocode.value )}],
|
138
135
|
[ POLYGONS_YAML, self.polygons ]
|
139
136
|
).to_yaml( options )
|
data/lib/rcap/cap_1_0/info.rb
CHANGED
@@ -139,6 +139,7 @@ module RCAP
|
|
139
139
|
def initialize( attributes = {} )
|
140
140
|
@language = attributes[ :language ] || DEFAULT_LANGUAGE
|
141
141
|
@categories = Array( attributes[ :categories ])
|
142
|
+
@audience = attributes [ :audience ]
|
142
143
|
@event = attributes [ :event ]
|
143
144
|
@urgency = attributes[ :urgency ]
|
144
145
|
@severity = attributes[ :severity ]
|
@@ -310,13 +311,10 @@ module RCAP
|
|
310
311
|
AREAS_YAML = 'Areas' # :nodoc:
|
311
312
|
|
312
313
|
def to_yaml( options = {} ) # :nodoc:
|
313
|
-
categories_yaml = self.categories
|
314
|
-
def categories_yaml.to_yaml_style; :inline; end
|
315
|
-
|
316
314
|
parameter_to_hash = lambda{ |hash, parameter| hash.merge( parameter.name => parameter.value )}
|
317
315
|
|
318
316
|
RCAP.attribute_values_to_hash( [ LANGUAGE_YAML, self.language ],
|
319
|
-
[ CATEGORIES_YAML,
|
317
|
+
[ CATEGORIES_YAML, self.categories ],
|
320
318
|
[ EVENT_YAML, self.event ],
|
321
319
|
[ URGENCY_YAML, self.urgency ],
|
322
320
|
[ SEVERITY_YAML, self.severity ],
|
data/lib/rcap/cap_1_0/polygon.rb
CHANGED
@@ -65,10 +65,7 @@ module RCAP
|
|
65
65
|
|
66
66
|
|
67
67
|
def to_yaml( options = {} ) # :nodoc:
|
68
|
-
|
69
|
-
def yaml_points.to_yaml_style; :inline; end
|
70
|
-
|
71
|
-
yaml_points.to_yaml( options )
|
68
|
+
self.points.map{ |point| [ point.lattitude, point.longitude ]}.to_yaml( options )
|
72
69
|
end
|
73
70
|
|
74
71
|
def self.from_yaml_data( polygon_yaml_data ) # :nodoc:
|
data/lib/rcap/cap_1_1/area.rb
CHANGED
@@ -126,14 +126,11 @@ module RCAP
|
|
126
126
|
POLYGONS_YAML = 'Polygons' # :nodoc:
|
127
127
|
|
128
128
|
def to_yaml( options = {} ) # :nodoc:
|
129
|
-
circles_yaml = self.circles.map{ |circle| [ circle.lattitude, circle.longitude, circle.radius ]}
|
130
|
-
def circles_yaml.to_yaml_style; :inline; end
|
131
|
-
|
132
129
|
RCAP.attribute_values_to_hash(
|
133
130
|
[ AREA_DESC_YAML, self.area_desc ],
|
134
131
|
[ ALTITUDE_YAML, self.altitude ],
|
135
132
|
[ CEILING_YAML, self.ceiling ],
|
136
|
-
[ CIRCLES_YAML,
|
133
|
+
[ CIRCLES_YAML, self.circles.map{ |circle| [ circle.lattitude, circle.longitude, circle.radius ]}],
|
137
134
|
[ GEOCODES_YAML, self.geocodes.inject({}){|h,geocode| h.merge( geocode.name => geocode.value )}],
|
138
135
|
[ POLYGONS_YAML, self.polygons ]
|
139
136
|
).to_yaml( options )
|
data/lib/rcap/cap_1_1/info.rb
CHANGED
@@ -157,6 +157,7 @@ module RCAP
|
|
157
157
|
def initialize( attributes = {} )
|
158
158
|
@language = attributes[ :language ] || DEFAULT_LANGUAGE
|
159
159
|
@categories = Array( attributes[ :categories ])
|
160
|
+
@audience = attributes [ :audience ]
|
160
161
|
@event = attributes [ :event ]
|
161
162
|
@response_types = Array( attributes[ :response_types ])
|
162
163
|
@urgency = attributes[ :urgency ]
|
@@ -335,19 +336,13 @@ module RCAP
|
|
335
336
|
AREAS_YAML = 'Areas' # :nodoc:
|
336
337
|
|
337
338
|
def to_yaml( options = {} ) # :nodoc:
|
338
|
-
response_types_yaml = self.response_types
|
339
|
-
def response_types_yaml.to_yaml_style; :inline; end
|
340
|
-
|
341
|
-
categories_yaml = self.categories
|
342
|
-
def categories_yaml.to_yaml_style; :inline; end
|
343
|
-
|
344
339
|
parameter_to_hash = lambda{ |hash, parameter| hash.merge( parameter.name => parameter.value )}
|
345
340
|
|
346
341
|
RCAP.attribute_values_to_hash(
|
347
342
|
[ LANGUAGE_YAML, self.language ],
|
348
|
-
[ CATEGORIES_YAML,
|
343
|
+
[ CATEGORIES_YAML, self.categories ],
|
349
344
|
[ EVENT_YAML, self.event ],
|
350
|
-
[ RESPONSE_TYPES_YAML,
|
345
|
+
[ RESPONSE_TYPES_YAML, self.response_types ],
|
351
346
|
[ URGENCY_YAML, self.urgency ],
|
352
347
|
[ SEVERITY_YAML, self.severity ],
|
353
348
|
[ CERTAINTY_YAML, self.certainty ],
|
data/lib/rcap/cap_1_1/polygon.rb
CHANGED
@@ -65,10 +65,7 @@ module RCAP
|
|
65
65
|
|
66
66
|
|
67
67
|
def to_yaml( options = {} ) # :nodoc:
|
68
|
-
|
69
|
-
def yaml_points.to_yaml_style; :inline; end
|
70
|
-
|
71
|
-
yaml_points.to_yaml( options )
|
68
|
+
self.points.map{ |point| [ point.lattitude, point.longitude ]}.to_yaml( options )
|
72
69
|
end
|
73
70
|
|
74
71
|
def self.from_yaml_data( polygon_yaml_data ) # :nodoc:
|
data/lib/rcap/cap_1_2/area.rb
CHANGED
@@ -126,14 +126,11 @@ module RCAP
|
|
126
126
|
POLYGONS_YAML = 'Polygons' # :nodoc:
|
127
127
|
|
128
128
|
def to_yaml( options = {} ) # :nodoc:
|
129
|
-
circles_yaml = self.circles.map{ |circle| [ circle.lattitude, circle.longitude, circle.radius ]}
|
130
|
-
def circles_yaml.to_yaml_style; :inline; end
|
131
|
-
|
132
129
|
RCAP.attribute_values_to_hash(
|
133
130
|
[ AREA_DESC_YAML, self.area_desc ],
|
134
131
|
[ ALTITUDE_YAML, self.altitude ],
|
135
132
|
[ CEILING_YAML, self.ceiling ],
|
136
|
-
[ CIRCLES_YAML,
|
133
|
+
[ CIRCLES_YAML, self.circles.map{ |circle| [ circle.lattitude, circle.longitude, circle.radius ]} ],
|
137
134
|
[ GEOCODES_YAML, self.geocodes.inject({}){|h,geocode| h.merge( geocode.name => geocode.value )}],
|
138
135
|
[ POLYGONS_YAML, self.polygons ]
|
139
136
|
).to_yaml( options )
|
data/lib/rcap/cap_1_2/info.rb
CHANGED
@@ -159,6 +159,7 @@ module RCAP
|
|
159
159
|
def initialize( attributes = {} )
|
160
160
|
@language = attributes[ :language ] || DEFAULT_LANGUAGE
|
161
161
|
@categories = Array( attributes[ :categories ])
|
162
|
+
@audience = attributes [ :audience ]
|
162
163
|
@event = attributes [ :event ]
|
163
164
|
@response_types = Array( attributes[ :response_types ])
|
164
165
|
@urgency = attributes[ :urgency ]
|
@@ -337,18 +338,12 @@ module RCAP
|
|
337
338
|
AREAS_YAML = 'Areas' # :nodoc:
|
338
339
|
|
339
340
|
def to_yaml( options = {} ) # :nodoc:
|
340
|
-
response_types_yaml = self.response_types
|
341
|
-
def response_types_yaml.to_yaml_style; :inline; end
|
342
|
-
|
343
|
-
categories_yaml = self.categories
|
344
|
-
def categories_yaml.to_yaml_style; :inline; end
|
345
|
-
|
346
341
|
parameter_to_hash = lambda{ |hash, parameter| hash.merge( parameter.name => parameter.value )}
|
347
342
|
|
348
343
|
RCAP.attribute_values_to_hash( [ LANGUAGE_YAML, self.language ],
|
349
|
-
[ CATEGORIES_YAML,
|
344
|
+
[ CATEGORIES_YAML, self.categories ],
|
350
345
|
[ EVENT_YAML, self.event ],
|
351
|
-
[ RESPONSE_TYPES_YAML,
|
346
|
+
[ RESPONSE_TYPES_YAML, self.response_types ],
|
352
347
|
[ URGENCY_YAML, self.urgency ],
|
353
348
|
[ SEVERITY_YAML, self.severity ],
|
354
349
|
[ CERTAINTY_YAML, self.certainty ],
|
data/lib/rcap/cap_1_2/polygon.rb
CHANGED
@@ -66,10 +66,7 @@ module RCAP
|
|
66
66
|
|
67
67
|
|
68
68
|
def to_yaml( options = {} ) # :nodoc:
|
69
|
-
|
70
|
-
def yaml_points.to_yaml_style; :inline; end
|
71
|
-
|
72
|
-
yaml_points.to_yaml( options )
|
69
|
+
self.points.map{ |point| [ point.lattitude, point.longitude ]}.to_yaml( options )
|
73
70
|
end
|
74
71
|
|
75
72
|
def self.from_yaml_data( polygon_yaml_data ) # :nodoc:
|
data/lib/rcap/utilities.rb
CHANGED
@@ -1,47 +1,5 @@
|
|
1
1
|
ALLOWED_CHARACTERS = /[^\s&<]+/ # :nodoc:
|
2
2
|
|
3
|
-
class Array # :nodoc:
|
4
|
-
def to_s_for_cap
|
5
|
-
self.map{ |element| element.to_s.for_cap_list }.join( ' ' )
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
class String # :nodoc:
|
10
|
-
CAP_LIST_REGEX = Regexp.new( '"([\w\s]+)"|(\S+)' )
|
11
|
-
WHITESPACE_REGEX = Regexp.new('^\s+$')
|
12
|
-
|
13
|
-
def for_cap_list
|
14
|
-
if self =~ /\s/
|
15
|
-
'"'+self+'"'
|
16
|
-
else
|
17
|
-
self
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def unpack_cap_list
|
22
|
-
self.split( CAP_LIST_REGEX ).reject{ |match| match == "" || match =~ WHITESPACE_REGEX }
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
class DateTime # :nodoc:
|
27
|
-
alias inspect to_s
|
28
|
-
alias to_s_for_cap to_s
|
29
|
-
end
|
30
|
-
|
31
|
-
class Time # :nodoc:
|
32
|
-
RCAP_TIME_FORMAT = "%Y-%m-%dT%H:%M:%S"
|
33
|
-
RCAP_ZONE_FORMAT = "%+03i:00"
|
34
|
-
|
35
|
-
def to_s_for_cap
|
36
|
-
t = self.strftime( RCAP_TIME_FORMAT ) + format( RCAP_ZONE_FORMAT , self.utc_hours_offset )
|
37
|
-
t.sub(/\+(00:\d\d)$/, '-\1')
|
38
|
-
end
|
39
|
-
|
40
|
-
def utc_hours_offset
|
41
|
-
self.utc_offset/3600
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
3
|
module RCAP # :nodoc:
|
46
4
|
def self.generate_identifier
|
47
5
|
UUIDTools::UUID.random_create.to_s
|
data/lib/rcap/version.rb
CHANGED
data/rcap.gemspec
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
$:.
|
2
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
3
3
|
require 'rcap/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
@@ -25,6 +25,6 @@ Gem::Specification.new do |s|
|
|
25
25
|
s.add_dependency('uuidtools', '>= 2.1.2')
|
26
26
|
|
27
27
|
s.add_development_dependency( 'rspec', '>= 2.5.0' )
|
28
|
-
s.add_development_dependency( '
|
28
|
+
s.add_development_dependency( 'rdoc' )
|
29
29
|
s.add_development_dependency( 'webmock' )
|
30
30
|
end
|
data/spec/alert_spec.rb
CHANGED
@@ -17,8 +17,6 @@ describe( RCAP::Alert ) do
|
|
17
17
|
:infos => [ RCAP::CAP_1_0::Info.new, RCAP::CAP_1_0::Info.new ])
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
22
20
|
shared_examples_for( 'it has parsed a CAP 1.0 alert correctly' ) do
|
23
21
|
it( 'should use the correct CAP Version' ){ @alert.class.should == RCAP::CAP_1_0::Alert }
|
24
22
|
it( 'should parse identifier correctly' ) { @alert.identifier.should == @original_alert.identifier }
|
@@ -81,8 +79,6 @@ describe( RCAP::Alert ) do
|
|
81
79
|
:infos => [ RCAP::CAP_1_1::Info.new, RCAP::CAP_1_1::Info.new ])
|
82
80
|
end
|
83
81
|
|
84
|
-
|
85
|
-
|
86
82
|
shared_examples_for( 'it has parsed a CAP 1.1 alert correctly' ) do
|
87
83
|
it( 'should use the correct CAP Version' ){ @alert.class.should == RCAP::CAP_1_1::Alert }
|
88
84
|
it( 'should parse identifier correctly' ) { @alert.identifier.should == @original_alert.identifier }
|
@@ -145,8 +141,6 @@ describe( RCAP::Alert ) do
|
|
145
141
|
:infos => [ RCAP::CAP_1_2::Info.new, RCAP::CAP_1_2::Info.new ])
|
146
142
|
end
|
147
143
|
|
148
|
-
|
149
|
-
|
150
144
|
shared_examples_for( 'it has parsed a CAP 1.2 alert correctly' ) do
|
151
145
|
it( 'should use the correct CAP Version' ){ @alert.class.should == RCAP::CAP_1_2::Alert }
|
152
146
|
it( 'should parse identifier correctly' ) { @alert.identifier.should == @original_alert.identifier }
|
@@ -193,4 +187,77 @@ describe( RCAP::Alert ) do
|
|
193
187
|
end
|
194
188
|
end
|
195
189
|
end
|
190
|
+
|
191
|
+
describe( 'external file' ) do
|
192
|
+
def load_file( file_name )
|
193
|
+
File.open( File.join( File.dirname( __FILE__ ), 'assets', file_name )){|f| f.read }
|
194
|
+
end
|
195
|
+
|
196
|
+
describe( "'invalid.cap'" ) do
|
197
|
+
before( :each ) do
|
198
|
+
@alert = RCAP::Alert.from_xml( load_file( 'invalid.cap' ))
|
199
|
+
end
|
200
|
+
|
201
|
+
it( 'should not be valid' ) do
|
202
|
+
@alert.should_not( be_valid )
|
203
|
+
end
|
204
|
+
|
205
|
+
it( 'should be invalid because scope is missing' ) do
|
206
|
+
@alert.valid?
|
207
|
+
@alert.errors.on( :scope ).should_not( be_empty )
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
describe( "'earthquake.cap'" ) do
|
212
|
+
before( :each ) do
|
213
|
+
@alert = RCAP::Alert.from_xml( load_file( 'earthquake.cap' ))
|
214
|
+
end
|
215
|
+
|
216
|
+
it( 'should be valid' ) do
|
217
|
+
@alert.should( be_valid )
|
218
|
+
end
|
219
|
+
|
220
|
+
it( 'should parse the alert correctly' ) do
|
221
|
+
@alert.class.should == RCAP::CAP_1_1::Alert
|
222
|
+
@alert.status.should == RCAP::CAP_1_1::Alert::STATUS_ACTUAL
|
223
|
+
@alert.msg_type.should == RCAP::CAP_1_1::Alert::MSG_TYPE_ALERT
|
224
|
+
@alert.scope.should == RCAP::CAP_1_1::Alert::SCOPE_PUBLIC
|
225
|
+
|
226
|
+
@alert.infos.size.should == 2
|
227
|
+
info = @alert.infos.first
|
228
|
+
info.categories.include?( RCAP::CAP_1_1::Info::CATEGORY_GEO ).should( be_true )
|
229
|
+
|
230
|
+
info.areas.size.should == 1
|
231
|
+
area = info.areas.first
|
232
|
+
|
233
|
+
area.circles.size.should == 1
|
234
|
+
circle = area.circles.first
|
235
|
+
circle.lattitude.should == -16.053
|
236
|
+
circle.longitude.should == -173.274
|
237
|
+
circle.radius.should == 0
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
describe( "'canada.cap'" ) do
|
242
|
+
before( :each ) do
|
243
|
+
@alert = RCAP::Alert.from_xml( load_file( 'canada.cap' ))
|
244
|
+
end
|
245
|
+
|
246
|
+
it( 'should be valid' ) do
|
247
|
+
@alert.should( be_valid )
|
248
|
+
end
|
249
|
+
|
250
|
+
it( 'should parse the alert correctly' ) do
|
251
|
+
@alert.class.should == RCAP::CAP_1_1::Alert
|
252
|
+
@alert.status.should == RCAP::CAP_1_1::Alert::STATUS_ACTUAL
|
253
|
+
@alert.msg_type.should == RCAP::CAP_1_1::Alert::MSG_TYPE_UPDATE
|
254
|
+
@alert.scope.should == RCAP::CAP_1_1::Alert::SCOPE_PUBLIC
|
255
|
+
@alert.identifier.should == "CA-EC-CWTO-2011-138776"
|
256
|
+
|
257
|
+
@alert.infos.size.should == 2
|
258
|
+
info = @alert.infos.first
|
259
|
+
info.event_codes.first.value = 'storm'
|
260
|
+
end
|
261
|
+
end
|
262
|
+
end
|
196
263
|
end
|