Class: Featurevisor::Hooks::HooksManager

Inherits:
Object
  • Object
show all
Defined in:
lib/featurevisor/hooks.rb

Overview

HooksManager class for managing hooks

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ HooksManager

Initialize a new HooksManager

Parameters:

  • options (Hash)

    Options hash containing hooks and logger

Options Hash (options):

  • :hooks (Array<Hook>)

    Array of hooks

  • :logger (Logger)

    Logger instance



71
72
73
74
75
76
77
78
79
80
# File 'lib/featurevisor/hooks.rb', line 71

def initialize(options)
  @logger = options[:logger]
  @hooks = []

  if options[:hooks]
    options[:hooks].each do |hook|
      add(hook)
    end
  end
end

Instance Attribute Details

#hooksObject (readonly)

Returns the value of attribute hooks.



65
66
67
# File 'lib/featurevisor/hooks.rb', line 65

def hooks
  @hooks
end

#loggerObject (readonly)

Returns the value of attribute logger.



65
66
67
# File 'lib/featurevisor/hooks.rb', line 65

def logger
  @logger
end

Instance Method Details

#add(hook) ⇒ Proc?

Add a hook to the manager

Parameters:

  • hook (Hook)

    Hook to add

Returns:

  • (Proc, nil)

    Remove function or nil if hook already exists



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'lib/featurevisor/hooks.rb', line 85

def add(hook)
  if @hooks.any? { |existing_hook| existing_hook.name == hook.name }
    @logger.error("Hook with name \"#{hook.name}\" already exists.", {
      name: hook.name,
      hook: hook
    })

    return nil
  end

  @hooks << hook

  # Return a remove function
  -> { remove(hook.name) }
end

#get_allArray<Hook>

Get all hooks

Returns:

  • (Array<Hook>)

    Array of all hooks



109
110
111
# File 'lib/featurevisor/hooks.rb', line 109

def get_all
  @hooks
end

#remove(name) ⇒ Object

Remove a hook by name

Parameters:

  • name (String)

    Hook name to remove



103
104
105
# File 'lib/featurevisor/hooks.rb', line 103

def remove(name)
  @hooks = @hooks.reject { |hook| hook.name == name }
end

#run_after_hooks(evaluation, options) ⇒ Hash

Run after hooks

Parameters:

  • evaluation (Hash)

    Evaluation result

  • options (Hash)

    Evaluation options

Returns:

  • (Hash)

    Modified evaluation result



150
151
152
153
154
155
156
# File 'lib/featurevisor/hooks.rb', line 150

def run_after_hooks(evaluation, options)
  result = evaluation
  @hooks.each do |hook|
    result = hook.call_after(result, options)
  end
  result
end

#run_before_hooks(options) ⇒ Hash

Run before hooks

Parameters:

  • options (Hash)

    Evaluation options

Returns:

  • (Hash)

    Modified evaluation options



116
117
118
119
120
121
122
# File 'lib/featurevisor/hooks.rb', line 116

def run_before_hooks(options)
  result = options
  @hooks.each do |hook|
    result = hook.call_before(result)
  end
  result
end

#run_bucket_key_hooks(options) ⇒ String

Run bucket key hooks

Parameters:

  • options (Hash)

    Bucket key options

Returns:

  • (String)

    Modified bucket key



127
128
129
130
131
132
133
# File 'lib/featurevisor/hooks.rb', line 127

def run_bucket_key_hooks(options)
  bucket_key = options[:bucket_key]
  @hooks.each do |hook|
    bucket_key = hook.call_bucket_key(options.merge(bucket_key: bucket_key))
  end
  bucket_key
end

#run_bucket_value_hooks(options) ⇒ Integer

Run bucket value hooks

Parameters:

  • options (Hash)

    Bucket value options

Returns:

  • (Integer)

    Modified bucket value



138
139
140
141
142
143
144
# File 'lib/featurevisor/hooks.rb', line 138

def run_bucket_value_hooks(options)
  bucket_value = options[:bucket_value]
  @hooks.each do |hook|
    bucket_value = hook.call_bucket_value(options.merge(bucket_value: bucket_value))
  end
  bucket_value
end