rcap 2.4.1 → 2.5.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.
Files changed (82) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -0
  3. data/lib/rcap/alert.rb +28 -29
  4. data/lib/rcap/base/alert.rb +192 -192
  5. data/lib/rcap/base/area.rb +84 -86
  6. data/lib/rcap/base/circle.rb +32 -32
  7. data/lib/rcap/base/info.rb +248 -253
  8. data/lib/rcap/base/parameter.rb +23 -24
  9. data/lib/rcap/base/point.rb +23 -23
  10. data/lib/rcap/base/polygon.rb +32 -32
  11. data/lib/rcap/base/resource.rb +57 -57
  12. data/lib/rcap/cap_1_0/alert.rb +79 -83
  13. data/lib/rcap/cap_1_0/area.rb +0 -2
  14. data/lib/rcap/cap_1_0/circle.rb +0 -1
  15. data/lib/rcap/cap_1_0/info.rb +1 -3
  16. data/lib/rcap/cap_1_0/parameter.rb +11 -12
  17. data/lib/rcap/cap_1_0/point.rb +0 -1
  18. data/lib/rcap/cap_1_0/polygon.rb +0 -2
  19. data/lib/rcap/cap_1_0/resource.rb +0 -3
  20. data/lib/rcap/cap_1_1/alert.rb +4 -6
  21. data/lib/rcap/cap_1_1/area.rb +0 -2
  22. data/lib/rcap/cap_1_1/circle.rb +0 -1
  23. data/lib/rcap/cap_1_1/info.rb +120 -129
  24. data/lib/rcap/cap_1_1/parameter.rb +0 -2
  25. data/lib/rcap/cap_1_1/point.rb +0 -1
  26. data/lib/rcap/cap_1_1/polygon.rb +0 -2
  27. data/lib/rcap/cap_1_1/resource.rb +32 -34
  28. data/lib/rcap/cap_1_2/alert.rb +4 -6
  29. data/lib/rcap/cap_1_2/area.rb +0 -2
  30. data/lib/rcap/cap_1_2/circle.rb +0 -1
  31. data/lib/rcap/cap_1_2/info.rb +114 -121
  32. data/lib/rcap/cap_1_2/parameter.rb +0 -2
  33. data/lib/rcap/cap_1_2/point.rb +0 -1
  34. data/lib/rcap/cap_1_2/polygon.rb +1 -3
  35. data/lib/rcap/cap_1_2/resource.rb +32 -34
  36. data/lib/rcap/config.rb +3 -3
  37. data/lib/rcap/custom_validators.rb +72 -76
  38. data/lib/rcap/extensions/array.rb +1 -1
  39. data/lib/rcap/extensions/date.rb +2 -2
  40. data/lib/rcap/extensions/date_time.rb +3 -3
  41. data/lib/rcap/extensions/string.rb +3 -3
  42. data/lib/rcap/extensions/time.rb +2 -3
  43. data/lib/rcap/info.rb +4 -5
  44. data/lib/rcap/utilities.rb +24 -25
  45. data/lib/rcap/validation.rb +19 -20
  46. data/lib/rcap/version.rb +1 -1
  47. data/spec/alert_spec.rb +141 -141
  48. data/spec/cap_1_0/alert_spec.rb +92 -94
  49. data/spec/cap_1_0/area_spec.rb +86 -86
  50. data/spec/cap_1_0/circle_spec.rb +39 -39
  51. data/spec/cap_1_0/event_code_spec.rb +15 -15
  52. data/spec/cap_1_0/geocode_spec.rb +16 -16
  53. data/spec/cap_1_0/info_spec.rb +175 -177
  54. data/spec/cap_1_0/parameter_spec.rb +27 -27
  55. data/spec/cap_1_0/point_spec.rb +18 -18
  56. data/spec/cap_1_0/polygon_spec.rb +38 -38
  57. data/spec/cap_1_0/resource_spec.rb +63 -64
  58. data/spec/cap_1_1/alert_spec.rb +107 -109
  59. data/spec/cap_1_1/area_spec.rb +90 -90
  60. data/spec/cap_1_1/circle_spec.rb +34 -34
  61. data/spec/cap_1_1/event_code_spec.rb +15 -16
  62. data/spec/cap_1_1/geocode_spec.rb +16 -16
  63. data/spec/cap_1_1/info_spec.rb +194 -196
  64. data/spec/cap_1_1/parameter_spec.rb +17 -17
  65. data/spec/cap_1_1/point_spec.rb +18 -18
  66. data/spec/cap_1_1/polygon_spec.rb +36 -36
  67. data/spec/cap_1_1/resource_spec.rb +106 -107
  68. data/spec/cap_1_2/alert_spec.rb +98 -99
  69. data/spec/cap_1_2/area_spec.rb +90 -90
  70. data/spec/cap_1_2/circle_spec.rb +43 -43
  71. data/spec/cap_1_2/event_code_spec.rb +19 -20
  72. data/spec/cap_1_2/geocode_spec.rb +20 -20
  73. data/spec/cap_1_2/info_spec.rb +196 -198
  74. data/spec/cap_1_2/parameter_spec.rb +19 -19
  75. data/spec/cap_1_2/point_spec.rb +21 -21
  76. data/spec/cap_1_2/polygon_spec.rb +47 -47
  77. data/spec/cap_1_2/resource_spec.rb +96 -97
  78. data/spec/extensions_spec.rb +29 -29
  79. data/spec/info_spec.rb +15 -15
  80. data/spec/spec_helper.rb +3 -3
  81. data/spec/validations_spec.rb +73 -73
  82. metadata +2 -2
@@ -1,11 +1,9 @@
1
1
  module RCAP
2
2
  module CAP_1_1
3
-
4
3
  # A Parameter object is valid if
5
4
  # * it has a name
6
5
  # * it has a value
7
6
  class Parameter < RCAP::Base::Parameter
8
-
9
7
  # @return [String]
10
8
  def xmlns
11
9
  Alert::XMLNS
@@ -1,6 +1,5 @@
1
1
  module RCAP
2
2
  module CAP_1_1
3
-
4
3
  # A Point object is valid if
5
4
  # * it has a lattitude within the minimum and maximum lattitude values
6
5
  # * it has a longitude within the minimum and maximum longitude values
@@ -1,11 +1,9 @@
1
1
  module RCAP
2
2
  module CAP_1_1
3
-
4
3
  # A Polygon object is valid if
5
4
  # * it has a minimum of three points
6
5
  # * each Point object in the points collection is valid
7
6
  class Polygon < RCAP::Base::Polygon
8
-
9
7
  # @return [Class]
10
8
  def point_class
11
9
  Point
@@ -1,12 +1,10 @@
1
1
  module RCAP
2
2
  module CAP_1_1
3
-
4
3
  # A Resource object is valid if
5
4
  # * it has a resource description
6
5
  class Resource < RCAP::Base::Resource
7
-
8
6
  # @return [String] Dereferenced URI - contents of URI Base64 encoded
9
- attr_accessor( :deref_uri )
7
+ attr_accessor(:deref_uri)
10
8
 
11
9
  DEREF_URI_ELEMENT_NAME = 'derefUri'
12
10
  DEREF_URI_XPATH = "cap:#{ DEREF_URI_ELEMENT_NAME }"
@@ -14,13 +12,13 @@ module RCAP
14
12
  # @return [REXML::Element]
15
13
  def to_xml_element
16
14
  xml_element = super
17
- xml_element = REXML::Element.new( XML_ELEMENT_NAME )
18
- xml_element.add_element( RESOURCE_DESC_ELEMENT_NAME ).add_text( @resource_desc )
19
- xml_element.add_element( MIME_TYPE_ELEMENT_NAME ).add_text( @mime_type ) if @mime_type
20
- xml_element.add_element( SIZE_ELEMENT_NAME ).add_text( @size.to_s ) if @size
21
- xml_element.add_element( URI_ELEMENT_NAME ).add_text( @uri ) if @uri
22
- xml_element.add_element( DEREF_URI_ELEMENT_NAME ).add_text( @deref_uri ) if @deref_uri
23
- xml_element.add_element( DIGEST_ELEMENT_NAME ).add_text( @digest ) if @digest
15
+ xml_element = REXML::Element.new(XML_ELEMENT_NAME)
16
+ xml_element.add_element(RESOURCE_DESC_ELEMENT_NAME).add_text(@resource_desc)
17
+ xml_element.add_element(MIME_TYPE_ELEMENT_NAME).add_text(@mime_type) if @mime_type
18
+ xml_element.add_element(SIZE_ELEMENT_NAME).add_text(@size.to_s) if @size
19
+ xml_element.add_element(URI_ELEMENT_NAME).add_text(@uri) if @uri
20
+ xml_element.add_element(DEREF_URI_ELEMENT_NAME).add_text(@deref_uri) if @deref_uri
21
+ xml_element.add_element(DIGEST_ELEMENT_NAME).add_text(@digest) if @digest
24
22
  xml_element
25
23
  end
26
24
 
@@ -35,9 +33,9 @@ module RCAP
35
33
  #
36
34
  # @return [Array(Integer,String)]
37
35
  def dereference_uri!
38
- content = URI.parse( self.uri ).read
39
- @deref_uri = Base64.encode64( content )
40
- self.calculate_hash_and_size
36
+ content = URI.parse(uri).read
37
+ @deref_uri = Base64.encode64(content)
38
+ calculate_hash_and_size
41
39
  end
42
40
 
43
41
  # @return [String]
@@ -47,34 +45,34 @@ module RCAP
47
45
 
48
46
  # @param [REXML::Element] resource_xml_element
49
47
  # @return [Resource]
50
- def self.from_xml_element( resource_xml_element )
48
+ def self.from_xml_element(resource_xml_element)
51
49
  super.tap do |resource|
52
- resource.deref_uri = RCAP.xpath_text( resource_xml_element, DEREF_URI_XPATH, resource.xmlns )
50
+ resource.deref_uri = RCAP.xpath_text(resource_xml_element, DEREF_URI_XPATH, resource.xmlns)
53
51
  end
54
52
  end
55
53
 
56
- DEREF_URI_YAML = "Derefrenced URI Data"
54
+ DEREF_URI_YAML = 'Derefrenced URI Data'
57
55
 
58
56
  def to_yaml_data
59
- RCAP.attribute_values_to_hash( [ RESOURCE_DESC_YAML, @resource_desc ],
60
- [ URI_YAML, @uri ],
61
- [ MIME_TYPE_YAML, @mime_type ],
62
- [ DEREF_URI_YAML, @deref_uri ],
63
- [ SIZE_YAML, @size ],
64
- [ DIGEST_YAML, @digest ])
57
+ RCAP.attribute_values_to_hash([RESOURCE_DESC_YAML, @resource_desc],
58
+ [URI_YAML, @uri],
59
+ [MIME_TYPE_YAML, @mime_type],
60
+ [DEREF_URI_YAML, @deref_uri],
61
+ [SIZE_YAML, @size],
62
+ [DIGEST_YAML, @digest])
65
63
  end
66
64
 
67
65
  # @param [Hash] options
68
66
  # @return [String]
69
- def to_yaml( options = {} )
70
- self.to_yaml_data.to_yaml( options )
67
+ def to_yaml(options = {})
68
+ to_yaml_data.to_yaml(options)
71
69
  end
72
70
 
73
71
  # @param [Hash] resource_yaml_data
74
72
  # @return [Resource]
75
- def self.from_yaml_data( resource_yaml_data )
73
+ def self.from_yaml_data(resource_yaml_data)
76
74
  super.tap do |resource|
77
- resource.deref_uri = RCAP.strip_if_given( resource_yaml_data[ DEREF_URI_YAML ])
75
+ resource.deref_uri = RCAP.strip_if_given(resource_yaml_data[DEREF_URI_YAML])
78
76
  end
79
77
  end
80
78
 
@@ -82,19 +80,19 @@ module RCAP
82
80
 
83
81
  # @return [Hash]
84
82
  def to_h
85
- RCAP.attribute_values_to_hash( [ RESOURCE_DESC_KEY, @resource_desc ],
86
- [ URI_KEY, @uri],
87
- [ MIME_TYPE_KEY, @mime_type],
88
- [ DEREF_URI_KEY, @deref_uri],
89
- [ SIZE_KEY, @size ],
90
- [ DIGEST_KEY, @digest ])
83
+ RCAP.attribute_values_to_hash([RESOURCE_DESC_KEY, @resource_desc],
84
+ [URI_KEY, @uri],
85
+ [MIME_TYPE_KEY, @mime_type],
86
+ [DEREF_URI_KEY, @deref_uri],
87
+ [SIZE_KEY, @size],
88
+ [DIGEST_KEY, @digest])
91
89
  end
92
90
 
93
91
  # @param [Hash] resource_hash
94
92
  # @return [Resource]
95
- def self.from_h( resource_hash )
93
+ def self.from_h(resource_hash)
96
94
  super.tap do |resource|
97
- resource.deref_uri = RCAP.strip_if_given( resource_hash[ DEREF_URI_KEY ])
95
+ resource.deref_uri = RCAP.strip_if_given(resource_hash[DEREF_URI_KEY])
98
96
  end
99
97
  end
100
98
  end
@@ -1,6 +1,5 @@
1
1
  module RCAP
2
2
  module CAP_1_2
3
-
4
3
  # An Alert object is valid if
5
4
  # * it has an identifier
6
5
  # * it has a sender
@@ -10,13 +9,12 @@ module RCAP
10
9
  # * it has a valid scope value
11
10
  # * all Info objects contained in infos are valid
