rcap 2.5.0 → 2.7.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (89) 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 +4 -2
  7. data/lib/rcap/base/alert.rb +70 -73
  8. data/lib/rcap/base/area.rb +19 -13
  9. data/lib/rcap/base/circle.rb +15 -4
  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 +81 -75
  13. data/lib/rcap/base/parameter.rb +8 -6
  14. data/lib/rcap/base/point.rb +4 -2
  15. data/lib/rcap/base/polygon.rb +16 -8
  16. data/lib/rcap/base/resource.rb +13 -13
  17. data/lib/rcap/cap_1_0/alert.rb +36 -39
  18. data/lib/rcap/cap_1_0/area.rb +2 -0
  19. data/lib/rcap/cap_1_0/circle.rb +2 -0
  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 -1
  23. data/lib/rcap/cap_1_0/parameter.rb +3 -2
  24. data/lib/rcap/cap_1_0/point.rb +2 -0
  25. data/lib/rcap/cap_1_0/polygon.rb +3 -1
  26. data/lib/rcap/cap_1_0/resource.rb +2 -0
  27. data/lib/rcap/cap_1_1/alert.rb +4 -2
  28. data/lib/rcap/cap_1_1/area.rb +2 -0
  29. data/lib/rcap/cap_1_1/circle.rb +2 -0
  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 +48 -46
  33. data/lib/rcap/cap_1_1/parameter.rb +2 -1
  34. data/lib/rcap/cap_1_1/point.rb +2 -0
  35. data/lib/rcap/cap_1_1/polygon.rb +3 -1
  36. data/lib/rcap/cap_1_1/resource.rb +12 -11
  37. data/lib/rcap/cap_1_2/alert.rb +4 -2
  38. data/lib/rcap/cap_1_2/area.rb +2 -0
  39. data/lib/rcap/cap_1_2/circle.rb +2 -0
  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 +55 -51
  43. data/lib/rcap/cap_1_2/parameter.rb +2 -1
  44. data/lib/rcap/cap_1_2/point.rb +2 -0
  45. data/lib/rcap/cap_1_2/polygon.rb +4 -2
  46. data/lib/rcap/cap_1_2/resource.rb +14 -12
  47. data/lib/rcap/config.rb +2 -0
  48. data/lib/rcap/custom_validators.rb +30 -27
  49. data/lib/rcap/extensions/array.rb +2 -0
  50. data/lib/rcap/extensions/date.rb +3 -1
  51. data/lib/rcap/extensions/date_time.rb +4 -1
  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 +3 -1
  56. data/lib/rcap/extensions/time.rb +3 -0
  57. data/lib/rcap/formatters/yaml.rb +5 -0
  58. data/lib/rcap/info.rb +2 -0
  59. data/lib/rcap/utilities.rb +8 -10
  60. data/lib/rcap/validation.rb +19 -14
  61. data/lib/rcap/version.rb +3 -1
  62. data/rcap.gemspec +5 -5
  63. data/spec/alert_spec.rb +8 -9
  64. data/spec/cap_1_0/alert_spec.rb +4 -5
  65. data/spec/cap_1_0/area_spec.rb +7 -10
  66. data/spec/cap_1_0/circle_spec.rb +9 -0
  67. data/spec/cap_1_0/event_code_spec.rb +1 -1
  68. data/spec/cap_1_0/geocode_spec.rb +1 -1
  69. data/spec/cap_1_0/info_spec.rb +38 -38
  70. data/spec/cap_1_0/polygon_spec.rb +7 -5
  71. data/spec/cap_1_0/resource_spec.rb +6 -7
  72. data/spec/cap_1_1/alert_spec.rb +6 -7
  73. data/spec/cap_1_1/area_spec.rb +6 -8
  74. data/spec/cap_1_1/circle_spec.rb +9 -0
  75. data/spec/cap_1_1/info_spec.rb +26 -26
  76. data/spec/cap_1_1/parameter_spec.rb +1 -2
  77. data/spec/cap_1_1/polygon_spec.rb +12 -10
  78. data/spec/cap_1_1/resource_spec.rb +13 -13
  79. data/spec/cap_1_2/alert_spec.rb +7 -8
  80. data/spec/cap_1_2/area_spec.rb +6 -6
  81. data/spec/cap_1_2/circle_spec.rb +9 -0
  82. data/spec/cap_1_2/info_spec.rb +25 -26
  83. data/spec/cap_1_2/polygon_spec.rb +8 -0
  84. data/spec/cap_1_2/resource_spec.rb +13 -13
  85. data/spec/extensions_spec.rb +2 -2
  86. data/spec/spec_helper.rb +2 -2
  87. data/spec/validations_spec.rb +0 -1
  88. metadata +15 -15
  89. data/lib/rcap/extensions/fixnum.rb +0 -5
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_0
3
5
  # An Alert object is valid if
