Sha256: e3954d4ac17ea8c26a0bb20626deccb9bb43c9a2638ab9539e0fb59343fe946e

Contents?: true

Size: 1.62 KB

Versions: 4

Compression:

Stored size: 1.62 KB

Contents

require 'securerandom'
require 'workflow_rb/models/workflow_instance'

module WorkflowRb

  class MemoryPersistenceProvider

    def initialize
      @instances = []
      @subscriptions = []
      @unpublished_events = []
      @semaphore = Mutex.new
    end

    def create_new_workflow(workflow)
      workflow.id = SecureRandom.uuid
      @instances << workflow
      workflow.id
    end

    def persist_workflow(workflow)
      @semaphore.synchronize do
        @instances.delete_if {|item| item.id == workflow.id }
        @instances << workflow
      end
    end

    def get_workflow_instance(id)
      @instances.select {|item| item.id == id}.first
    end

    def get_runnable_instances
      @instances.select {|item| item.next_execution and (item.next_execution <= Time.new) and (item.status == WorkflowStatus::RUNNABLE)}
          .map {|item| item.id}
    end

    def create_subscription(subscription)
      subscription.id = SecureRandom.uuid
      @subscriptions << subscription
      subscription.id
    end

    def get_subscriptions(event_name, event_key)
      @subscriptions.select { |sub| sub.event_name == event_name and sub.event_key == event_key }
    end

    def terminate_subscription(id)
      @semaphore.synchronize do
        @subscriptions.delete_if { |sub| sub.id == id }
      end
    end

    def create_unpublished_event(pub)
      @unpublished_events << pub
    end

    def remove_unpublished_event(id)
      @unpublished_events.delete_if { |pub| pub.id == id }
    end

    def get_unpublished_events
      @unpublished_events
    end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
workflow_rb-0.1.3 lib/workflow_rb/services/memory_persistence_provider.rb
workflow_rb-0.1.2 lib/workflow_rb/services/memory_persistence_provider.rb
workflow_rb-0.1.1 lib/workflow_rb/services/memory_persistence_provider.rb
workflow_rb-0.1.0 lib/workflow_rb/services/memory_persistence_provider.rb