Sha256: ed29066bcfebf5ad48073c1cfbee9f88c4a91acd6c06042c3988a2674f6e6c77

Contents?: true

Size: 1.24 KB

Versions: 6

Compression:

Stored size: 1.24 KB

Contents

# frozen_string_literal: true

require 'avm/jobs/variables_source'
require 'eac_cli/core_ext'

module Avm
  module Jobs
    module Base
      common_concern do
        include ::ActiveSupport::Callbacks

        enable_speaker
        enable_simple_cache
        enable_listable
        common_constructor :instance, :options, default: [{}] do
          if option_list.present?
            self.options = option_list.hash_keys_validate!(options.symbolize_keys)
          end
        end
        define_callbacks(*jobs)
      end

      module ClassMethods
        def jobs
          const_get('JOBS').dup
        end
      end

      module InstanceMethods
        def option_list
          nil
        end

        def run
          start_banner if respond_to?(:start_banner)
          run_jobs
          ::Avm::Result.success('Done!')
        rescue ::Avm::Result::Error => e
          e.to_result
        end

        def variables_source
          ::Avm::Jobs::VariablesSource.new(self, instance)
        end

        protected

        def run_jobs
          jobs.each do |job|
            run_callbacks job do
              send(job)
            end
          end
        end

        def jobs
          self.class.jobs
        end
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
avm-0.6.0 lib/avm/jobs/base.rb
avm-tools-0.109.0 vendor/avm/lib/avm/jobs/base.rb
avm-0.5.0 lib/avm/jobs/base.rb
avm-tools-0.108.0 vendor/avm/lib/avm/jobs/base.rb
avm-0.4.0 lib/avm/jobs/base.rb
avm-tools-0.107.0 vendor/avm/lib/avm/jobs/base.rb