Class: God::Contact
Direct Known Subclasses
God::Contacts::Campfire, God::Contacts::Email, God::Contacts::Jabber, God::Contacts::Twitter, God::Contacts::Webhook
Instance Attribute Summary collapse
-
#group ⇒ Object
Returns the value of attribute group.
-
#info ⇒ Object
Returns the value of attribute info.
-
#name ⇒ Object
Returns the value of attribute name.
Class Method Summary collapse
- .generate(kind) ⇒ Object
-
.normalize(spec) ⇒ Object
Normalize the given notify specification into canonical form.
- .valid?(contact) ⇒ Boolean
Instance Method Summary collapse
-
#friendly_name ⇒ Object
Construct the friendly name of this Contact, looks like:.
-
#notify(message, time, priority, category, host) ⇒ Object
Abstract Send the message to the external source
message
is the message body returned from the conditiontime
is the Time at which the notification was madepriority
is the arbitrary priority Stringcategory
is the arbitrary category Stringhost
is the hostname of the server.
Methods included from Configurable
#base_name, complain, #complain, #prepare, #reset, #valid?
Instance Attribute Details
#group ⇒ Object
Returns the value of attribute group.
6 7 8 |
# File 'lib/god/contact.rb', line 6 def group @group end |
#info ⇒ Object
Returns the value of attribute info.
6 7 8 |
# File 'lib/god/contact.rb', line 6 def info @info end |
#name ⇒ Object
Returns the value of attribute name.
6 7 8 |
# File 'lib/god/contact.rb', line 6 def name @name end |
Class Method Details
.generate(kind) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/god/contact.rb', line 8 def self.generate(kind) sym = kind.to_s.capitalize.gsub(/_(.)/){$1.upcase}.intern c = God::Contacts.const_get(sym).new unless c.kind_of?(Contact) abort "Contact '#{c.class.name}' must subclass God::Contact" end c rescue NameError raise NoSuchContactError.new("No Contact found with the class name God::Contacts::#{sym}") end |
.normalize(spec) ⇒ Object
Normalize the given notify specification into canonical form.
+spec+ is the notify spec as a String, Array of Strings, or Hash
Canonical form looks like: => [‘fred’, ‘john’], :priority => ‘1’, :category => ‘awesome’ Where :contacts will be present and point to an Array of Strings. Both :priority and :category may not be present but if they are, they will each contain a single String.
Returns normalized notify spec Raises ArgumentError on invalid spec (message contains details)
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/god/contact.rb', line 38 def self.normalize(spec) case spec when String {:contacts => Array(spec)} when Array unless spec.select { |x| !x.instance_of?(String) }.empty? raise ArgumentError.new("contains non-String elements") end {:contacts => spec} when Hash copy = spec.dup # check :contacts if contacts = copy.delete(:contacts) case contacts when String # valid when Array unless contacts.select { |x| !x.instance_of?(String) }.empty? raise ArgumentError.new("has a :contacts key containing non-String elements") end # valid else raise ArgumentError.new("must have a :contacts key pointing to a String or Array of Strings") end else raise ArgumentError.new("must have a :contacts key") end # remove priority and category copy.delete(:priority) copy.delete(:category) # check for invalid keys unless copy.empty? raise ArgumentError.new("contains extra elements: #{copy.inspect}") end # normalize spec[:contacts] &&= Array(spec[:contacts]) spec[:priority] &&= spec[:priority].to_s spec[:category] &&= spec[:category].to_s spec else raise ArgumentError.new("must be a String (contact name), Array (of contact names), or Hash (contact specification)") end end |
.valid?(contact) ⇒ Boolean
21 22 23 24 25 |
# File 'lib/god/contact.rb', line 21 def self.valid?(contact) valid = true valid &= Configurable.complain("Attribute 'name' must be specified", contact) if contact.name.nil? valid end |
Instance Method Details
#friendly_name ⇒ Object
Construct the friendly name of this Contact, looks like:
Contact FooBar
101 102 103 |
# File 'lib/god/contact.rb', line 101 def friendly_name super + " Contact '#{self.name}'" end |
#notify(message, time, priority, category, host) ⇒ Object
Abstract Send the message to the external source
+message+ is the message body returned from the condition
+time+ is the Time at which the notification was made
+priority+ is the arbitrary priority String
+category+ is the arbitrary category String
+host+ is the hostname of the server
94 95 96 |
# File 'lib/god/contact.rb', line 94 def notify(, time, priority, category, host) raise AbstractMethodNotOverriddenError.new("Contact#notify must be overridden in subclasses") end |