12
11
  class Alert < RCAP::Base::Alert
12
+ XMLNS = 'urn:oasis:names:tc:emergency:cap:1.2'
13
+ CAP_VERSION = '1.2'
13
14
 
14
- XMLNS = "urn:oasis:names:tc:emergency:cap:1.2"
15
- CAP_VERSION = "1.2"
16
-
17
- STATUS_DRAFT = "Draft"
15
+ STATUS_DRAFT = 'Draft'
18
16
  # Valid values for status
19
- VALID_STATUSES = [ STATUS_ACTUAL, STATUS_EXERCISE, STATUS_SYSTEM, STATUS_TEST, STATUS_DRAFT ]
17
+ VALID_STATUSES = [STATUS_ACTUAL, STATUS_EXERCISE, STATUS_SYSTEM, STATUS_TEST, STATUS_DRAFT]
20
18
 
21
19
  # @return [String]
22
20
  def xmlns
@@ -1,6 +1,5 @@
1
1
  module RCAP
2
2
  module CAP_1_2
3
-
4
3
  # An Area object is valid if
5
4
  # * it has an area description
6
5
  # * all Circle objects contained in circles are valid
@@ -8,7 +7,6 @@ module RCAP
8
7
  # * all Polygon objects contained in polygons are valid
9
8
  # * altitude has a value if ceiling is set
10
9
  class Area < RCAP::Base::Area
11
-
12
10
  # @return [String]
13
11
  def xmlns
14
12
  Alert::XMLNS
@@ -1,6 +1,5 @@
1
1
  module RCAP
2
2
  module CAP_1_2
3
-
4
3
  # A Circle object is valid if
5
4
  # * it has a valid lattitude and longitude
6
5
  # * it has a radius with a value greater than zero
@@ -1,6 +1,5 @@
1
1
  module RCAP
2
2
  module CAP_1_2
3
-
4
3
  # In Info object is valid if
5
4
  # * it has an event
6
5
  # * it has an urgency with a valid value
@@ -10,31 +9,29 @@ module RCAP
10
9
  # * all Resource objects in the resources collection are valid
11
10
  # * all Area objects in the areas collection are valid
12
11
  class Info < RCAP::Base::Info
13
-
14
- RESPONSE_TYPE_SHELTER = "Shelter"
15
- RESPONSE_TYPE_EVACUATE = "Evacuate"
16
- RESPONSE_TYPE_PREPARE = "Prepare"
17
- RESPONSE_TYPE_EXECUTE = "Execute"
18
- RESPONSE_TYPE_MONITOR = "Monitor"
19
- RESPONSE_TYPE_ASSESS = "Assess"
20
- RESPONSE_TYPE_NONE = "None"
12
+ RESPONSE_TYPE_SHELTER = 'Shelter'
13
+ RESPONSE_TYPE_EVACUATE = 'Evacuate'
14
+ RESPONSE_TYPE_PREPARE = 'Prepare'
15
+ RESPONSE_TYPE_EXECUTE = 'Execute'
16
+ RESPONSE_TYPE_MONITOR = 'Monitor'
17
+ RESPONSE_TYPE_ASSESS = 'Assess'
18
+ RESPONSE_TYPE_NONE = 'None'
21
19
  # Valid values for response_type
22
- VALID_RESPONSE_TYPES = [ RESPONSE_TYPE_SHELTER, RESPONSE_TYPE_EVACUATE, RESPONSE_TYPE_PREPARE, RESPONSE_TYPE_EXECUTE, RESPONSE_TYPE_MONITOR, RESPONSE_TYPE_ASSESS, RESPONSE_TYPE_NONE ]
23
-
20
+ VALID_RESPONSE_TYPES = [RESPONSE_TYPE_SHELTER, RESPONSE_TYPE_EVACUATE, RESPONSE_TYPE_PREPARE, RESPONSE_TYPE_EXECUTE, RESPONSE_TYPE_MONITOR, RESPONSE_TYPE_ASSESS, RESPONSE_TYPE_NONE]
24
21
 
25
- CERTAINTY_OBSERVED = "Observed"
22
+ CERTAINTY_OBSERVED = 'Observed'
26
23
  # Valid valies for certainty
27
- VALID_CERTAINTIES = [ CERTAINTY_OBSERVED, CERTAINTY_LIKELY, CERTAINTY_POSSIBLE, CERTAINTY_UNLIKELY, CERTAINTY_UNKNOWN ]
24
+ VALID_CERTAINTIES = [CERTAINTY_OBSERVED, CERTAINTY_LIKELY, CERTAINTY_POSSIBLE, CERTAINTY_UNLIKELY, CERTAINTY_UNKNOWN]
28
25
 
