Sha256: 315be885b2e3f1638af7866b581c48f50821c43125dda69ef2e51e700832426a

Contents?: true

Size: 1.65 KB

Versions: 91

Compression:

Stored size: 1.65 KB

Contents

module Actions
  module Middleware
    class KeepCurrentTaxonomies < Dynflow::Middleware
      def delay(*args)
        pass(*args).tap { store_current_taxonomies }
      end

      def plan(*args)
        with_current_taxonomies do
          pass(*args).tap { store_current_taxonomies }
        end
      end

      def run(*args)
        restore_current_taxonomies { pass(*args) }
      end

      def finalize
        restore_current_taxonomies { pass }
      end

      def hook(*args)
        restore_current_taxonomies { pass(*args) }
      end

      private

      def with_current_taxonomies
        if current_taxonomies?
          yield
        else
          restore_current_taxonomies { yield }
        end
      end

      def store_current_taxonomies
        action.input[:current_organization_id] = Organization.current.try(:id)
        action.input[:current_location_id] = Location.current.try(:id)
      end

      def restore_current_taxonomies
        old_taxonomies = [Organization, Location].reduce({}) { |acc, taxonomy| acc.merge(taxonomy => taxonomy.current) }
        Organization.current = Organization.unscoped.find(action.input[:current_organization_id]) if action.input[:current_organization_id].present?
        Location.current = Location.unscoped.find(action.input[:current_location_id]) if action.input[:current_location_id].present?
        yield
      ensure
        old_taxonomies.each { |taxonomy, value| taxonomy.current = value }
      end

      def current_taxonomies?
        (Organization.current || action.input[:current_organization_id].nil?) &&
          (Location.current || action.input[:current_location_id].nil?)
      end
    end
  end
end

Version data entries

91 entries across 91 versions & 1 rubygems

Version Path
foreman-tasks-10.0.2 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-10.0.1 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-10.0.0 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-9.2.3 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-9.2.2 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-9.2.1 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-9.2.0 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-9.1.1 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-9.0.4 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-9.1.0 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-9.0.2 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-9.0.1 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-8.3.3 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-9.0.0 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-8.2.1 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-8.1.4 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-8.3.2 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-8.3.1 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-8.1.3 app/lib/actions/middleware/keep_current_taxonomies.rb
foreman-tasks-8.3.0 app/lib/actions/middleware/keep_current_taxonomies.rb