Class: Squared::Workspace::Series
- Inherits:
-
Object
- Object
- Squared::Workspace::Series
show all
- Extended by:
- Forwardable
- Includes:
- Rake::DSL
- Defined in:
- lib/squared/workspace/series.rb
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(workspace) ⇒ Series
Returns a new instance of Series.
34
35
36
37
38
39
40
41
42
43
44
45
46
|
# File 'lib/squared/workspace/series.rb', line 34
def initialize(workspace)
@workspace = workspace
@sync = []
@multiple = []
@parallel = []
@session = {
group: {},
parent: {},
id: []
}
@data = {}
TASK_KEYS.each { |key| @data[key] = [] }
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(key) ⇒ Object
140
141
142
143
144
|
# File 'lib/squared/workspace/series.rb', line 140
def method_missing(key, *)
raise NoMethodError, key unless @data.key?(key)
@data[key]
end
|
Instance Attribute Details
#multiple ⇒ Object
Returns the value of attribute multiple.
30
31
32
|
# File 'lib/squared/workspace/series.rb', line 30
def multiple
@multiple
end
|
#parallel ⇒ Object
Returns the value of attribute parallel.
30
31
32
|
# File 'lib/squared/workspace/series.rb', line 30
def parallel
@parallel
end
|
#sync ⇒ Object
Returns the value of attribute sync.
30
31
32
|
# File 'lib/squared/workspace/series.rb', line 30
def sync
@sync
end
|
Class Method Details
.add(task, obj) ⇒ Object
20
21
22
23
|
# File 'lib/squared/workspace/series.rb', line 20
def add(task, obj)
TASK_KEYS << task unless TASK_KEYS.include?(task)
(TASK_EXTEND[task] ||= []).push(obj)
end
|
.alias(key, task) ⇒ Object
25
26
27
|
# File 'lib/squared/workspace/series.rb', line 25
def alias(key, task)
TASK_ALIAS[key.to_sym] = task.to_sym
end
|
Instance Method Details
#__build__(parallel: []) ⇒ Object
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
# File 'lib/squared/workspace/series.rb', line 80
def __build__(parallel: [], **)
group, parent, id = @session.values
@data.merge!(parent) if id.uniq.size > 1
@data.merge!(group)
@data.each do |key, items|
next if items.empty?
key = @workspace.task_name(name = key.to_s)
val = @workspace.task_name(name, desc: true)
if items.size > 1
@multiple << key
if parallel.include?(name) || ((ns = @workspace.task_namespace(name)) && parallel.include?(ns))
desc "#{val} (thread)"
multitask key => items
@parallel << key
desc "#{val} (sync)"
task "#{key}:sync" => items
@sync << "#{key}:sync"
next
end
end
desc val
task key => items
end
TASK_ALIAS.each_key do |key|
suf = ":#{key}"
@data[key].clear unless @data[key].any? { |val| val.end_with?(suf) }
end
@multiple += sync
@session = nil
end
|
#__populate__(proj) ⇒ Object
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/squared/workspace/series.rb', line 52
def __populate__(proj)
return unless @session
group, parent, id = @session.values
ws = proj.workspace
ref = Project::Base.ref
@data.each do |key, items|
task = "#{proj.name}:#{key}"
unless (base = include?(key)) ? proj.has?(key, ref) : ws.task_extend?(proj, key)
next if (base && !proj.ref?(ref)) || (alt = TASK_ALIAS[key]).nil?
task = "#{proj.name}:#{alt}"
end
next unless ws.task_defined?(task)
if (g = proj.group)
id << g
(group[:"#{key}:#{g}"] ||= []).push(task)
else
items << task
end
next unless (b = ws.find_base(proj)) && (name = b.ref.to_s) != g
id << name
(parent[:"#{key}:#{name}"] ||= []).push(task)
end
end
|
#__set__(key) ⇒ Object
48
49
50
|
# File 'lib/squared/workspace/series.rb', line 48
def __set__(key)
@data[key.to_sym] ||= []
end
|
#extend?(obj, key) ⇒ Boolean
122
123
124
|
# File 'lib/squared/workspace/series.rb', line 122
def extend?(obj, key)
TASK_EXTEND.fetch(key, []).any? { |kind| obj.is_a?(kind) && obj.ref?(kind.ref) }
end
|
#include?(key) ⇒ Boolean
118
119
120
|
# File 'lib/squared/workspace/series.rb', line 118
def include?(key)
TASK_BASE.include?(key)
end
|
#multiple?(val = nil) ⇒ Boolean
126
127
128
|
# File 'lib/squared/workspace/series.rb', line 126
def multiple?(val = nil)
already_invoked?(multiple, val)
end
|
#parallel?(val = nil) ⇒ Boolean
134
135
136
|
# File 'lib/squared/workspace/series.rb', line 134
def parallel?(val = nil)
already_invoked?(parallel, val)
end
|
#some?(key) ⇒ Boolean
114
115
116
|
# File 'lib/squared/workspace/series.rb', line 114
def some?(key)
@data.key?(key) && !@data[key].empty?
end
|
#sync?(val = nil) ⇒ Boolean
130
131
132
|
# File 'lib/squared/workspace/series.rb', line 130
def sync?(val = nil)
already_invoked?(sync, val)
end
|