rcap 2.4.1 → 2.7.3

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.
Files changed (99) hide show
  1. checksums.yaml +5 -5
  2. data/.ruby-version +1 -0
  3. data/CHANGELOG.md +18 -0
  4. data/README.md +1 -0
  5. data/lib/rcap.rb +3 -1
  6. data/lib/rcap/alert.rb +30 -29
  7. data/lib/rcap/base/alert.rb +208 -205
  8. data/lib/rcap/base/area.rb +95 -91
  9. data/lib/rcap/base/circle.rb +45 -34
  10. data/lib/rcap/base/event_code.rb +2 -0
  11. data/lib/rcap/base/geocode.rb +2 -0
  12. data/lib/rcap/base/info.rb +273 -272
  13. data/lib/rcap/base/parameter.rb +29 -28
  14. data/lib/rcap/base/point.rb +26 -24
  15. data/lib/rcap/base/polygon.rb +43 -35
  16. data/lib/rcap/base/resource.rb +65 -65
  17. data/lib/rcap/cap_1_0/alert.rb +85 -86
  18. data/lib/rcap/cap_1_0/area.rb +2 -2
  19. data/lib/rcap/cap_1_0/circle.rb +2 -1
  20. data/lib/rcap/cap_1_0/event_code.rb +3 -1
  21. data/lib/rcap/cap_1_0/geocode.rb +3 -1
  22. data/lib/rcap/cap_1_0/info.rb +3 -3
  23. data/lib/rcap/cap_1_0/parameter.rb +13 -13
  24. data/lib/rcap/cap_1_0/point.rb +2 -1
  25. data/lib/rcap/cap_1_0/polygon.rb +3 -3
  26. data/lib/rcap/cap_1_0/resource.rb +2 -3
  27. data/lib/rcap/cap_1_1/alert.rb +6 -6
  28. data/lib/rcap/cap_1_1/area.rb +2 -2
  29. data/lib/rcap/cap_1_1/circle.rb +2 -1
  30. data/lib/rcap/cap_1_1/event_code.rb +3 -1
  31. data/lib/rcap/cap_1_1/geocode.rb +3 -1
  32. data/lib/rcap/cap_1_1/info.rb +125 -132
  33. data/lib/rcap/cap_1_1/parameter.rb +2 -3
  34. data/lib/rcap/cap_1_1/point.rb +2 -1
  35. data/lib/rcap/cap_1_1/polygon.rb +3 -3
  36. data/lib/rcap/cap_1_1/resource.rb +37 -38
  37. data/lib/rcap/cap_1_2/alert.rb +6 -6
  38. data/lib/rcap/cap_1_2/area.rb +2 -2
  39. data/lib/rcap/cap_1_2/circle.rb +2 -1
  40. data/lib/rcap/cap_1_2/event_code.rb +3 -1
  41. data/lib/rcap/cap_1_2/geocode.rb +3 -1
  42. data/lib/rcap/cap_1_2/info.rb +120 -123
  43. data/lib/rcap/cap_1_2/parameter.rb +2 -3
  44. data/lib/rcap/cap_1_2/point.rb +2 -1
  45. data/lib/rcap/cap_1_2/polygon.rb +4 -4
  46. data/lib/rcap/cap_1_2/resource.rb +38 -38
  47. data/lib/rcap/config.rb +5 -3
  48. data/lib/rcap/custom_validators.rb +75 -78
  49. data/lib/rcap/extensions/array.rb +3 -1
  50. data/lib/rcap/extensions/date.rb +3 -1
  51. data/lib/rcap/extensions/date_time.rb +5 -2
  52. data/lib/rcap/extensions/float.rb +2 -0
  53. data/lib/rcap/extensions/integer.rb +7 -0
  54. data/lib/rcap/extensions/nil_class.rb +2 -0
  55. data/lib/rcap/extensions/string.rb +6 -4
  56. data/lib/rcap/extensions/time.rb +5 -3
  57. data/lib/rcap/formatters/yaml.rb +5 -0
  58. data/lib/rcap/info.rb +6 -5
  59. data/lib/rcap/utilities.rb +27 -30
  60. data/lib/rcap/validation.rb +22 -21
  61. data/lib/rcap/version.rb +3 -1
  62. data/rcap.gemspec +5 -5
  63. data/spec/alert_spec.rb +141 -141
  64. data/spec/cap_1_0/alert_spec.rb +92 -94
  65. data/spec/cap_1_0/area_spec.rb +86 -86
  66. data/spec/cap_1_0/circle_spec.rb +48 -39
  67. data/spec/cap_1_0/event_code_spec.rb +15 -15
  68. data/spec/cap_1_0/geocode_spec.rb +16 -16
  69. data/spec/cap_1_0/info_spec.rb +175 -177
  70. data/spec/cap_1_0/parameter_spec.rb +27 -27
  71. data/spec/cap_1_0/point_spec.rb +18 -18
  72. data/spec/cap_1_0/polygon_spec.rb +43 -41
  73. data/spec/cap_1_0/resource_spec.rb +63 -64
  74. data/spec/cap_1_1/alert_spec.rb +107 -109
  75. data/spec/cap_1_1/area_spec.rb +90 -90
  76. data/spec/cap_1_1/circle_spec.rb +43 -34
  77. data/spec/cap_1_1/event_code_spec.rb +15 -16
  78. data/spec/cap_1_1/geocode_spec.rb +16 -16
  79. data/spec/cap_1_1/info_spec.rb +194 -196
  80. data/spec/cap_1_1/parameter_spec.rb +17 -17
  81. data/spec/cap_1_1/point_spec.rb +18 -18
  82. data/spec/cap_1_1/polygon_spec.rb +43 -41
  83. data/spec/cap_1_1/resource_spec.rb +106 -107
  84. data/spec/cap_1_2/alert_spec.rb +98 -99
  85. data/spec/cap_1_2/area_spec.rb +90 -90
  86. data/spec/cap_1_2/circle_spec.rb +52 -43
  87. data/spec/cap_1_2/event_code_spec.rb +19 -20
  88. data/spec/cap_1_2/geocode_spec.rb +20 -20
  89. data/spec/cap_1_2/info_spec.rb +196 -198
  90. data/spec/cap_1_2/parameter_spec.rb +19 -19
  91. data/spec/cap_1_2/point_spec.rb +21 -21
  92. data/spec/cap_1_2/polygon_spec.rb +55 -47
  93. data/spec/cap_1_2/resource_spec.rb +96 -97
  94. data/spec/extensions_spec.rb +29 -29
  95. data/spec/info_spec.rb +15 -15
  96. data/spec/spec_helper.rb +3 -3
  97. data/spec/validations_spec.rb +73 -73
  98. metadata +12 -11
  99. data/lib/rcap/extensions/fixnum.rb +0 -5
