rcap 1.0.1 → 1.1.0
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/CHANGELOG.rdoc +4 -0
- data/lib/rcap.rb +10 -0
- data/lib/rcap/alert.rb +7 -1
- data/lib/rcap/cap_1_0/alert.rb +383 -0
- data/lib/rcap/cap_1_0/area.rb +178 -0
- data/lib/rcap/cap_1_0/circle.rb +81 -0
- data/lib/rcap/cap_1_0/event_code.rb +8 -0
- data/lib/rcap/cap_1_0/geocode.rb +8 -0
- data/lib/rcap/cap_1_0/info.rb +435 -0
- data/lib/rcap/cap_1_0/parameter.rb +71 -0
- data/lib/rcap/cap_1_0/point.rb +55 -0
- data/lib/rcap/cap_1_0/polygon.rb +89 -0
- data/lib/rcap/cap_1_0/resource.rb +132 -0
- data/lib/rcap/cap_1_1/event_code.rb +0 -14
- data/lib/rcap/cap_1_1/geocode.rb +0 -14
- data/lib/rcap/cap_1_1/parameter.rb +5 -5
- data/lib/rcap/cap_1_1/resource.rb +5 -5
- data/lib/rcap/cap_1_2/event_code.rb +0 -14
- data/lib/rcap/cap_1_2/geocode.rb +0 -14
- data/lib/rcap/cap_1_2/parameter.rb +2 -3
- data/lib/rcap/cap_1_2/resource.rb +5 -5
- data/lib/rcap/version.rb +1 -1
- data/rcap.gemspec +0 -1
- data/spec/alert_spec.rb +64 -0
- data/spec/cap_1_0/alert_spec.rb +222 -0
- data/spec/cap_1_0/area_spec.rb +247 -0
- data/spec/cap_1_0/circle_spec.rb +88 -0
- data/spec/cap_1_0/event_code_spec.rb +37 -0
- data/spec/cap_1_0/geocode_spec.rb +38 -0
- data/spec/cap_1_0/info_spec.rb +324 -0
- data/spec/cap_1_0/parameter_spec.rb +65 -0
- data/spec/cap_1_0/point_spec.rb +46 -0
- data/spec/cap_1_0/polygon_spec.rb +97 -0
- data/spec/cap_1_0/resource_spec.rb +140 -0
- data/spec/cap_1_1/event_code_spec.rb +38 -0
- data/spec/cap_1_1/parameter_spec.rb +37 -0
- data/spec/cap_1_2/event_code_spec.rb +38 -0
- data/spec/cap_1_2/parameter_spec.rb +37 -0
- metadata +49 -34
    
        data/lib/rcap/cap_1_2/geocode.rb
    CHANGED
    
    | @@ -1,22 +1,8 @@ | |
| 1 1 | 
             
            module RCAP
         | 
| 2 2 | 
             
              module CAP_1_2
         | 
| 3 3 | 
             
                class Geocode < Parameter
         | 
| 4 | 
            -
             | 
| 5 4 | 
             
                  XML_ELEMENT_NAME = 'geocode' # :nodoc:
         | 
| 6 | 
            -
             | 
| 7 5 | 
             
                  XPATH = "cap:#{ XML_ELEMENT_NAME }" # :nodoc:
         | 
| 8 | 
            -
             | 
| 9 | 
            -
                  def to_xml_element # :nodoc:
         | 
| 10 | 
            -
                    xml_element = REXML::Element.new( XML_ELEMENT_NAME )
         | 
| 11 | 
            -
                    xml_element.add_element( NAME_ELEMENT_NAME ).add_text( @name )
         | 
| 12 | 
            -
                    xml_element.add_element( VALUE_ELEMENT_NAME ).add_text( @value )
         | 
| 13 | 
            -
                    xml_element
         | 
| 14 | 
            -
                  end
         | 
| 15 | 
            -
             | 
| 16 | 
            -
                  def self.from_xml_element( geocode_xml_element ) # :nodoc:
         | 
| 17 | 
            -
                    self.new( :name  => RCAP.xpath_text( geocode_xml_element, NAME_XPATH, Alert::XMLNS ),
         | 
| 18 | 
            -
                             :value => RCAP.xpath_text( geocode_xml_element, VALUE_XPATH, Alert::XMLNS ))
         | 
| 19 | 
            -
                  end
         | 
| 20 6 | 
             
                end
         | 
| 21 7 | 
             
              end
         | 
| 22 8 | 
             
            end
         | 
| @@ -24,7 +24,7 @@ module RCAP | |
| 24 24 | 
             
                  end
         | 
| 25 25 |  | 
| 26 26 | 
             
                  def to_xml_element # :nodoc:
         | 
| 27 | 
            -
                    xml_element = REXML::Element.new( XML_ELEMENT_NAME )
         | 
