rcap 0.4 → 1.0.0.rc.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/.gitignore +7 -0
  2. data/CHANGELOG.rdoc +6 -0
  3. data/Gemfile +4 -0
  4. data/README.rdoc +104 -85
  5. data/Rakefile +35 -0
  6. data/lib/rcap.rb +21 -14
  7. data/lib/rcap/alert.rb +26 -325
  8. data/lib/rcap/cap_1_1/alert.rb +363 -0
  9. data/lib/rcap/cap_1_1/area.rb +180 -0
  10. data/lib/rcap/cap_1_1/circle.rb +81 -0
  11. data/lib/rcap/cap_1_1/event_code.rb +22 -0
  12. data/lib/rcap/cap_1_1/geocode.rb +22 -0
  13. data/lib/rcap/cap_1_1/info.rb +470 -0
  14. data/lib/rcap/cap_1_1/parameter.rb +68 -0
  15. data/lib/rcap/cap_1_1/point.rb +55 -0
  16. data/lib/rcap/cap_1_1/polygon.rb +89 -0
  17. data/lib/rcap/cap_1_1/resource.rb +145 -0
  18. data/lib/rcap/cap_1_2/alert.rb +363 -0
  19. data/lib/rcap/cap_1_2/area.rb +180 -0
  20. data/lib/rcap/cap_1_2/circle.rb +81 -0
  21. data/lib/rcap/cap_1_2/event_code.rb +22 -0
  22. data/lib/rcap/cap_1_2/geocode.rb +22 -0
  23. data/lib/rcap/cap_1_2/info.rb +472 -0
  24. data/lib/rcap/cap_1_2/parameter.rb +68 -0
  25. data/lib/rcap/cap_1_2/point.rb +55 -0
  26. data/lib/rcap/cap_1_2/polygon.rb +90 -0
  27. data/lib/rcap/cap_1_2/resource.rb +147 -0
  28. data/lib/rcap/utilities.rb +14 -9
  29. data/lib/rcap/validations.rb +39 -7
  30. data/lib/rcap/version.rb +3 -0
  31. data/rcap.gemspec +30 -0
  32. data/spec/alert_spec.rb +109 -172
  33. data/spec/cap_1_1/alert_spec.rb +222 -0
  34. data/spec/cap_1_1/area_spec.rb +247 -0
  35. data/spec/cap_1_1/circle_spec.rb +88 -0
  36. data/spec/{geocode_spec.rb → cap_1_1/geocode_spec.rb} +8 -8
  37. data/spec/{info_spec.rb → cap_1_1/info_spec.rb} +143 -75
  38. data/spec/{point_spec.rb → cap_1_1/point_spec.rb} +8 -8
  39. data/spec/cap_1_1/polygon_spec.rb +97 -0
  40. data/spec/{resource_spec.rb → cap_1_1/resource_spec.rb} +24 -24
  41. data/spec/cap_1_2/alert_spec.rb +233 -0
  42. data/spec/cap_1_2/area_spec.rb +248 -0
  43. data/spec/cap_1_2/circle_spec.rb +95 -0
  44. data/spec/cap_1_2/geocode_spec.rb +38 -0
  45. data/spec/cap_1_2/info_spec.rb +338 -0
  46. data/spec/cap_1_2/point_spec.rb +46 -0
  47. data/spec/cap_1_2/polygon_spec.rb +102 -0
  48. data/spec/cap_1_2/resource_spec.rb +161 -0
  49. data/spec/spec.opts +2 -0
  50. data/spec/validations_spec.rb +80 -7
  51. metadata +122 -37
  52. data/lib/rcap/area.rb +0 -156
  53. data/lib/rcap/circle.rb +0 -78
  54. data/lib/rcap/event_code.rb +0 -20
  55. data/lib/rcap/geocode.rb +0 -20
  56. data/lib/rcap/info.rb +0 -437
  57. data/lib/rcap/parameter.rb +0 -66
  58. data/lib/rcap/point.rb +0 -53
  59. data/lib/rcap/polygon.rb +0 -77
  60. data/lib/rcap/resource.rb +0 -143
  61. data/spec/area_spec.rb +0 -179
  62. data/spec/circle_spec.rb +0 -88
  63. data/spec/polygon_spec.rb +0 -68
