Rails.application.config.to_prepare do Rails.root.glob("lib/slack/notifier/util/*.rb").each do |filename| require_dependency filename end end class NoOpHTTPClient def self.post(uri, kwargs = {}) # bonus, you could log or observe posted params here end end module SlackNotifierInitializer def self.create_test_channel_notifier return create_stubbed_notifier if ApplicationConfig["SLACK_WEBHOOK_URL"].blank? Slack::Notifier.new( ApplicationConfig["SLACK_WEBHOOK_URL"], channel: "#test", username: "development_test_bot", ) end def self.create_stubbed_notifier Slack::Notifier.new "WEBHOOK_URL" do http_client NoOpHTTPClient end end def self.init_slack_client default_options = if Rails.env.production? { channel: ApplicationConfig["SLACK_CHANNEL"], username: "activity_bot" } elsif Rails.env.test? { channel: "#test", username: "development_test_bot" } end webhook_url = ApplicationConfig["SLACK_WEBHOOK_URL"] || "" use_no_op_client = Rails.env.test? || webhook_url.blank? Slack::Notifier.new(webhook_url) do defaults(default_options) http_client(NoOpHTTPClient) if use_no_op_client end end end SlackClient = SlackNotifierInitializer.init_slack_client