| 27 | 
            +
                    xml_element = REXML::Element.new( self.class::XML_ELEMENT_NAME )
         | 
| 28 28 | 
             
                    xml_element.add_element( NAME_ELEMENT_NAME ).add_text( self.name )
         | 
| 29 29 | 
             
                    xml_element.add_element( VALUE_ELEMENT_NAME ).add_text( self.value )
         | 
| 30 30 | 
             
                    xml_element
         | 
| @@ -55,8 +55,7 @@ module RCAP | |
| 55 55 | 
             
                  end
         | 
| 56 56 |  | 
| 57 57 | 
             
                  def to_h # :nodoc:
         | 
| 58 | 
            -
                    RCAP.attribute_values_to_hash(
         | 
| 59 | 
            -
                      [ @name, @value ])
         | 
| 58 | 
            +
                    RCAP.attribute_values_to_hash( [ self.name, self.value ])
         | 
| 60 59 | 
             
                  end
         | 
| 61 60 |  | 
| 62 61 | 
             
                  def self.from_h( hash ) # :nodoc:
         | 
| @@ -136,11 +136,11 @@ module RCAP | |
| 136 136 | 
             
                  def self.from_h( resource_hash ) # :nodoc:
         | 
| 137 137 | 
             
                    self.new(
         | 
| 138 138 | 
             
                      :resource_desc => resource_hash[ RESOURCE_DESC_KEY ],
         | 
| 139 | 
            -
                      :uri | 
| 140 | 
            -
                      :mime_type | 
| 141 | 
            -
                      :deref_uri | 
| 142 | 
            -
                      :size | 
| 143 | 
            -
                      :digest | 
| 139 | 
            +
                      :uri           => resource_hash[ URI_KEY ],
         | 
| 140 | 
            +
                      :mime_type     => resource_hash[ MIME_TYPE_KEY ],
         | 
| 141 | 
            +
                      :deref_uri     => resource_hash[ DEREF_URI_KEY ],
         | 
| 142 | 
            +
                      :size          => resource_hash[ SIZE_KEY ],
         | 
| 143 | 
            +
                      :digest        => resource_hash[ DIGEST_KEY ])
         | 
| 144 144 | 
             
                  end
         | 
| 145 145 | 
             
                end
         | 
| 146 146 | 
             
              end
         | 
    
        data/lib/rcap/version.rb
    CHANGED
    
    
    
        data/rcap.gemspec
    CHANGED
    
    | @@ -19,7 +19,6 @@ Gem::Specification.new do |s| | |
| 19 19 | 
             
              s.executables   = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
         | 
| 20 20 | 
             
              s.require_paths = ['lib']
         | 
| 21 21 |  | 
| 22 | 
            -
              s.has_rdoc = true
         | 
| 23 22 | 
             
              s.extra_rdoc_files = ['README.rdoc','CHANGELOG.rdoc']
         | 
| 24 23 | 
             
              s.add_dependency('assistance', '>= 0.1.5')
         | 
| 25 24 | 
             
              s.add_dependency('json', '>= 1.5.1')
         | 
    
        data/spec/alert_spec.rb
    CHANGED
    
    | @@ -1,6 +1,70 @@ | |
| 1 1 | 
             
            describe( RCAP::Alert ) do
         | 
| 2 2 | 
             
              describe( 'initialising' ) do
         | 
| 3 3 |  | 
| 4 | 
            +
                context( 'a CAP 1.0 alert' ) do
         | 
| 5 | 
            +
                  before( :each ) do
         | 
| 6 | 
            +
                    @original_alert = RCAP::CAP_1_0::Alert.new( :sender => 'Sender',
         | 
| 7 | 
            +
                                                                :sent => DateTime.now,
         | 
| 8 | 
            +
                                                                :status => RCAP::CAP_1_0::Alert::STATUS_TEST,
         | 
| 9 | 
            +
                                                                :scope => RCAP::CAP_1_0::Alert::SCOPE_PUBLIC,
         | 
| 10 | 
            +
                                                                :source => 'Source',
         | 
| 11 | 
            +
                                                                :restriction => 'No Restriction',
         | 
| 12 | 
            +
                                                                :addresses => [ 'Address 1', 'Address 2'],
         | 
| 13 | 
            +
                                                                :code => ['Code1', 'Code2'],
         | 
| 14 | 
            +
                                                                :note => 'Note',
         | 
| 15 | 
            +
                                                                :references => [ "1.0,1", "1.0,2" ],
         | 
| 16 | 
            +
                                                                :incidents => [ 'Incident1', 'Incident2' ],
         | 
| 17 | 
            +
                                                                :infos => [ RCAP::CAP_1_0::Info.new, RCAP::CAP_1_0::Info.new ])
         | 