@@ -25,34 +27,28 @@ module RCAP
25
27
  Info
26
28
  end
27
29
 
28
- PASSWORD_ELEMENT_NAME = 'password'
30
+ PASSWORD_ELEMENT_NAME = 'password'
29
31
 
30
32
  # @return [REXML::Element]
31
33
  def to_xml_element
32
34
  xml_element = REXML::Element.new(XML_ELEMENT_NAME)
33
35
  xml_element.add_namespace(XMLNS)
34
- xml_element.add_element(IDENTIFIER_ELEMENT_NAME).add_text(@identifier) if @identifier
35
- xml_element.add_element(SENDER_ELEMENT_NAME).add_text(@sender) if @sender
36
- xml_element.add_element(SENT_ELEMENT_NAME).add_text(@sent.to_s_for_cap) if @sent
37
- xml_element.add_element(STATUS_ELEMENT_NAME).add_text(@status) if @status
38
- xml_element.add_element(MSG_TYPE_ELEMENT_NAME).add_text(@msg_type) if @msg_type
39
- xml_element.add_element(PASSWORD_ELEMENT_NAME).add_text(@password) if @password
40
- xml_element.add_element(SOURCE_ELEMENT_NAME).add_text(@source) if @source
41
- xml_element.add_element(SCOPE_ELEMENT_NAME).add_text(@scope) if @scope
42
- xml_element.add_element(RESTRICTION_ELEMENT_NAME).add_text(@restriction) if @restriction
43
- if @addresses.any?
44
- xml_element.add_element(ADDRESSES_ELEMENT_NAME).add_text(@addresses.to_s_for_cap)
45
- end
36
+ xml_element.add_element(IDENTIFIER_ELEMENT_NAME).add_text(@identifier.to_s) if @identifier
37
+ xml_element.add_element(SENDER_ELEMENT_NAME).add_text(@sender.to_s) if @sender
38
+ xml_element.add_element(SENT_ELEMENT_NAME).add_text(@sent.to_s_for_cap.to_s) if @sent
39
+ xml_element.add_element(STATUS_ELEMENT_NAME).add_text(@status.to_s) if @status
40
+ xml_element.add_element(MSG_TYPE_ELEMENT_NAME).add_text(@msg_type.to_s) if @msg_type
41
+ xml_element.add_element(PASSWORD_ELEMENT_NAME).add_text(@password.to_s) if @password
42
+ xml_element.add_element(SOURCE_ELEMENT_NAME).add_text(@source.to_s) if @source
43
+ xml_element.add_element(SCOPE_ELEMENT_NAME).add_text(@scope.to_s) if @scope
44
+ xml_element.add_element(RESTRICTION_ELEMENT_NAME).add_text(@restriction.to_s) if @restriction
45
+ xml_element.add_element(ADDRESSES_ELEMENT_NAME).add_text(@addresses.to_s_for_cap) if @addresses.any?
46
46
  @codes.each do |code|
