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
@@ -1,66 +0,0 @@
1
- module RCAP
2
- # A Parameter object is valid if
3
- # * it has a name
4
- # * it has a value
5
- class Parameter
6
- include Validation
7
-
8
- validates_presence_of( :name, :value )
9
-
10
- attr_accessor( :name, :value )
11
-
12
- XML_ELEMENT_NAME = "parameter" # :nodoc:
13
- NAME_ELEMENT_NAME = "valueName" # :nodoc:
14
- VALUE_ELEMENT_NAME = "value" # :nodoc:
15
-
16
- XPATH = "cap:#{ XML_ELEMENT_NAME }" # :nodoc:
17
- NAME_XPATH = "cap:#{ NAME_ELEMENT_NAME }" # :nodoc:
18
- VALUE_XPATH = "cap:#{ VALUE_ELEMENT_NAME }" # :nodoc:
19
-
20
- def initialize( attributes = {} )
21
- @name = attributes[ :name ]
22
- @value = attributes[ :value ]
23
- end
24
-
25
- def to_xml_element # :nodoc:
26
- xml_element = REXML::Element.new( XML_ELEMENT_NAME )
27
- xml_element.add_element( NAME_ELEMENT_NAME ).add_text( self.name )
28
- xml_element.add_element( VALUE_ELEMENT_NAME ).add_text( self.value )
29
- xml_element
30
- end
31
-
32
- def to_xml # :nodoc:
33
- self.to_xml_element.to_s
34
- end
35
-
36
- def inspect # :nodoc:
37
- "#{ self.name }: #{ self.value }"
38
- end
39
-
40
- # Returns a string representation of the parameter of the form
41
- # name: value
42
- def to_s
43
- self.inspect
44
- end
45
-
46
- def self.from_xml_element( parameter_xml_element ) # :nodoc:
47
- Parameter.new( :name => RCAP.xpath_text( parameter_xml_element, NAME_XPATH ),
48
- :value => RCAP.xpath_text( parameter_xml_element, VALUE_XPATH ))
49
- end
50
-
51
- # Two parameters are equivalent if they have the same name and value.
52
- def ==( other )
53
- [ self.name, self.value ] == [ other.name, other.value ]
54
- end
55
-
56
- def to_h # :nodoc:
57
- RCAP.attribute_values_to_hash(
58
- [ @name, @value ])
59
- end
60
-
61
- def self.from_h( hash ) # :nodoc:
62
- key = hash.keys.first
63
- self.new( :name => key, :value => hash[ key ])
64
- end
65
- end
66
- end
data/lib/rcap/point.rb DELETED
@@ -1,53 +0,0 @@
1
- module RCAP
2
- # A Point object is valid if
3
- # * it has a lattitude within the minimum and maximum lattitude values
4
- # * it has a longitude within the minimum and maximum longitude values
5
- class Point
6
- include Validation
7
-
8
- MAX_LONGITUDE = 180
9
- MIN_LONGITUDE = -180
10
- MAX_LATTITUDE = 90
11
- MIN_LATTITUDE= -90
12
-
13
- attr_accessor( :lattitude )
14
- attr_accessor( :longitude )
15
-
16
- validates_numericality_of( :lattitude, :longitude )
17
- validates_inclusion_of( :lattitude, :in => MIN_LATTITUDE..MAX_LATTITUDE )
18
- validates_inclusion_of( :longitude, :in => MIN_LONGITUDE..MAX_LONGITUDE)
19
-
20
- def initialize( attributes = {} )
21
- @lattitude = attributes[ :lattitude ]
22
- @longitude = attributes[ :longitude ]
23
- end
24
-
25
- # Returns a string representation of the point of the form
26
- # lattitude,longitude
27
- def to_s
28
- "#{ self.lattitude },#{ self.longitude }"
29
- end
30
-
31
- def inspect # :nodoc:
32
- '('+self.to_s+')'
33
- end
34
-
35
- # Two points are equivalent if they have the same lattitude and longitude
36
- def ==( other )
37
- [ self.lattitude, self.longitude ] == [ other.lattitude, other.longitude ]
38
- end
39
-
40
- LATTITUDE_KEY = 'lattitude_hash' # :nodoc:
41
- LONGITUDE_KEY = 'longitude_hash' # :nodoc:
42
-
43
- def to_h # :nodoc:
44
- RCAP.attribute_values_to_hash(
45
- [ LATTITUDE_KEY, self.lattitude ],
46
- [ LONGITUDE_KEY, self.longitude ])
47
- end
48
-
49
- def self.from_h( point_hash ) # :nodoc:
50
- self.new( :lattitude => point_hash[ LATTITUDE_KEY ], :longitude => point_hash[ LONGITUDE_KEY ])
51
- end
52
- end
53
- end
data/lib/rcap/polygon.rb DELETED
@@ -1,77 +0,0 @@
1
- module RCAP
2
- # A Polygon object is valid if
3
- # * it has a minimum of three points
4
- # * each Point object in the points collection is valid
5
- class Polygon
6
- include Validation
7
-
8
- # Collection of Point objects.
9
- attr_reader( :points )
10
-
11
- validates_length_of( :points, :minimum => 3 )
12
- validates_collection_of( :points )
13
-
14
- XML_ELEMENT_NAME = 'polygon' # :nodoc:
15
- XPATH = "cap:#{ XML_ELEMENT_NAME }" # :nodoc:
16
-
17
- def initialize( attributes = {})
18
- @points = Array( attributes[ :points ])
19
- end
20
-
21
- # Returns a string representation of the polygon of the form
22
- # points[0] points[1] points[2] ... points[n-1] points[0]
23
- # where each point is formatted with RCAP::Point#to_s
24
- def to_s
25
- (@points + [ @points.first ]).join( ' ' )
26
- end
27
-
28
- def inspect # :nodoc:
29
- "(#{ @points.map{|point| point.inspect}.join(', ')})"
30
- end
31
-
32
- def to_xml_element # :nodoc:
33
- xml_element = REXML::Element.new( XML_ELEMENT_NAME )
34
- xml_element.add_text( self.to_s )
35
- xml_element
36
- end
37
-
38
- # Two polygons are equivalent if their collection of points is equivalent.
39
- def ==( other )
40
- self.points == other.points
41
- end
42
-
43
- def self.parse_polygon_string( polygon_string ) # :nodoc:
44
- polygon_string.split( ' ' ).map{ |coordinate_string| coordinate_string.split( ',' ).map{|coordinate| coordinate.to_f }}
45
- end
46
-
47
- def self.from_xml_element( polygon_xml_element ) # :nodoc:
48
- coordinates = self.parse_polygon_string( polygon_xml_element.text )
49
- points = coordinates.map{ |lattitude, longitude| RCAP::Point.new( :lattitude => lattitude, :longitude => longitude )}[0..-2]
50
- polygon = self.new( :points => points )
51
- end
52
-
53
-
54
- def to_yaml( options = {} ) # :nodoc:
55
- yaml_points = self.points.map{ |point| [ point.lattitude, point.longitude ]}
56
- def yaml_points.to_yaml_style; :inline; end
57
-
58
- yaml_points.to_yaml( options )
59
- end
60
-
61
- def self.from_yaml_data( polygon_yaml_data ) # :nodoc:
62
- self.new(
63
- :points => Array( polygon_yaml_data ).map{ |lattitude, longitude| Point.new( :lattitude => lattitude, :longitude => longitude )}
64
- )
65
- end
66
-
67
- POINTS_KEY = 'points' # :nodoc:
68
-
69
- def to_h # :nodoc:
70
- { POINTS_KEY => self.points.map{ |point| point.to_h }}
71
- end
72
-
73
- def self.from_h( polygon_hash ) # :nodoc:
74
- self.new( :points => polygon_hash[ POINTS_KEY ].map{ |point_hash| Point.from_h( point_hash )})
75
- end
76
- end
77
- end
data/lib/rcap/resource.rb DELETED
@@ -1,143 +0,0 @@
1
- module RCAP
2
- # A Resourse object is valid if
3
- # * it has a resource description
4
- class Resource
5
- include Validation
6
-
7
- # Resource Description
8
- attr_accessor( :resource_desc )
9
- attr_accessor( :mime_type )
10
- # Expressed in bytes
11
- attr_accessor( :size )
12
- # Resource location
13
- attr_accessor( :uri )
14
- # Dereferenced URI - contents of URI Base64 encoded
15
- attr_accessor( :deref_uri )
16
- # SHA-1 hash of contents of resource
17
- attr_accessor( :digest )
18
-
19
- validates_presence_of( :resource_desc )
20
-
21
- XML_ELEMENT_NAME = 'resource' # :nodoc:
22
- MIME_TYPE_ELEMENT_NAME = 'mimeType' # :nodoc:
23
- SIZE_ELEMENT_NAME = 'size' # :nodoc:
24
- URI_ELEMENT_NAME = 'uri' # :nodoc:
25
- DEREF_URI_ELEMENT_NAME = 'derefUri' # :nodoc:
26
- DIGEST_ELEMENT_NAME = 'digest' # :nodoc:
27
- RESOURCE_DESC_ELEMENT_NAME = 'resourceDesc' # :nodoc:
28
-
29
- XPATH = "cap:#{ XML_ELEMENT_NAME }" # :nodoc:
30
- MIME_TYPE_XPATH = "cap:#{ MIME_TYPE_ELEMENT_NAME }" # :nodoc:
31
- SIZE_XPATH = "cap:#{ SIZE_ELEMENT_NAME }" # :nodoc:
32
- URI_XPATH = "cap:#{ URI_ELEMENT_NAME }" # :nodoc:
33
- DEREF_URI_XPATH = "cap:#{ DEREF_URI_ELEMENT_NAME }" # :nodoc:
34
- DIGEST_XPATH = "cap:#{ DIGEST_ELEMENT_NAME }" # :nodoc:
35
- RESOURCE_DESC_XPATH = "cap:#{ RESOURCE_DESC_ELEMENT_NAME }" # :nodoc:
36
-
37
- def initialize( attributes = {} )
38
- @mime_type = attributes[ :mime_type ]
39
- @size = attributes[ :size ]
40
- @uri = attributes[ :uri ]
41
- @deref_uri = attributes[ :deref_uri ]
42
- @digest = attributes[ :digest ]
43
- @resource_desc = attributes[ :resource_desc ]
44
- end
45
-
46
- def to_xml_element # :nodoc:
47
- xml_element = REXML::Element.new( XML_ELEMENT_NAME )
48
- xml_element.add_element( RESOURCE_DESC_ELEMENT_NAME ).add_text( self.resource_desc )
49
- xml_element.add_element( MIME_TYPE_ELEMENT_NAME ).add_text( self.mime_type ) if self.mime_type
50
- xml_element.add_element( SIZE_ELEMENT_NAME ).add_text( self.size ) if self.size
51
- xml_element.add_element( URI_ELEMENT_NAME ).add_text( self.uri ) if self.uri
52
- xml_element.add_element( DEREF_URI_ELEMENT_NAME ).add_text( self.deref_uri ) if self.deref_uri
53
- xml_element.add_element( DIGEST_ELEMENT_NAME ).add_text( self.digest ) if self.digest
54
- xml_element
55
- end
56
-
57
- # If size is defined returns the size in kilobytes
58
- def size_in_kb
59
- if self.size
60
- self.size.to_f/1024
61
- end
62
- end
63
-
64
- def to_xml # :nodoc:
65
- self.to_xml_element.to_s
66
- end
67
-
68
- def inspect # :nodoc:
69
- [ self.resource_desc, self.uri, self.mime_type, self.size ? format( "%.1fKB", self.size_in_kb ) : nil ].compact.join(' - ')
70
- end
71
-
72
- # Returns a string representation of the resource of the form
73
- # resource_desc
74
- def to_s
75
- self.resource_desc
76
- end
77
-
78
- def self.from_xml_element( resource_xml_element ) # :nodoc:
79
- resource = self.new( :resource_desc => RCAP.xpath_text( resource_xml_element, RESOURCE_DESC_XPATH ),
80
- :uri => RCAP.xpath_text( resource_xml_element, URI_XPATH ),
81
- :mime_type => RCAP.xpath_text( resource_xml_element, MIME_TYPE_XPATH ),
82
- :deref_uri => RCAP.xpath_text( resource_xml_element, DEREF_URI_XPATH ),
83
- :size => RCAP.xpath_text( resource_xml_element, SIZE_XPATH ),
84
- :digest => RCAP.xpath_text( resource_xml_element, DIGEST_XPATH ))
85
- end
86
-
87
- RESOURCE_DESC_YAML = "Resource Description" # :nodoc:
88
- URI_YAML = "URI" # :nodoc:
89
- MIME_TYPE_YAML = "Mime Type" # :nodoc:
90
- DEREF_URI_YAML = "Derefrenced URI Data" # :nodoc:
91
- SIZE_YAML = "Size" # :nodoc:
92
- DIGEST_YAML = "Digest" # :nodoc:
93
-
94
- def to_yaml( options ) # :nodoc:
95
- RCAP.attribute_values_to_hash(
96
- [ RESOURCE_DESC_YAML, self.resource_desc ],
97
- [ URI_YAML, self.uri ],
98
- [ MIME_TYPE_YAML, self.mime_type ],
99
- [ DEREF_URI_YAML, self.deref_uri ],
100
- [ SIZE_YAML, self.size ],
101
- [ DIGEST_YAML, self.digest ]
102
- ).to_yaml( options )
103
- end
104
-
105
- def self.from_yaml_data( resource_yaml_data ) # :nodoc:
106
- self.new(
107
- :resource_desc => reource_yaml_data[ RESOURCE_DESC_YAML ],
108
- :uri => reource_yaml_data[ URI_YAML ],
109
- :mime_type => reource_yaml_data[ MIME_TYPE_YAML ],
110
- :deref_uri => reource_yaml_data[ DEREF_URI_YAML ],
111
- :size => reource_yaml_data[ SIZE_YAML ],
112
- :digest => reource_yaml_data[ DIGEST_YAML ]
113
- )
114
- end
115
-
116
- RESOURCE_DESC_KEY = 'resource_desc' # :nodoc:
117
- URI_KEY = 'uri' # :nodoc:
118
- MIME_TYPE_KEY = 'mime_type' # :nodoc:
119
- DEREF_URI_KEY = 'deref_uri' # :nodoc:
120
- SIZE_KEY = 'size' # :nodoc:
121
- DIGEST_KEY = 'digest' # :nodoc:
122
-
123
- def to_h # :nodoc:
124
- RCAP.attribute_values_to_hash(
125
- [ RESOURCE_DESC_KEY, self.resource_desc ],
126
- [ URI_KEY, self.uri],
127
- [ MIME_TYPE_KEY, self.mime_type],
128
- [ DEREF_URI_KEY, self.deref_uri],
129
- [ SIZE_KEY, self.size ],
130
- [ DIGEST_KEY, self.digest ])
131
- end
132
-
133
- def self.from_h( resource_hash ) # :nodoc:
134
- self.new(
135
- :resource_desc => resource_hash[ RESOURCE_DESC_KEY ],
136
- :uri => resource_hash[ URI_KEY ],
137
- :mime_type => resource_hash[ MIME_TYPE_KEY ],
138
- :deref_uri => resource_hash[ DEREF_URI_KEY ],
139
- :size => resource_hash[ SIZE_KEY ],
140
- :digest => resource_hash[ DIGEST_KEY ])
141
- end
142
- end
143
- end
data/spec/area_spec.rb DELETED
@@ -1,179 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe( RCAP::Area ) do
4
- context( 'on initialisation' ) do
5
- before( :each ) do
6
- @area = RCAP::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 an 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::Area.new( :area_desc => 'Area Description',
48
- :altitude => 100,
49
- :ceiling => 200,
50
- :circles => RCAP::Circle.new( :lattitude => 0, :longitude => 0 , :radius => 100 ),
51
- :geocodes => RCAP::Geocode.new( :name => 'name', :value => 'value' ),
52
- :polygons => RCAP::Polygon.new( :points => RCAP::Point.new( :lattitude =>1, :longitude => 1 )))
53
-
54
- @alert = RCAP::Alert.new( :infos => RCAP::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::Info::XPATH )
58
- @area_xml_element = RCAP.xpath_first( @info_xml_element, RCAP::Area::XPATH )
59
- @area = RCAP::Area.from_xml_element( @area_xml_element )
60
- end
61
-
62
- it_should_behave_like( "it can parse into an Area object" )
63
- end
64
-
65
- context( 'from a hash' ) do
66
- before( :each ) do
67
- @original_area = RCAP::Area.new( :area_desc => 'Area Description',
68
- :altitude => 100,
69
- :ceiling => 200,
70
- :circles => RCAP::Circle.new( :lattitude => 0, :longitude => 0 , :radius => 100 ),
71
- :geocodes => RCAP::Geocode.new( :name => 'name', :value => 'value' ),
72
- :polygons => RCAP::Polygon.new( :points => RCAP::Point.new( :lattitude =>1, :longitude => 1 )))
73
-
74
- @area = RCAP::Area.from_h( @original_area.to_h )
75
- end
76
-
77
- it_should_behave_like( "it can parse into an Area object" )
78
- end
79
- end
80
-
81
- context( 'when exported' ) do
82
- before( :each ) do
83
- @area = RCAP::Area.new( :area_desc => 'Area Description',
84
- :altitude => 100,
85
- :ceiling => 200,
86
- :circles => RCAP::Circle.new( :lattitude => 0, :longitude => 0 , :radius => 100 ),
87
- :geocodes => RCAP::Geocode.new( :name => 'name', :value => 'value' ),
88
- :polygons => RCAP::Polygon.new( :points => RCAP::Point.new( :lattitude =>1, :longitude => 1 )))
89
- end
90
- context( 'to a hash' ) do
91
- before( :each ) do
92
- @area_hash = @area.to_h
93
- end
94
-
95
- it( 'should export the area description correctly' ) do
96
- @area_hash[ RCAP::Area::AREA_DESC_KEY ].should == @area.area_desc
97
- end
98
-
99
- it( 'should export the altitude correctly' ) do
100
- @area_hash[ RCAP::Area::ALTITUDE_KEY ].should == @area.altitude
101
- end
102
-
103
- it( 'should set the ceiling correctly' ) do
104
- @area_hash[ RCAP::Area::CEILING_KEY ].should == @area.ceiling
105
- end
106
-
107
- it( 'should export the circles correctly' ) do
108
- @area_hash[ RCAP::Area::CIRCLES_KEY ].should == @area.circles.map{ |circle| circle.to_h }
109
- end
110
-
111
- it( 'should export the geocodes correctly' ) do
112
- @area_hash[ RCAP::Area::GEOCODES_KEY ].should == @area.geocodes.map{ |geocode| geocode.to_h }
113
- end
114
-
115
- it( 'should export the polygons correctly' ) do
116
- @area_hash[ RCAP::Area::POLYGONS_KEY ].should == @area.polygons.map{ |polygon| polygon.to_h }
117
- end
118
- end
119
- end
120
-
121
- context( 'is not valid if' ) do
122
- before( :each ) do
123
- @area = RCAP::Area.new( :area_desc => "Cape Town Metropole" )
124
- @area.should( be_valid )
125
- end
126
-
127
- it( 'does not have an area descrtiption (area_desc)') do
128
- @area.area_desc = nil
129
- @area.should_not( be_valid )
130
- end
131
-
132
- it( 'has a ceiling defined but no altitude' ) do
133
- @area.ceiling = 1
134
- @area.altitude = nil
135
- @area.should_not( be_valid )
136
- end
137
-
138
- context( 'it contains circles and it' ) do
139
- before( :each ) do
140
- @area.circles << RCAP::Circle.new( :lattitude => 0, :longitude => 0, :radius => 1)
141
- @area.should( be_valid )
142
- end
143
-
144
- it( 'has an invalid circle' ) do
145
- @area.circles.first.lattitude = nil
146
- @area.should_not( be_valid )
147
- end
148
- end
149
-
150
- context( 'it contains polygons and it' ) do
151
- before( :each ) do
152
- @polygon = RCAP::Polygon.new
153
- @polygon.points.push( RCAP::Point.new( :lattitude => 0, :longitude => 0 ),
154
- RCAP::Point.new( :lattitude => 0, :longitude => 1 ),
155
- RCAP::Point.new( :lattitude => 1, :longitude => 0 ))
156
- @area.polygons << @polygon
157
- @area.should( be_valid )
158
- end
159
-
160
- it( 'has an invalid polygon' ) do
161
- @polygon.points.first.lattitude = nil
162
- @area.should_not( be_valid )
163
- end
164
- end
165
-
166
- context( 'it contains geocodes and it' ) do
167
- before( :each ) do
168
- @geocode = RCAP::Geocode.new( :name => 'foo', :value => 'bar' )
169
- @area.geocodes << @geocode
170
- @area.should( be_valid )
171
- end
172
-
173
- it( 'has an invalid geocode' ) do
174
- @geocode.value = nil
175
- @area.should_not( be_valid )
176
- end
177
- end
178
- end
179
- end