Class: Chook::TestEvent
Overview
An event that will be sent to a Webhook Server, simulating one from the JSS.
This is the parent class to all of the classes in the Chook::TestEvents module, which are dynamically defined when this file is loaded.
All constants, methods, and attributes that are common to TestEvent classes are defined here.
Constant Summary collapse
- EVENT_ATTRIBUTES =
%w(webhook_id webhook_name subject).freeze
Constants inherited from Event
Event::EVENTS, Event::EVENT_NAME_CONST, Event::SUBJECT_CLASS_CONST
Instance Attribute Summary
Attributes inherited from Event
#id, #parsed_json, #raw_json, #subject, #webhook_id, #webhook_name
Class Method Summary collapse
-
.generate_classes ⇒ void
For each event type in Chook::Event::EVENTS.keys generate a TestEvent class for it, set its SUBJECT_CLASS constant and add it to the TestEvents module.
Instance Method Summary collapse
-
#fire(server_url) ⇒ void
fire.
-
#initialize(event_data = nil) ⇒ TestEvent
constructor
initialize The optional argument is a Hash with the appropriate keys defiend.
-
#json_hash ⇒ Hash
json_hash Used by the fire method.
Constructor Details
#initialize(event_data = nil) ⇒ TestEvent
initialize The optional argument is a Hash with the appropriate keys defiend
127 128 129 130 131 132 133 134 135 136 |
# File 'lib/chook/event/test_event.rb', line 127 def initialize(event_data = nil) if event_data event_data.each do |key, value| next unless EVENT_ATTRIBUTES.include? key instance_variable_set(('@' + key.to_s), value) end # event_data.each else EVENT_ATTRIBUTES.each { |attribute| instance_variable_set(('@' + attribute.to_s), nil) } end # end if event_data end |
Class Method Details
.generate_classes ⇒ void
This method returns an undefined value.
For each event type in Chook::Event::EVENTS.keys generate a TestEvent class for it, set its SUBJECT_CLASS constant and add it to the TestEvents module.
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 |
# File 'lib/chook/event/test_event.rb', line 48 def self.generate_classes Chook::Event::EVENTS.each do |classname, subject| next if Chook::TestEvents.const_defined? classname # make the new TestEvent subclass new_class = Class.new(Chook::TestEvent) do # Setters & Getters EVENT_ATTRIBUTES.each do |attribute| # Getter attr_reader attribute # Setter if attribute == 'subject' define_method("#{attribute}=") do |new_val| raise "Invalid TestSubject: Chook::TestEvents::#{classname} requires a Chook::TestSubjects::#{EVENTS[classname]}" unless Chook::Validators.send(:valid_test_subject, classname, new_val) instance_variable_set(('@' + attribute.to_s), new_val) end # end define_method else define_method("#{attribute}=") do |new_val| instance_variable_set(('@' + attribute.to_s), new_val) end # end define_method end end # end EVENT_ATTRIBUTES.each do |attribute| end # end new_class # Set its EVENT_NAME constant new_class.const_set Chook::TestEvent::EVENT_NAME_CONST, classname # Set its SUBJECT_CLASS constant to the appropriate # class in the TestEvents module. new_class.const_set Chook::TestEvent::SUBJECT_CLASS_CONST, Chook::TestSubjects.const_get(subject) # Add the new class to the HandledEvents module. Chook::TestEvents.const_set(classname, new_class) end # each classname, subject end |
Instance Method Details
#fire(server_url) ⇒ void
This method returns an undefined value.
fire
112 113 114 115 116 117 118 119 |
# File 'lib/chook/event/test_event.rb', line 112 def fire(server_url) raise 'Please provide a destination server URL' unless server_url uri = URI.parse(server_url) raise 'Please provide a valid destination server URL' if uri.host.nil? data = json_hash.to_json # This is the structural equivalent of the Chook::Event @raw_json form http_connection = Net::HTTP.new uri.host, uri.port http_connection.post(uri, data) end |
#json_hash ⇒ Hash
json_hash Used by the fire method
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# File 'lib/chook/event/test_event.rb', line 88 def json_hash raw_hash_form = {} raw_hash_form['webhook'.to_sym] = { 'webhookEvent'.to_sym => self.class.to_s.split('::')[-1] } EVENT_ATTRIBUTES.each do |json_attribute| next if json_attribute.include? 'json' if json_attribute == 'subject' raw_hash_form['event'.to_sym] = instance_variable_get('@' + json_attribute).json_hash else json_hash_attribute = json_attribute.split('webhook_')[1] || json_attribute nested_hash = Hash.new do |hash, key| hash[key] = {} end # end nested_hash nested_hash[json_hash_attribute.to_sym] = instance_variable_get('@' + json_attribute) raw_hash_form['webhook'.to_sym][nested_hash.keys[0]] = nested_hash[nested_hash.keys[0]] end end # end EVENT_ATTRIBUTES.each do |json_attribute| raw_hash_form # This is the structural equivalent of the Chook::Event @json_hash form end |