@@ -0,0 +1,247 @@
1
+ require 'spec_helper'
2
+
3
+ describe( RCAP::CAP_1_1::Area ) do
4
+ context( 'on initialisation' ) do
5
+ before( :each ) do
6
+ @area = RCAP::CAP_1_1::Area.new
7
+ end
8
+
9
+ # Atomic
10
+ it( 'should not have a area_desc' ){ @area.area_desc.should( be_nil )}
11
+ it( 'should not have a altitude' ){ @area.altitude.should( be_nil )}
12
+ it( 'should not have a ceiling' ){ @area.ceiling.should( be_nil )}
13
+
14
+ # Group
15
+ it( 'should have an empty polygons' ){ @area.polygons.should( be_empty )}
16
+ it( 'should have an empty circles' ){ @area.circles.should( be_empty )}
17
+ it( 'should have an empty geocodes' ){ @area.geocodes.should( be_empty )}
18
+
19
+ shared_examples_for( "it can parse into a CAP 1.1 Area object" ) do
20
+ it( 'should parse the area_desc correctly' ) do
21
+ @area.area_desc.should == @original_area.area_desc
22
+ end
23
+
24
+ it( 'should parse the altitude correctly' ) do
25
+ @area.altitude.should == @original_area.altitude
26
+ end
27
+
28
+ it( 'should parse the ceiling correctly' ) do
29
+ @area.ceiling.should == @original_area.ceiling
30
+ end
31
+
32
+ it( 'should parse the circles correctly' ) do
33
+ @area.circles.should == @original_area.circles
34
+ end
35
+
36
+ it( 'should parse the geocodes correctly' ) do
37
+ @area.geocodes.should == @original_area.geocodes
38
+ end
39
+
40
+ it( 'should parse the polygons correctly' ) do
41
+ @area.polygons.should == @original_area.polygons
42
+ end
43
+ end
44
+
45
+ context( 'from XML' ) do
46
+ before( :each ) do
47
+ @original_area = RCAP::CAP_1_1::Area.new( :area_desc => 'Area Description',
48
+ :altitude => 100,
49
+ :ceiling => 200,
50
+ :circles => RCAP::CAP_1_1::Circle.new( :lattitude => 0, :longitude => 0 , :radius => 100 ),
51
+ :geocodes => RCAP::CAP_1_1::Geocode.new( :name => 'name', :value => 'value' ),
52
+ :polygons => RCAP::CAP_1_1::Polygon.new( :points => RCAP::CAP_1_1::Point.new( :lattitude =>1, :longitude => 1 )))
53
+
54
+ @alert = RCAP::CAP_1_1::Alert.new( :infos => RCAP::CAP_1_1::Info.new( :areas => @original_area ))
55
+ @xml_string = @alert.to_xml
56
+ @xml_document = REXML::Document.new( @xml_string )
57
+ @info_xml_element = RCAP.xpath_first( @xml_document.root, RCAP::CAP_1_1::Info::XPATH, RCAP::CAP_1_1::Alert::XMLNS )
58
+ @area_xml_element = RCAP.xpath_first( @info_xml_element, RCAP::CAP_1_1::Area::XPATH, RCAP::CAP_1_1::Alert::XMLNS )
59
+ @area = RCAP::CAP_1_1::Area.from_xml_element( @area_xml_element )
60
+ end
61
+
62
+ it_should_behave_like( "it can parse into a CAP 1.1 Area object" )
63
+ end
64
+
65
+ context( 'from YAML Data' ) do
66
+ before( :each ) do
67
+ @original_area = RCAP::CAP_1_1::Area.new( :area_desc => 'Area Description',
68
+ :altitude => 100,
69
+ :ceiling => 200,
70
+ :circles => RCAP::CAP_1_1::Circle.new( :lattitude => 0, :longitude => 0 , :radius => 100 ),
71
+ :geocodes => RCAP::CAP_1_1::Geocode.new( :name => 'name', :value => 'value' ),
72
+ :polygons => RCAP::CAP_1_1::Polygon.new( :points => RCAP::CAP_1_1::Point.new( :lattitude =>1, :longitude => 1 )))
73
+
74
+ @area = RCAP::CAP_1_1::Area.from_yaml_data( YAML.load( @original_area.to_yaml ))
75
+ end
76
+
77
+ it_should_behave_like( "it can parse into a CAP 1.1 Area object" )
78
+ end
79
+
80
+ context( 'from a hash' ) do
81
+ before( :each ) do
82
+ @original_area = RCAP::CAP_1_1::Area.new( :area_desc => 'Area Description',
83
+ :altitude => 100,
84
+ :ceiling => 200,
85
+ :circles => RCAP::CAP_1_1::Circle.new( :lattitude => 0, :longitude => 0 , :radius => 100 ),
86
+ :geocodes => RCAP::CAP_1_1::Geocode.new( :name => 'name', :value => 'value' ),
87
+ :polygons => RCAP::CAP_1_1::Polygon.new( :points => RCAP::CAP_1_1::Point.new( :lattitude =>1, :longitude => 1 )))
88
+
89
+ @area = RCAP::CAP_1_1::Area.from_h( @original_area.to_h )
90
+ end
91
+
92
+ it_should_behave_like( "it can parse into a CAP 1.1 Area object" )
93
+ end
94
+ end
95
+
96
+ context( 'when exported' ) do
97
+ before( :each ) do
98
+ @area = RCAP::CAP_1_1::Area.new( :area_desc => 'Area Description',
99
+ :altitude => 100,
100
+ :ceiling => 200,
101
+ :circles => RCAP::CAP_1_1::Circle.new( :lattitude => 0, :longitude => 0 , :radius => 100 ),
102
+ :geocodes => RCAP::CAP_1_1::Geocode.new( :name => 'name', :value => 'value' ),
103
+ :polygons => RCAP::CAP_1_1::Polygon.new( :points => RCAP::CAP_1_1::Point.new( :lattitude =>1, :longitude => 1 )))
104
+ end
105
+ context( 'to a hash' ) do
106
+ before( :each ) do
107
+ @area_hash = @area.to_h
108
+ end
109
+
110
+ it( 'should export the area description correctly' ) do
111
+ @area_hash[ RCAP::CAP_1_1::Area::AREA_DESC_KEY ].should == @area.area_desc
112
+ end
113
+
114
+ it( 'should export the altitude correctly' ) do
115
+ @area_hash[ RCAP::CAP_1_1::Area::ALTITUDE_KEY ].should == @area.altitude
116
+ end
117
+
118
+ it( 'should set the ceiling correctly' ) do
119
+ @area_hash[ RCAP::CAP_1_1::Area::CEILING_KEY ].should == @area.ceiling
120
+ end
121
+
122
+ it( 'should export the circles correctly' ) do
123
+ @area_hash[ RCAP::CAP_1_1::Area::CIRCLES_KEY ].should == @area.circles.map{ |circle| circle.to_h }
124
+ end
125
+
126
+ it( 'should export the geocodes correctly' ) do
127
+ @area_hash[ RCAP::CAP_1_1::Area::GEOCODES_KEY ].should == @area.geocodes.map{ |geocode| geocode.to_h }
128
+ end
129
+
130
+ it( 'should export the polygons correctly' ) do
131
+ @area_hash[ RCAP::CAP_1_1::Area::POLYGONS_KEY ].should == @area.polygons.map{ |polygon| polygon.to_h }
132
+ end
133
+ end
134
+ end
135
+
136
+ context( 'is not valid if' ) do
137
+ before( :each ) do
138
+ @area = RCAP::CAP_1_1::Area.new( :area_desc => "Cape Town Metropole" )
139
+ @area.should( be_valid )
140
+ end
141
+
142
+ it( 'does not have an area descrtiption (area_desc)') do
143
+ @area.area_desc = nil
144
+ @area.should_not( be_valid )
145
+ end
146
+
147
+ it( 'has a ceiling defined but no altitude' ) do
148
+ @area.ceiling = 1
149
+ @area.altitude = nil
150
+ @area.should_not( be_valid )
151
+ end
152
+
153
+ context( 'it contains circles and it' ) do
154
+ before( :each ) do
155
+ @area.circles << RCAP::CAP_1_1::Circle.new( :lattitude => 0, :longitude => 0, :radius => 1)
156
+ @area.should( be_valid )
157
+ end
158
+
159
+ it( 'has an invalid circle' ) do
160
+ @area.circles.first.lattitude = nil
161
+ @area.should_not( be_valid )
162
+ end
163
+ end
164
+
165
+ context( 'it contains polygons and it' ) do
166
+ before( :each ) do
167
+ @polygon = RCAP::CAP_1_1::Polygon.new
168
+ @polygon.points.push( RCAP::CAP_1_1::Point.new( :lattitude => 0, :longitude => 0 ),
169
+ RCAP::CAP_1_1::Point.new( :lattitude => 0, :longitude => 1 ),
170
+ RCAP::CAP_1_1::Point.new( :lattitude => 1, :longitude => 0 ))
171
+ @area.polygons << @polygon
172
+ @area.should( be_valid )
173
+ end
174
+
175
+ it( 'has an invalid polygon' ) do
176
+ @polygon.points.first.lattitude = nil
177
+ @area.should_not( be_valid )
178
+ end
179
+ end
180
+
181
+ context( 'it contains geocodes and it' ) do
182
+ before( :each ) do
183
+ @geocode = RCAP::CAP_1_1::Geocode.new( :name => 'foo', :value => 'bar' )
184
+ @area.geocodes << @geocode
185
+ @area.should( be_valid )
186
+ end
187
+
188
+ it( 'has an invalid geocode' ) do
189
+ @geocode.value = nil
190
+ @area.should_not( be_valid )
191
+ end
192
+ end
193
+ end
194
+
195
+ describe( 'instance methods' ) do
196
+ before( :each ) do
197
+ @area = RCAP::CAP_1_1::Area.new
198
+ end
199
+
200
+ describe( '#add_polygon' ) do
201
+ before( :each ) do
202
+ @polygon = @area.add_polygon
203
+ end
204
+
205
+ it( 'should return a CAP 1.1 Polygon' ) do
206
+ @polygon.class.should == RCAP::CAP_1_1::Polygon
207
+ end
208
+
209
+ it( 'should add a Polygon to the polygons attribute' ) do
210
+ @area.polygons.size.should == 1
211
+ end
212
+ end
213
+
214
+ describe( '#add_circle' ) do
215
+ before( :each ) do
216
+ @circle = @area.add_circle( lattitude: 1, longitude: 1, radius: 1 )
217
+ end
218
+
219
+ it( 'should return a CAP 1.1 Circle' ) do
220
+ @circle.class.should == RCAP::CAP_1_1::Circle
221
+ @circle.lattitude.should == 1
222
+ @circle.longitude.should == 1
223
+ @circle.radius.should == 1
224
+ end
225
+
226
+ it( 'should add a circle to the circles attribute' ) do
227
+ @area.circles.size.should == 1
228
+ end
229
+ end
230
+
231
+ describe( '#add_geocode' ) do
232
+ before( :each ) do
233
+ @geocode = @area.add_geocode( name: 'Geocode', value: '123' )
234
+ end
235
+
236
+ it( 'should return a CAP 1.1 Geocode' ) do
237
+ @geocode.class.should == RCAP::CAP_1_1::Geocode
238
+ @geocode.name.should == 'Geocode'
239
+ @geocode.value.should == '123'
240
+ end
241
+
242
+ it( 'should add a geocode to the geocodes attribute' ) do
243
+ @area.geocodes.size.should == 1
244
+ end
245
+ end
246
+ end
247
+ end
@@ -0,0 +1,88 @@
1
+ require 'spec_helper'
2
+
3
+ describe( RCAP::CAP_1_1::Circle ) do
4
+ describe( 'should not be valid if' ) do
5
+ before( :each ) do
6
+ @circle = RCAP::CAP_1_1::Circle.new( :lattitude => 0, :longitude => 0 , :radius => 1 )
7
+ @circle.should( be_valid )
8
+ end
9
+
10
+ it( 'does not have a lattitude defined' ) do
11
+ @circle.lattitude = nil
12
+ @circle.should_not( be_valid )
13
+ end
14
+
15
+ it( 'does not have a longitude defined' ) do
16
+ @circle.longitude = nil
17
+ @circle.should_not( be_valid )
18
+ end
19
+
20
+ it( 'does not have a radius defined' ) do
21
+ @circle.radius = nil
22
+ @circle.should_not( be_valid )
23
+ end
24
+
25
+ it( 'does not have a numeric radius' ) do
26
+ @circle.radius = "not a number"
27
+ @circle.should_not( be_valid )
28
+ end
29
+
30
+ it( 'does not have a positive radius' ) do
31
+ @circle.radius = -1
32
+ @circle.should_not( be_valid )
33
+ end
34
+ end
35
+
36
+ context( 'on initialisation' ) do
37
+ context( 'from XML' ) do
38
+ before( :each ) do
39
+ @original_circle = RCAP::CAP_1_1::Circle.new( :radius => 10.5,
40
+ :lattitude => 30, :longitude => 60 )
41
+ @alert = RCAP::CAP_1_1::Alert.new( :infos => RCAP::CAP_1_1::Info.new( :areas => RCAP::CAP_1_1::Area.new( :circles => @original_circle )))
42
+ @xml_string = @alert.to_xml
43
+ @xml_document = REXML::Document.new( @xml_string )
44
+ @info_element = RCAP.xpath_first( @xml_document.root, RCAP::CAP_1_1::Info::XPATH, RCAP::CAP_1_1::Alert::XMLNS )
45
+ @area_element = RCAP.xpath_first( @info_element, RCAP::CAP_1_1::Area::XPATH, RCAP::CAP_1_1::Alert::XMLNS )
46
+ @circle_element = RCAP.xpath_first( @area_element, RCAP::CAP_1_1::Circle::XPATH, RCAP::CAP_1_1::Alert::XMLNS )
47
+ @circle = RCAP::CAP_1_1::Circle.from_xml_element( @circle_element )
48
+ end
49
+
50
+ it( 'should parse the radius correctly' ) do
51
+ @circle.radius.should == @original_circle.radius
52
+ end
53
+
54
+ it( 'should parse the lattitude and longitude correctly' ) do
55
+ @circle.lattitude.should == @original_circle.lattitude
56
+ @circle.longitude.should == @original_circle.longitude
57
+ end
58
+ end
59
+
60
+ context( 'from a hash' ) do
61
+ before( :each ) do
62
+ @original_circle = RCAP::CAP_1_1::Circle.new( :radius => 10.5, :lattitude => 30, :longitude => 60 )
63
+ @circle = RCAP::CAP_1_1::Circle.from_h( @original_circle.to_h )
64
+ end
65
+
66
+ it( 'should set the radius correctly' ) do
67
+ @circle.radius.should == @original_circle.radius
68
+ end
69
+
70
+ it( 'should parse the lattitude and longitude correctly' ) do
71
+ @circle.lattitude.should == @original_circle.lattitude
72
+ @circle.longitude.should == @original_circle.longitude
73
+ end
74
+ end
75
+ end
76
+
77
+ context( 'when exported' ) do
78
+ before( :each ) do
79
+ @circle = RCAP::CAP_1_1::Circle.new( :radius => 10.5, :lattitude => 30, :longitude => 60 )
80
+ end
81
+
82
+ context( 'to hash' ) do
83
+ it( 'should be correct' ) do
84
+ @circle.to_h.should == { 'radius' => 10.5, 'lattitude' => 30, 'longitude' => 60 }
85
+ end
86
+ end
87
+ end
88
+ end
@@ -1,17 +1,17 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe( RCAP::Geocode ) do
3
+ describe( RCAP::CAP_1_1::Geocode ) do
4
4
  context( 'when initialised' ) do
