Sha256: 81b51aaf72da6c6819de35ebdb89b85d7420081cd8a335d03c7ee4e14a3c74ba

Contents?: true

Size: 1.66 KB

Versions: 12

Compression:

Stored size: 1.66 KB

Contents

module Cellect
  module Server
    class GroupedWorkflow < Workflow
      attr_accessor :groups
      
      def initialize(name, pairwise: false, prioritized: false)
        self.groups = { }
        super
      end
      
      def load_data
        self.state = :initializing
        self.groups = { }
        klass = set_klass
        Cellect::Server.adapter.load_data_for(name).each do |hash|
          self.groups[hash['group_id']] ||= klass.new
          self.groups[hash['group_id']].add hash['id'], hash['priority']
        end
        self.state = :ready
      end
      
      def group(group_id = nil)
        groups[group_id] || groups.values.sample
      end
      
      def unseen_for(user_name, group_id: nil, limit: 5)
        group(group_id).subtract user(user_name).seen, limit
      end
      
      def sample(opts = { })
        if opts[:user_id]
          unseen_for opts[:user_id], group_id: opts[:group_id], limit: opts[:limit]
        else
           group(opts[:group_id]).sample opts[:limit]
        end
      end
      
      def add(opts = { })
        if prioritized?
          groups[opts[:group_id]].add opts[:subject_id], opts[:priority]
        else
          groups[opts[:group_id]].add opts[:subject_id]
        end
      end
      
      def remove(opts = { })
        groups[opts[:group_id]].remove opts[:subject_id]
      end
      
      def status
        group_counts = Hash[*groups.collect{ |id, set| [id, set.size] }.flatten]
        
        super.merge({
          grouped: true,
          subjects: group_counts.values.inject(:+),
          groups: group_counts
        })
      end
      
      def grouped?
        true
      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/grouped_workflow.rb
cellect-server-0.1.2 lib/cellect/server/grouped_workflow.rb
cellect-server-0.1.1 lib/cellect/server/grouped_workflow.rb
cellect-server-0.1.0 lib/cellect/server/grouped_workflow.rb
cellect-server-0.0.9 lib/cellect/server/grouped_workflow.rb
cellect-server-0.0.8 lib/cellect/server/grouped_workflow.rb
cellect-server-0.0.7 lib/cellect/server/grouped_workflow.rb
cellect-server-0.0.6 lib/cellect/server/grouped_workflow.rb
cellect-server-0.0.5 lib/cellect/server/grouped_workflow.rb
cellect-server-0.0.4 lib/cellect/server/grouped_workflow.rb
cellect-server-0.0.3 lib/cellect/server/grouped_workflow.rb
cellect-server-0.0.2 lib/cellect/server/grouped_workflow.rb