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