@@ -1,46 +1,48 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module Base
3
5
  class Parameter
4
6
  include Validation
5
7
 
6
- validates_presence_of( :name, :value )
8
+ validates_presence_of(:name)
7
9
 
8
10
  # @return [String]
9
- attr_accessor( :name )
11
+ attr_accessor(:name)
10
12
  # @return [String]
11
- attr_accessor( :value )
13
+ attr_accessor(:value)
12
14
 
13
- XML_ELEMENT_NAME = "parameter"
14
- NAME_ELEMENT_NAME = "valueName"
15
- VALUE_ELEMENT_NAME = "value"
15
+ XML_ELEMENT_NAME = 'parameter'
16
+ NAME_ELEMENT_NAME = 'valueName'
17
+ VALUE_ELEMENT_NAME = 'value'
16
18
 
17
- XPATH = "cap:#{ XML_ELEMENT_NAME }"
18
- NAME_XPATH = "cap:#{ NAME_ELEMENT_NAME }"
19
- VALUE_XPATH = "cap:#{ VALUE_ELEMENT_NAME }"
19
+ XPATH = "cap:#{XML_ELEMENT_NAME}"
20
+ NAME_XPATH = "cap:#{NAME_ELEMENT_NAME}"
21
+ VALUE_XPATH = "cap:#{VALUE_ELEMENT_NAME}"
20
22
 
21
23
  # @param [Hash] attributes
22
24
  # @option attributes [Symbol] :name Parameter name
23
25
  # @option attributes [Symbol] :value Parameter value
24
26
  def initialize
25
- yield( self ) if block_given?
27
+ yield(self) if block_given?
26
28
  end
27
29
 
28
30
  # @return [REXML::Element]
29
31
  def to_xml_element
30
- xml_element = REXML::Element.new( self.class::XML_ELEMENT_NAME )
31
- xml_element.add_element( self.class::NAME_ELEMENT_NAME ).add_text( @name )
32
- xml_element.add_element( self.class::VALUE_ELEMENT_NAME ).add_text( @value )
32
+ xml_element = REXML::Element.new(self.class::XML_ELEMENT_NAME)
33
+ xml_element.add_element(self.class::NAME_ELEMENT_NAME).add_text(@name)
34
+ xml_element.add_element(self.class::VALUE_ELEMENT_NAME).add_text(@value)
33
35
  xml_element