5
5
  context( 'from XML' ) do
6
6
  before( :each ) do
7
- @original_geocode = RCAP::Geocode.new( :name => 'name', :value => 'value' )
8
- @alert = RCAP::Alert.new( :infos => RCAP::Info.new( :areas => RCAP::Area.new( :geocodes => @original_geocode )))
7
+ @original_geocode = RCAP::CAP_1_1::Geocode.new( :name => 'name', :value => 'value' )
8
+ @alert = RCAP::CAP_1_1::Alert.new( :infos => RCAP::CAP_1_1::Info.new( :areas => RCAP::CAP_1_1::Area.new( :geocodes => @original_geocode )))
9
9
  @xml_string = @alert.to_xml
10
10
  @xml_document = REXML::Document.new( @xml_string )
11
- @info_xml_element = RCAP.xpath_first( @xml_document.root, RCAP::Info::XPATH )
12
- @area_xml_element = RCAP.xpath_first( @info_xml_element, RCAP::Area::XPATH )
13
- @geocode_xml_element = RCAP.xpath_first( @area_xml_element, RCAP::Geocode::XPATH )
14
- @geocode = RCAP::Geocode.from_xml_element( @geocode_xml_element )
11
+ @info_xml_element = RCAP.xpath_first( @xml_document.root, RCAP::CAP_1_1::Info::XPATH, RCAP::CAP_1_1::Alert::XMLNS )
12
+ @area_xml_element = RCAP.xpath_first( @info_xml_element, RCAP::CAP_1_1::Area::XPATH, RCAP::CAP_1_1::Alert::XMLNS )
13
+ @geocode_xml_element = RCAP.xpath_first( @area_xml_element, RCAP::CAP_1_1::Geocode::XPATH, RCAP::CAP_1_1::Alert::XMLNS )
14
+ @geocode = RCAP::CAP_1_1::Geocode.from_xml_element( @geocode_xml_element )
15
15
  end
