rcap 1.1.1 → 1.2.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.
@@ -1,5 +1,11 @@
1
1
  = Change Log
2
2
 
3
+ == 1.2.0 - 17 July 2011
4
+
5
+ * CAP 1.1 and CAP 1.2 - Resource#dereference_uri! fetches data from Resource#uri and sets Resource#deref_uri
6
+ * Resource#deref_uri= will also automatically set size and calculate SHA1 digest
7
+ * Resources correctly deal with size on import and export
8
+
3
9
  == 1.1.1 - 25 June 2011
4
10
 
5
11
  * Documentation and code cleanup
@@ -8,7 +8,7 @@ RCAP currently supports CAP 1.0, 1.1 and 1.2.
8
8
 
9
9
  == Version
10
10
 
11
- 1.1.1
11
+ 1.2.0
12
12
 
13
13
  == Dependencies
14
14
 
@@ -1,3 +1,4 @@
1
+ # System and require libs
1
2
  require 'date'
2
3
  require 'assistance'
3
4
  require 'uuidtools'
@@ -5,6 +6,10 @@ require 'yaml'
5
6
  require 'json'
6
7
  require 'rexml/document'
7
8
  require 'rexml/formatters/pretty'
9
+ require 'open-uri'
10
+ require 'base64'
11
+ require 'digest/sha1'
12
+ # RCAP
8
13
  require 'rcap/version'
9
14
  require 'rcap/utilities'
10
15
  require 'rcap/validations'
@@ -39,4 +44,5 @@ require 'rcap/cap_1_2/circle'
39
44
  require 'rcap/cap_1_2/polygon'
40
45
  require 'rcap/cap_1_2/geocode'
41
46
  require 'rcap/cap_1_2/area'
47
+ # Configuration
42
48
  require 'config'
@@ -5,6 +5,9 @@ module RCAP
5
5
  YAML_CAP_VERSION_KEY = "CAP Version"
6
6
  JSON_CAP_VERSION_KEY = "cap_version"
7
7
 
8
+ # Initialise a RCAP Alert from a XML document. The namespace of the
9
+ # document is inspected and a CAP_1_0::Alert, CAP_1_1::Alert
10
+ # or CAP_1_2::Alert is instantiated.
8
11
  def self.from_xml( xml, namespace_key = XMLNS_KEY )
9
12
  xml_document = REXML::Document.new( xml )
10
13
 
@@ -19,6 +22,9 @@ module RCAP
19
22
 
20
23
  end
21
24
 
25
+ # Initialise a RCAP Alert from a YAML document produced by
26
+ # CAP_1_2::Alert#to_yaml. The version of the document is inspected and a
27
+ # CAP_1_0::Alert, CAP_1_1::Alert or CAP_1_2::Alert is instantiated.
22
28
  def self.from_yaml( yaml )
23
29
  yaml_data = YAML.load( yaml )
24
30
 
@@ -32,6 +38,9 @@ module RCAP
32
38
  end
33
39
  end
34
40
 
41
+ # Initialise a RCAP Alert from a JSON document produced by
42
+ # CAP_1_2::Alert#to_json. The version of the document is inspected and a
43
+ # CAP_1_0::Alert, CAP_1_1::Alert or CAP_1_2::Alert is instantiated.
35
44
  def self.from_json( json_string )
36
45
  json_hash = JSON.parse( json_string )
37
46
  self.from_h( json_hash )
@@ -367,7 +367,7 @@ module RCAP
367
367
 
368
368
  # Returns a JSON string representation of an Alert object
369
369
  def to_json( pretty_print = false )
370
- if pretty_print
370
+ if pretty_print
371
371
  JSON.pretty_generate( self.to_h )
372
372
  else
373
373
  self.to_h.to_json
@@ -74,7 +74,7 @@ module RCAP
74
74
  end
75
75
 
76
76
  def self.from_h( circle_hash ) # :nodoc:
