Class: Cellect::Server::GroupedWorkflow
- Inherits:
-
Workflow
- Object
- Workflow
- Cellect::Server::GroupedWorkflow
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
#groups ⇒ Object
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_data ⇒ Object
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
|
#status ⇒ Object
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
|