47
- xml_element.add_element(CODE_ELEMENT_NAME).add_text(code)
48
- end
49
- xml_element.add_element(NOTE_ELEMENT_NAME).add_text(@note) if @note
50
- if @references.any?
51
- xml_element.add_element(REFERENCES_ELEMENT_NAME).add_text(@references.join(' '))
52
- end
53
- if @incidents.any?
54
- xml_element.add_element(INCIDENTS_ELEMENT_NAME).add_text(@incidents.join(' '))
47
+ xml_element.add_element(CODE_ELEMENT_NAME).add_text(code.to_s)
55
48
  end
49
+ xml_element.add_element(NOTE_ELEMENT_NAME).add_text(@note.to_s) if @note
50
+ xml_element.add_element(REFERENCES_ELEMENT_NAME).add_text(@references.join(' ')) if @references.any?
51
+ xml_element.add_element(INCIDENTS_ELEMENT_NAME).add_text(@incidents.join(' ')) if @incidents.any?
56
52
  @infos.each do |info|
57
53
  xml_element.add_element(info.to_xml_element)
58
54
  end
@@ -61,28 +57,29 @@ module RCAP
61
57
 
62
58
  # @return [String]
63
59
  def inspect
64
- alert_inspect = ["CAP Version: #{ CAP_VERSION }",
65
- "Identifier: #{ @identifier }",
66
- "Sender: #{ @sender }",
67
- "Sent: #{ @sent }",
68
- "Status: #{ @status }",
69
- "Message Type: #{ @msg_type }",
70
- "Password: #{ @password }",
71
- "Source: #{ @source }",
72
- "Scope: #{ @scope }",
73
- "Restriction: #{ @restriction }",
74
- "Addresses: #{ @addresses.to_s_for_cap }",
60
+ alert_inspect = ["CAP Version: #{CAP_VERSION}",
61
+ "Identifier: #{@identifier}",
62
+ "Sender: #{@sender}",
63
+ "Sent: #{@sent}",
64
+ "Status: #{@status}",
65
+ "Message Type: #{@msg_type}",
66
+ "Password: #{@password}",
67
+ "Source: #{@source}",
68
+ "Scope: #{@scope}",
69
+ "Restriction: #{@restriction}",
70
+ "Addresses: #{@addresses.to_s_for_cap}",
75
71
  'Codes:',
76
72
  @codes.map { |code| ' ' + code }.join("\n"),
77
- "Note: #{ @note }",
78
- "References: #{ @references.join(' ')}",
79
- "Incidents: #{ @incidents.join(' ')}",
73
+ "Note: #{@note}",
74
+ 'References:',
75
+ @references.join("\n "),
76
+ "Incidents: #{@incidents.join(' ')}",
80
77
  'Information:',
81
78
  @infos.map { |info| ' ' + info.to_s }.join("\n")].join("\n")
82
79
  RCAP.format_lines_for_inspect('ALERT', alert_inspect)
83
80
  end
84
81
 
85
- PASSWORD_XPATH = "cap:#{ PASSWORD_ELEMENT_NAME }"
82
+ PASSWORD_XPATH = "cap:#{PASSWORD_ELEMENT_NAME}"
86
83
 
87
84
  # @param [REXML::Element] alert_xml_element
88
85
  # @return [RCAP::CAP_1_0::Alert]
@@ -92,7 +89,7 @@ module RCAP
92
89
  end
93
90
  end
94
91
 
95
- PASSWORD_YAML = 'Password'
92
+ PASSWORD_YAML = 'Password'
96
93
 
97
94
  # Returns a string containing the YAML representation of the alert.
98
95
  #
@@ -124,7 +121,7 @@ module RCAP
124
121
  end
125
122
  end
126
123
 
127
- PASSWORD_KEY = 'password'
124
+ PASSWORD_KEY = 'password'
128
125
 
129
126
  # Returns a Hash representation of an Alert object
130
127
  #
@@ -145,7 +142,7 @@ module RCAP
145
142
  [NOTE_KEY, @note],
146
143
  [REFERENCES_KEY, @references],
147
144
  [INCIDENTS_KEY, @incidents],
148
- [INFOS_KEY, @infos.map { |info| info.to_h }])
145
+ [INFOS_KEY, @infos.map(&:to_h)])
149
146
  end
150
147
 
151
148
  # Initialises an Alert object from a Hash produced by Alert#to_h
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_0
3
5
  # An Area object is valid if
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_0
3
5
  # A Circle object is valid if
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_0
3
5
  # Subclass of {Parameter}
4
6
  class EventCode < RCAP::Base::EventCode
5
7
  XML_ELEMENT_NAME = 'eventCode'
6
- XPATH = "cap:#{ XML_ELEMENT_NAME }"
8
+ XPATH = "cap:#{XML_ELEMENT_NAME}"
7
9
 
8
10
  # @return [String]
9
11
  def xmlns
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_0
3
5
  # Subclass of {Parameter}
4
6
  class Geocode < RCAP::Base::Geocode
5
7
  XML_ELEMENT_NAME = 'geocode'
6
- XPATH = "cap:#{ XML_ELEMENT_NAME }"
8
+ XPATH = "cap:#{XML_ELEMENT_NAME}"
7
9
 
8
10
  # @return [String]
9
11
  def xmlns
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_0
3
5
  # In Info object is valid if
@@ -9,7 +11,7 @@ module RCAP
9
11
  # * all Resource objects in the resources collection are valid
10
12
  # * all Area objects in the areas collection are valid
11
13
  class Info < RCAP::Base::Info
12
- validates_inclusion_of(:certainty, allow_nil: true, in: VALID_CERTAINTIES, message: "can only be assigned the following values: #{ VALID_CERTAINTIES.join(', ') }")
14
+ validates_inclusion_of(:certainty, allow_nil: true, in: VALID_CERTAINTIES, message: "can only be assigned the following values: #{VALID_CERTAINTIES.join(', ')}")
13
15
 
14
16
  # @return [String]
15
17
  def xmlns
@@ -1,13 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_0
3
5
  # A Parameter object is valid if
4
6
  # * it has a name
5
- # * it has a value
6
7
  class Parameter < RCAP::Base::Parameter
7
8
  # @return [REXML::Element]
8
9
  def to_xml_element
9
10
  xml_element = REXML::Element.new(self.class::XML_ELEMENT_NAME)
10
- xml_element.add_text("#{ @name }=#{ @value }")
11
+ xml_element.add_text("#{@name}=#{@value}")
11
12
  xml_element
12
13
  end
13
14
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_0
3
5
  # A Point object is valid if
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_0
3
5
  # A Polygon object is valid if
4
- # * it has a minimum of three points
6
+ # * if points are given it has a minimum of three points
5
7
  # * each Point object in the points collection is valid
6
8
  class Polygon < RCAP::Base::Polygon
7
9
  # @return [Class]
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_0
3
5
  # A Resource object is valid if
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_1
3
5
  # An Alert object is valid if
@@ -12,9 +14,9 @@ module RCAP
12
14
  XMLNS = 'urn:oasis:names:tc:emergency:cap:1.1'
13
15
  CAP_VERSION = '1.1'
14
16
 
15
- STATUS_DRAFT = 'Draft'
17
+ STATUS_DRAFT = 'Draft'
16
18
  # Valid values for status
17
- VALID_STATUSES = [STATUS_ACTUAL, STATUS_EXERCISE, STATUS_SYSTEM, STATUS_TEST, STATUS_DRAFT]
19
+ VALID_STATUSES = [STATUS_ACTUAL, STATUS_EXERCISE, STATUS_SYSTEM, STATUS_TEST, STATUS_DRAFT].freeze
18
20
 
19
21
  # @return [String]
20
22
  def xmlns
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_1
3
5
  # An Area object is valid if
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_1
3
5
  # A Circle object is valid if
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_1
3
5
  # Subclass of {Parameter}
4
6
  class EventCode < RCAP::Base::EventCode
5
7
  XML_ELEMENT_NAME = 'eventCode'
6
- XPATH = "cap:#{ XML_ELEMENT_NAME }"
8
+ XPATH = "cap:#{XML_ELEMENT_NAME}"
7
9
 
