rcap 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +6 -0
- data/README.rdoc +1 -1
- data/lib/rcap.rb +6 -0
- data/lib/rcap/alert.rb +9 -0
- data/lib/rcap/cap_1_0/alert.rb +1 -1
- data/lib/rcap/cap_1_0/circle.rb +1 -1
- data/lib/rcap/cap_1_0/resource.rb +5 -4
- data/lib/rcap/cap_1_1/alert.rb +1 -1
- data/lib/rcap/cap_1_1/resource.rb +23 -5
- data/lib/rcap/cap_1_2/alert.rb +1 -1
- data/lib/rcap/cap_1_2/resource.rb +27 -9
- data/lib/rcap/validations.rb +1 -1
- data/lib/rcap/version.rb +1 -1
- data/rcap.gemspec +3 -2
- data/spec/cap_1_0/resource_spec.rb +9 -3
- data/spec/cap_1_1/resource_spec.rb +32 -3
- data/spec/cap_1_2/resource_spec.rb +32 -3
- data/spec/spec_helper.rb +1 -1
- metadata +14 -3
data/CHANGELOG.rdoc
CHANGED
@@ -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
|
data/README.rdoc
CHANGED
data/lib/rcap.rb
CHANGED
@@ -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'
|
data/lib/rcap/alert.rb
CHANGED
@@ -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 )
|
data/lib/rcap/cap_1_0/alert.rb
CHANGED
data/lib/rcap/cap_1_0/circle.rb
CHANGED
@@ -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
|
-
|
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 )
|
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 ],
|
data/lib/rcap/cap_1_1/alert.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module RCAP
|
2
2
|
module CAP_1_1
|
3
|
-
|
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
|
-
|
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 )
|
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 ],
|
data/lib/rcap/cap_1_2/alert.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
module RCAP
|
2
2
|
module CAP_1_2
|
3
|
-
|
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
|
-
|
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 )
|
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
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
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 ],
|
data/lib/rcap/validations.rb
CHANGED
@@ -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
|
data/lib/rcap/version.rb
CHANGED
data/rcap.gemspec
CHANGED
@@ -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 =
|
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 =
|
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 =
|
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 =
|
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 =
|
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 =
|
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 =
|
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 =
|
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 =
|
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
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: rcap
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 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-
|
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.
|
192
|
+
rubygems_version: 1.8.5
|
182
193
|
signing_key:
|
183
194
|
specification_version: 3
|
184
195
|
summary: CAP(Common Alerting Protocol) API
|