| 18 | 
            +
                  end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
             | 
| 21 | 
            +
             | 
| 22 | 
            +
                  shared_examples_for( 'it has parsed a CAP 1.0 alert correctly' ) do
         | 
| 23 | 
            +
                    it( 'should use the correct CAP Version' ){ @alert.class.should       == RCAP::CAP_1_0::Alert }
         | 
| 24 | 
            +
                    it( 'should parse identifier correctly' ) { @alert.identifier.should  == @original_alert.identifier }
         | 
| 25 | 
            +
                    it( 'should parse sender correctly' )     { @alert.sender.should      == @original_alert.sender }
         | 
| 26 | 
            +
                    it( 'should parse sent correctly' )       { @alert.sent.should( be_within( 1 ).of( @original_alert.sent ))}
         | 
| 27 | 
            +
                    it( 'should parse status correctly' )     { @alert.status.should      == @original_alert.status }
         | 
| 28 | 
            +
                    it( 'should parse msg_type correctly' )   { @alert.msg_type.should    == @original_alert.msg_type }
         | 
| 29 | 
            +
                    it( 'should parse source correctly' )     { @alert.source.should      == @original_alert.source }
         | 
| 30 | 
            +
                    it( 'should parse scope correctly' )      { @alert.scope.should       == @original_alert.scope }
         | 
| 31 | 
            +
                    it( 'should parse restriction correctly' ){ @alert.restriction.should == @original_alert.restriction }
         | 
| 32 | 
            +
                    it( 'should parse addresses correctly' )  { @alert.addresses.should   == @original_alert.addresses }
         | 
| 33 | 
            +
                    it( 'should parse code correctly' )       { @alert.codes.should       == @original_alert.codes }
         | 
| 34 | 
            +
                    it( 'should parse note correctly' )       { @alert.note.should        == @original_alert.note }
         | 
| 35 | 
            +
                    it( 'should parse references correctly' ) { @alert.references.should  == @original_alert.references }
         | 
| 36 | 
            +
                    it( 'should parse incidents correctly' )  { @alert.incidents.should   == @original_alert.incidents }
         | 
| 37 | 
            +
                    it( 'should parse infos correctly' ) do
         | 
| 38 | 
            +
                      @alert.infos.size.should == @original_alert.infos.size
         | 
| 39 | 
            +
                      @alert.infos.each{ |info| info.class.should == RCAP::CAP_1_0::Info }
         | 
| 40 | 
            +
                    end
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  context( 'from XML' ) do
         | 
| 44 | 
            +
                    before( :each ) do
         | 
| 45 | 
            +
                      @alert = RCAP::Alert.from_xml( @original_alert.to_xml )
         | 
| 46 | 
            +
                    end
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                    it_should_behave_like( 'it has parsed a CAP 1.0 alert correctly' )
         | 
| 49 | 
            +
                  end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
                  context( 'from YAML' ) do
         | 
| 52 | 
            +
                    before( :each ) do
         | 
| 53 | 
            +
                      @alert = RCAP::Alert.from_yaml( @original_alert.to_yaml )
         | 
| 54 | 
            +
                    end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                    it_should_behave_like( 'it has parsed a CAP 1.0 alert correctly' )
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                  context( 'from JSON' ) do
         | 
| 60 | 
            +
                    before( :each ) do
         | 
| 61 | 
            +
                      @alert = RCAP::Alert.from_json( @original_alert.to_json )
         | 
| 62 | 
            +
                    end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                    it_should_behave_like( 'it has parsed a CAP 1.0 alert correctly' )
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
             | 
| 4 68 | 
             
                context( 'a CAP 1.1 alert' ) do
         | 
| 5 69 | 
             
                  before( :each ) do
         | 