29
26
  RESPONSE_TYPE_ELEMENT_NAME = 'responseType'
30
27
  RESPONSE_TYPE_XPATH = "cap:#{ RESPONSE_TYPE_ELEMENT_NAME }"
31
28
 
32
- validates_length_of( :categories, :minimum => 1 )
33
- validates_inclusion_of_members_of( :response_types, :in => VALID_RESPONSE_TYPES, :allow_blank => true )
34
- validates_inclusion_of( :certainty, :allow_nil => true, :in => VALID_CERTAINTIES, :message => "can only be assigned the following values: #{ VALID_CERTAINTIES.join(', ') }")
29
+ validates_length_of(:categories, minimum: 1)
30
+ validates_inclusion_of_members_of(:response_types, in: VALID_RESPONSE_TYPES, allow_blank: true)
31
+ validates_inclusion_of(:certainty, allow_nil: true, in: VALID_CERTAINTIES, message: "can only be assigned the following values: #{ VALID_CERTAINTIES.join(', ') }")
35
32
 
36
33
  # @return [Array<String>] Collection of textual response types; elements must be from {VALID_RESPONSE_TYPES}
37
- attr_reader( :response_types )
34
+ attr_reader(:response_types)
38
35
 
39
36
  # Initialises a new Info object which will be yielded to an attached block if given
40
37
  #
@@ -72,76 +69,72 @@ module RCAP
72
69
 
73
70
  # @return [REXML::Element]
74
71
  def to_xml_element
75
- xml_element = REXML::Element.new( XML_ELEMENT_NAME )
76
- xml_element.add_element( LANGUAGE_ELEMENT_NAME ).add_text( @language ) if @language
72
+ xml_element = REXML::Element.new(XML_ELEMENT_NAME)
73
+ xml_element.add_element(LANGUAGE_ELEMENT_NAME).add_text(@language) if @language
77
74
  @categories.each do |category|
78
- xml_element.add_element( CATEGORY_ELEMENT_NAME ).add_text( category )
75
+ xml_element.add_element(CATEGORY_ELEMENT_NAME).add_text(category)
79
76
  end
80
- xml_element.add_element( EVENT_ELEMENT_NAME ).add_text( @event )
77
+ xml_element.add_element(EVENT_ELEMENT_NAME).add_text(@event)
81
78
  @response_types.each do |response_type|
82
- xml_element.add_element( RESPONSE_TYPE_ELEMENT_NAME ).add_text( response_type )
79
+ xml_element.add_element(RESPONSE_TYPE_ELEMENT_NAME).add_text(response_type)
83
80
  end
84
- xml_element.add_element( URGENCY_ELEMENT_NAME ).add_text( @urgency )
85
- xml_element.add_element( SEVERITY_ELEMENT_NAME ).add_text( @severity )
86
- xml_element.add_element( CERTAINTY_ELEMENT_NAME ).add_text( @certainty )
87
- xml_element.add_element( AUDIENCE_ELEMENT_NAME ).add_text( @audience ) if @audience
81
+ xml_element.add_element(URGENCY_ELEMENT_NAME).add_text(@urgency)
82
+ xml_element.add_element(SEVERITY_ELEMENT_NAME).add_text(@severity)
83
+ xml_element.add_element(CERTAINTY_ELEMENT_NAME).add_text(@certainty)
84
+ xml_element.add_element(AUDIENCE_ELEMENT_NAME).add_text(@audience) if @audience
88
85
  @event_codes.each do |event_code|
89
- xml_element.add_element( event_code.to_xml_element )
86
+ xml_element.add_element(event_code.to_xml_element)
90
87
  end