34
36
  end
35
37
 
36
38
  # @return [String]
37
39
  def to_xml
38
- self.to_xml_element.to_s
40
+ to_xml_element.to_s
39
41
  end
40
42
 
41
43
  # @return [String]
42
44
  def inspect
43
- "#{ @name }: #{ @value }"
45
+ "#{@name}: #{@value}"
44
46
  end
45
47
 
46
48
  # Returns a string representation of the parameter of the form
@@ -48,41 +50,40 @@ module RCAP
48
50
  #
49
51
  # @return [String]
50
52
  def to_s
51
- self.inspect
53
+ inspect
52
54
  end
53
55
 
54
56
  # Two parameters are equivalent if they have the same name and value.
55
57
  #
56
58
  # @param [Parameter] other
57
59
  # @return [true, false]
58
- def ==( other )
59
- [ @name, @value ] == [ other.name, other.value ]
60
+ def ==(other)
61
+ [@name, @value] == [other.name, other.value]
60
62
  end
61
63
 
62
64
  # @param [REXML::Element] parameter_xml_element
63
65
  # @return [Parameter]
64
- def self.from_xml_element( parameter_xml_element )
65
- self.new do |parameter|
66
- parameter.name = RCAP.xpath_text( parameter_xml_element, self::NAME_XPATH, parameter.xmlns )
67
- parameter.value = RCAP.xpath_text( parameter_xml_element, self::VALUE_XPATH, parameter.xmlns )
66
+ def self.from_xml_element(parameter_xml_element)
67
+ new do |parameter|
68
+ parameter.name = RCAP.xpath_text(parameter_xml_element, self::NAME_XPATH, parameter.xmlns)
69
+ parameter.value = RCAP.xpath_text(parameter_xml_element, self::VALUE_XPATH, parameter.xmlns)
68
70
  end
69
71
  end
70
72
 
71
73
  # @return [Hash]
72
74
  def to_h
73
- RCAP.attribute_values_to_hash( [ @name, @value ])
75
+ RCAP.attribute_values_to_hash([@name, @value])
74
76
  end
75
77
 
76
78
  # @param [Hash] hash
77
79
  # @return [Parameter]
78
- def self.from_h( hash )
80
+ def self.from_h(hash)
79
81
  key = hash.keys.first
80
- self.new do |parameter|
81
- parameter.name = RCAP.strip_if_given( key )
82
- parameter.value = RCAP.strip_if_given( hash[ key ])
82
+ new do |parameter|
83
+ parameter.name = RCAP.strip_if_given(key)
84
+ parameter.value = RCAP.strip_if_given(hash[key])
83
85
  end
84
86
  end
85
87
  end
86
88
  end
87
89
  end
88
-
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module Base
3
5
  class Point
@@ -6,22 +8,22 @@ module RCAP
6
8
  MAX_LONGITUDE = 180
7
9
  MIN_LONGITUDE = -180
8
10
  MAX_LATTITUDE = 90
9
- MIN_LATTITUDE= -90
11
+ MIN_LATTITUDE = -90
10
12
 
11
13
  # @return [Numeric]
12
- attr_accessor( :lattitude )
14
+ attr_accessor(:lattitude)
13
15
  # @return [Numeric]
14
- attr_accessor( :longitude )
16
+ attr_accessor(:longitude)
15
17
 
16
- validates_numericality_of( :lattitude, :longitude )
17
- validates_inclusion_of( :lattitude, :in => MIN_LATTITUDE..MAX_LATTITUDE )
18
- validates_inclusion_of( :longitude, :in => MIN_LONGITUDE..MAX_LONGITUDE)
18
+ validates_numericality_of(:lattitude, :longitude)
19
+ validates_inclusion_of(:lattitude, in: MIN_LATTITUDE..MAX_LATTITUDE)
20
+ validates_inclusion_of(:longitude, in: MIN_LONGITUDE..MAX_LONGITUDE)
19
21
 
20
22
  # @param [Hash] attributes
21
23
  # @option attributes [Numeric] :lattitude
22
24
  # @option attributes [Numeric] :longitude
23
25
  def initialize
24
- yield( self ) if block_given?
26
+ yield(self) if block_given?
25
27
  end
26
28
 