77
- self.new( :radius => circle_hash[ RADIUS_KEY ],
77
+ self.new( :radius => circle_hash[ RADIUS_KEY ],
78
78
  :lattitude => circle_hash[ LATTITUDE_KEY ],
79
79
  :longitude => circle_hash[ LONGITUDE_KEY ])
80
80
  end
@@ -1,6 +1,7 @@
1
1
  module RCAP
2
2
  module CAP_1_0
3
- # A Resourse object is valid if
3
+
4
+ # A Resource object is valid if
4
5
  # * it has a resource description
5
6
  class Resource
6
7
  include Validation
@@ -43,7 +44,7 @@ module RCAP
43
44
  xml_element = REXML::Element.new( XML_ELEMENT_NAME )
44
45
  xml_element.add_element( RESOURCE_DESC_ELEMENT_NAME ).add_text( self.resource_desc )
45
46
  xml_element.add_element( MIME_TYPE_ELEMENT_NAME ).add_text( self.mime_type ) if self.mime_type
46
- xml_element.add_element( SIZE_ELEMENT_NAME ).add_text( self.size ) if self.size
47
+ xml_element.add_element( SIZE_ELEMENT_NAME ).add_text( self.size.to_s ) if self.size
47
48
  xml_element.add_element( URI_ELEMENT_NAME ).add_text( self.uri ) if self.uri
48
49
  xml_element.add_element( DIGEST_ELEMENT_NAME ).add_text( self.digest ) if self.digest
49
50
  xml_element
@@ -74,7 +75,7 @@ module RCAP
74
75
  resource = self.new( :resource_desc => RCAP.xpath_text( resource_xml_element, RESOURCE_DESC_XPATH, Alert::XMLNS ),
75
76
  :uri => RCAP.xpath_text( resource_xml_element, URI_XPATH, Alert::XMLNS ),
76
77
  :mime_type => RCAP.xpath_text( resource_xml_element, MIME_TYPE_XPATH, Alert::XMLNS ),
77
- :size => RCAP.xpath_text( resource_xml_element, SIZE_XPATH, Alert::XMLNS ),
78
+ :size => RCAP.xpath_text( resource_xml_element, SIZE_XPATH, Alert::XMLNS ).to_i,
78
79
  :digest => RCAP.xpath_text( resource_xml_element, DIGEST_XPATH, Alert::XMLNS ))
79
80
  end
80
81
 
@@ -84,7 +85,7 @@ module RCAP
84
85
  SIZE_YAML = "Size" # :nodoc:
85
86
  DIGEST_YAML = "Digest" # :nodoc:
86
87
 
87
- def to_yaml( options ) # :nodoc:
88
+ def to_yaml( options = {} ) # :nodoc:
88
89
  RCAP.attribute_values_to_hash(
89
90
  [ RESOURCE_DESC_YAML, self.resource_desc ],
90
91
  [ URI_YAML, self.uri ],
@@ -355,7 +355,7 @@ module RCAP
355
355
 
356
356
  # Returns a JSON string representation of an Alert object
357
357
  def to_json( pretty_print = false )
358
- if pretty_print
358
+ if pretty_print
359
359
  JSON.pretty_generate( self.to_h )
360
360
  else
361
361
  self.to_h.to_json
@@ -1,6 +1,7 @@
1
1
  module RCAP
2
2
  module CAP_1_1
3
- # A Resourse object is valid if
3
+
4
+ # A Resource object is valid if
4
5
  # * it has a resource description
5
6
  class Resource
6
7
  include Validation
@@ -13,7 +14,7 @@ module RCAP
13
14
  # Resource location
14
15
  attr_accessor( :uri )
15
16
  # Dereferenced URI - contents of URI Base64 encoded
16
- attr_accessor( :deref_uri )
17
+ attr_reader( :deref_uri )
17
18
  # SHA-1 hash of contents of resource
18
19
  attr_accessor( :digest )
19
20
 
@@ -48,7 +49,7 @@ module RCAP
48
49
  xml_element = REXML::Element.new( XML_ELEMENT_NAME )
49
50
  xml_element.add_element( RESOURCE_DESC_ELEMENT_NAME ).add_text( self.resource_desc )
50
51
  xml_element.add_element( MIME_TYPE_ELEMENT_NAME ).add_text( self.mime_type ) if self.mime_type
51
- xml_element.add_element( SIZE_ELEMENT_NAME ).add_text( self.size ) if self.size
52
+ xml_element.add_element( SIZE_ELEMENT_NAME ).add_text( self.size.to_s ) if self.size
52
53
  xml_element.add_element( URI_ELEMENT_NAME ).add_text( self.uri ) if self.uri
53
54
  xml_element.add_element( DEREF_URI_ELEMENT_NAME ).add_text( self.deref_uri ) if self.deref_uri
54
55
  xml_element.add_element( DIGEST_ELEMENT_NAME ).add_text( self.digest ) if self.digest
@@ -76,12 +77,29 @@ module RCAP
76
77
  self.resource_desc
77
78
  end
78
79
 
80
+ # Sets the deref_uri. The SHA digest and size are also calculated and set.
81
+ def deref_uri=( value )
82
+ @deref_uri = value
83
+ self.digest = Digest::SHA1.hexdigest( @deref_uri )
84
+ self.size = @deref_uri.bytesize
85
+ end
86
+
87
+ # Retrieves the content at uri and stores it in deref_uri as Base64 encoded text. It will also
88
+ # calculate the digest on the encoded data using SHA1 and set the size.
89
+ #
90
+ # This uses the open-uri[http://ruby-doc.org/stdlib/libdoc/open-uri/rdoc/index.html] Ruby API
91
+ # to open and read the content.
92
+ def dereference_uri!
93
+ content = URI.parse( self.uri ).read
94
+ self.deref_uri = Base64.encode64( content )
95
+ end
96
+
79
97
  def self.from_xml_element( resource_xml_element ) # :nodoc:
80
98
  resource = self.new( :resource_desc => RCAP.xpath_text( resource_xml_element, RESOURCE_DESC_XPATH, Alert::XMLNS ),
81
99
  :uri => RCAP.xpath_text( resource_xml_element, URI_XPATH, Alert::XMLNS ),
82
100
  :mime_type => RCAP.xpath_text( resource_xml_element, MIME_TYPE_XPATH, Alert::XMLNS ),
83
101
  :deref_uri => RCAP.xpath_text( resource_xml_element, DEREF_URI_XPATH, Alert::XMLNS ),
84
- :size => RCAP.xpath_text( resource_xml_element, SIZE_XPATH, Alert::XMLNS ),
102
+ :size => RCAP.xpath_text( resource_xml_element, SIZE_XPATH, Alert::XMLNS ).to_i,
85
103
  :digest => RCAP.xpath_text( resource_xml_element, DIGEST_XPATH, Alert::XMLNS ))
86
104
  end
87
105
 
@@ -92,7 +110,7 @@ module RCAP
92
110
  SIZE_YAML = "Size" # :nodoc:
93
111
  DIGEST_YAML = "Digest" # :nodoc:
94
112
 
95
- def to_yaml( options ) # :nodoc:
113
+ def to_yaml( options = {} ) # :nodoc:
96
114
  RCAP.attribute_values_to_hash(
97
115
  [ RESOURCE_DESC_YAML, self.resource_desc ],
98
116
  [ URI_YAML, self.uri ],
@@ -355,7 +355,7 @@ module RCAP
355
355
 
356
356
  # Returns a JSON string representation of an Alert object
357
357
  def to_json( pretty_print = false )
358
- if pretty_print
358
+ if pretty_print
359
359
  JSON.pretty_generate( self.to_h )
360
360
  else
361
361
  self.to_h.to_json
@@ -1,6 +1,7 @@
1
1
  module RCAP
2
2
  module CAP_1_2
3
- # A Resourse object is valid if
3
+
4
+ # A Resource object is valid if
4
5
  # * it has a resource description
5
6
  class Resource
6
7
  include Validation
@@ -14,7 +15,7 @@ module RCAP
14
15
  # Resource location
15
16
  attr_accessor( :uri )
16
17
  # Dereferenced URI - contents of URI Base64 encoded
17
- attr_accessor( :deref_uri )
18
+ attr_reader( :deref_uri )
18
19
  # SHA-1 hash of contents of resource
19
20
  attr_accessor( :digest )
20
21
 
@@ -50,7 +51,7 @@ module RCAP
50
51
  xml_element = REXML::Element.new( XML_ELEMENT_NAME )
51
52
  xml_element.add_element( RESOURCE_DESC_ELEMENT_NAME ).add_text( self.resource_desc )
52
53
  xml_element.add_element( MIME_TYPE_ELEMENT_NAME ).add_text( self.mime_type ) if self.mime_type
53
- xml_element.add_element( SIZE_ELEMENT_NAME ).add_text( self.size ) if self.size
54
+ xml_element.add_element( SIZE_ELEMENT_NAME ).add_text( self.size.to_s ) if self.size
54
55
  xml_element.add_element( URI_ELEMENT_NAME ).add_text( self.uri ) if self.uri
55
56
  xml_element.add_element( DEREF_URI_ELEMENT_NAME ).add_text( self.deref_uri ) if self.deref_uri
56
57
  xml_element.add_element( DIGEST_ELEMENT_NAME ).add_text( self.digest ) if self.digest
@@ -78,13 +79,30 @@ module RCAP
78
79
  self.resource_desc
79
80
  end
80
81
 
82
+ # Sets the deref_uri. The SHA digest and size are also calculated and set.
83
+ def deref_uri=( value )
84
+ @deref_uri = value
85
+ self.digest = Digest::SHA1.hexdigest( @deref_uri )
86
+ self.size = @deref_uri.bytesize
87
+ end
88
+
89
+ # Retrieves the content at uri and stores it in deref_uri as Base64 encoded text. It will also
90
+ # calculate the digest on the encoded data using SHA1 and set the size.
91
+ #
92
+ # This uses the open-uri[http://ruby-doc.org/stdlib/libdoc/open-uri/rdoc/index.html] Ruby API
93
+ # to open and read the content.
94
+ def dereference_uri!
95
+ content = URI.parse( self.uri ).read
96
+ self.deref_uri = Base64.encode64( content )
97
+ end
98
+
81
99
  def self.from_xml_element( resource_xml_element ) # :nodoc:
82
100
  resource = self.new( :resource_desc => RCAP.xpath_text( resource_xml_element, RESOURCE_DESC_XPATH, Alert::XMLNS ),
83
- :uri => RCAP.xpath_text( resource_xml_element, URI_XPATH, Alert::XMLNS ),
84
- :mime_type => RCAP.xpath_text( resource_xml_element, MIME_TYPE_XPATH, Alert::XMLNS ),
85
- :deref_uri => RCAP.xpath_text( resource_xml_element, DEREF_URI_XPATH, Alert::XMLNS ),
86
- :size => RCAP.xpath_text( resource_xml_element, SIZE_XPATH, Alert::XMLNS ),
87
- :digest => RCAP.xpath_text( resource_xml_element, DIGEST_XPATH, Alert::XMLNS ))
101
+ :uri => RCAP.xpath_text( resource_xml_element, URI_XPATH, Alert::XMLNS ),
102
+ :mime_type => RCAP.xpath_text( resource_xml_element, MIME_TYPE_XPATH, Alert::XMLNS ),
103
+ :deref_uri => RCAP.xpath_text( resource_xml_element, DEREF_URI_XPATH, Alert::XMLNS ),
104
+ :size => RCAP.xpath_text( resource_xml_element, SIZE_XPATH, Alert::XMLNS ).to_i,
105
+ :digest => RCAP.xpath_text( resource_xml_element, DIGEST_XPATH, Alert::XMLNS ))
88
106
  end
89
107
 
90
108
  RESOURCE_DESC_YAML = "Resource Description" # :nodoc:
@@ -94,7 +112,7 @@ module RCAP
94
112
  SIZE_YAML = "Size" # :nodoc:
95
113
  DIGEST_YAML = "Digest" # :nodoc:
96
114
 
97
- def to_yaml( options ) # :nodoc:
115
+ def to_yaml( options = {} ) # :nodoc:
98
116
  RCAP.attribute_values_to_hash(
99
117
  [ RESOURCE_DESC_YAML, self.resource_desc ],
100
118
  [ URI_YAML, self.uri ],
@@ -49,7 +49,7 @@ module Validation # :nodoc:
49
49
  }.merge!( attributes.extract_options! )
50
50
 
51
51
  validates_each( *attributes ) do |object, attribute, value|
52
- next if ( value.nil? && options[ :allow_nil ])
52
+ next if ( value.nil? && options[ :allow_nil ])
53
53
  unless value && value.valid?
54
54
  object.errors[ attribute ] << options[ :message ]
55
55
  end
@@ -1,3 +1,3 @@
1
1
  module RCAP
2
- VERSION = '1.1.1'
2
+ VERSION = '1.2.0'
3
3
  end
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.add_dependency('json', '>= 1.5.1')
25
25
  s.add_dependency('uuidtools', '>= 2.1.2')
26
26
 
27
- s.add_development_dependency('rspec', '>= 2.5.0')
28
- s.add_development_dependency('hanna', '>= 0.1.12')
27
+ s.add_development_dependency( 'rspec', '>= 2.5.0' )
28
+ s.add_development_dependency( 'hanna', '>= 0.1.12' )
29
+ s.add_development_dependency( 'webmock' )
29
30
  end
@@ -18,7 +18,7 @@ describe( RCAP::CAP_1_0::Resource ) do
18
18
  @original_resource.resource_desc = "Image of incident"
19
19
  @original_resource.uri = "http://capetown.gov.za/cap/resources/image.png"
20
20
  @original_resource.mime_type = 'image/png'
21
- @original_resource.size = "20480"
21
+ @original_resource.size = 20480
22
22
  @original_resource.digest = "2048"
23
23
 
24
24
  @alert = RCAP::CAP_1_0::Alert.new( :infos => RCAP::CAP_1_0::Info.new( :resources => @original_resource ))
@@ -58,7 +58,7 @@ describe( RCAP::CAP_1_0::Resource ) do
58
58
  @original_resource.resource_desc = "Image of incident"
59
59
  @original_resource.uri = "http://capetown.gov.za/cap/resources/image.png"
60
60
  @original_resource.mime_type = 'image/png'
61
- @original_resource.size = "20480"
61
+ @original_resource.size = 20480
62
62
  @original_resource.digest = "2048"
63
63
 
64
64
  @resource = RCAP::CAP_1_0::Resource.from_h( @original_resource.to_h )
@@ -93,7 +93,7 @@ describe( RCAP::CAP_1_0::Resource ) do
93
93
  @resource.resource_desc = "Image of incident"
94
94
  @resource.uri = "http://capetown.gov.za/cap/resources/image.png"
95
95
  @resource.mime_type = 'image/png'
96
- @resource.size = "20480"
96
+ @resource.size = 20480
97
97
  @resource.digest = "2048"
98
98
  end
99
99
 
@@ -122,6 +122,12 @@ describe( RCAP::CAP_1_0::Resource ) do
122
122
  @resource_hash[ RCAP::CAP_1_0::Resource::DIGEST_KEY ].should == @resource.digest
123
123
  end
124
124
  end
125
+
126
+ context( 'to xml' ) do
127
+ it( 'should be successful' ) do
128
+ lambda{ @resource_xml = @resource.to_xml }.should_not( raise_exception )
129
+ end
130
+ end
125
131
  end
126
132
 
127
133
  context( 'which is valid' ) do
@@ -20,7 +20,7 @@ describe( RCAP::CAP_1_1::Resource ) do
20
20
  @original_resource.uri = "http://capetown.gov.za/cap/resources/image.png"
21
21
  @original_resource.mime_type = 'image/png'
22
22
  @original_resource.deref_uri = "IMAGE DATA"
23
- @original_resource.size = "20480"
23
+ @original_resource.size = 20480
24
24
  @original_resource.digest = "2048"
25
25
 
26
26
  @alert = RCAP::CAP_1_1::Alert.new( :infos => RCAP::CAP_1_1::Info.new( :resources => @original_resource ))
@@ -65,7 +65,7 @@ describe( RCAP::CAP_1_1::Resource ) do
65
65
  @original_resource.uri = "http://capetown.gov.za/cap/resources/image.png"
66
66
  @original_resource.mime_type = 'image/png'
67
67
  @original_resource.deref_uri = "IMAGE DATA"
68
- @original_resource.size = "20480"
68
+ @original_resource.size = 20480
69
69
  @original_resource.digest = "2048"
70
70
 
71
71
  @resource = RCAP::CAP_1_1::Resource.from_h( @original_resource.to_h )
@@ -105,7 +105,7 @@ describe( RCAP::CAP_1_1::Resource ) do
105
105
  @resource.uri = "http://capetown.gov.za/cap/resources/image.png"
106
106
  @resource.mime_type = 'image/png'
107
107
  @resource.deref_uri = "IMAGE DATA"
108
- @resource.size = "20480"
108
+ @resource.size = 20480
109
109
  @resource.digest = "2048"
110
110
  end
111
111
 
@@ -138,6 +138,12 @@ describe( RCAP::CAP_1_1::Resource ) do
138
138
  @resource_hash[ RCAP::CAP_1_1::Resource::DIGEST_KEY ].should == @resource.digest
139
139
  end
140
140
  end
141
+
142
+ context( 'to xml' ) do
143
+ it( 'should be successful' ) do
144
+ lambda{ @resource_xml = @resource.to_xml }.should_not( raise_exception )
145
+ end
146
+ end
141
147
  end
142
148
 
143
149
  context( 'which is valid' ) do
@@ -153,4 +159,27 @@ describe( RCAP::CAP_1_1::Resource ) do
153
159
  end
154
160
  end
155
161
  end
162
+
163
+ context( 'with a non-rereferenced URI' ) do
164
+ before( :each ) do
165
+ @resource = RCAP::CAP_1_1::Resource.new( :resource_desc => 'Resource Description', :mime_type => 'text/csv', :uri => 'http://tempuri.org/resource.csv' )
166
+ @content = "1,2\n3,4"
167
+ @encoded_content = Base64.encode64( @content )
168
+ stub_request( :get, @resource.uri ).to_return( :status => 200, :body => @content )
169
+ end
170
+
171
+ describe( '#dereference_uri!' ) do
172
+ it( 'should fetch the content and store it in deref_uri as Base64 encoded content' ) do
173
+ lambda{ @resource.dereference_uri! }.should( change( @resource, :deref_uri ).to( @encoded_content ))
174
+ end
175
+
176
+ it( 'should generate the correct SHA1 hash' ) do
177
+ lambda{ @resource.dereference_uri! }.should( change( @resource, :digest ).to( Digest::SHA1.hexdigest( @encoded_content )))
178
+ end
179
+
180
+ it( 'should set the size in bytes' ) do
181
+ lambda{ @resource.dereference_uri! }.should( change( @resource, :size ).to( @encoded_content.bytesize ))
182
+ end
183
+ end
184
+ end
156
185
  end
@@ -20,7 +20,7 @@ describe( RCAP::CAP_1_2::Resource ) do
20
20
  @original_resource.uri = "http://capetown.gov.za/cap/resources/image.png"
21
21
  @original_resource.mime_type = 'image/png'
22
22
  @original_resource.deref_uri = "IMAGE DATA"
23
- @original_resource.size = "20480"
23
+ @original_resource.size = 20480
24
24
  @original_resource.digest = "2048"
25
25
 
26
26
  @alert = RCAP::CAP_1_2::Alert.new( :infos => RCAP::CAP_1_2::Info.new( :resources => @original_resource ))
@@ -65,7 +65,7 @@ describe( RCAP::CAP_1_2::Resource ) do
65
65
  @original_resource.uri = "http://capetown.gov.za/cap/resources/image.png"
66
66
  @original_resource.mime_type = 'image/png'
67
67
  @original_resource.deref_uri = "IMAGE DATA"
68
- @original_resource.size = "20480"
68
+ @original_resource.size = 20480
69
69
  @original_resource.digest = "2048"
70
70
 
71
71
  @resource = RCAP::CAP_1_2::Resource.from_h( @original_resource.to_h )
@@ -105,7 +105,7 @@ describe( RCAP::CAP_1_2::Resource ) do
105
105
  @resource.uri = "http://capetown.gov.za/cap/resources/image.png"
106
106
  @resource.mime_type = 'image/png'
107
107
  @resource.deref_uri = "IMAGE DATA"
108
- @resource.size = "20480"
108
+ @resource.size = 20480
109
109
  @resource.digest = "2048"
110
110
  end
111
111
 
@@ -138,6 +138,12 @@ describe( RCAP::CAP_1_2::Resource ) do
138
138
  @resource_hash[ RCAP::CAP_1_2::Resource::DIGEST_KEY ].should == @resource.digest
139
139
  end
140
140
  end
141
+
142
+ context( 'to xml' ) do
143
+ it( 'should be successful' ) do
144
+ lambda{ @resource_xml = @resource.to_xml }.should_not( raise_exception )
145
+ end
146
+ end
141
147
  end
142
148
 
143
149
  context( 'which is valid' ) do
@@ -158,4 +164,27 @@ describe( RCAP::CAP_1_2::Resource ) do
158
164
  end
159
165
  end
160
166
  end
167
+
168
+ context( 'with a non-rereferenced URI' ) do
169
+ before( :each ) do
170
+ @resource = RCAP::CAP_1_2::Resource.new( :resource_desc => 'Resource Description', :mime_type => 'text/csv', :uri => 'http://tempuri.org/resource.csv' )
171
+ @content = "1,2\n3,4"
172
+ @encoded_content = Base64.encode64( @content )
173
+ stub_request( :get, @resource.uri ).to_return( :status => 200, :body => @content )
174
+ end
175
+
176
+ describe( '#dereference_uri!' ) do
177
+ it( 'should fetch the content and store it in deref_uri as Base64 encoded content' ) do
178
+ lambda{ @resource.dereference_uri! }.should( change( @resource, :deref_uri ).to( @encoded_content ))
179
+ end
180
+
181
+ it( 'should generate the correct SHA1 hash' ) do
182
+ lambda{ @resource.dereference_uri! }.should( change( @resource, :digest ).to( Digest::SHA1.hexdigest( @encoded_content )))
183
+ end
184
+
185
+ it( 'should set the size in bytes' ) do
186
+ lambda{ @resource.dereference_uri! }.should( change( @resource, :size ).to( @encoded_content.bytesize ))
187
+ end
188
+ end
189
+ end
161
190
  end
@@ -1,5 +1,5 @@
1
- require 'yaml'
2
1
  require 'rcap'
2
+ require 'webmock/rspec'
3
3
 
4
4
  def random_circle_hash
5
5
  { :lattitude => rand( 360 ) - 180,
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: rcap
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 1.1.1
5
+ version: 1.2.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Farrel Lifson
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-26 00:00:00 Z
13
+ date: 2011-07-16 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: assistance
@@ -67,6 +67,17 @@ dependencies:
67
67
  version: 0.1.12
68
68
  type: :development
69
69
  version_requirements: *id005
70
+ - !ruby/object:Gem::Dependency
71
+ name: webmock
72
+ prerelease: false
73
+ requirement: &id006 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: "0"
79
+ type: :development
80
+ version_requirements: *id006
70
81
  description: A Ruby API providing parsing, generation and validation of CAP(Common Alerting Protocol) messages.
71
82
  email:
72
83
  - farrel.lifson@aimred.com
@@ -178,7 +189,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
178
189
  requirements: []
179
190
 
180
191
  rubyforge_project: rcap
181
- rubygems_version: 1.8.3
192
+ rubygems_version: 1.8.5
182
193
  signing_key:
183
194
  specification_version: 3
184
195
  summary: CAP(Common Alerting Protocol) API