91
- xml_element.add_element( EFFECTIVE_ELEMENT_NAME ).add_text( @effective.to_s_for_cap ) if @effective
92
- xml_element.add_element( ONSET_ELEMENT_NAME ).add_text( @onset.to_s_for_cap ) if @onset
93
- xml_element.add_element( EXPIRES_ELEMENT_NAME ).add_text( @expires.to_s_for_cap ) if @expires
94
- xml_element.add_element( SENDER_NAME_ELEMENT_NAME ).add_text( @sender_name ) if @sender_name
95
- xml_element.add_element( HEADLINE_ELEMENT_NAME ).add_text( @headline ) if @headline
96
- xml_element.add_element( DESCRIPTION_ELEMENT_NAME ).add_text( @description ) if @description
97
- xml_element.add_element( INSTRUCTION_ELEMENT_NAME ).add_text( @instruction ) if @instruction
98
- xml_element.add_element( WEB_ELEMENT_NAME ).add_text( @web ) if @web
99
- xml_element.add_element( CONTACT_ELEMENT_NAME ).add_text( @contact ) if @contact
88
+ xml_element.add_element(EFFECTIVE_ELEMENT_NAME).add_text(@effective.to_s_for_cap) if @effective
89
+ xml_element.add_element(ONSET_ELEMENT_NAME).add_text(@onset.to_s_for_cap) if @onset
90
+ xml_element.add_element(EXPIRES_ELEMENT_NAME).add_text(@expires.to_s_for_cap) if @expires
91
+ xml_element.add_element(SENDER_NAME_ELEMENT_NAME).add_text(@sender_name) if @sender_name
92
+ xml_element.add_element(HEADLINE_ELEMENT_NAME).add_text(@headline) if @headline
93
+ xml_element.add_element(DESCRIPTION_ELEMENT_NAME).add_text(@description) if @description
94
+ xml_element.add_element(INSTRUCTION_ELEMENT_NAME).add_text(@instruction) if @instruction
95
+ xml_element.add_element(WEB_ELEMENT_NAME).add_text(@web) if @web
96
+ xml_element.add_element(CONTACT_ELEMENT_NAME).add_text(@contact) if @contact
100
97
  @parameters.each do |parameter|
101
- xml_element.add_element( parameter.to_xml_element )
98
+ xml_element.add_element(parameter.to_xml_element)
102
99
  end
103
100
  @resources.each do |resource|
104
- xml_element.add_element( resource.to_xml_element )
101
+ xml_element.add_element(resource.to_xml_element)
105
102
  end
106
103
  @areas.each do |area|
107
- xml_element.add_element( area.to_xml_element )
104
+ xml_element.add_element(area.to_xml_element)
108
105
  end
109
106
  xml_element
110
107
  end
111
108
 
112
109
  # @return [String]
113
110
  def to_xml
114
- self.to_xml_element.to_s
111
+ to_xml_element.to_s
115
112
  end
116
113
 
117
114
  # @return [String]
118
115
  def inspect
119
- info_inspect = "Language: #{ @language }\n"+
120
- "Categories: #{ @categories.to_s_for_cap }\n"+
121
- "Event: #{ @event }\n"+
122
- "Response Types: #{ @response_types.to_s_for_cap }\n"+
123
- "Urgency: #{ @urgency }\n"+
124
- "Severity: #{ @severity }\n"+
125
- "Certainty: #{ @certainty }\n"+
126
- "Audience: #{ @audience }\n"+
127
- "Event Codes: #{ @event_codes.inspect }\n"+
128
- "Effective: #{ @effective }\n"+
129
- "Onset: #{ @onset }\n"+
130
- "Expires: #{ @expires }\n"+
131
- "Sender Name: #{ @sender_name }\n"+
132
- "Headline: #{ @headline }\n"+
133
- "Description:\n"+
134
- @description.to_s.lines.map{ |line| " " + line }.join( "\n")+"\n"+
135
- "Instruction: #{ @instruction }\n"+
136
- "Web: #{ @web }\n"+
137
- "Contact: #{ @contact }\n"+
138
- "Parameters:\n"+
139
- @parameters.map{ |parameter| " " + parameter.inspect }.join( "\n" )+"\n"+
140
- "Resources:\n"+
141
- @resources.map{ |resource| " " + resource.inspect }.join( "\n" )+"\n"+
142
- "Area:\n"+
143
- @areas.map{ |area| " #{ area }" }.join( "\n" )+"\n"
144
- RCAP.format_lines_for_inspect( 'INFO', info_inspect )
116
+ info_inspect = "Language: #{ @language }\n"\
117
+ "Categories: #{ @categories.to_s_for_cap }\n"\
118
+ "Event: #{ @event }\n"\
119
+ "Response Types: #{ @response_types.to_s_for_cap }\n"\
120
+ "Urgency: #{ @urgency }\n"\
121
+ "Severity: #{ @severity }\n"\
122
+ "Certainty: #{ @certainty }\n"\
123
+ "Audience: #{ @audience }\n"\
124
+ "Event Codes: #{ @event_codes.inspect }\n"\
125
+ "Effective: #{ @effective }\n"\
126
+ "Onset: #{ @onset }\n"\
127
+ "Expires: #{ @expires }\n"\
128
+ "Sender Name: #{ @sender_name }\n"\
129
+ "Headline: #{ @headline }\n"\
130
+ "Description:\n" + @description.to_s.lines.map { |line| ' ' + line }.join("\n") + "\n"\
131
+ "Instruction: #{ @instruction }\n"\
132
+ "Web: #{ @web }\n"\
133
+ "Contact: #{ @contact }\n"\
134
+ "Parameters:\n" + @parameters.map { |parameter| ' ' + parameter.inspect }.join("\n") + "\n"\
135
+ "Resources:\n" + @resources.map { |resource| ' ' + resource.inspect }.join("\n") + "\n"\
136
+ "Area:\n" + @areas.map { |area| " #{ area }" }.join("\n") + "\n"
137
+ RCAP.format_lines_for_inspect('INFO', info_inspect)
145
138
  end
