Sha256: cb422fcb84ca520de51c4660eecb0d95d6614a1ad893b2cb71bfe8e8010602f8

Contents?: true

Size: 1.41 KB

Versions: 4

Compression:

Stored size: 1.41 KB

Contents

module CurationConcerns
  module CurationConcern
    # Returns the top-level actor on the stack
    def self.actor(curation_concern, current_user)
      ActorStack.new(curation_concern, current_user,
                     [AddToCollectionActor,
                      AssignRepresentativeActor,
                      AttachFilesActor,
                      ApplyOrderActor,
                      InterpretVisibilityActor,
                      model_actor(curation_concern),
                      AssignIdentifierActor])
    end

    def self.model_actor(curation_concern)
      actor_identifier = curation_concern.class.to_s.split('::').last
      "CurationConcerns::#{actor_identifier}Actor".constantize
    end

    class ActorStack
      attr_reader :curation_concern, :user, :first_actor_class, :more_actors
      def initialize(curation_concern, user, more_actors)
        @curation_concern = curation_concern
        @user = user
        @more_actors = more_actors
        @first_actor_class = @more_actors.shift || RootActor
      end

      def inner_stack
        ActorStack.new(curation_concern, user, more_actors)
      end

      def actor
        first_actor_class.new(curation_concern, user, inner_stack)
      end

      def create(attributes)
        actor.create(attributes.with_indifferent_access)
      end

      def update(attributes)
        actor.update(attributes.with_indifferent_access)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
curation_concerns-0.12.0.pre4 app/services/curation_concerns/curation_concern.rb
curation_concerns-0.12.0.pre3 app/services/curation_concerns/curation_concern.rb
curation_concerns-0.12.0.pre2 app/services/curation_concerns/curation_concern.rb
curation_concerns-0.12.0.pre1 app/services/curation_concerns/curation_concern.rb