class CaptainHoog::PreGit
Public: Entry class for handling a Pre-Something with plugins.
Public Class Methods
configure() { |self| ... }
click to toggle source
Public: Configures the hook by calling the class' accessors.
Returns nothing.
# File lib/captain_hoog/pre_git.rb, line 41 def self.configure yield(self) if block_given? end
new(plugins_list = nil)
click to toggle source
# File lib/captain_hoog/pre_git.rb, line 51 def initialize(plugins_list = nil) @plugins = [] @plugins_list = plugins_list prepare_plugins end
plugins_dir=(plugins_dir)
click to toggle source
# File lib/captain_hoog/pre_git.rb, line 45 def self.plugins_dir=(plugins_dir) @plugins_dir = [] PluginDirs.collect(@plugins_dir) (@plugins_dir << plugins_dir).flatten! end
run(plugins_list: nil)
click to toggle source
Public: Runs the hook.
Inits a new instance of self and evaluates the plugins (if found some)
Returns an instance of self (CaptainHoog::PreGit
)
# File lib/captain_hoog/pre_git.rb, line 32 def self.run(plugins_list: nil) pre_git = self.new(plugins_list) pre_git.plugins_eval pre_git end
Public Instance Methods
plugins_eval()
click to toggle source
Public: Evaluates all plugins that are found in plugins_dir.
If any plugin contains a test that returns false (means it fails) it displays the plugins failure messages and exits with code 1
# File lib/captain_hoog/pre_git.rb, line 62 def plugins_eval raw_results = available_plugins.inject([]) do |result, plugin| result << plugin.execute end @results = raw_results.select{ |result| result.is_a?(Hash) } tests = @results.map{ |result| result[:result] } if tests.any?{ |test| not test } message_on_failure exit 1 unless ENV["PREGIT_ENV"] == "test" else message_on_success exit 0 unless ENV["PREGIT_ENV"] == "test" end end
Private Instance Methods
available_plugins()
click to toggle source
# File lib/captain_hoog/pre_git.rb, line 79 def available_plugins @plugins.inject([]) do |result, item| item.eval_plugin result << item if @plugins_list.has?(item) result end end
default_messages()
click to toggle source
# File lib/captain_hoog/pre_git.rb, line 117 def default_messages { success: "All tests passed. No reason to prevent the commit.", failure: "Commit failed. See errors below." } end
defined_message_on(type)
click to toggle source
# File lib/captain_hoog/pre_git.rb, line 109 def defined_message_on(type) if self.class.send("headline_on_#{type}") self.class.send("headline_on_#{type}") else default_messages[type] end end
message_on_failure()
click to toggle source
# File lib/captain_hoog/pre_git.rb, line 99 def message_on_failure unless self.class.suppress_headline puts defined_message_on(:failure) puts "\n" @results.select{|result| not result[:result] }.each do |result| puts result[:message].call(no_color: false) end end end
message_on_success()
click to toggle source
# File lib/captain_hoog/pre_git.rb, line 95 def message_on_success puts defined_message_on(:success).green unless self.class.suppress_headline end
prepare_env()
click to toggle source
# File lib/captain_hoog/pre_git.rb, line 87 def prepare_env env = Env.new env[:project_dir] = self.class.project_dir env[:plugins_config] = self.class.plugins_conf env[:context ] = self.class.context env end
prepare_plugins()
click to toggle source
# File lib/captain_hoog/pre_git.rb, line 148 def prepare_plugins env = prepare_env plugins_dir = self.class.plugins_dir (plugins_dir.is_a?(Array) ? plugins_dir : Array(plugins_dir)).each do |dir| read_plugins_from_dir(dir, env) end end
read_plugins_from_dir(dir, env)
click to toggle source
# File lib/captain_hoog/pre_git.rb, line 132 def read_plugins_from_dir(dir, env) return unless dir unless File.basename(dir).match(/test/) Dir["#{dir}/**"].each do |file| if File.directory?(file) read_plugins_from_dir(file, env) else if File.extname(file).eql?(".rb") code = File.read(file) @plugins << Plugin.new(code,env) end end end end end