rcap 1.1.1 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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