146
139
 
147
140
  # Returns a string representation of the event of the form
@@ -154,10 +147,10 @@ module RCAP
154
147
 
155
148
  # @param [REXML::Element] info_xml_element
156
149
  # @return [Info]
157
- def self.from_xml_element( info_xml_element )
150
+ def self.from_xml_element(info_xml_element)
158
151
  super.tap do |info|
159
- RCAP.xpath_match( info_xml_element, RESPONSE_TYPE_XPATH, Alert::XMLNS ).each do |element|
160
- info.response_types << RCAP.strip_if_given( element.text )
152
+ RCAP.xpath_match(info_xml_element, RESPONSE_TYPE_XPATH, Alert::XMLNS).each do |element|
153
+ info.response_types << RCAP.strip_if_given(element.text)
161
154
  end
162
155
  end
163
156
  end
@@ -166,42 +159,42 @@ module RCAP
166
159
 
167
160
  # @return [Hash]
168
161
  def to_yaml_data
169
- parameter_to_hash = lambda{ |hash, parameter| hash.merge( parameter.name => parameter.value )}
170
-
171
- RCAP.attribute_values_to_hash( [ LANGUAGE_YAML, @language ],
172
- [ CATEGORIES_YAML, @categories ],
173
- [ EVENT_YAML, @event ],
174
- [ RESPONSE_TYPES_YAML, @response_types ],
175
- [ URGENCY_YAML, @urgency ],
176
- [ SEVERITY_YAML, @severity ],
177
- [ CERTAINTY_YAML, @certainty ],
178
- [ AUDIENCE_YAML, @audience ],
179
- [ EFFECTIVE_YAML, RCAP.to_s_for_cap( @effective )],
180
- [ ONSET_YAML, RCAP.to_s_for_cap( @onset )],
181
- [ EXPIRES_YAML, RCAP.to_s_for_cap( @expires )],
182
- [ SENDER_NAME_YAML, @sender_name ],
183
- [ HEADLINE_YAML, @headline ],
184
- [ DESCRIPTION_YAML, @description ],
185
- [ INSTRUCTION_YAML, @instruction ],
186
- [ WEB_YAML, @web ],
187
- [ CONTACT_YAML, @contact ],
188
- [ EVENT_CODES_YAML, @event_codes.inject({}, &parameter_to_hash )],
189
- [ PARAMETERS_YAML, @parameters.inject({}, &parameter_to_hash )],
190
- [ RESOURCES_YAML, @resources.map( &:to_yaml_data )],
191
- [ AREAS_YAML, @areas.map( &:to_yaml_data )])
162
+ parameter_to_hash = lambda { |hash, parameter| hash.merge(parameter.name => parameter.value) }
163
+
164
+ RCAP.attribute_values_to_hash([LANGUAGE_YAML, @language],
165
+ [CATEGORIES_YAML, @categories],
166
+ [EVENT_YAML, @event],
167
+ [RESPONSE_TYPES_YAML, @response_types],
168
+ [URGENCY_YAML, @urgency],
169
+ [SEVERITY_YAML, @severity],
170
+ [CERTAINTY_YAML, @certainty],
171
+ [AUDIENCE_YAML, @audience],
172
+ [EFFECTIVE_YAML, RCAP.to_s_for_cap(@effective)],
173
+ [ONSET_YAML, RCAP.to_s_for_cap(@onset)],
174
+ [EXPIRES_YAML, RCAP.to_s_for_cap(@expires)],
175
+ [SENDER_NAME_YAML, @sender_name],
176
+ [HEADLINE_YAML, @headline],
177
+ [DESCRIPTION_YAML, @description],
178
+ [INSTRUCTION_YAML, @instruction],
179
+ [WEB_YAML, @web],
180
+ [CONTACT_YAML, @contact],
181
+ [EVENT_CODES_YAML, @event_codes.inject({}, &parameter_to_hash)],
182
+ [PARAMETERS_YAML, @parameters.inject({}, &parameter_to_hash)],
183
+ [RESOURCES_YAML, @resources.map(&:to_yaml_data)],
184
+ [AREAS_YAML, @areas.map(&:to_yaml_data)])
192
185
  end