27
29
  # Returns a string representation of the point of the form
@@ -29,20 +31,20 @@ module RCAP
29
31
  #
30
32
  # @return [String]
31
33
  def to_s
32
- "#{ self.lattitude },#{ self.longitude }"
34
+ "#{lattitude},#{longitude}"
33
35
  end
34
36
 
35
37
  # @return [String]
36
38
  def inspect
37
- '('+self.to_s+')'
39
+ '(' + to_s + ')'
38
40
  end
39
41
 
40
42
  # Two points are equivalent if they have the same lattitude and longitude
41
43
  #
42
44
  # @param [Point] other
43
45
  # @return [true, false]
44
- def ==( other )
45
- [ self.lattitude, self.longitude ] == [ other.lattitude, other.longitude ]
46
+ def ==(other)
47
+ [lattitude, longitude] == [other.lattitude, other.longitude]
46
48
  end
47
49
 
48
50
  LATTITUDE_KEY = 'lattitude'
@@ -50,16 +52,16 @@ module RCAP
50
52
 
51
53
  # @return [Hash]
52
54
  def to_h
53
- RCAP.attribute_values_to_hash( [ LATTITUDE_KEY, self.lattitude ],
54
- [ LONGITUDE_KEY, self.longitude ])
55
+ RCAP.attribute_values_to_hash([LATTITUDE_KEY, lattitude],
56
+ [LONGITUDE_KEY, longitude])
55
57
  end
56
58
 
57
59
  # @param [Hash] point_hash
58
60
  # @return [Point]
59
- def self.from_h( point_hash )
60
- self.new do |point|
61
- point.lattitude = point_hash[ LATTITUDE_KEY ].to_f
62
- point.longitude = point_hash[ LONGITUDE_KEY ].to_f
61
+ def self.from_h(point_hash)
62
+ new do |point|
63
+ point.lattitude = point_hash[LATTITUDE_KEY].to_f
64
+ point.longitude = point_hash[LONGITUDE_KEY].to_f
63
65
  end
64
66
  end
65
67
 
@@ -68,18 +70,18 @@ module RCAP
68
70
 
69
71
  # @return [Array(Numeric, Numeric)]
70
72
  def to_a
71
- Array.new.tap do |array|
72
- array[ LATTITUDE_INDEX ] = self.lattitude
73
- array[ LONGITUDE_INDEX ] = self.longitude
73
+ [].tap do |array|
74
+ array[LATTITUDE_INDEX] = lattitude
75
+ array[LONGITUDE_INDEX] = longitude
74
76
  end
75
77
  end
76
78
 
77
79
  # @param [Array(Numeric, Numeric)] point_array
78
80
  # @return [Point]
79
- def self.from_a( point_array )
80
- self.new do |point|
81
- point.lattitude = point_array[ LATTITUDE_INDEX ].to_f
82
- point.longitude = point_array[ LONGITUDE_INDEX ].to_f
81
+ def self.from_a(point_array)
82
+ new do |point|
83
+ point.lattitude = point_array[LATTITUDE_INDEX].to_f
84
+ point.longitude = point_array[LONGITUDE_INDEX].to_f
83
85
  end
84
86
  end
85
87
  end
@@ -1,56 +1,64 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module Base
3
5
  class Polygon
4
6
  include Validation
5
7
 
6
8
  # @return [Array<Point>] Collection of {Point} objects
7
- attr_reader( :points )
9
+ attr_reader(:points)
8
10
 
9
- validates_collection_of( :points )
10
- validates_length_of( :points, :minimum => 3 )
11
- validates_equality_of_first_and_last( :points )
11
+ validates_collection_of(:points)
12
+ validates_length_of(:points, minimum: 3, allow_blank: true)
13
+ validates_equality_of_first_and_last(:points, allow_empty: true)
12
14
 
13
15
  XML_ELEMENT_NAME = 'polygon'
14
- XPATH = "cap:#{ XML_ELEMENT_NAME }"
16
+ XPATH = "cap:#{XML_ELEMENT_NAME}"
15
17
 
16
18
  # @param [Hash] attributes
17
19
  # @option attributes [Array<Point>] :points Collection of {Point} objects
18
20
  def initialize
19
- @points = []
20
- yield( self ) if block_given?
21
+ @points = []
22
+ yield(self) if block_given?
21
23
  end
22
24
 
23
25
  def add_point
24
- point = self.point_class.new
25
- yield( point ) if block_given?
26
- self.points << point
26
+ point = point_class.new
27
+ yield(point) if block_given?
28
+ points << point
27
29
  point
28
30
  end
29
31
 
32
+ # Returns GeoJSON representation of the polygon
33
+ def to_geojson
34
+ coordinates = @points.map { |point| [point.longitude, point.lattitude] }
35
+ { 'type' => 'Polygon', 'coordinates' => [coordinates] }.to_json
36
+ end
37
+
30
38
  # Returns a string representation of the polygon of the form
31
39
  # points[0] points[1] points[2] ...
32
40
  # where each point is formatted with Point#to_s
33
41
  def to_s
34
- @points.join( ' ' )
42
+ @points.join(' ')
35
43
  end
36
44
 
37
45
  # @return [String]
38
46
  def inspect
39
- "(#{ @points.map{|point| point.inspect}.join(', ')})"
47
+ "(#{@points.map(&:inspect).join(', ')})"
40
48
  end
41
49
 
42
50
  # @return [REXML::Element]
43
51
  def to_xml_element
44
- xml_element = REXML::Element.new( XML_ELEMENT_NAME )
45
- xml_element.add_text( self.to_s )
52
+ xml_element = REXML::Element.new(XML_ELEMENT_NAME)
53
+ xml_element.add_text(to_s)
46
54
  xml_element
47
55
  end
48
56
 
49
57
  # @return [Polygon]
50
- def self.from_xml_element( polygon_xml_element )
58
+ def self.from_xml_element(polygon_xml_element)
51
59
  if !polygon_xml_element.text.nil? && !polygon_xml_element.text.empty?
52
- coordinates = self.parse_polygon_string( polygon_xml_element.text )
53
- self.new do |polygon|
60
+ coordinates = parse_polygon_string(polygon_xml_element.text)
61
+ new do |polygon|
54
62
  coordinates.each do |lattitude, longitude|
55
63
  polygon.add_point do |point|
56
64
  point.lattitude = lattitude.to_f
@@ -59,31 +67,31 @@ module RCAP
59
67
  end
60
68
  end
61
69
  else
62
- self.new
70
+ new
63
71
  end
64
72
  end
65
73
 
66
74
  # @return [String]
67
75
  def to_xml
68
- self.to_xml_element.to_s
76
+ to_xml_element.to_s
69
77
  end
70
78
 
71
79
  # Two polygons are equivalent if their collection of points is equivalent.
72
80
  #
73
81
  # @return [true,false]
74
- def ==( other )
82
+ def ==(other)
75
83
  @points == other.points
76
84
  end
77
85
 
78
86
  # @return [Array<Array(Numeric,Numeric)>]
79
- def self.parse_polygon_string( polygon_string )
80
- polygon_string.split( ' ' ).map{ |coordinate_string| coordinate_string.split( ',' ).map{|coordinate| coordinate.to_f }}
87
+ def self.parse_polygon_string(polygon_string)
88
+ polygon_string.split(' ').map { |coordinate_string| coordinate_string.split(',').map(&:to_f) }
81
89
  end
82
90
 
83
91
  # @return [Polygon]
84
- def self.from_yaml_data( polygon_yaml_data )
85
- self.new do |polygon|
86
- Array( polygon_yaml_data ).each do |lattitude, longitude|
92
+ def self.from_yaml_data(polygon_yaml_data)
93
+ new do |polygon|
94
+ Array(polygon_yaml_data).each do |lattitude, longitude|
87
95
  polygon.add_point do |point|
88
96
  point.lattitude = lattitude.to_f
89
97
  point.longitude = longitude.to_f
@@ -94,23 +102,23 @@ module RCAP
94
102
 
95
103
  # @return [Hash]
96
104
  def to_yaml_data
97
- @points.map{ |point| [ point.lattitude, point.longitude ]}
105
+ @points.map { |point| [point.lattitude, point.longitude] }
98
106
  end
99
107
 
100
108
  # @return [String]
101
- def to_yaml( options = {} )
102
- self.to_yaml_data.to_yaml( options )
109
+ def to_yaml(options = {})
110
+ to_yaml_data.to_yaml(options)
103
111
  end
104
112
 
105
- POINTS_KEY = 'points'
113
+ POINTS_KEY = 'points'
106
114
 
107
115
  # @return [Polygon]
108
- def self.from_h( polygon_hash )
109
- self.new do |polygon|
110
- Array( polygon_hash[ POINTS_KEY ]).each do |point_array|
116
+ def self.from_h(polygon_hash)
117
+ new do |polygon|
118
+ Array(polygon_hash[POINTS_KEY]).each do |point_array|
111
119
  polygon.add_point do |point|