16
16
 
17
17
  it( 'should parse the name correctly' ) do
@@ -26,7 +26,7 @@ describe( RCAP::Geocode ) do
26
26
 
27
27
  context( 'when exported' ) do
28
28
  before( :each ) do
29
- @geocode = RCAP::Geocode.new( :name => 'name', :value => 'value' )
29
+ @geocode = RCAP::CAP_1_1::Geocode.new( :name => 'name', :value => 'value' )
30
30
  end
31
31
 
32
32
  context( 'to a hash' ) do
@@ -1,9 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe( RCAP::Info ) do
3
+ describe( RCAP::CAP_1_1::Info ) do
4
4
  context( 'on initialisation' ) do
5
5
  before( :each ) do
6
- @info = RCAP::Info.new
6
+ @info = RCAP::CAP_1_1::Info.new
7
7
  end
8
8
 
9
9
  it( 'should have a default language of en-US' ) { @info.language.should == 'en-US' }
@@ -26,7 +26,7 @@ describe( RCAP::Info ) do
26
26
  it( 'should have no contact' ) { @info.contact.should( be_nil )}
27
27
  it( 'should have no parameters' ) { @info.parameters.should( be_empty )}
28
28
 
29
- shared_examples_for( 'it can parse into an Info object' ) do
29
+ shared_examples_for( 'it can parse into a CAP 1.1 Info object' ) do
30
30
  it( 'should parse categories correctly' ){ @info .categories.should == @original_info.categories }
