Skip to content

Instantly share code, notes, and snippets.

@thatrubylove
Last active August 29, 2015 14:00
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thatrubylove/11301224 to your computer and use it in GitHub Desktop.
Save thatrubylove/11301224 to your computer and use it in GitHub Desktop.
Open/Closed Example in #Ruby
require 'active_support/inflection'
Dir["./path/to/broadcasters/*.rb"].each {|broadcaster| require broadcaster }
module NewsDigestBroadcaster
extend self
def broadcast(user, preference)
broadcaster = Object.const_get("#{preference.capitalize}NewsDigestBroadcaster")
broadcaster.(user, news_digest)
end
alias_method :call, :broadcast
private
def news_digest
# logic to collect and build the news digest collection
end
end
module EmailNewsDigestBroadcaster
extend self
def email(user, news)
send_email(user, news)
end
alias_method :call, :email
private
def send_email(user, news)
# send the email
end
end
module ImNewsDigestBroadcaster
extend self
def im(user, news)
send_im(user, news)
end
alias_method :call, :im
private
def send_im(user, news)
# send the instant message
end
end
module TweetNewsDigestBroadcaster
extend self
def tweet(user, news)
send_tweet(user, news)
end
alias_method :call, :tweet
private
def send_tweet(user, news)
# send the tweet
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment