lib/tape.rb in taperole-1.3.2 vs lib/tape.rb in taperole-1.3.3

- old
+ new

@@ -1,7 +1,9 @@ require 'erb' require 'fileutils' +require 'yaml' +require_relative 'tape/notifiers/slack.rb' module TapeBoxer class InvalidAction < StandardError; end class ActionError < StandardError; end class UnspecifiedOption < StandardError; end @@ -18,11 +20,11 @@ end class ExecutionModule attr_reader :opts def initialize(opts) - @opts = opts + @opts = opts || {} end def self.actions @actions end @@ -60,18 +62,49 @@ end self.instance_eval &actions[action].proc end + def config + @config ||= YAML.load_file("#{tapefiles_dir}/tape_vars.yml") + end + + def deploy_info + { + app_name: config["app_name"], + user: `whoami`.chomp, + hosts: opts.host_pattern || 'default', + repo: config["be_app_repo"] || '' + } + end + protected def require_opt(name) unless opts[name.to_sym] raise UnspecifiedOption, "Option --#{name} must be specified to do this!" end end private + + def register_notifiers + if config["slack_webhook_url"] + add_observer(::SlackNotifier.new(config["slack_webhook_url"], deploy_info)) + end + end + + def add_observer(observer) + @observers = [] unless @observers + @observers.push(observer) + end + + def notify_observers(state) + @observers.each do |observer| + observer.update(state) + end + end + def tape_dir File.realpath(File.join(__dir__, '../')) end def local_dir