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