8
10
  # @return [String]
9
11
  def xmlns
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_1
3
5
  # Subclass of {Parameter}
4
6
  class Geocode < RCAP::Base::Geocode
5
7
  XML_ELEMENT_NAME = 'geocode'
6
- XPATH = "cap:#{ XML_ELEMENT_NAME }"
8
+ XPATH = "cap:#{XML_ELEMENT_NAME}"
7
9
 
8
10
  def xmlns
9
11
  Alert::XMLNS
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module RCAP
2
4
  module CAP_1_1
3
5
  # In Info object is valid if
@@ -19,16 +21,16 @@ module RCAP
19
21
  # Valid values for response_type
20
22
  VALID_RESPONSE_TYPES = [RESPONSE_TYPE_SHELTER, RESPONSE_TYPE_EVACUATE,
21
23
  RESPONSE_TYPE_PREPARE, RESPONSE_TYPE_EXECUTE, RESPONSE_TYPE_MONITOR,
22
- RESPONSE_TYPE_ASSESS, RESPONSE_TYPE_NONE]
24
+ RESPONSE_TYPE_ASSESS, RESPONSE_TYPE_NONE].freeze
23
25
 
24
26
  CERTAINTY_OBSERVED = 'Observed'
25
27
  # Valid valies for certainty
26
28
  VALID_CERTAINTIES = [CERTAINTY_OBSERVED, CERTAINTY_LIKELY,
27
- CERTAINTY_POSSIBLE, CERTAINTY_UNLIKELY, CERTAINTY_UNKNOWN]
29
+ CERTAINTY_POSSIBLE, CERTAINTY_UNLIKELY, CERTAINTY_UNKNOWN].freeze
28
30
 
29
31
  validates_length_of(:categories, minimum: 1)
30
32
  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(', ') }")
33
+ validates_inclusion_of(:certainty, allow_nil: true, in: VALID_CERTAINTIES, message: "can only be assigned the following values: #{VALID_CERTAINTIES.join(', ')}")
32
34
 
33
35
  # @return [Array<String>] Collection of textual response types; elements must be from {VALID_RESPONSE_TYPES}
34
36
  attr_reader(:response_types)
@@ -64,7 +66,7 @@ module RCAP
64
66
  # @option attributes [Array<Resource>] :resources Collection of {Resource} objects
65
67
  # @option attributes [Array<Area>] :areas Collection of {Area} objects
66
68
  def initialize
67
- @response_types = []
69
+ @response_types = []
68
70
  super
69
71
  end
70
72
 
@@ -89,35 +91,35 @@ module RCAP
89
91
  end
90
92
 
91
93
  RESPONSE_TYPE_ELEMENT_NAME = 'responseType'
92
- RESPONSE_TYPE_XPATH = "cap:#{ RESPONSE_TYPE_ELEMENT_NAME }"
94
+ RESPONSE_TYPE_XPATH = "cap:#{RESPONSE_TYPE_ELEMENT_NAME}"
93
95
 
94
96
  # @return [REXML::Element]
95
97
  def to_xml_element
96
98
  xml_element = REXML::Element.new(XML_ELEMENT_NAME)
97
- xml_element.add_element(LANGUAGE_ELEMENT_NAME).add_text(@language) if @language
99
+ xml_element.add_element(LANGUAGE_ELEMENT_NAME).add_text(@language.to_s) if @language
98
100
  @categories.each do |category|
99
- xml_element.add_element(CATEGORY_ELEMENT_NAME).add_text(category)
101
+ xml_element.add_element(CATEGORY_ELEMENT_NAME).add_text(category.to_s)
100
102
  end
101
- xml_element.add_element(EVENT_ELEMENT_NAME).add_text(@event)
103
+ xml_element.add_element(EVENT_ELEMENT_NAME).add_text(@event.to_s)
102
104
  @response_types.each do |response_type|
