Sha256: 1183b4aaadc906f6cedba9fd14c7bfdb14c13bf7ab48cc4666608cd85c6db6df

Contents?: true

Size: 1.38 KB

Versions: 9

Compression:

Stored size: 1.38 KB

Contents

module Runbook::Extensions
  module SharedVariables
    module RunHooks
      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

      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

      def self._target(object)
        object.parent.dsl
      end

      def self._eqls_method(key)
        "#{key}=".to_sym
      end
    end
  end

  Runbook.runs.each do |run|
    SharedVariables::RunHooks.register_shared_variables_hooks(run)
  end
end

Version data entries

9 entries across 9 versions & 2 rubygems

Version Path
careacademy-runbook-1.2.0 lib/runbook/extensions/shared_variables.rb
runbook-1.1.0 lib/runbook/extensions/shared_variables.rb
runbook-1.0.0 lib/runbook/extensions/shared_variables.rb
runbook-0.16.1 lib/runbook/extensions/shared_variables.rb
runbook-0.16.0 lib/runbook/extensions/shared_variables.rb
runbook-0.15.0 lib/runbook/extensions/shared_variables.rb
runbook-0.14.0 lib/runbook/extensions/shared_variables.rb
runbook-0.13.0 lib/runbook/extensions/shared_variables.rb
runbook-0.12.1 lib/runbook/extensions/shared_variables.rb