112
- point.lattitude = point_array[ Point::LATTITUDE_INDEX ].to_f
113
- point.longitude = point_array[ Point::LONGITUDE_INDEX ].to_f
120
+ point.lattitude = point_array[Point::LATTITUDE_INDEX].to_f
121
+ point.longitude = point_array[Point::LONGITUDE_INDEX].to_f
114
122
  end
115
123
  end
116
124
  end
@@ -118,7 +126,7 @@ module RCAP
118
126
 
119
127
  # @return [Hash]
120
128
  def to_h
121
- { POINTS_KEY => @points.map{ |point| point.to_a }}
129
+ { POINTS_KEY => @points.map(&:to_a) }
122
130
  end
123
131
  end
124
132
  end
@@ -1,20 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module Base
3
5
  class Resource
4
6
  include Validation
5
7
 
6
8
  # @return [String] Resource Description
7
- attr_accessor( :resource_desc )
9
+ attr_accessor(:resource_desc)
8
10
  # @return [String]
9
- attr_accessor( :mime_type )
11
+ attr_accessor(:mime_type)
10
12
  # @return [Integer] Expressed in bytes
11
- attr_accessor( :size )
13
+ attr_accessor(:size)
12
14
  # @return [String] Resource location
13
- attr_accessor( :uri )
15
+ attr_accessor(:uri)
14
16
  # @return [String] SHA-1 hash of contents of resource
15
- attr_accessor( :digest )
17
+ attr_accessor(:digest)
16
18
 
17
- validates_presence_of( :resource_desc )
19
+ validates_presence_of(:resource_desc)
18
20
 
19
21
  XML_ELEMENT_NAME = 'resource'
20
22
  MIME_TYPE_ELEMENT_NAME = 'mimeType'
@@ -23,12 +25,12 @@ module RCAP
23
25
  DIGEST_ELEMENT_NAME = 'digest'
24
26
  RESOURCE_DESC_ELEMENT_NAME = 'resourceDesc'
25
27
 
26
- XPATH = "cap:#{ XML_ELEMENT_NAME }"
27
- MIME_TYPE_XPATH = "cap:#{ MIME_TYPE_ELEMENT_NAME }"
28
- SIZE_XPATH = "cap:#{ SIZE_ELEMENT_NAME }"
29
- URI_XPATH = "cap:#{ URI_ELEMENT_NAME }"
30
- DIGEST_XPATH = "cap:#{ DIGEST_ELEMENT_NAME }"
31
- RESOURCE_DESC_XPATH = "cap:#{ RESOURCE_DESC_ELEMENT_NAME }"
28
+ XPATH = "cap:#{XML_ELEMENT_NAME}"
29
+ MIME_TYPE_XPATH = "cap:#{MIME_TYPE_ELEMENT_NAME}"
30
+ SIZE_XPATH = "cap:#{SIZE_ELEMENT_NAME}"
31
+ URI_XPATH = "cap:#{URI_ELEMENT_NAME}"
32
+ DIGEST_XPATH = "cap:#{DIGEST_ELEMENT_NAME}"
33
+ RESOURCE_DESC_XPATH = "cap:#{RESOURCE_DESC_ELEMENT_NAME}"
32
34
 
33
35
  # @param [Hash{Symbol => Object}] attributes
34
36
  # @option attributes [String] :mime_type
@@ -37,29 +39,29 @@ module RCAP
37
39
  # @option attributes [String] :digest
38
40
  # @option attributes [String] :resource_desc
39
41
  def initialize
40
- yield( self ) if block_given?
42
+ yield(self) if block_given?
41
43
  end
42
44
 
43
45
  # @return [REXML::Element]
44
46
  def to_xml_element
