Class: Overcommit::Configuration

Inherits:
Object
  • Object
show all
Defined in:
lib/overcommit/configuration.rb

Overview

Stores configuration for Overcommit and the hooks it runs.

Instance Method Summary collapse

Constructor Details

#initialize(hash) ⇒ Configuration

Creates a configuration from the given hash.



5
6
7
8
# File 'lib/overcommit/configuration.rb', line 5

def initialize(hash)
  @hash = hash
  validate
end

Instance Method Details

#==(other) ⇒ Object Also known as: eql?



10
11
12
# File 'lib/overcommit/configuration.rb', line 10

def ==(other)
  super || @hash == other.hash
end

#apply_environment!(hook_context, env) ⇒ Object

Applies additional configuration settings based on the provided environment variables.



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
# File 'lib/overcommit/configuration.rb', line 54

def apply_environment!(hook_context, env)
  skipped_hooks = "#{env['SKIP']} #{env['SKIP_CHECKS']} #{env['SKIP_HOOKS']}".split(/[:, ]/)
  hook_type = hook_context.hook_class_name

  if skipped_hooks.include?('all') || skipped_hooks.include?('ALL')
    @hash[hook_type]['ALL']['skip'] = true
  else
    skipped_hooks.select { |hook_name| hook_exists?(hook_context, hook_name) }.
                  map { |hook_name| Overcommit::Utils.camel_case(hook_name) }.
                  each do |hook_name|
      @hash[hook_type][hook_name] ||= {}
      @hash[hook_type][hook_name]['skip'] = true
    end
  end
end

#enabled_builtin_hooks(hook_context) ⇒ Object

Returns the built-in hooks that have been enabled for a hook type.



26
27
28
29
30
31
# File 'lib/overcommit/configuration.rb', line 26

def enabled_builtin_hooks(hook_context)
  @hash[hook_context.hook_class_name].keys.
    select { |hook_name| hook_name != 'ALL' }.
    select { |hook_name| built_in_hook?(hook_context, hook_name) }.
    select { |hook_name| hook_enabled?(hook_context, hook_name) }
end

#for_hook(hook, hook_type = nil) ⇒ Object

Returns a non-modifiable configuration for a hook.



34
35
36
37
38
39
40
41
42
43
# File 'lib/overcommit/configuration.rb', line 34

def for_hook(hook, hook_type = nil)
  unless hook_type
    components = hook.class.name.split('::')
    hook = components.last
    hook_type = components[-2]
  end

  # Merge hook configuration with special 'ALL' config
  smart_merge(@hash[hook_type]['ALL'], @hash[hook_type][hook] || {}).freeze
end

#merge(config) ⇒ Object

Merges the given configuration with this one, returning a new Overcommit::Configuration. The provided configuration will either add to or replace any options defined in this configuration.



48
49
50
# File 'lib/overcommit/configuration.rb', line 48

def merge(config)
  self.class.new(smart_merge(@hash, config.hash))
end

#plugin_directoryObject

Returns absolute path to the directory that external hook plugins should be loaded from.



17
18
19
# File 'lib/overcommit/configuration.rb', line 17

def plugin_directory
  File.join(Overcommit::Utils.repo_root, @hash['plugin_directory'] || '.githooks')
end

#verify_plugin_signatures?Boolean

Returns:

  • (Boolean)


21
22
23
# File 'lib/overcommit/configuration.rb', line 21

def verify_plugin_signatures?
  @hash['verify_plugin_signatures'] != false
end