module Runbook::Extensions::SharedVariables::RunHooks

Public Class Methods

_copy_ivars_to_repo(object, metadata) click to toggle source
# File lib/runbook/extensions/shared_variables.rb, line 27
def self._copy_ivars_to_repo(object, metadata)
  target = _target(object)
  ivars = target.instance_variables - Runbook::DSL.dsl_ivars

  ivars.each do |ivar|
    repo_key = ivar.to_s[1..-1].to_sym
    val = target.instance_variable_get(ivar)
    metadata[:repo][repo_key] = val
  end
end
_eqls_method(key) click to toggle source
# File lib/runbook/extensions/shared_variables.rb, line 42
def self._eqls_method(key)
  "#{key}=".to_sym
end
_target(object) click to toggle source
# File lib/runbook/extensions/shared_variables.rb, line 38
def self._target(object)
  object.parent.dsl
end
register_shared_variables_hooks(base) click to toggle source
# File lib/runbook/extensions/shared_variables.rb, line 4
def self.register_shared_variables_hooks(base)
  base.register_hook(
    :set_ivars_hook,
    :before,
    Runbook::Statement,
  ) do |object, metadata|
    target = SharedVariables::RunHooks._target(object)
    metadata[:repo].each do |key, value|
      target.singleton_class.class_eval { attr_accessor key }
      target.send(SharedVariables::RunHooks._eqls_method(key), value)
    end
  end

  base.register_hook(
    :copy_ivars_to_repo_hook,
    :after,
    Runbook::Statement,
    before: :save_repo_hook
  ) do |object, metadata|
    SharedVariables::RunHooks._copy_ivars_to_repo(object, metadata)
  end
end