45
- xml_element = REXML::Element.new( XML_ELEMENT_NAME )
46
- xml_element.add_element( RESOURCE_DESC_ELEMENT_NAME ).add_text( @resource_desc )
47
- xml_element.add_element( MIME_TYPE_ELEMENT_NAME ).add_text( @mime_type ) if @mime_type
48
- xml_element.add_element( SIZE_ELEMENT_NAME ).add_text( @size.to_s ) if @size
49
- xml_element.add_element( URI_ELEMENT_NAME ).add_text( @uri ) if @uri
50
- xml_element.add_element( DIGEST_ELEMENT_NAME ).add_text( @digest ) if @digest
47
+ xml_element = REXML::Element.new(XML_ELEMENT_NAME)
48
+ xml_element.add_element(RESOURCE_DESC_ELEMENT_NAME).add_text(@resource_desc)
49
+ xml_element.add_element(MIME_TYPE_ELEMENT_NAME).add_text(@mime_type) if @mime_type
50
+ xml_element.add_element(SIZE_ELEMENT_NAME).add_text(@size.to_s) if @size
51
+ xml_element.add_element(URI_ELEMENT_NAME).add_text(@uri) if @uri
52
+ xml_element.add_element(DIGEST_ELEMENT_NAME).add_text(@digest) if @digest
51
53
  xml_element
52
54
  end
53
55
 
54
56
  # @param [REXML::Element] resource_xml_element
55
57
  # @return [Resource]
56
- def self.from_xml_element( resource_xml_element )
57
- resource = self.new do |resource|
58
- resource.resource_desc = RCAP.xpath_text( resource_xml_element, RESOURCE_DESC_XPATH, resource.xmlns )
59
- resource.uri = RCAP.xpath_text( resource_xml_element, URI_XPATH, resource.xmlns )
60
- resource.mime_type = RCAP.xpath_text( resource_xml_element, MIME_TYPE_XPATH, resource.xmlns )
61
- resource.size = RCAP.xpath_text( resource_xml_element, SIZE_XPATH, resource.xmlns ).to_i
62
- resource.digest = RCAP.xpath_text( resource_xml_element, DIGEST_XPATH, resource.xmlns )
58
+ def self.from_xml_element(resource_xml_element)
59
+ resource = new do |resource|
60
+ resource.resource_desc = RCAP.xpath_text(resource_xml_element, RESOURCE_DESC_XPATH, resource.xmlns)
61
+ resource.uri = RCAP.xpath_text(resource_xml_element, URI_XPATH, resource.xmlns)
62
+ resource.mime_type = RCAP.xpath_text(resource_xml_element, MIME_TYPE_XPATH, resource.xmlns)
63
+ resource.size = RCAP.xpath_text(resource_xml_element, SIZE_XPATH, resource.xmlns).to_i
64
+ resource.digest = RCAP.xpath_text(resource_xml_element, DIGEST_XPATH, resource.xmlns)
63
65
  end
64
66
  end
65
67
 
@@ -70,9 +72,9 @@ module RCAP
70
72
  # @return [nil,Array(Integer,String)]
71
73
  def calculate_hash_and_size
72
74
  if @deref_uri
73
- @digest = Digest::SHA1.hexdigest( @deref_uri )
75
+ @digest = Digest::SHA1.hexdigest(@deref_uri)
74
76
  @size = @deref_uri.bytesize
75
- [ @size, @digest ]
77
+ [@size, @digest]
76
78
  end
77
79
  end
78
80
 
@@ -80,25 +82,23 @@ module RCAP
80
82
  #
81
83
  # @return [nil,String]
82
84
  def decoded_deref_uri
83
- Base64.decode64( @deref_uri ) if @deref_uri
85
+ Base64.decode64(@deref_uri) if @deref_uri
84
86
  end
85
87
 
86
88
  # If size is defined returns the size in kilobytes
87
89
  # @return [Float]
88
90
  def size_in_kb
89
- if @size
90
- @size.to_f/1024
91
- end
91
+ @size.to_f / 1024 if @size
92
92
  end
93
93
 
94
94
  # @return [String]
95
95
  def to_xml
96
- self.to_xml_element.to_s
96
+ to_xml_element.to_s
97
97
  end
98
98
 
99
99
  # @return [String]
100
100
  def inspect
101
- [ @resource_desc, @uri, @mime_type, @size ? format( "%.1fKB", self.size_in_kb ) : nil ].compact.join(' - ')
101
+ [@resource_desc, @uri, @mime_type, @size ? format('%.1fKB', size_in_kb) : nil].compact.join(' - ')
102
102
  end
103
103
 
104
104
  # Returns a string representation of the resource of the form
@@ -109,35 +109,35 @@ module RCAP
109
109
  @resource_desc
110
110
  end
111
111
 
112
- RESOURCE_DESC_YAML = "Resource Description"
113
- URI_YAML = "URI"
114
- MIME_TYPE_YAML = "Mime Type"
115
- SIZE_YAML = "Size"
116
- DIGEST_YAML = "Digest"
112
+ RESOURCE_DESC_YAML = 'Resource Description'
113
+ URI_YAML = 'URI'
114
+ MIME_TYPE_YAML = 'Mime Type'
115
+ SIZE_YAML = 'Size'
116
+ DIGEST_YAML = 'Digest'
117
117
 