| 6 70 | 
             
                    @original_alert = RCAP::CAP_1_1::Alert.new( :sender => 'Sender',
         | 
| @@ -0,0 +1,222 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe( RCAP::CAP_1_0::Alert ) do
         | 
| 4 | 
            +
              context( 'on initialisation' ) do
         | 
| 5 | 
            +
                before( :each )  do
         | 
| 6 | 
            +
                  @alert = RCAP::CAP_1_0::Alert.new
         | 
| 7 | 
            +
                end
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                it( 'should not have a identifier' ){ @alert.identifier.should( be_nil )}
         | 
| 10 | 
            +
                it( 'should not have a sender' ){ @alert.sender.should( be_nil )}
         | 
| 11 | 
            +
                it( 'should not have a sent time' ){ @alert.sent.should( be_nil )}
         | 
| 12 | 
            +
                it( 'should not have a status' ){ @alert.status.should( be_nil )}
         | 
| 13 | 
            +
                it( 'should not have a scope' ){ @alert.scope.should( be_nil )}
         | 
| 14 | 
            +
                it( 'should not have a source'){ @alert.source.should( be_nil )}
         | 
| 15 | 
            +
                it( 'should not have a restriction'){ @alert.restriction.should( be_nil )}
         | 
| 16 | 
            +
                it( 'should not have any addresses' ){ @alert.addresses.should( be_empty )}
         | 
| 17 | 
            +
                it( 'should not have any codes' ){ @alert.codes.should( be_empty )}
         | 
| 18 | 
            +
                it( 'should not have a note' ){ @alert.note.should( be_nil )}
         | 
| 19 | 
            +
                it( 'should not have any references' ){ @alert.references.should( be_empty )}
         | 
| 20 | 
            +
                it( 'should not have any incidents' ){ @alert.incidents.should( be_empty )}
         | 
| 21 | 
            +
                it( 'should not have any infos' ){ @alert.infos.should( be_empty )}
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                shared_examples_for( "a successfully parsed CAP 1.0 alert" ) do
         | 
| 24 | 
            +
                  it( 'should parse identifier correctly' ) { @alert.identifier.should  == @original_alert.identifier }
         | 
| 25 | 
            +
                  it( 'should parse sender correctly' )     { @alert.sender.should      == @original_alert.sender }
         | 
| 26 | 
            +
                  it( 'should parse sent correctly' )       { @alert.sent.should( be_within( 1 ).of( @original_alert.sent ))}
         | 
| 27 | 
            +
                  it( 'should parse status correctly' )     { @alert.status.should      == @original_alert.status }
         | 
| 28 | 
            +
                  it( 'should parse msg_type correctly' )   { @alert.msg_type.should    == @original_alert.msg_type }
         | 
| 29 | 
            +
                  it( 'should parse source correctly' )     { @alert.source.should      == @original_alert.source }
         | 
| 30 | 
            +
                  it( 'should parse scope correctly' )      { @alert.scope.should       == @original_alert.scope }
         | 
| 31 | 
            +
                  it( 'should parse restriction correctly' ){ @alert.restriction.should == @original_alert.restriction }
         | 
| 32 | 
            +
                  it( 'should parse addresses correctly' )  { @alert.addresses.should   == @original_alert.addresses }
         | 
| 33 | 
            +
                  it( 'should parse code correctly' )       { @alert.codes.should       == @original_alert.codes }
         | 
| 34 | 
            +
                  it( 'should parse note correctly' )       { @alert.note.should        == @original_alert.note }
         | 
| 35 | 
            +
                  it( 'should parse references correctly' ) { @alert.references.should  == @original_alert.references }
         | 
| 36 | 
            +
                  it( 'should parse incidents correctly' )  { @alert.incidents.should   == @original_alert.incidents }
         | 
| 37 | 
            +
                  it( 'should parse infos correctly' ) do
         | 
| 38 | 
            +
                    @alert.infos.size.should == @original_alert.infos.size
         | 
| 39 | 
            +
                    @alert.infos.each{ |info| info.class.should == RCAP::CAP_1_0::Info }
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                context( 'from XML' ) do
         | 
| 44 | 
            +
                  before( :each ) do
         | 
| 45 | 
            +
                    @original_alert = RCAP::CAP_1_0::Alert.new( :sender      => 'Sender',
         | 
| 46 | 
            +
                                                                :sent        => DateTime.now,
         | 
| 47 | 
            +
                                                                :status      => RCAP::CAP_1_0::Alert::STATUS_TEST,
         | 
| 48 | 
            +
                                                                :scope       => RCAP::CAP_1_0::Alert::SCOPE_PUBLIC,
         | 
| 49 | 
            +
                                                                :source      => 'Source',
         | 
| 50 | 
            +
                                                                :restriction => 'No Restriction',
         | 
| 51 | 
            +
                                                                :addresses   => [ 'Address 1', 'Address 2'],
         | 
| 52 | 
            +
                                                                :codes       => [ 'Code1', 'Code2' ],
         | 
| 53 | 
            +
                                                                :note        => 'Note',
         | 
| 54 | 
            +
                                                                :references  => [ RCAP::CAP_1_0::Alert.new( :sender => 'Sender1' ).to_reference, RCAP::CAP_1_0::Alert.new( :sender => 'Sender2' ).to_reference ],
         | 
| 55 | 
            +
                                                                :incidents   => [ 'Incident1', 'Incident2' ],
         | 
| 56 | 
            +
                                                                :infos       => [ RCAP::CAP_1_0::Info.new, RCAP::CAP_1_0::Info.new ])
         | 
| 57 | 
            +
                    @xml_string = @original_alert.to_xml
         | 
| 58 | 
            +
                    @xml_document = REXML::Document.new( @xml_string )
         | 
| 59 | 
            +
                    @alert_element = @xml_document.root
         | 
| 60 | 
            +
                    @alert = RCAP::CAP_1_0::Alert.from_xml_element( @alert_element )
         | 
| 61 | 
            +
                  end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                  it_should_behave_like( "a successfully parsed CAP 1.0 alert" )
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                context( 'from YAML' ) do
         | 
| 68 | 
            +
                  before( :each ) do
         | 
| 69 | 
            +
                    @original_alert = RCAP::CAP_1_0::Alert.new( :sender      => 'Sender',
         | 
| 70 | 
            +
                                                                :sent        => DateTime.now,
         | 
| 71 | 
            +
                                                                :status      => RCAP::CAP_1_0::Alert::STATUS_TEST,
         | 
| 72 | 
            +
                                                                :scope       => RCAP::CAP_1_0::Alert::SCOPE_PUBLIC,
         | 
| 73 | 
            +
                                                                :source      => 'Source',
         | 
| 74 | 
            +
                                                                :restriction => 'No Restriction',
         | 
| 75 | 
            +
                                                                :addresses   => [ 'Address 1', 'Address 2'],
         | 
| 76 | 
            +
                                                                :codes       => [ 'Code1', 'Code2' ],
         | 
| 77 | 
            +
                                                                :note        => 'Note',
         | 
| 78 | 
            +
                                                                :references  => [ RCAP::CAP_1_0::Alert.new( :sender => 'Sender1' ).to_reference, RCAP::CAP_1_0::Alert.new( :sender => 'Sender2' ).to_reference ],
         | 
| 79 | 
            +
                                                                :incidents   => [ 'Incident1', 'Incident2' ],
         | 
| 80 | 
            +
                                                                :infos       => [ RCAP::CAP_1_0::Info.new, RCAP::CAP_1_0::Info.new ])
         | 
| 81 | 
            +
                    @yaml_string = @original_alert.to_yaml
         | 
| 82 | 
            +
                    @alert = RCAP::CAP_1_0::Alert.from_yaml( @yaml_string )
         | 
| 83 | 
            +
                  end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
                  it_should_behave_like( "a successfully parsed CAP 1.0 alert" )
         | 
| 86 | 
            +
                end
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                context( 'from a hash' ) do
         | 
| 89 | 
            +
                  before( :each ) do
         | 
| 90 | 
            +
                    @original_alert = RCAP::CAP_1_0::Alert.new( :sender      => 'Sender',
         | 
| 91 | 
            +
                                                                :sent        => DateTime.now,
         | 
| 92 | 
            +
                                                                :status      => RCAP::CAP_1_0::Alert::STATUS_TEST,
         | 
| 93 | 
            +
                                                                :scope       => RCAP::CAP_1_0::Alert::SCOPE_PUBLIC,
         | 
| 94 | 
            +
                                                                :source      => 'Source',
         | 
| 95 | 
            +
                                                                :restriction => 'No Restriction',
         | 
| 96 | 
            +
                                                                :addresses   => [ 'Address 1', 'Address 2'],
         | 
| 97 | 
            +
                                                                :codes       => [ 'Code1', 'Code2' ],
         | 
| 98 | 
            +
                                                                :note        => 'Note',
         | 
| 99 | 
            +
                                                                :references  => [ RCAP::CAP_1_0::Alert.new( :sender => 'Sender1' ).to_reference, RCAP::CAP_1_0::Alert.new( :sender => 'Sender2' ).to_reference ],
         | 
| 100 | 
            +
                                                                :incidents   => [ 'Incident1', 'Incident2' ],
         | 
| 101 | 
            +
                                                                :infos       => [ RCAP::CAP_1_0::Info.new, RCAP::CAP_1_0::Info.new ])
         | 
| 102 | 
            +
                    @alert = RCAP::CAP_1_0::Alert.from_h( @original_alert.to_h )
         | 
| 103 | 
            +
                  end
         | 
| 104 | 
            +
             | 
| 105 | 
            +
                  it_should_behave_like( "a successfully parsed CAP 1.0 alert" )
         | 
| 106 | 
            +
                end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                context( 'from JSON' ) do
         | 
| 109 | 
            +
                  before( :each ) do
         | 
| 110 | 
            +
                    @original_alert = RCAP::CAP_1_0::Alert.new( :sender      => 'Sender',
         | 
| 111 | 
            +
                                                                :sent        => DateTime.now,
         | 
| 112 | 
            +
                                                                :status      => RCAP::CAP_1_0::Alert::STATUS_TEST,
         | 
| 113 | 
            +
                                                                :scope       => RCAP::CAP_1_0::Alert::SCOPE_PUBLIC,
         | 
| 114 | 
            +
                                                                :source      => 'Source',
         | 
| 115 | 
            +
                                                                :restriction => 'No Restriction',
         | 
| 116 | 
            +
                                                                :addresses   => [ 'Address 1', 'Address 2'],
         | 
| 117 | 
            +
                                                                :codes       => [ 'Code1', 'Code2' ],
         | 
| 118 | 
            +
                                                                :note        => 'Note',
         | 
| 119 | 
            +
                                                                :references  => [ RCAP::CAP_1_0::Alert.new( :sender => 'Sender1' ).to_reference, RCAP::CAP_1_0::Alert.new( :sender => 'Sender2' ).to_reference ],
         | 
| 120 | 
            +
                                                                :incidents   => [ 'Incident1', 'Incident2' ],
         | 
| 121 | 
            +
                                                                :infos       => [ RCAP::CAP_1_0::Info.new, RCAP::CAP_1_0::Info.new ])
         | 
| 122 | 
            +
                    @alert = RCAP::CAP_1_0::Alert.from_json( @original_alert.to_json )
         | 
| 123 | 
            +
                  end
         | 
| 124 | 
            +
             | 
| 125 | 
            +
                  it_should_behave_like( "a successfully parsed CAP 1.0 alert" )
         | 
| 126 | 
            +
                end
         | 
| 127 | 
            +
              end
         | 
| 128 | 
            +
             | 
| 129 | 
            +
              describe( 'is not valid if it' ) do
         | 
| 130 | 
            +
                before( :each ) do
         | 
| 131 | 
            +
                  @alert = RCAP::CAP_1_0::Alert.new( :identifier => 'Identifier',
         | 
| 132 | 
            +
                                                     :sender     => "cap@tempuri.org",
         | 
| 133 | 
            +
                                                     :sent       => DateTime.now,
         | 
| 134 | 
            +
                                                     :status     => RCAP::CAP_1_0::Alert::STATUS_TEST,
         | 
| 135 | 
            +
                                                     :msg_type   => RCAP::CAP_1_0::Alert::MSG_TYPE_ALERT,
         | 
| 136 | 
            +
                                                     :scope      => RCAP::CAP_1_0::Alert::SCOPE_PUBLIC )
         | 
| 137 | 
            +
                  @alert.should( be_valid )
         | 
| 138 | 
            +
                end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                it( 'does not have a identifier' ) do
         | 
| 141 | 
            +
                  @alert.identifier = nil
         | 
| 142 | 
            +
                  @alert.should_not( be_valid )
         | 
| 143 | 
            +
                end
         | 
| 144 | 
            +
             | 
| 145 | 
            +
                it( 'does not have a sender' ) do
         | 
| 146 | 
            +
                  @alert.sender = nil
         | 
| 147 | 
            +
                  @alert.should_not( be_valid )
         | 
| 148 | 
            +
                end
         | 
| 149 | 
            +
             | 
| 150 | 
            +
                it( 'does not have a sent time (sent)' ) do
         | 
| 151 | 
            +
                  @alert.sent = nil
         | 
| 152 | 
            +
                  @alert.should_not( be_valid )
         | 
| 153 | 
            +
                end
         | 
| 154 | 
            +
             | 
| 155 | 
            +
                it( 'does not have a status' ) do
         | 
| 156 | 
            +
                  @alert.status = nil
         | 
| 157 | 
            +
                  @alert.should_not( be_valid )
         | 
| 158 | 
            +
                end
         | 
| 159 | 
            +
             | 
| 160 | 
            +
                it( 'does not have a message type (msg_type)' ) do
         | 
| 161 | 
            +
                  @alert.msg_type = nil
         | 
| 162 | 
            +
                  @alert.should_not( be_valid )
         | 
| 163 | 
            +
                end
         | 
| 164 | 
            +
             | 
| 165 | 
            +
                it( 'does not have a scope' ) do
         | 
| 166 | 
            +
                  @alert.scope = nil
         | 
| 167 | 
            +
                  @alert.should_not( be_valid )
         | 
| 168 | 
            +
                end
         | 
| 169 | 
            +
             | 
| 170 | 
            +
             | 
| 171 | 
            +
                it( 'does not have a valid status' ) do
         | 
| 172 | 
            +
                  @alert.status = 'incorrect value'
         | 
| 173 | 
            +
                  @alert.should_not( be_valid )
         | 
| 174 | 
            +
                end
         | 
| 175 | 
            +
             | 
| 176 | 
            +
                it( 'does not have a valid message type msg_type' ) do
         | 
| 177 | 
            +
                  @alert.msg_type = 'incorrect value'
         | 
| 178 | 
            +
                  @alert.should_not( be_valid )
         | 
| 179 | 
            +
                end
         | 
| 180 | 
            +
             | 
| 181 | 
            +
                it( 'does not have a valid scope' ) do
         | 
| 182 | 
            +
                  @alert.scope = 'incorrect value'
         | 
| 183 | 
            +
                  @alert.should_not( be_valid )
         | 
| 184 | 
            +
                end
         | 
| 185 | 
            +
             | 
| 186 | 
            +
             | 
| 187 | 
            +
                context( 'has an info element and it' ) do
         | 
| 188 | 
            +
                  it( 'is not valid' ) do
         | 
| 189 | 
            +
                    @info = RCAP::CAP_1_0::Info.new( :event => 'Info Event',
         | 
| 190 | 
            +
                                          :categories => RCAP::CAP_1_0::Info::CATEGORY_GEO,
         | 
| 191 | 
            +
                                          :urgency => RCAP::CAP_1_0::Info::URGENCY_IMMEDIATE,
         | 
| 192 | 
            +
                                          :severity => RCAP::CAP_1_0::Info::SEVERITY_EXTREME,
         | 
| 193 | 
            +
                                          :certainty => RCAP::CAP_1_0::Info::CERTAINTY_VERY_LIKELY )
         | 
| 194 | 
            +
                    @info.event = nil
         | 
| 195 | 
            +
                    @alert.infos << @info
         | 
| 196 | 
            +
                    @info.should_not( be_valid )
         | 
| 197 | 
            +
                    @alert.should_not( be_valid )
         | 
| 198 | 
            +
                  end
         | 
| 199 | 
            +
                end
         | 
| 200 | 
            +
              end
         | 
| 201 | 
            +
             | 
| 202 | 
            +
              describe( 'instance methods' ) do
         | 
| 203 | 
            +
                before( :each ) do
         | 
| 204 | 
            +
                  @alert = RCAP::CAP_1_0::Alert.new
         | 
| 205 | 
            +
                end
         | 
| 206 | 
            +
             | 
| 207 | 
            +
                describe( '#add_info' ) do
         | 
| 208 | 
            +
                  before( :each ) do
         | 
| 209 | 
            +
                    @info = @alert.add_info( :urgency => 'urgent' )
         | 
| 210 | 
            +
                    @info.urgency.should == 'urgent'
         | 
| 211 | 
            +
                  end
         | 
| 212 | 
            +
             | 
| 213 | 
            +
                  it( 'should return a CAP 1.0 Info object' ) do
         | 
| 214 | 
            +
                    @info.class.should == RCAP::CAP_1_0::Info
         | 
| 215 | 
            +
                  end
         | 
| 216 | 
            +
             | 
| 217 | 
            +
                  it( 'should add an Info object to the infos array' ) do
         | 
| 218 | 
            +
                    @alert.infos.size.should == 1
         | 
| 219 | 
            +
                  end
         | 
| 220 | 
            +
                end
         | 
| 221 | 
            +
              end
         | 
| 222 | 
            +
            end
         | 
| @@ -0,0 +1,247 @@ | |
| 1 | 
            +
            require 'spec_helper'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            describe( RCAP::CAP_1_0::Area ) do
         | 
| 4 | 
            +
              context( 'on initialisation' ) do
         | 
| 5 | 
            +
                before( :each ) do
         | 
| 6 | 
            +
                  @area = RCAP::CAP_1_0::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.0 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_0::Area.new( :area_desc => 'Area Description',
         | 
| 48 | 
            +
                                                   :altitude => 100,
         | 
| 49 | 
            +
                                                   :ceiling => 200,
         | 
| 50 | 
            +
                                                   :circles => RCAP::CAP_1_0::Circle.new( :lattitude => 0, :longitude => 0 , :radius => 100 ),
         | 
| 51 | 
            +
                                                   :geocodes => RCAP::CAP_1_0::Geocode.new( :name => 'name', :value => 'value' ),
         | 
| 52 | 
            +
                                                   :polygons => RCAP::CAP_1_0::Polygon.new( :points => RCAP::CAP_1_0::Point.new( :lattitude =>1, :longitude => 1 )))
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                    @alert = RCAP::CAP_1_0::Alert.new( :infos => RCAP::CAP_1_0::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_0::Info::XPATH, RCAP::CAP_1_0::Alert::XMLNS )
         | 
| 58 | 
            +
                    @area_xml_element = RCAP.xpath_first( @info_xml_element, RCAP::CAP_1_0::Area::XPATH, RCAP::CAP_1_0::Alert::XMLNS )
         | 
| 59 | 
            +
                    @area = RCAP::CAP_1_0::Area.from_xml_element( @area_xml_element )
         | 
| 60 | 
            +
                  end
         | 
| 61 | 
            +
             | 
| 62 | 
            +
                  it_should_behave_like( "it can parse into a CAP 1.0 Area object" )
         | 
| 63 | 
            +
                end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
                context( 'from YAML Data' ) do
         | 
| 66 | 
            +
                  before( :each ) do
         | 
| 67 | 
            +
                    @original_area = RCAP::CAP_1_0::Area.new( :area_desc => 'Area Description',
         | 
| 68 | 
            +
                                                              :altitude => 100,
         | 
| 69 | 
            +
                                                              :ceiling => 200,
         | 
| 70 | 
            +
                                                              :circles => RCAP::CAP_1_0::Circle.new( :lattitude => 0, :longitude => 0 , :radius => 100 ),
         | 
| 71 | 
            +
                                                              :geocodes => RCAP::CAP_1_0::Geocode.new( :name => 'name', :value => 'value' ),
         | 
| 72 | 
            +
                                                              :polygons => RCAP::CAP_1_0::Polygon.new( :points => RCAP::CAP_1_0::Point.new( :lattitude =>1, :longitude => 1 )))
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                    @area = RCAP::CAP_1_0::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.0 Area object" )
         | 
| 78 | 
            +
                end
         | 
| 79 | 
            +
             | 
| 80 | 
            +
                context( 'from a hash' ) do
         | 
| 81 | 
            +
                  before( :each ) do
         | 
| 82 | 
            +
                    @original_area = RCAP::CAP_1_0::Area.new( :area_desc => 'Area Description',
         | 
| 83 | 
            +
                                                   :altitude => 100,
         | 
| 84 | 
            +
                                                   :ceiling => 200,
         | 
| 85 | 
            +
                                                   :circles => RCAP::CAP_1_0::Circle.new( :lattitude => 0, :longitude => 0 , :radius => 100 ),
         | 
| 86 | 
            +
                                                   :geocodes => RCAP::CAP_1_0::Geocode.new( :name => 'name', :value => 'value' ),
         | 
| 87 | 
            +
                                                   :polygons => RCAP::CAP_1_0::Polygon.new( :points => RCAP::CAP_1_0::Point.new( :lattitude =>1, :longitude => 1 )))
         | 
| 88 | 
            +
             | 
| 89 | 
            +
                    @area = RCAP::CAP_1_0::Area.from_h( @original_area.to_h )
         | 
| 90 | 
            +
                  end
         | 
| 91 | 
            +
             | 
| 92 | 
            +
                  it_should_behave_like( "it can parse into a CAP 1.0 Area object" )
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
              end
         | 
| 95 | 
            +
             | 
| 96 | 
            +
              context( 'when exported' ) do
         | 
| 97 | 
            +
                before( :each ) do
         | 
| 98 | 
            +
                  @area = RCAP::CAP_1_0::Area.new( :area_desc => 'Area Description',
         | 
| 99 | 
            +
                                         :altitude => 100,
         | 
| 100 | 
            +
                                         :ceiling => 200,
         | 
| 101 | 
            +
                                         :circles => RCAP::CAP_1_0::Circle.new(  :lattitude => 0, :longitude => 0 , :radius => 100 ),
         | 
| 102 | 
            +
                                         :geocodes => RCAP::CAP_1_0::Geocode.new( :name => 'name', :value => 'value' ),
         | 
| 103 | 
            +
                                         :polygons => RCAP::CAP_1_0::Polygon.new( :points => RCAP::CAP_1_0::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_0::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_0::Area::ALTITUDE_KEY ].should == @area.altitude
         | 
| 116 | 
            +
                  end
         | 
| 117 | 
            +
             | 
| 118 | 
            +
                  it( 'should set the ceiling correctly' ) do
         | 
| 119 | 
            +
                    @area_hash[ RCAP::CAP_1_0::Area::CEILING_KEY ].should == @area.ceiling
         | 
| 120 | 
            +
                  end
         | 
| 121 | 
            +
             | 
| 122 | 
            +
                  it( 'should export the circles correctly' ) do
         | 
| 123 | 
            +
                    @area_hash[ RCAP::CAP_1_0::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_0::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_0::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_0::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_0::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_0::Polygon.new
         | 
| 168 | 
            +
                    @polygon.points.push( RCAP::CAP_1_0::Point.new( :lattitude => 0, :longitude => 0 ),
         | 
| 169 | 
            +
                                         RCAP::CAP_1_0::Point.new( :lattitude => 0, :longitude => 1 ),
         | 
| 170 | 
            +
                                         RCAP::CAP_1_0::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_0::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_0::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.0 Polygon' ) do
         | 
| 206 | 
            +
                    @polygon.class.should == RCAP::CAP_1_0::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.0 Circle' ) do
         | 
| 220 | 
            +
                    @circle.class.should == RCAP::CAP_1_0::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.0 Geocode' ) do
         | 
| 237 | 
            +
                    @geocode.class.should == RCAP::CAP_1_0::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
         |