103
- xml_element.add_element(RESPONSE_TYPE_ELEMENT_NAME).add_text(response_type)
105
+ xml_element.add_element(RESPONSE_TYPE_ELEMENT_NAME).add_text(response_type.to_s)
104
106
  end
105
- xml_element.add_element(URGENCY_ELEMENT_NAME).add_text(@urgency)
106
- xml_element.add_element(SEVERITY_ELEMENT_NAME).add_text(@severity)
107
- xml_element.add_element(CERTAINTY_ELEMENT_NAME).add_text(@certainty)
108
- xml_element.add_element(AUDIENCE_ELEMENT_NAME).add_text(@audience) if @audience
107
+ xml_element.add_element(URGENCY_ELEMENT_NAME).add_text(@urgency.to_s)
108
+ xml_element.add_element(SEVERITY_ELEMENT_NAME).add_text(@severity.to_s)
109
+ xml_element.add_element(CERTAINTY_ELEMENT_NAME).add_text(@certainty.to_s)
110
+ xml_element.add_element(AUDIENCE_ELEMENT_NAME).add_text(@audience.to_s) if @audience
109
111
  @event_codes.each do |event_code|
110
112
  xml_element.add_element(event_code.to_xml_element)
111
113
  end
112
114
  xml_element.add_element(EFFECTIVE_ELEMENT_NAME).add_text(@effective.to_s_for_cap) if @effective
113
115
  xml_element.add_element(ONSET_ELEMENT_NAME).add_text(@onset.to_s_for_cap) if @onset
114
116
  xml_element.add_element(EXPIRES_ELEMENT_NAME).add_text(@expires.to_s_for_cap) if @expires
115
- xml_element.add_element(SENDER_NAME_ELEMENT_NAME).add_text(@sender_name) if @sender_name
116
- xml_element.add_element(HEADLINE_ELEMENT_NAME).add_text(@headline) if @headline
117
- xml_element.add_element(DESCRIPTION_ELEMENT_NAME).add_text(@description) if @description
118
- xml_element.add_element(INSTRUCTION_ELEMENT_NAME).add_text(@instruction) if @instruction
119
- xml_element.add_element(WEB_ELEMENT_NAME).add_text(@web) if @web
120
- xml_element.add_element(CONTACT_ELEMENT_NAME).add_text(@contact) if @contact
117
+ xml_element.add_element(SENDER_NAME_ELEMENT_NAME).add_text(@sender_name.to_s) if @sender_name
118
+ xml_element.add_element(HEADLINE_ELEMENT_NAME).add_text(@headline.to_s) if @headline
119
+ xml_element.add_element(DESCRIPTION_ELEMENT_NAME).add_text(@description.to_s) if @description
120
+ xml_element.add_element(INSTRUCTION_ELEMENT_NAME).add_text(@instruction.to_s) if @instruction
121
+ xml_element.add_element(WEB_ELEMENT_NAME).add_text(@web.to_s) if @web
122
+ xml_element.add_element(CONTACT_ELEMENT_NAME).add_text(@contact.to_s) if @contact
121
123
  @parameters.each do |parameter|
122
124
  xml_element.add_element(parameter.to_xml_element)
123
125
  end
@@ -147,27 +149,27 @@ module RCAP
147
149
 
148
150
  # @return [String]
149
151
  def inspect