118
118
  def to_yaml_data
119
- RCAP.attribute_values_to_hash( [ RESOURCE_DESC_YAML, @resource_desc ],
120
- [ URI_YAML, @uri ],
121
- [ MIME_TYPE_YAML, @mime_type ],
122
- [ SIZE_YAML, @size ],
123
- [ DIGEST_YAML, @digest ])
119
+ RCAP.attribute_values_to_hash([RESOURCE_DESC_YAML, @resource_desc],
120
+ [URI_YAML, @uri],
121
+ [MIME_TYPE_YAML, @mime_type],
122
+ [SIZE_YAML, @size],
123
+ [DIGEST_YAML, @digest])
124
124
  end
125
125
 
126
126
  # @param [Hash] options
127
127
  # @return [String]
128
- def to_yaml( options = {} )
129
- self.to_yaml_data.to_yaml( options )
128
+ def to_yaml(options = {})
129
+ to_yaml_data.to_yaml(options)
130
130
  end
131
131
 
132
132
  # @param [Hash] resource_yaml_data
133
133
  # @return [Resource]
134
- def self.from_yaml_data( resource_yaml_data )
135
- self.new do |resource|
136
- resource.resource_desc = resource_yaml_data[ RESOURCE_DESC_YAML ]
137
- resource.uri = resource_yaml_data[ URI_YAML ]
138
- resource.mime_type = resource_yaml_data[ MIME_TYPE_YAML ]
139
- resource.size = resource_yaml_data[ SIZE_YAML ]
140
- resource.digest = resource_yaml_data[ DIGEST_YAML ]
134
+ def self.from_yaml_data(resource_yaml_data)
135
+ new do |resource|
136
+ resource.resource_desc = resource_yaml_data[RESOURCE_DESC_YAML]
137
+ resource.uri = resource_yaml_data[URI_YAML]
138
+ resource.mime_type = resource_yaml_data[MIME_TYPE_YAML]
139
+ resource.size = resource_yaml_data[SIZE_YAML]
140
+ resource.digest = resource_yaml_data[DIGEST_YAML]
141
141
  end
142
142
  end
143
143
 
@@ -149,22 +149,22 @@ module RCAP
149
149
 
150
150
  # @return [Hash]
151
151
  def to_h
152
- RCAP.attribute_values_to_hash( [ RESOURCE_DESC_KEY, @resource_desc ],
153
- [ URI_KEY, @uri],
154
- [ MIME_TYPE_KEY, @mime_type],
155
- [ SIZE_KEY, @size ],
156
- [ DIGEST_KEY, @digest ])
152
+ RCAP.attribute_values_to_hash([RESOURCE_DESC_KEY, @resource_desc],
153
+ [URI_KEY, @uri],
154
+ [MIME_TYPE_KEY, @mime_type],
155
+ [SIZE_KEY, @size],
156
+ [DIGEST_KEY, @digest])
157
157
  end
158
158
 
159
159
  # @param [Hash] resource_hash
160
160
  # @return [Resource]
161
- def self.from_h( resource_hash )
162
- self.new do |resource|
163
- resource.resource_desc = RCAP.strip_if_given( resource_hash[ RESOURCE_DESC_KEY ])
164
- resource.uri = RCAP.strip_if_given( resource_hash[ URI_KEY ])
165
- resource.mime_type = RCAP.strip_if_given( resource_hash[ MIME_TYPE_KEY ])
166
- resource.size = RCAP.to_i_if_given( resource_hash[ SIZE_KEY ])
167
- resource.digest = RCAP.strip_if_given( resource_hash[ DIGEST_KEY ])
161
+ def self.from_h(resource_hash)
162
+ new do |resource|
163
+ resource.resource_desc = RCAP.strip_if_given(resource_hash[RESOURCE_DESC_KEY])
164
+ resource.uri = RCAP.strip_if_given(resource_hash[URI_KEY])
165
+ resource.mime_type = RCAP.strip_if_given(resource_hash[MIME_TYPE_KEY])
166
+ resource.size = RCAP.to_i_if_given(resource_hash[SIZE_KEY])
167
+ resource.digest = RCAP.strip_if_given(resource_hash[DIGEST_KEY])
168
168
  end
169
169
  end
170
170
  end