31
31
  it( 'should parse event correctly' ){ @info .event.should == @original_info.event }
32
32
  it( 'should parse response_types correctly' ){ @info .response_types.should == @original_info.response_types }
@@ -34,9 +34,9 @@ describe( RCAP::Info ) do
34
34
  it( 'should parse severity correctly' ){ @info .severity.should == @original_info.severity }
35
35
  it( 'should parse certainty correctly' ){ @info .certainty.should == @original_info.certainty }
36
36
  it( 'should parse audience correctly' ){ @info .audience.should == @original_info.audience }
37
- it( 'should parse effective correctly' ){ @info .effective.should( be_close( @original_info.effective, Rational( 1, 86400 )))}
38
- it( 'should parse onset correctly' ){ @info .onset.should( be_close( @original_info.onset, Rational( 1, 86400 )))}
39
- it( 'should parse expires correctly' ){ @info .expires.should( be_close( @original_info.expires, Rational( 1, 86400 )))}
37
+ it( 'should parse effective correctly' ){ @info .effective.should( be_within(Rational( 1, 86400 )).of( @original_info.effective ))}
38
+ it( 'should parse onset correctly' ){ @info .onset.should( be_within( Rational( 1, 86400 )).of( @original_info.onset ))}
39
+ it( 'should parse expires correctly' ){ @info .expires.should( be_within( Rational( 1, 86400 )).of( @original_info.expires ))}
40
40
  it( 'should parse sender_name correctly' ){ @info .sender_name.should == @original_info.sender_name }
41
41
  it( 'should parse headline correctly' ){ @info .headline.should == @original_info.headline }
42
42
  it( 'should parse description correctly' ){ @info .description.should == @original_info.description }
@@ -51,12 +51,12 @@ describe( RCAP::Info ) do
51
51
 
52
52
  context( 'from XML' ) do
53
53
  before( :each ) do
