Sha256: f45dfea83f6fe8a218c3ad453416956f62037d04d3a021ce2368a198f44f943d

Contents?: true

Size: 1.5 KB

Versions: 12

Compression:

Stored size: 1.5 KB

Contents

module Cellect
  module Server
    class User
      include Celluloid
      include Celluloid::Logger
      
      trap_exit :workflow_crashed
      finalizer :cancel_ttl_timer
      
      attr_accessor :id, :workflow_name, :seen, :state
      attr_accessor :ttl, :ttl_timer
      
      def initialize(id, workflow_name: nil, ttl: nil)
        self.id = id
        self.workflow_name = workflow_name
        self.seen = DiffSet::RandomSet.new
        monitor Workflow[workflow_name]
        @ttl = ttl
        load_data
      end
      
      def load_data
        data = Cellect::Server.adapter.load_user(workflow_name, id) || []
        data.each do |subject_id|
          @seen.add subject_id
        end
        self.state = :ready
        restart_ttl_timer
      end
      
      def seen
        restart_ttl_timer
        @seen
      end
      
      def state_changed(topic, state)
        restart_ttl_timer if state == :ready && ttl
      end
      
      def restart_ttl_timer
        self.ttl_timer ||= after(ttl){ ttl_expired! }
        ttl_timer.reset
      end
      
      def cancel_ttl_timer
        ttl_timer.cancel if ttl_timer
        self.ttl_timer = nil
      end
      
      def ttl_expired!
        debug "User #{ id } TTL expired"
        cancel_ttl_timer
        Workflow[workflow_name].async.remove_user(id)
      end
      
      def ttl
        @ttl || 60 * 15 # 15 minutes
      end
      
      def workflow_crashed(actor, reason)
        cancel_ttl_timer
        terminate
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
cellect-server-0.1.2.pre.jruby lib/cellect/server/user.rb
cellect-server-0.1.2 lib/cellect/server/user.rb
cellect-server-0.1.1 lib/cellect/server/user.rb
cellect-server-0.1.0 lib/cellect/server/user.rb
cellect-server-0.0.9 lib/cellect/server/user.rb
cellect-server-0.0.8 lib/cellect/server/user.rb
cellect-server-0.0.7 lib/cellect/server/user.rb
cellect-server-0.0.6 lib/cellect/server/user.rb
cellect-server-0.0.5 lib/cellect/server/user.rb
cellect-server-0.0.4 lib/cellect/server/user.rb
cellect-server-0.0.3 lib/cellect/server/user.rb
cellect-server-0.0.2 lib/cellect/server/user.rb