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
Instance Method Summary
collapse
Constructor Details
#initialize(tasks, keys: Workspace::Application::WORKSPACE_KEYS) ⇒ Series
Returns a new instance of Series.
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
# File 'lib/squared/workspace/series.rb', line 15
def initialize(tasks, keys: Workspace::Application::WORKSPACE_KEYS)
if tasks.is_a?(Array)
@data = {}
tasks.each { |key| __set__ key }
else
@data = tasks.dup
end
@keys = keys
@sync = []
@multiple = []
@parallel = []
@session = {
group: {},
parent: {},
id: []
}
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(key) ⇒ Object
94
95
96
|
# File 'lib/squared/workspace/series.rb', line 94
def method_missing(key, *)
self[key]
end
|
Instance Attribute Details
#multiple ⇒ Object
Returns the value of attribute multiple.
11
12
13
|
# File 'lib/squared/workspace/series.rb', line 11
def multiple
@multiple
end
|
#parallel ⇒ Object
Returns the value of attribute parallel.
11
12
13
|
# File 'lib/squared/workspace/series.rb', line 11
def parallel
@parallel
end
|
#sync ⇒ Object
Returns the value of attribute sync.
11
12
13
|
# File 'lib/squared/workspace/series.rb', line 11
def sync
@sync
end
|
Instance Method Details
#__set__(key) ⇒ Object
33
34
35
|
# File 'lib/squared/workspace/series.rb', line 33
def __set__(key)
self[key.to_sym] ||= []
end
|
#build(**kwargs) ⇒ Object
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
|
# File 'lib/squared/workspace/series.rb', line 64
def build(**kwargs)
thread = kwargs.fetch(:parallel, []).map(&:to_s)
group, parent, id = @session.values
merge!(parent) if id.uniq.size > 1
merge!(group)
each do |key, items|
next if items.empty?
key = key.to_s
if items.size > 1
multiple << key
if thread.include?(key) || (key.include?(':') && thread.include?(key.split(':').first.to_sym))
desc "#{key} (thread)"
multitask key => items
parallel << key
desc "#{key} (sync)"
task "#{key}:sync": items
sync << "#{key}:sync"
multiple << "#{key}:sync"
next
end
end
desc key
task key => items
end
@session = nil
end
|
#has?(key) ⇒ Boolean
98
99
100
|
# File 'lib/squared/workspace/series.rb', line 98
def has?(key)
!key.nil? && key?(key = key.to_sym) && !self[key].empty?
end
|
#multiple?(val = nil) ⇒ Boolean
102
103
104
|
# File 'lib/squared/workspace/series.rb', line 102
def multiple?(val = nil)
already_invoked?(multiple, val)
end
|
#parallel?(val = nil) ⇒ Boolean
110
111
112
|
# File 'lib/squared/workspace/series.rb', line 110
def parallel?(val = nil)
already_invoked?(parallel, val)
end
|
#populate(proj) ⇒ Object
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
# File 'lib/squared/workspace/series.rb', line 37
def populate(proj)
return unless @session
group, parent, id = @session.values
workspace = proj.workspace
each do |key, items|
target = "#{proj.name}:#{key}"
if @keys.include?(key)
next unless proj.has?(key) || (target = workspace.task_base?(key, target))
else
next unless workspace.task_include?(proj, key)
end
next unless workspace.task_defined?(target)
if (g = proj.group)
id << g
(group[:"#{key}:#{g}"] ||= []).push(target)
else
items << target
end
next unless (b = find_base(proj)) && (name = b.ref.to_s) != g
id << name
(parent[:"#{key}:#{name}"] ||= []).push(target)
end
end
|
#respond_to_missing?(key) ⇒ Boolean
114
115
116
|
# File 'lib/squared/workspace/series.rb', line 114
def respond_to_missing?(key, *)
key?(key)
end
|
#sync?(val = nil) ⇒ Boolean
106
107
108
|
# File 'lib/squared/workspace/series.rb', line 106
def sync?(val = nil)
already_invoked?(sync, val)
end
|