rcap 2.4.1 → 2.5.0

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