54
- @original_info = RCAP::Info.new( :categories => [ RCAP::Info::CATEGORY_GEO, RCAP::Info::CATEGORY_FIRE ],
54
+ @original_info = RCAP::CAP_1_1::Info.new( :categories => [ RCAP::CAP_1_1::Info::CATEGORY_GEO, RCAP::CAP_1_1::Info::CATEGORY_FIRE ],
55
55
  :event => 'Event Description',
56
- :response_types => [ RCAP::Info::RESPONSE_TYPE_MONITOR, RCAP::Info::RESPONSE_TYPE_ASSESS ],
57
- :urgency => RCAP::Info::URGENCY_IMMEDIATE,
58
- :severity => RCAP::Info::SEVERITY_EXTREME,
59
- :certainty => RCAP::Info::CERTAINTY_OBSERVED,
56
+ :response_types => [ RCAP::CAP_1_1::Info::RESPONSE_TYPE_MONITOR, RCAP::CAP_1_1::Info::RESPONSE_TYPE_ASSESS ],
57
+ :urgency => RCAP::CAP_1_1::Info::URGENCY_IMMEDIATE,
58
+ :severity => RCAP::CAP_1_1::Info::SEVERITY_EXTREME,
59
+ :certainty => RCAP::CAP_1_1::Info::CERTAINTY_OBSERVED,
60
60
  :audience => 'Audience',
61
61
  :effective => DateTime.now,
62
62
  :onset => DateTime.now + 1,
@@ -67,30 +67,30 @@ describe( RCAP::Info ) do
67
67
  :instruction => 'Instruction',
68
68
  :web => 'http://website',
69
69
  :contact => 'contact@address',
70
- :event_codes => [ RCAP::EventCode.new( :name => 'name1', :value => 'value1' ),
71
- RCAP::EventCode.new( :name => 'name2', :value => 'value2' )],
72
- :parameters => [ RCAP::Parameter.new( :name => 'name1', :value => 'value1' ),
73
- RCAP::Parameter.new( :name => 'name2', :value => 'value2' )],
74
- :areas => [ RCAP::Area.new( :area_desc => 'Area1' ),
75
- RCAP::Area.new( :area_desc => 'Area2' )]
70
+ :event_codes => [ RCAP::CAP_1_1::EventCode.new( :name => 'name1', :value => 'value1' ),
71
+ RCAP::CAP_1_1::EventCode.new( :name => 'name2', :value => 'value2' )],
72
+ :parameters => [ RCAP::CAP_1_1::Parameter.new( :name => 'name1', :value => 'value1' ),
73
+ RCAP::CAP_1_1::Parameter.new( :name => 'name2', :value => 'value2' )],
74
+ :areas => [ RCAP::CAP_1_1::Area.new( :area_desc => 'Area1' ),
75
+ RCAP::CAP_1_1::Area.new( :area_desc => 'Area2' )]
76
76
  )
77
- @alert = RCAP::Alert.new( :infos => @original_info )
78
- @xml_string = @alert.to_xml
79
- @xml_document = REXML::Document.new( @xml_string )
80
- @info = RCAP::Info.from_xml_element( RCAP.xpath_first( @xml_document.root, RCAP::Info::XPATH ))
77
+ @alert = RCAP::CAP_1_1::Alert.new( :infos => @original_info )
78
+ @xml_string = @alert.to_xml
79
+ @xml_document = REXML::Document.new( @xml_string )
80
+ @info = RCAP::CAP_1_1::Info.from_xml_element( RCAP.xpath_first( @xml_document.root, RCAP::CAP_1_1::Info::XPATH, RCAP::CAP_1_1::Alert::XMLNS ))
81
81
  end
82
82
 
83
- it_should_behave_like( "it can parse into an Info object" )
83
+ it_should_behave_like( "it can parse into a CAP 1.1 Info object" )
84
84
  end
85
85
 
86
86
  context( 'from a hash' ) do
87
87
  before( :each ) do
88
- @original_info = RCAP::Info.new( :categories => [ RCAP::Info::CATEGORY_GEO, RCAP::Info::CATEGORY_FIRE ],
88
+ @original_info = RCAP::CAP_1_1::Info.new( :categories => [ RCAP::CAP_1_1::Info::CATEGORY_GEO, RCAP::CAP_1_1::Info::CATEGORY_FIRE ],
89
89
  :event => 'Event Description',
90
- :response_types => [ RCAP::Info::RESPONSE_TYPE_MONITOR, RCAP::Info::RESPONSE_TYPE_ASSESS ],
91
- :urgency => RCAP::Info::URGENCY_IMMEDIATE,
92
- :severity => RCAP::Info::SEVERITY_EXTREME,
93
- :certainty => RCAP::Info::CERTAINTY_OBSERVED,
90
+ :response_types => [ RCAP::CAP_1_1::Info::RESPONSE_TYPE_MONITOR, RCAP::CAP_1_1::Info::RESPONSE_TYPE_ASSESS ],
91
+ :urgency => RCAP::CAP_1_1::Info::URGENCY_IMMEDIATE,
92
+ :severity => RCAP::CAP_1_1::Info::SEVERITY_EXTREME,
93
+ :certainty => RCAP::CAP_1_1::Info::CERTAINTY_OBSERVED,
94
94
  :audience => 'Audience',
95
95
  :effective => DateTime.now,
96
96
  :onset => DateTime.now + 1,
@@ -101,31 +101,31 @@ describe( RCAP::Info ) do
101
101
  :instruction => 'Instruction',
102
102
  :web => 'http://website',
103
103
  :contact => 'contact@address',
104
- :event_codes => [ RCAP::EventCode.new( :name => 'name1', :value => 'value1' ),
105
- RCAP::EventCode.new( :name => 'name2', :value => 'value2' )],
106
- :parameters => [ RCAP::Parameter.new( :name => 'name1', :value => 'value1' ),
107
- RCAP::Parameter.new( :name => 'name2', :value => 'value2' )],
108
- :areas => [ RCAP::Area.new( :area_desc => 'Area1' ),
109
- RCAP::Area.new( :area_desc => 'Area2' )]
104
+ :event_codes => [ RCAP::CAP_1_1::EventCode.new( :name => 'name1', :value => 'value1' ),
105
+ RCAP::CAP_1_1::EventCode.new( :name => 'name2', :value => 'value2' )],
106
+ :parameters => [ RCAP::CAP_1_1::Parameter.new( :name => 'name1', :value => 'value1' ),
107
+ RCAP::CAP_1_1::Parameter.new( :name => 'name2', :value => 'value2' )],
108
+ :areas => [ RCAP::CAP_1_1::Area.new( :area_desc => 'Area1' ),
109
+ RCAP::CAP_1_1::Area.new( :area_desc => 'Area2' )]
110
110
  )
111
- @info = RCAP::Info.from_h( @original_info.to_h )
111
+ @info = RCAP::CAP_1_1::Info.from_h( @original_info.to_h )
112
112
  end
113
- it_should_behave_like( "it can parse into an Info object" )
113
+ it_should_behave_like( "it can parse into a CAP 1.1 Info object" )
114
114
  end
115
115
  end
116
116
 
117
117
  context( 'is not valid if it' ) do
118
118
  before( :each ) do
119
- @info = RCAP::Info.new( :event => 'Info Event',
120
- :categories => RCAP::Info::CATEGORY_GEO,
121
- :urgency => RCAP::Info::URGENCY_IMMEDIATE,
122
- :severity => RCAP::Info::SEVERITY_EXTREME,
123
- :certainty => RCAP::Info::CERTAINTY_OBSERVED )
119
+ @info = RCAP::CAP_1_1::Info.new( :event => 'Info Event',
120
+ :categories => RCAP::CAP_1_1::Info::CATEGORY_GEO,
121
+ :urgency => RCAP::CAP_1_1::Info::URGENCY_IMMEDIATE,
122
+ :severity => RCAP::CAP_1_1::Info::SEVERITY_EXTREME,
123
+ :certainty => RCAP::CAP_1_1::Info::CERTAINTY_OBSERVED )
124
124
  @info.valid?
125
125
  puts @info.errors.full_messages
126
126
  @info.should( be_valid )
127
127
  end
128
-
128
+
129
129
  it( 'does not have an event' ) do
130
130
  @info.event = nil
131
131
  @info.should_not( be_valid )
@@ -156,12 +156,12 @@ describe( RCAP::Info ) do
156
156
  describe( 'when exported' ) do
157
157
  context( 'to hash' ) do
158
158
  before( :each ) do
159
- @info = RCAP::Info.new( :categories => [ RCAP::Info::CATEGORY_GEO, RCAP::Info::CATEGORY_FIRE ],
159
+ @info = RCAP::CAP_1_1::Info.new( :categories => [ RCAP::CAP_1_1::Info::CATEGORY_GEO, RCAP::CAP_1_1::Info::CATEGORY_FIRE ],
160
160
  :event => 'Event Description',
161
- :response_types => [ RCAP::Info::RESPONSE_TYPE_MONITOR, RCAP::Info::RESPONSE_TYPE_ASSESS ],
162
- :urgency => RCAP::Info::URGENCY_IMMEDIATE,
163
- :severity => RCAP::Info::SEVERITY_EXTREME,
164
- :certainty => RCAP::Info::CERTAINTY_OBSERVED,
161
+ :response_types => [ RCAP::CAP_1_1::Info::RESPONSE_TYPE_MONITOR, RCAP::CAP_1_1::Info::RESPONSE_TYPE_ASSESS ],
162
+ :urgency => RCAP::CAP_1_1::Info::URGENCY_IMMEDIATE,
163
+ :severity => RCAP::CAP_1_1::Info::SEVERITY_EXTREME,
164
+ :certainty => RCAP::CAP_1_1::Info::CERTAINTY_OBSERVED,
165
165
  :audience => 'Audience',
166
166
  :effective => DateTime.now,
167
167
  :onset => DateTime.now + 1,
@@ -172,99 +172,167 @@ describe( RCAP::Info ) do
172
172
  :instruction => 'Instruction',
173
173
  :web => 'http://website',
174
174
  :contact => 'contact@address',
175
- :resources => [ RCAP::Resource.new( :resource_desc => 'Resource Description', :uri => 'http://tempuri.org/resource' )],
176
- :event_codes => [ RCAP::EventCode.new( :name => 'name1', :value => 'value1' ),
177
- RCAP::EventCode.new( :name => 'name2', :value => 'value2' )],
178
- :parameters => [ RCAP::Parameter.new( :name => 'name1', :value => 'value1' ),
179
- RCAP::Parameter.new( :name => 'name2', :value => 'value2' )],
180
- :areas => [ RCAP::Area.new( :area_desc => 'Area1' ),
181
- RCAP::Area.new( :area_desc => 'Area2' )])
175
+ :resources => [ RCAP::CAP_1_1::Resource.new( :resource_desc => 'Resource Description', :uri => 'http://tempuri.org/resource' )],
176
+ :event_codes => [ RCAP::CAP_1_1::EventCode.new( :name => 'name1', :value => 'value1' ),
177
+ RCAP::CAP_1_1::EventCode.new( :name => 'name2', :value => 'value2' )],
178
+ :parameters => [ RCAP::CAP_1_1::Parameter.new( :name => 'name1', :value => 'value1' ),
179
+ RCAP::CAP_1_1::Parameter.new( :name => 'name2', :value => 'value2' )],
180
+ :areas => [ RCAP::CAP_1_1::Area.new( :area_desc => 'Area1' ),
181
+ RCAP::CAP_1_1::Area.new( :area_desc => 'Area2' )])
182
182
  @info_hash = @info.to_h
183
183
  end
184
184
 
185
185
  it( 'should export the language correctly' ) do
186
- @info_hash[ RCAP::Info::LANGUAGE_KEY ].should == @info.language
186
+ @info_hash[ RCAP::CAP_1_1::Info::LANGUAGE_KEY ].should == @info.language
187
187
  end
188
188
 
189
189
  it( 'should export the categories' ) do
190
- @info_hash[ RCAP::Info::CATEGORIES_KEY ].should == @info.categories
190
+ @info_hash[ RCAP::CAP_1_1::Info::CATEGORIES_KEY ].should == @info.categories
191
191
  end
192
-
192
+
193
193
  it( 'should export the event' ) do
194
- @info_hash[ RCAP::Info::EVENT_KEY ].should == @info.event
194
+ @info_hash[ RCAP::CAP_1_1::Info::EVENT_KEY ].should == @info.event
195
195
  end
196
196
 
197
197
  it( 'should export the response types' ) do
198
- @info_hash[ RCAP::Info::RESPONSE_TYPES_KEY ].should == @info.response_types
198
+ @info_hash[ RCAP::CAP_1_1::Info::RESPONSE_TYPES_KEY ].should == @info.response_types
199
199
  end
200
200
 
201
201
  it( 'should export the urgency' ) do
202
- @info_hash[ RCAP::Info:: URGENCY_KEY ].should == @info.urgency
202
+ @info_hash[ RCAP::CAP_1_1::Info:: URGENCY_KEY ].should == @info.urgency
203
203
  end
204
204
 
205
205
  it( 'should export the severity' ) do
206
- @info_hash[ RCAP::Info:: SEVERITY_KEY ].should == @info.severity
206
+ @info_hash[ RCAP::CAP_1_1::Info:: SEVERITY_KEY ].should == @info.severity
207
207
  end
208
208
 
209
209
  it( 'should export the certainty' ) do
210
- @info_hash[ RCAP::Info:: CERTAINTY_KEY ].should == @info.certainty
210
+ @info_hash[ RCAP::CAP_1_1::Info:: CERTAINTY_KEY ].should == @info.certainty
211
211
  end
212
212
 
213
213
  it( 'should export the audience' ) do
214
- @info_hash[ RCAP::Info:: AUDIENCE_KEY ].should == @info.audience
214
+ @info_hash[ RCAP::CAP_1_1::Info:: AUDIENCE_KEY ].should == @info.audience
215
215
  end
216
216
 
217
217
  it( 'should export the effective date' ) do
218
- @info_hash[ RCAP::Info::EFFECTIVE_KEY ].should == @info.effective.to_s_for_cap
218
+ @info_hash[ RCAP::CAP_1_1::Info::EFFECTIVE_KEY ].should == @info.effective.to_s_for_cap
219
219
  end
220
220
 
221
221
  it( 'should export the onset date' ) do
222
- @info_hash[ RCAP::Info::ONSET_KEY ].should == @info.onset.to_s_for_cap
222
+ @info_hash[ RCAP::CAP_1_1::Info::ONSET_KEY ].should == @info.onset.to_s_for_cap
223
223
  end
224
224
 
225
225
  it( 'should export the expires date' ) do
226
- @info_hash[ RCAP::Info::EXPIRES_KEY ].should == @info.expires.to_s_for_cap
226
+ @info_hash[ RCAP::CAP_1_1::Info::EXPIRES_KEY ].should == @info.expires.to_s_for_cap
227
227
  end
228
228
 
229
229
  it( 'should export the sender name' ) do
230
- @info_hash[ RCAP::Info::SENDER_NAME_KEY ].should == @info.sender_name
230
+ @info_hash[ RCAP::CAP_1_1::Info::SENDER_NAME_KEY ].should == @info.sender_name
231
231
  end
232
232
 
233
233
  it( 'should export the headline' ) do
234
- @info_hash[ RCAP::Info::HEADLINE_KEY ].should == @info.headline
234
+ @info_hash[ RCAP::CAP_1_1::Info::HEADLINE_KEY ].should == @info.headline
235
235
  end
236
236
 
237
237
  it( 'should export the description' ) do
238
- @info_hash[ RCAP::Info::DESCRIPTION_KEY ].should == @info.description
238
+ @info_hash[ RCAP::CAP_1_1::Info::DESCRIPTION_KEY ].should == @info.description
239
239
  end
240
240
 
241
241
  it( 'should export the instruction' ) do
242
- @info_hash[ RCAP::Info::INSTRUCTION_KEY ].should == @info.instruction
242
+ @info_hash[ RCAP::CAP_1_1::Info::INSTRUCTION_KEY ].should == @info.instruction
243
243
  end
244
244
 
245
245
  it( 'should export the web address ' ) do
246
- @info_hash[ RCAP::Info::WEB_KEY ].should == @info.web
246
+ @info_hash[ RCAP::CAP_1_1::Info::WEB_KEY ].should == @info.web
247
247
  end
248
248
 
249
249
  it( 'should export the contact' ) do
250
- @info_hash[ RCAP::Info::CONTACT_KEY ].should == @info.contact
250
+ @info_hash[ RCAP::CAP_1_1::Info::CONTACT_KEY ].should == @info.contact
251
251
  end
252
252
 
253
253
  it( 'should export the event codes' ) do
254
- @info_hash[ RCAP::Info::EVENT_CODES_KEY ].should == @info.event_codes.map{ |event_code| event_code.to_h }
254
+ @info_hash[ RCAP::CAP_1_1::Info::EVENT_CODES_KEY ].should == @info.event_codes.map{ |event_code| event_code.to_h }
255
255
  end
256
256
 
257
257
  it( 'should export the parameters ' ) do
258
- @info_hash[ RCAP::Info::PARAMETERS_KEY ].should == @info.parameters.map{ |parameter| parameter.to_h }
258
+ @info_hash[ RCAP::CAP_1_1::Info::PARAMETERS_KEY ].should == @info.parameters.map{ |parameter| parameter.to_h }
259
259
  end
260
260
 
261
261
  it( 'should export the resources ' ) do
262
- @info_hash[ RCAP::Info::RESOURCES_KEY ].should == @info.resources.map{ |resource| resource.to_h }
262
+ @info_hash[ RCAP::CAP_1_1::Info::RESOURCES_KEY ].should == @info.resources.map{ |resource| resource.to_h }
263
263
  end
264
264
 
265
265
  it( 'should export the areas' ) do
266
- @info_hash[ RCAP::Info::AREAS_KEY ].should == @info.areas.map{ |area| area.to_h }
266
+ @info_hash[ RCAP::CAP_1_1::Info::AREAS_KEY ].should == @info.areas.map{ |area| area.to_h }
267
267
  end
268
268
  end
269
269
  end
270
+
271
+ describe( 'instance methods' ) do
272
+ before( :each ) do
273
+ @info = RCAP::CAP_1_1::Info.new
274
+ end
275
+
276
+ describe( '#add_event_code' ) do
277
+ before( :each ) do
278
+ @event_code = @info.add_event_code( name: 'Event Code', value: '1234' )
279
+ end
280
+
281
+ it( 'should return a 1.1 EventCode' ) do
282
+ @event_code.class.should == RCAP::CAP_1_1::EventCode
283
+ @event_code.name.should == 'Event Code'
284
+ @event_code.value.should == '1234'
285
+ end
286
+
287
+ it( 'should add an EventCode to the event_codes attribute' ) do
288
+ @info.event_codes.size.should == 1
289
+ end
290
+ end
291
+
292
+ describe( '#add_parameter' ) do
293
+ before( :each ) do
294
+ @parameter = @info.add_parameter( name: 'Parameter', value: '1234' )
295
+ end
296
+
297
+ it( 'should return a 1.1 Parameter' ) do
298
+ @parameter.class.should == RCAP::CAP_1_1::Parameter
299
+ @parameter.name.should == 'Parameter'
300
+ @parameter.value.should == '1234'
301
+ end
302
+
303
+ it( 'should add a Parameter to the parameters attribute' ) do
304
+ @info.parameters.size.should == 1
305
+ end
306
+ end
307
+
308
+ describe( '#add_resource' ) do
309
+ before( :each ) do
310
+ @resource = @info.add_resource( resource_desc: 'Resource' )
311
+ end
312
+
313
+ it( 'should return a 1.1 Resource' ) do
314
+ @resource.class.should == RCAP::CAP_1_1::Resource
315
+ @resource.resource_desc.should == 'Resource'
316
+ end
317
+
318
+ it( 'should add a Resource to the resources attribute' ) do
319
+ @info.resources.size.should == 1
320
+ end
321
+ end
322
+
323
+ describe( '#add_area' ) do
324
+ before( :each ) do
325
+ @area = @info.add_area( area_desc: 'Area' )
326
+ end
327
+
328
+ it( 'should return a 1.1 area' ) do
329
+ @area.class.should == RCAP::CAP_1_1::Area
330
+ @area.area_desc.should == 'Area'
331
+ end
332
+
333
+ it( 'should add a Area to the areas attribute' ) do
334
+ @info.areas.size.should == 1
335
+ end
336
+ end
337
+ end
270
338
  end