150
- info_inspect = "Language: #{ @language }\n"\
151
- "Categories: #{ @categories.to_s_for_cap }\n"\
152
- "Event: #{ @event }\n"\
153
- "Response Types: #{ @response_types.to_s_for_cap }\n"\
154
- "Urgency: #{ @urgency }\n"\
155
- "Severity: #{ @severity }\n"\
156
- "Certainty: #{ @certainty }\n"\
157
- "Audience: #{ @audience }\n"\
158
- "Event Codes: #{ @event_codes.inspect }\n"\
159
- "Effective: #{ @effective }\n"\
160
- "Onset: #{ @onset }\n"\
161
- "Expires: #{ @expires }\n"\
162
- "Sender Name: #{ @sender_name }\n"\
163
- "Headline: #{ @headline }\n"\
164
- "Description:\n" + @description.to_s.lines.map { |line| ' ' + line }.join("\n") + "\n"\
165
- "Instruction: #{ @instruction }\n"\
166
- "Web: #{ @web }\n"\
167
- "Contact: #{ @contact }\n"\
168
- "Parameters:\n" + @parameters.map { |parameter| ' ' + parameter.inspect }.join("\n") + "\n"\
169
- "Resources:\n" + @resources.map { |resource| ' ' + resource.inspect }.join("\n") + "\n"\
170
- "Area:\n" + @areas.map { |area| " #{ area }" }.join("\n") + "\n"
152
+ info_inspect = "Language: #{@language}\n"\
153
+ "Categories: #{@categories.to_s_for_cap}\n"\
154
+ "Event: #{@event}\n"\
155
+ "Response Types: #{@response_types.to_s_for_cap}\n"\
156
+ "Urgency: #{@urgency}\n"\
157
+ "Severity: #{@severity}\n"\
158
+ "Certainty: #{@certainty}\n"\
159
+ "Audience: #{@audience}\n"\
160
+ "Event Codes: #{@event_codes.inspect}\n"\
161
+ "Effective: #{@effective}\n"\
162
+ "Onset: #{@onset}\n"\
163
+ "Expires: #{@expires}\n"\
164
+ "Sender Name: #{@sender_name}\n"\
165
+ "Headline: #{@headline}\n"\
166
+ "Description:\n" + @description.to_s.lines.map { |line| ' ' + line }.join("\n") + "\n"\
167
+ "Instruction: #{@instruction}\n"\
168
+ "Web: #{@web}\n"\
169
+ "Contact: #{@contact}\n"\
170
+ "Parameters:\n" + @parameters.map { |parameter| ' ' + parameter.inspect }.join("\n") + "\n"\
171
+ "Resources:\n" + @resources.map { |resource| ' ' + resource.inspect }.join("\n") + "\n"\
172
+ "Area:\n" + @areas.map { |area| " #{area}" }.join("\n") + "\n"
171
173
  RCAP.format_lines_for_inspect('INFO', info_inspect)
172
174
  end
173
175
 
@@ -176,14 +178,14 @@ module RCAP
176
178
  #
177
179
  # @return [String]
178
180
  def to_s
179
- "#{ @event }(#{ @urgency }/#{ @severity }/#{ @certainty })"
181
+ "#{@event}(#{@urgency}/#{@severity}/#{@certainty})"
180
182
  end
181
183
 
182
184
  RESPONSE_TYPES_YAML = 'Response Types'
183
185
 
184
186
  # @return [Hash]
185
187
  def to_yaml_data
186
- parameter_to_hash = lambda { |hash, parameter| hash.merge(parameter.name => parameter.value) }
188
+ parameter_to_hash = ->(hash, parameter) { hash.merge(parameter.name => parameter.value) }
187
189
 
188
190
  RCAP.attribute_values_to_hash([LANGUAGE_YAML, @language],
189
191
  [CATEGORIES_YAML, @categories],
@@ -244,10 +246,10 @@ module RCAP
244
246
  [INSTRUCTION_KEY, @instruction],
245
247
  [WEB_KEY, @web],
246
248
  [CONTACT_KEY, @contact],
247
- [RESOURCES_KEY, @resources.map { |resource| resource.to_h }],
248
- [EVENT_CODES_KEY, @event_codes.map { |event_code| event_code.to_h }],
249
- [PARAMETERS_KEY, @parameters.map { |parameter| parameter.to_h }],
250
- [AREAS_KEY, @areas.map { |area| area.to_h }])
249
+ [RESOURCES_KEY, @resources.map(&:to_h)],
250
+ [EVENT_CODES_KEY, @event_codes.map(&:to_h)],
251
+ [PARAMETERS_KEY, @parameters.map(&:to_h)],
252
+ [AREAS_KEY, @areas.map(&:to_h)])
251
253
  end
252
254
 
253
255
  # @param [Hash] info_hash