193
186
 
194
187
  # @return [String]
195
- def to_yaml( options = {} )
196
- self.to_yaml_data.to_yaml( options )
188
+ def to_yaml(options = {})
189
+ to_yaml_data.to_yaml(options)
197
190
  end
198
191
 
199
192
  # @param [Hash] info_yaml_data
200
193
  # @return [Info]
201
- def self.from_yaml_data( info_yaml_data )
194
+ def self.from_yaml_data(info_yaml_data)
202
195
  super.tap do |info|
203
- Array( info_yaml_data [ RESPONSE_TYPES_YAML ]).each do |response_type|
204
- info.response_types << RCAP.strip_if_given( response_type )
196
+ Array(info_yaml_data [RESPONSE_TYPES_YAML]).each do |response_type|
197
+ info.response_types << RCAP.strip_if_given(response_type)
205
198
  end
206
199
  end
207
200
  end
@@ -210,35 +203,35 @@ module RCAP
210
203
 
211
204
  # @return [Hash]
212
205
  def to_h
213
- RCAP.attribute_values_to_hash( [ LANGUAGE_KEY, @language ],
214
- [ CATEGORIES_KEY, @categories ],
215
- [ EVENT_KEY, @event ],
216
- [ RESPONSE_TYPES_KEY, @response_types ],
217
- [ URGENCY_KEY, @urgency ],
218
- [ SEVERITY_KEY, @severity ],
219
- [ CERTAINTY_KEY, @certainty ],
220
- [ AUDIENCE_KEY, @audience ],
221
- [ EFFECTIVE_KEY, RCAP.to_s_for_cap( @effective )],
222
- [ ONSET_KEY, RCAP.to_s_for_cap( @onset )],
223
- [ EXPIRES_KEY, RCAP.to_s_for_cap( @expires )],
224
- [ SENDER_NAME_KEY, @sender_name ],
225
- [ HEADLINE_KEY, @headline ],
226
- [ DESCRIPTION_KEY, @description ],
227
- [ INSTRUCTION_KEY, @instruction ],
228
- [ WEB_KEY, @web ],
229
- [ CONTACT_KEY, @contact ],
230
- [ RESOURCES_KEY, @resources.map{ |resource| resource.to_h } ],
231
- [ EVENT_CODES_KEY, @event_codes.map{ |event_code| event_code.to_h } ],
232
- [ PARAMETERS_KEY, @parameters.map{ |parameter| parameter.to_h } ],
233
- [ AREAS_KEY, @areas.map{ |area| area.to_h }])
206
+ RCAP.attribute_values_to_hash([LANGUAGE_KEY, @language],
207
+ [CATEGORIES_KEY, @categories],
208
+ [EVENT_KEY, @event],
209
+ [RESPONSE_TYPES_KEY, @response_types],
210
+ [URGENCY_KEY, @urgency],
211
+ [SEVERITY_KEY, @severity],
212
+ [CERTAINTY_KEY, @certainty],
213
+ [AUDIENCE_KEY, @audience],
214
+ [EFFECTIVE_KEY, RCAP.to_s_for_cap(@effective)],
215
+ [ONSET_KEY, RCAP.to_s_for_cap(@onset)],
216
+ [EXPIRES_KEY, RCAP.to_s_for_cap(@expires)],
217
+ [SENDER_NAME_KEY, @sender_name],
218
+ [HEADLINE_KEY, @headline],
219
+ [DESCRIPTION_KEY, @description],
220
+ [INSTRUCTION_KEY, @instruction],
221
+ [WEB_KEY, @web],
222
+ [CONTACT_KEY, @contact],
223
+ [RESOURCES_KEY, @resources.map { |resource| resource.to_h }],
224
+ [EVENT_CODES_KEY, @event_codes.map { |event_code| event_code.to_h }],
225
+ [PARAMETERS_KEY, @parameters.map { |parameter| parameter.to_h }],
226
+ [AREAS_KEY, @areas.map { |area| area.to_h }])
234
227
  end
235
228
 
236
229
  # @param [Hash] info_hash
237
230
  # @return [Info]
238
- def self.from_h( info_hash )
231
+ def self.from_h(info_hash)
239
232
  super.tap do |info|
240
- Array( info_hash[ RESPONSE_TYPES_KEY ]).each do |response_type|
241
- info.response_types << RCAP.strip_if_given( response_type )
233
+ Array(info_hash[RESPONSE_TYPES_KEY]).each do |response_type|
234
+ info.response_types << RCAP.strip_if_given(response_type)
242
235
  end
243
236
  end
244
237
  end