Created
March 21, 2020 19:11
-
-
Save veronicacannon/51ff1bbb88cda6dc59bff2bb2593046f to your computer and use it in GitHub Desktop.
Logging example of observer pattern
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# frozen_string_literal: true | |
# observable object aka subject | |
module Observable | |
def attach_observer(observer) | |
@observers ||= [] | |
@observers << observer unless @observers.include?(observer) | |
end | |
def remove_observer(observer) | |
@observers.delete(observer) | |
end | |
end | |
# observable object aka subject | |
class Logger | |
include Observable | |
def record(msg, level = :info, status = 200) | |
log_entry = { level: level, status: status, msg: msg } | |
puts "sent #{log_entry} to Splunk" | |
notify(log_entry) | |
end | |
def notify(log_entry) | |
@observers.each do |observer| | |
puts "sent #{log_entry} to #{observer.email}" | |
end | |
end | |
end | |
api_log = Logger.new | |
Observer = Struct.new(:log_level, :email) | |
sre = Observer.new(:info, '[email protected]') | |
dev = Observer.new(:error, '[email protected]') | |
api_log.attach_observer(sre) | |
api_log.attach_observer(dev) | |
def call_api(api_log, _request) | |
# form request | |
begin | |
# make api call | |
api_log.record('got all the cat gifs', :info, 200) | |
rescue => e | |
api_log.record(e, :error, 500) | |
end | |
end | |
call_api(api_log, 'get cat gifs') |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment