Class: Cellect::Server::GroupedWorkflow

Inherits:
Workflow
  • Object
show all
Defined in:
lib/cellect/server/grouped_workflow.rb

Constant Summary

Constants inherited from Workflow

Workflow::SET_KLASS

Instance Attribute Summary collapse

Attributes inherited from Workflow

#name, #pairwise, #prioritized, #state, #subjects, #users

Instance Method Summary collapse

Methods inherited from Workflow

[], #add_seen_for, all, names, #pairwise?, #prioritized?, #ready?, #remove_user, #set_klass, #user

Constructor Details

#initialize(name, pairwise: false, prioritized: false) ⇒ GroupedWorkflow



6
7
8
9
# File 'lib/cellect/server/grouped_workflow.rb', line 6

def initialize(name, pairwise: false, prioritized: false)
  self.groups = { }
  super
end

Instance Attribute Details

#groupsObject

Returns the value of attribute groups.



4
5
6
# File 'lib/cellect/server/grouped_workflow.rb', line 4

def groups
  @groups
end

Instance Method Details

#add(opts = { }) ⇒ Object



38
39
40
41
42
43
44
# File 'lib/cellect/server/grouped_workflow.rb', line 38

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

#group(group_id = nil) ⇒ Object



22
23
24
# File 'lib/cellect/server/grouped_workflow.rb', line 22

def group(group_id = nil)
  groups[group_id] || groups.values.sample
end

#grouped?Boolean



60
61
62
# File 'lib/cellect/server/grouped_workflow.rb', line 60

def grouped?
  true
end

#load_dataObject



11
12
13
14
15
16
17
18
19
20
# File 'lib/cellect/server/grouped_workflow.rb', line 11

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

#remove(opts = { }) ⇒ Object



46
47
48
# File 'lib/cellect/server/grouped_workflow.rb', line 46

def remove(opts = { })
  groups[opts[:group_id]].remove opts[:subject_id]
end

#sample(opts = { }) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/cellect/server/grouped_workflow.rb', line 30

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

#statusObject



50
51
52
53
54
55
56
57
58
# File 'lib/cellect/server/grouped_workflow.rb', line 50

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

#unseen_for(user_name, group_id: nil, limit: 5) ⇒ Object



26
27
28
# File 'lib/cellect/server/grouped_workflow.rb', line 26

def unseen_for(user_name, group_id: nil, limit: 5)
  group(group_id).subtract user(user_name).seen, limit
end