rcap 1.3.0 → 1.3.1
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 → CHANGELOG.md} +26 -20
- data/README.md +259 -0
- data/Rakefile +8 -7
- data/lib/extensions/array.rb +7 -1
- data/lib/extensions/date_time.rb +5 -1
- data/lib/extensions/string.rb +14 -1
- data/lib/extensions/time.rb +5 -1
- data/lib/rcap.rb +1 -1
- data/lib/rcap/alert.rb +24 -10
- data/lib/rcap/cap_1_0/alert.rb +232 -166
- data/lib/rcap/cap_1_0/area.rb +100 -67
- data/lib/rcap/cap_1_0/circle.rb +47 -22
- data/lib/rcap/cap_1_0/event_code.rb +3 -2
- data/lib/rcap/cap_1_0/geocode.rb +3 -2
- data/lib/rcap/cap_1_0/info.rb +265 -202
- data/lib/rcap/cap_1_0/parameter.rb +43 -20
- data/lib/rcap/cap_1_0/point.rb +23 -9
- data/lib/rcap/cap_1_0/polygon.rb +37 -19
- data/lib/rcap/cap_1_0/resource.rb +77 -55
- data/lib/rcap/cap_1_1/alert.rb +222 -156
- data/lib/rcap/cap_1_1/area.rb +100 -67
- data/lib/rcap/cap_1_1/circle.rb +49 -22
- data/lib/rcap/cap_1_1/event_code.rb +3 -2
- data/lib/rcap/cap_1_1/geocode.rb +3 -2
- data/lib/rcap/cap_1_1/info.rb +281 -217
- data/lib/rcap/cap_1_1/parameter.rb +35 -16
- data/lib/rcap/cap_1_1/point.rb +23 -9
- data/lib/rcap/cap_1_1/polygon.rb +38 -20
- data/lib/rcap/cap_1_1/resource.rb +106 -65
- data/lib/rcap/cap_1_2/alert.rb +224 -158
- data/lib/rcap/cap_1_2/area.rb +100 -67
- data/lib/rcap/cap_1_2/circle.rb +49 -24
- data/lib/rcap/cap_1_2/event_code.rb +3 -2
- data/lib/rcap/cap_1_2/geocode.rb +3 -2
- data/lib/rcap/cap_1_2/info.rb +285 -219
- data/lib/rcap/cap_1_2/parameter.rb +39 -19
- data/lib/rcap/cap_1_2/point.rb +23 -9
- data/lib/rcap/cap_1_2/polygon.rb +37 -20
- data/lib/rcap/cap_1_2/resource.rb +107 -67
- data/lib/rcap/config.rb +4 -0
- data/lib/rcap/utilities.rb +55 -2
- data/lib/rcap/validations.rb +2 -2
- data/lib/rcap/version.rb +1 -1
- data/rcap.gemspec +2 -2
- data/spec/cap_1_0/parameter_spec.rb +5 -1
- data/spec/cap_1_1/resource_spec.rb +6 -0
- data/spec/cap_1_2/alert_spec.rb +8 -0
- data/spec/cap_1_2/resource_spec.rb +8 -2
- metadata +11 -10
- data/README.rdoc +0 -247
- data/lib/config.rb +0 -2
@@ -8,57 +8,77 @@ module RCAP
|
|
8
8
|
|
9
9
|
validates_presence_of( :name, :value )
|
10
10
|
|
11
|
-
|
11
|
+
# @return [String]
|
12
|
+
attr_accessor( :name )
|
13
|
+
# @return [String]
|
14
|
+
attr_accessor( :value )
|
12
15
|
|
13
|
-
XML_ELEMENT_NAME = "parameter"
|
14
|
-
NAME_ELEMENT_NAME = "valueName"
|
15
|
-
VALUE_ELEMENT_NAME = "value"
|
16
|
+
XML_ELEMENT_NAME = "parameter"
|
17
|
+
NAME_ELEMENT_NAME = "valueName"
|
18
|
+
VALUE_ELEMENT_NAME = "value"
|
16
19
|
|
17
|
-
XPATH = "cap:#{ XML_ELEMENT_NAME }"
|
18
|
-
NAME_XPATH = "cap:#{ NAME_ELEMENT_NAME }"
|
19
|
-
VALUE_XPATH = "cap:#{ VALUE_ELEMENT_NAME }"
|
20
|
+
XPATH = "cap:#{ XML_ELEMENT_NAME }"
|
21
|
+
NAME_XPATH = "cap:#{ NAME_ELEMENT_NAME }"
|
22
|
+
VALUE_XPATH = "cap:#{ VALUE_ELEMENT_NAME }"
|
20
23
|
|
24
|
+
# @param [Hash] attributes
|
25
|
+
# @option attributes [Symbol] :name Parameter name
|
26
|
+
# @option attributes [Symbol] :value Parameter value
|
21
27
|
def initialize( attributes = {} )
|
22
28
|
@name = attributes[ :name ]
|
23
29
|
@value = attributes[ :value ]
|
24
30
|
end
|
25
31
|
|
26
|
-
|
32
|
+
# @return [REXML::Element]
|
33
|
+
def to_xml_element
|
27
34
|
xml_element = REXML::Element.new( self.class::XML_ELEMENT_NAME )
|
28
|
-
xml_element.add_element( NAME_ELEMENT_NAME ).add_text(
|
29
|
-
xml_element.add_element( VALUE_ELEMENT_NAME ).add_text(
|
35
|
+
xml_element.add_element( self.class::NAME_ELEMENT_NAME ).add_text( @name )
|
36
|
+
xml_element.add_element( self.class::VALUE_ELEMENT_NAME ).add_text( @value )
|
30
37
|
xml_element
|
31
38
|
end
|
32
39
|
|
33
|
-
|
40
|
+
# @return [String]
|
41
|
+
def to_xml
|
34
42
|
self.to_xml_element.to_s
|
35
43
|
end
|
36
44
|
|
37
|
-
|
38
|
-
|
45
|
+
# @return [String]
|
46
|
+
def inspect
|
47
|
+
"#{ @name }: #{ @value }"
|
39
48
|
end
|
40
49
|
|
41
50
|
# Returns a string representation of the parameter of the form
|
42
51
|
# name: value
|
52
|
+
#
|
53
|
+
# @return [String]
|
43
54
|
def to_s
|
44
55
|
self.inspect
|
45
56
|
end
|
46
57
|
|
58
|
+
# @param [REXML::Element] parameter_xml_element
|
59
|
+
# @return [Parameter]
|
47
60
|
def self.from_xml_element( parameter_xml_element ) # :nodoc:
|
48
|
-
self.new( :name => RCAP.xpath_text( parameter_xml_element, NAME_XPATH, Alert::XMLNS ),
|
49
|
-
|
61
|
+
self.new( :name => RCAP.xpath_text( parameter_xml_element, self::NAME_XPATH, Alert::XMLNS ),
|
62
|
+
:value => RCAP.xpath_text( parameter_xml_element, self::VALUE_XPATH, Alert::XMLNS ))
|
50
63
|
end
|
51
64
|
|
52
65
|
# Two parameters are equivalent if they have the same name and value.
|
66
|
+
#
|
67
|
+
# @param [Parameter] other
|
68
|
+
# @return [true, false]
|
53
69
|
def ==( other )
|
54
|
-
[
|
70
|
+
[ @name, @value ] == [ other.name, other.value ]
|
55
71
|
end
|
56
72
|
|
57
|
-
|
58
|
-
|
73
|
+
# @return [Hash]
|
74
|
+
def to_h
|
75
|
+
RCAP.attribute_values_to_hash(
|
76
|
+
[ @name, @value ])
|
59
77
|
end
|
60
78
|
|
61
|
-
|
79
|
+
# @param [Hash] hash
|
80
|
+
# @return [Parameter]
|
81
|
+
def self.from_h( hash )
|
62
82
|
key = hash.keys.first
|
63
83
|
self.new( :name => key, :value => hash[ key ])
|
64
84
|
end
|
data/lib/rcap/cap_1_2/point.rb
CHANGED
@@ -11,13 +11,18 @@ module RCAP
|
|
11
11
|
MAX_LATTITUDE = 90
|
12
12
|
MIN_LATTITUDE= -90
|
13
13
|
|
14
|
+
# @return [Numeric]
|
14
15
|
attr_accessor( :lattitude )
|
16
|
+
# @return [Numeric]
|
15
17
|
attr_accessor( :longitude )
|
16
18
|
|
17
19
|
validates_numericality_of( :lattitude, :longitude )
|
18
20
|
validates_inclusion_of( :lattitude, :in => MIN_LATTITUDE..MAX_LATTITUDE )
|
19
21
|
validates_inclusion_of( :longitude, :in => MIN_LONGITUDE..MAX_LONGITUDE)
|
20
22
|
|
23
|
+
# @param [Hash] attributes
|
24
|
+
# @option attributes [Numeric] :lattitude
|
25
|
+
# @option attributes [Numeric] :longitude
|
21
26
|
def initialize( attributes = {} )
|
22
27
|
@lattitude = attributes[ :lattitude ]
|
23
28
|
@longitude = attributes[ :longitude ]
|
@@ -25,29 +30,38 @@ module RCAP
|
|
25
30
|
|
26
31
|
# Returns a string representation of the point of the form
|
27
32
|
# lattitude,longitude
|
33
|
+
#
|
34
|
+
# @return [String]
|
28
35
|
def to_s
|
29
|
-
"#{
|
36
|
+
"#{ @lattitude },#{ @longitude }"
|
30
37
|
end
|
31
38
|
|
32
|
-
|
39
|
+
# @return [String]
|
40
|
+
def inspect
|
33
41
|
'('+self.to_s+')'
|
34
42
|
end
|
35
43
|
|
36
44
|
# Two points are equivalent if they have the same lattitude and longitude
|
45
|
+
#
|
46
|
+
# @param [Point] other
|
47
|
+
# @return [true, false]
|
37
48
|
def ==( other )
|
38
|
-
[
|
49
|
+
[ @lattitude, @longitude ] == [ other.lattitude, other.longitude ]
|
39
50
|
end
|
40
51
|
|
41
|
-
LATTITUDE_KEY = 'lattitude'
|
42
|
-
LONGITUDE_KEY = 'longitude'
|
52
|
+
LATTITUDE_KEY = 'lattitude'
|
53
|
+
LONGITUDE_KEY = 'longitude'
|
43
54
|
|
44
|
-
|
55
|
+
# @return [Hash]
|
56
|
+
def to_h
|
45
57
|
RCAP.attribute_values_to_hash(
|
46
|
-
[ LATTITUDE_KEY,
|
47
|
-
[ LONGITUDE_KEY,
|
58
|
+
[ LATTITUDE_KEY, @lattitude ],
|
59
|
+
[ LONGITUDE_KEY, @longitude ])
|
48
60
|
end
|
49
61
|
|
50
|
-
|
62
|
+
# @param [Hash] point_hash
|
63
|
+
# @return [Point]
|
64
|
+
def self.from_h( point_hash )
|
51
65
|
self.new( :lattitude => point_hash[ LATTITUDE_KEY ], :longitude => point_hash[ LONGITUDE_KEY ])
|
52
66
|
end
|
53
67
|
end
|
data/lib/rcap/cap_1_2/polygon.rb
CHANGED
@@ -6,25 +6,28 @@ module RCAP
|
|
6
6
|
class Polygon
|
7
7
|
include Validation
|
8
8
|
|
9
|
-
# Collection of Point objects.
|
9
|
+
# @return [Array<Point>] Collection of {Point} objects.
|
10
10
|
attr_reader( :points )
|
11
11
|
|
12
12
|
validates_collection_of( :points )
|
13
13
|
validates_length_of( :points, :minimum => 4 )
|
14
14
|
validates_equality_of_first_and_last( :points )
|
15
15
|
|
16
|
-
XML_ELEMENT_NAME = 'polygon'
|
17
|
-
XPATH = "cap:#{ XML_ELEMENT_NAME }"
|
18
|
-
|
16
|
+
XML_ELEMENT_NAME = 'polygon'
|
17
|
+
XPATH = "cap:#{ XML_ELEMENT_NAME }"
|
18
|
+
|
19
|
+
# @param [Hash] attributes
|
20
|
+
# @option attributes [Array<Point>] :points Collection of {Point} objects
|
19
21
|
def initialize( attributes = {})
|
20
22
|
@points = Array( attributes[ :points ])
|
21
23
|
end
|
22
24
|
|
23
|
-
# Creates a new Point object and adds it to the points array.
|
24
|
-
#
|
25
|
+
# Creates a new Point object and adds it to the points array.
|
26
|
+
#
|
27
|
+
# @see Point#initialize
|
25
28
|
def add_point( point_attributes = {})
|
26
29
|
point = Point.new( point_attributes )
|
27
|
-
|
30
|
+
@points << point
|
28
31
|
point
|
29
32
|
end
|
30
33
|
|
@@ -35,26 +38,37 @@ module RCAP
|
|
35
38
|
@points.join( ' ' )
|
36
39
|
end
|
37
40
|
|
38
|
-
|
41
|
+
# @return [String]
|
42
|
+
def inspect
|
39
43
|
"(#{ @points.map{|point| point.inspect}.join(', ')})"
|
40
44
|
end
|
41
45
|
|
42
|
-
|
46
|
+
# @return [REXML::Element]
|
47
|
+
def to_xml_element
|
43
48
|
xml_element = REXML::Element.new( XML_ELEMENT_NAME )
|
44
49
|
xml_element.add_text( self.to_s )
|
45
50
|
xml_element
|
46
51
|
end
|
47
52
|
|
53
|
+
# @return [String]
|
54
|
+
def to_xml
|
55
|
+
self.to_xml_element.to_s
|
56
|
+
end
|
57
|
+
|
48
58
|
# Two polygons are equivalent if their collection of points is equivalent.
|
59
|
+
#
|
60
|
+
# @return [true,false]
|
49
61
|
def ==( other )
|
50
|
-
|
62
|
+
@points == other.points
|
51
63
|
end
|
52
64
|
|
53
|
-
|
65
|
+
# @return [Array<Array(Numeric,Numeric)>]
|
66
|
+
def self.parse_polygon_string( polygon_string )
|
54
67
|
polygon_string.split( ' ' ).map{ |coordinate_string| coordinate_string.split( ',' ).map{|coordinate| coordinate.to_f }}
|
55
68
|
end
|
56
69
|
|
57
|
-
|
70
|
+
# @return [Polygon]
|
71
|
+
def self.from_xml_element( polygon_xml_element )
|
58
72
|
if polygon_xml_element.text && !polygon_xml_element.text.empty?
|
59
73
|
coordinates = self.parse_polygon_string( polygon_xml_element.text )
|
60
74
|
points = coordinates.map{ |lattitude, longitude| Point.new( :lattitude => lattitude, :longitude => longitude )}
|
@@ -64,22 +78,25 @@ module RCAP
|
|
64
78
|
end
|
65
79
|
end
|
66
80
|
|
67
|
-
|
68
|
-
def to_yaml( options = {} )
|
69
|
-
|
81
|
+
# @return [String]
|
82
|
+
def to_yaml( options = {} )
|
83
|
+
@points.map{ |point| [ point.lattitude, point.longitude ]}.to_yaml( options )
|
70
84
|
end
|
71
85
|
|
72
|
-
|
86
|
+
# @return [Polygon]
|
87
|
+
def self.from_yaml_data( polygon_yaml_data )
|
73
88
|
self.new( :points => Array( polygon_yaml_data ).map{ |lattitude, longitude| Point.new( :lattitude => lattitude, :longitude => longitude )})
|
74
89
|
end
|
75
90
|
|
76
|
-
POINTS_KEY = 'points'
|
91
|
+
POINTS_KEY = 'points'
|
77
92
|
|
78
|
-
|
79
|
-
|
93
|
+
# @return [Hash]
|
94
|
+
def to_h
|
95
|
+
{ POINTS_KEY => @points.map{ |point| point.to_h }}
|
80
96
|
end
|
81
97
|
|
82
|
-
|
98
|
+
# @return [Polygon]
|
99
|
+
def self.from_h( polygon_hash )
|
83
100
|
self.new( :points => polygon_hash[ POINTS_KEY ].map{ |point_hash| Point.from_h( point_hash )})
|
84
101
|
end
|
85
102
|
end
|
@@ -3,41 +3,49 @@ module RCAP
|
|
3
3
|
|
4
4
|
# A Resource object is valid if
|
5
5
|
# * it has a resource description
|
6
|
+
# * it has a mime_type
|
6
7
|
class Resource
|
7
8
|
include Validation
|
8
9
|
|
9
|
-
# Resource
|
10
|
+
# @return [String] Resource description
|
10
11
|
attr_accessor( :resource_desc )
|
11
|
-
# MIME type as described in RFC 2046
|
12
|
+
# @return [String] MIME type as described in RFC 2046
|
12
13
|
attr_accessor( :mime_type )
|
13
|
-
# Expressed in bytes
|
14
|
+
# @return [Integer] Expressed in bytes
|
14
15
|
attr_accessor( :size )
|
15
|
-
# Resource location
|
16
|
+
# @return [String] Resource location
|
16
17
|
attr_accessor( :uri )
|
17
|
-
# Dereferenced URI - contents of URI Base64 encoded
|
18
|
+
# @return [String] Dereferenced URI - contents of URI Base64 encoded
|
18
19
|
attr_accessor( :deref_uri )
|
19
|
-
# SHA-1 hash of contents of resource
|
20
|
+
# @return [String] SHA-1 hash of contents of resource
|
20
21
|
attr_accessor( :digest )
|
21
22
|
|
22
23
|
validates_presence_of( :resource_desc )
|
23
24
|
validates_presence_of( :mime_type )
|
24
25
|
|
25
|
-
XML_ELEMENT_NAME = 'resource'
|
26
|
-
MIME_TYPE_ELEMENT_NAME = 'mimeType'
|
27
|
-
SIZE_ELEMENT_NAME = 'size'
|
28
|
-
URI_ELEMENT_NAME = 'uri'
|
29
|
-
DEREF_URI_ELEMENT_NAME = 'derefUri'
|
30
|
-
DIGEST_ELEMENT_NAME = 'digest'
|
31
|
-
RESOURCE_DESC_ELEMENT_NAME = 'resourceDesc'
|
32
|
-
|
33
|
-
XPATH = "cap:#{ XML_ELEMENT_NAME }"
|
34
|
-
MIME_TYPE_XPATH = "cap:#{ MIME_TYPE_ELEMENT_NAME }"
|
35
|
-
SIZE_XPATH = "cap:#{ SIZE_ELEMENT_NAME }"
|
36
|
-
URI_XPATH = "cap:#{ URI_ELEMENT_NAME }"
|
37
|
-
DEREF_URI_XPATH = "cap:#{ DEREF_URI_ELEMENT_NAME }"
|
38
|
-
DIGEST_XPATH = "cap:#{ DIGEST_ELEMENT_NAME }"
|
39
|
-
RESOURCE_DESC_XPATH = "cap:#{ RESOURCE_DESC_ELEMENT_NAME }"
|
40
|
-
|
26
|
+
XML_ELEMENT_NAME = 'resource'
|
27
|
+
MIME_TYPE_ELEMENT_NAME = 'mimeType'
|
28
|
+
SIZE_ELEMENT_NAME = 'size'
|
29
|
+
URI_ELEMENT_NAME = 'uri'
|
30
|
+
DEREF_URI_ELEMENT_NAME = 'derefUri'
|
31
|
+
DIGEST_ELEMENT_NAME = 'digest'
|
32
|
+
RESOURCE_DESC_ELEMENT_NAME = 'resourceDesc'
|
33
|
+
|
34
|
+
XPATH = "cap:#{ XML_ELEMENT_NAME }"
|
35
|
+
MIME_TYPE_XPATH = "cap:#{ MIME_TYPE_ELEMENT_NAME }"
|
36
|
+
SIZE_XPATH = "cap:#{ SIZE_ELEMENT_NAME }"
|
37
|
+
URI_XPATH = "cap:#{ URI_ELEMENT_NAME }"
|
38
|
+
DEREF_URI_XPATH = "cap:#{ DEREF_URI_ELEMENT_NAME }"
|
39
|
+
DIGEST_XPATH = "cap:#{ DIGEST_ELEMENT_NAME }"
|
40
|
+
RESOURCE_DESC_XPATH = "cap:#{ RESOURCE_DESC_ELEMENT_NAME }"
|
41
|
+
|
42
|
+
# @param [Hash{Symbol => Object}] attributes
|
43
|
+
# @option attributes [String] :mime_type
|
44
|
+
# @option attributes [Numeric] :size Size in bytes
|
45
|
+
# @option attributes [String] :uri
|
46
|
+
# @option attributes [String] :deref_uri
|
47
|
+
# @option attributes [String] :digest
|
48
|
+
# @option attributes [String] :resource_desc
|
41
49
|
def initialize( attributes = {} )
|
42
50
|
@mime_type = attributes[ :mime_type ]
|
43
51
|
@size = attributes[ :size ]
|
@@ -47,57 +55,83 @@ module RCAP
|
|
47
55
|
@resource_desc = attributes[ :resource_desc ]
|
48
56
|
end
|
49
57
|
|
50
|
-
|
58
|
+
# @return [REXML::Element]
|
59
|
+
def to_xml_element
|
51
60
|
xml_element = REXML::Element.new( XML_ELEMENT_NAME )
|
52
|
-
xml_element.add_element( RESOURCE_DESC_ELEMENT_NAME ).add_text(
|
53
|
-
xml_element.add_element( MIME_TYPE_ELEMENT_NAME ).add_text(
|
54
|
-
xml_element.add_element( SIZE_ELEMENT_NAME ).add_text(
|
55
|
-
xml_element.add_element( URI_ELEMENT_NAME ).add_text(
|
56
|
-
xml_element.add_element( DEREF_URI_ELEMENT_NAME ).add_text(
|
57
|
-
xml_element.add_element( DIGEST_ELEMENT_NAME ).add_text(
|
61
|
+
xml_element.add_element( RESOURCE_DESC_ELEMENT_NAME ).add_text( @resource_desc )
|
62
|
+
xml_element.add_element( MIME_TYPE_ELEMENT_NAME ).add_text( @mime_type ) if @mime_type
|
63
|
+
xml_element.add_element( SIZE_ELEMENT_NAME ).add_text( @size.to_s ) if @size
|
64
|
+
xml_element.add_element( URI_ELEMENT_NAME ).add_text( @uri ) if @uri
|
65
|
+
xml_element.add_element( DEREF_URI_ELEMENT_NAME ).add_text( @deref_uri ) if @deref_uri
|
66
|
+
xml_element.add_element( DIGEST_ELEMENT_NAME ).add_text( @digest ) if @digest
|
58
67
|
xml_element
|
59
68
|
end
|
60
69
|
|
61
70
|
# If size is defined returns the size in kilobytes
|
71
|
+
# @return [Float]
|
62
72
|
def size_in_kb
|
63
|
-
if
|
64
|
-
|
73
|
+
if @size
|
74
|
+
@size.to_f/1024
|
65
75
|
end
|
66
76
|
end
|
67
77
|
|
68
|
-
|
78
|
+
# @return [String]
|
79
|
+
def to_xml
|
69
80
|
self.to_xml_element.to_s
|
70
81
|
end
|
71
82
|
|
72
|
-
|
73
|
-
|
83
|
+
# @return [String]
|
84
|
+
def inspect
|
85
|
+
[ @resource_desc, @uri, @mime_type, @size ? format( "%.1fKB", @size_in_kb ) : nil ].compact.join(' - ')
|
74
86
|
end
|
75
87
|
|
76
88
|
# Returns a string representation of the resource of the form
|
77
89
|
# resource_desc
|
90
|
+
#
|
91
|
+
# @return [String]
|
78
92
|
def to_s
|
79
|
-
|
93
|
+
@resource_desc
|
80
94
|
end
|
81
95
|
|
82
96
|
# Retrieves the content at uri and stores it in deref_uri as Base64 encoded text. It will also
|
83
|
-
# calculate the digest on the encoded data using SHA1 and set the size.
|
97
|
+
# calculate the {#digest} on the encoded data using SHA1 and set the {#size}.
|
84
98
|
#
|
85
99
|
# This uses the open-uri[http://ruby-doc.org/stdlib/libdoc/open-uri/rdoc/index.html] Ruby API
|
86
|
-
# to open and read the content.
|
100
|
+
# to open and read the content. This method may throw an exception due to any number of network
|
101
|
+
# related issue so please handle accordingly.
|
102
|
+
#
|
103
|
+
# Returns an array containing the size (in bytes) and SHA-1 hash.
|
104
|
+
#
|
105
|
+
# @return [Array(Integer,String)]
|
87
106
|
def dereference_uri!
|
88
107
|
content = URI.parse( self.uri ).read
|
89
108
|
@deref_uri = Base64.encode64( content )
|
90
109
|
self.calculate_hash_and_size
|
91
110
|
end
|
92
111
|
|
112
|
+
# Calculates the SHA-1 hash and size of the contents of {#deref_uri}.
|
113
|
+
# Returns an array containing the size (in bytes) and SHA-1 hash if
|
114
|
+
# {#deref_uri} is present otherwise returns nil.
|
115
|
+
#
|
116
|
+
# @return [nil,Array(Integer,String)]
|
93
117
|
def calculate_hash_and_size
|
94
118
|
if @deref_uri
|
95
119
|
@digest = Digest::SHA1.hexdigest( @deref_uri )
|
96
120
|
@size = @deref_uri.bytesize
|
121
|
+
[ @size, @digest ]
|
97
122
|
end
|
98
123
|
end
|
99
124
|
|
100
|
-
|
125
|
+
# The decoded contents of {#deref_uri} if present otherwise nil.
|
126
|
+
#
|
127
|
+
# @return [nil,String]
|
128
|
+
def decoded_deref_uri
|
129
|
+
Base64.decode64( @deref_uri ) if @deref_uri
|
130
|
+
end
|
131
|
+
|
132
|
+
# @param [REXML::Element] resource_xml_element
|
133
|
+
# @return [Resource]
|
134
|
+
def self.from_xml_element( resource_xml_element )
|
101
135
|
resource = self.new( :resource_desc => RCAP.xpath_text( resource_xml_element, RESOURCE_DESC_XPATH, Alert::XMLNS ),
|
102
136
|
:uri => RCAP.xpath_text( resource_xml_element, URI_XPATH, Alert::XMLNS ),
|
103
137
|
:mime_type => RCAP.xpath_text( resource_xml_element, MIME_TYPE_XPATH, Alert::XMLNS ),
|
@@ -106,25 +140,28 @@ module RCAP
|
|
106
140
|
:digest => RCAP.xpath_text( resource_xml_element, DIGEST_XPATH, Alert::XMLNS ))
|
107
141
|
end
|
108
142
|
|
109
|
-
RESOURCE_DESC_YAML = "Resource Description"
|
110
|
-
URI_YAML = "URI"
|
111
|
-
MIME_TYPE_YAML = "Mime Type"
|
112
|
-
DEREF_URI_YAML = "Derefrenced URI Data"
|
113
|
-
SIZE_YAML = "Size"
|
114
|
-
DIGEST_YAML = "Digest"
|
143
|
+
RESOURCE_DESC_YAML = "Resource Description"
|
144
|
+
URI_YAML = "URI"
|
145
|
+
MIME_TYPE_YAML = "Mime Type"
|
146
|
+
DEREF_URI_YAML = "Derefrenced URI Data"
|
147
|
+
SIZE_YAML = "Size"
|
148
|
+
DIGEST_YAML = "Digest"
|
115
149
|
|
116
|
-
|
150
|
+
# @param [Hash] options
|
151
|
+
# @return [String]
|
152
|
+
def to_yaml( options = {} )
|
117
153
|
RCAP.attribute_values_to_hash(
|
118
|
-
[ RESOURCE_DESC_YAML,
|
119
|
-
[ URI_YAML,
|
120
|
-
[ MIME_TYPE_YAML,
|
121
|
-
[ DEREF_URI_YAML,
|
122
|
-
[ SIZE_YAML,
|
123
|
-
[ DIGEST_YAML,
|
124
|
-
).to_yaml( options )
|
154
|
+
[ RESOURCE_DESC_YAML, @resource_desc ],
|
155
|
+
[ URI_YAML, @uri ],
|
156
|
+
[ MIME_TYPE_YAML, @mime_type ],
|
157
|
+
[ DEREF_URI_YAML, @deref_uri ],
|
158
|
+
[ SIZE_YAML, @size ],
|
159
|
+
[ DIGEST_YAML, @digest ]).to_yaml( options )
|
125
160
|
end
|
126
161
|
|
127
|
-
|
162
|
+
# @param [Hash] resource_yaml_data
|
163
|
+
# @return [Resource]
|
164
|
+
def self.from_yaml_data( resource_yaml_data )
|
128
165
|
self.new(
|
129
166
|
:resource_desc => reource_yaml_data[ RESOURCE_DESC_YAML ],
|
130
167
|
:uri => reource_yaml_data[ URI_YAML ],
|
@@ -135,24 +172,27 @@ module RCAP
|
|
135
172
|
)
|
136
173
|
end
|
137
174
|
|
138
|
-
RESOURCE_DESC_KEY = 'resource_desc'
|
139
|
-
URI_KEY = 'uri'
|
140
|
-
MIME_TYPE_KEY = 'mime_type'
|
141
|
-
DEREF_URI_KEY = 'deref_uri'
|
142
|
-
SIZE_KEY = 'size'
|
143
|
-
DIGEST_KEY = 'digest'
|
175
|
+
RESOURCE_DESC_KEY = 'resource_desc'
|
176
|
+
URI_KEY = 'uri'
|
177
|
+
MIME_TYPE_KEY = 'mime_type'
|
178
|
+
DEREF_URI_KEY = 'deref_uri'
|
179
|
+
SIZE_KEY = 'size'
|
180
|
+
DIGEST_KEY = 'digest'
|
144
181
|
|
145
|
-
|
182
|
+
# @return [Hash]
|
183
|
+
def to_h
|
146
184
|
RCAP.attribute_values_to_hash(
|
147
|
-
[ RESOURCE_DESC_KEY,
|
148
|
-
[ URI_KEY,
|
149
|
-
[ MIME_TYPE_KEY,
|
150
|
-
[ DEREF_URI_KEY,
|
151
|
-
[ SIZE_KEY,
|
152
|
-
[ DIGEST_KEY,
|
185
|
+
[ RESOURCE_DESC_KEY, @resource_desc ],
|
186
|
+
[ URI_KEY, @uri],
|
187
|
+
[ MIME_TYPE_KEY, @mime_type],
|
188
|
+
[ DEREF_URI_KEY, @deref_uri],
|
189
|
+
[ SIZE_KEY, @size ],
|
190
|
+
[ DIGEST_KEY, @digest ])
|
153
191
|
end
|
154
192
|
|
155
|
-
|
193
|
+
# @param [Hash] resource_hash
|
194
|
+
# @return [Resource]
|
195
|
+
def self.from_h( resource_hash )
|
156
196
|
self.new(
|
157
197
|
:resource_desc => resource_hash[ RESOURCE_DESC_KEY ],
|
158
198
|
:uri => resource_hash[ URI_KEY ],
|