Class: Squared::Workspace::Series
- Inherits:
-
Object
- Object
- Squared::Workspace::Series
- Extended by:
- Forwardable
- Includes:
- Rake::DSL
- Defined in:
- lib/squared/workspace/series.rb
Instance Attribute Summary collapse
-
#multiple ⇒ Object
readonly
Returns the value of attribute multiple.
-
#parallel ⇒ Object
readonly
Returns the value of attribute parallel.
-
#sync ⇒ Object
readonly
Returns the value of attribute sync.
Class Method Summary collapse
- .add(task, obj) ⇒ Object
- .alias(ref, obj) ⇒ Object
- .base_set(obj) ⇒ Object
- .batch(*args, obj) ⇒ Object
- .rename(key, task) ⇒ Object
Instance Method Summary collapse
- #alias_get(key) ⇒ Object
- #base?(key) ⇒ Boolean
- #batch?(obj, key) ⇒ Boolean
- #batch_get(key) ⇒ Object
- #build(parallel: [], pattern: []) ⇒ Object
- #extend?(obj, key) ⇒ Boolean
-
#initialize(workspace) ⇒ Series
constructor
A new instance of Series.
- #multiple?(val = nil) ⇒ Boolean
- #name_get(key) ⇒ Object
- #parallel?(val = nil) ⇒ Boolean
- #populate(proj) ⇒ Object
- #some?(key) ⇒ Boolean
- #sync?(val = nil) ⇒ Boolean
Constructor Details
#initialize(workspace) ⇒ Series
Returns a new instance of Series.
74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/squared/workspace/series.rb', line 74 def initialize(workspace) @workspace = workspace @sync = [] @multiple = [] @parallel = [] @session = { group: {}, parent: {}, id: [] } @data = {} (TASK_BASE + TASK_KEYS).each { |key| @data[key] = [] } end |
Instance Attribute Details
#multiple ⇒ Object (readonly)
Returns the value of attribute multiple.
69 70 71 |
# File 'lib/squared/workspace/series.rb', line 69 def multiple @multiple end |
#parallel ⇒ Object (readonly)
Returns the value of attribute parallel.
69 70 71 |
# File 'lib/squared/workspace/series.rb', line 69 def parallel @parallel end |
#sync ⇒ Object (readonly)
Returns the value of attribute sync.
69 70 71 |
# File 'lib/squared/workspace/series.rb', line 69 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) key_set task (TASK_EXTEND[task] ||= []) << obj end |
.alias(ref, obj) ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/squared/workspace/series.rb', line 38 def alias(ref, obj) if obj.is_a?(Hash) obj.each { |key, val| (TASK_ALIAS[key] ||= {})[ref] = val } else TASK_ALIAS[obj]&.delete(ref) end end |
.base_set(obj) ⇒ Object
50 51 52 53 54 55 56 57 |
# File 'lib/squared/workspace/series.rb', line 50 def base_set(obj) TASK_BASE.clear .concat((if TASK_KEYS.empty? obj.tasks else obj.tasks.reject { |val| TASK_KEYS.include?(val) } end).freeze) end |
.batch(*args, obj) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/squared/workspace/series.rb', line 25 def batch(*args, obj) if obj.is_a?(Hash) obj.each do |key, val| key_set key data = TASK_BATCH[key] ||= {} args.each { |ref| (data[ref] ||= []).concat(val) } end elsif (data = TASK_BATCH[obj]) args.each { |ref| data.delete(ref) } TASK_KEYS.delete(obj) if data.empty? end end |
.rename(key, task) ⇒ Object
46 47 48 |
# File 'lib/squared/workspace/series.rb', line 46 def rename(key, task) TASK_NAME[key.to_sym] = task.to_sym end |
Instance Method Details
#alias_get(key) ⇒ Object
149 150 151 |
# File 'lib/squared/workspace/series.rb', line 149 def alias_get(key) TASK_ALIAS[key] end |
#base?(key) ⇒ Boolean
162 163 164 |
# File 'lib/squared/workspace/series.rb', line 162 def base?(key) TASK_BASE.include?(key) end |
#batch?(obj, key) ⇒ Boolean
184 185 186 187 188 |
# File 'lib/squared/workspace/series.rb', line 184 def batch?(obj, key) return false unless (data = batch_get(key)) data.keys.any? { |ref| obj.ref?(ref) } end |
#batch_get(key) ⇒ Object
145 146 147 |
# File 'lib/squared/workspace/series.rb', line 145 def batch_get(key) TASK_BATCH[key] end |
#build(parallel: [], pattern: []) ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/squared/workspace/series.rb', line 111 def build(parallel: [], pattern: [], **) subcheck = ->(val) { (ns = task_namespace(val)) && parallel.include?(ns) } @data.merge!(@session[:parent]) if @session[:id].uniq.size > 1 @data.merge!(@session[:group]) @data.each do |key, items| next if items.empty? || @workspace.task_exclude?(t = name_get(key)) key = task_name(t) val = format_desc(key, out: true) if items.size > 1 @multiple << key if parallel.include?(t) || pattern.any? { |pat| t =~ pat } || subcheck.(t) task_desc("#{val} (thread)", name: key) multitask key => items @parallel << key s = task_join(key, 'sync') task_desc("#{val} (sync)", name: s) task s => items @sync << s next end end task_desc(val, name: key) task key => items end @multiple += sync end |
#extend?(obj, key) ⇒ Boolean
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 |
# File 'lib/squared/workspace/series.rb', line 166 def extend?(obj, key) return false unless (items = TASK_EXTEND[key]) && !(items = items.select { |kind| obj.is_a?(kind) }).empty? meth = :"#{key}?" allref = obj.allref.to_a ret = false items.each do |kind| if kind.instance_methods.include?(meth) out = obj.__send__(meth) return true if out == 1 return out if obj.ref?(kind.ref) elsif allref.include?(kind.ref) ret = true end end ret end |
#multiple?(val = nil) ⇒ Boolean
190 191 192 |
# File 'lib/squared/workspace/series.rb', line 190 def multiple?(val = nil) already_invoked?(multiple, val) end |
#name_get(key) ⇒ Object
141 142 143 |
# File 'lib/squared/workspace/series.rb', line 141 def name_get(key) (TASK_NAME[key] || key).to_s end |
#parallel?(val = nil) ⇒ Boolean
198 199 200 |
# File 'lib/squared/workspace/series.rb', line 198 def parallel?(val = nil) already_invoked?(parallel, val) end |
#populate(proj) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/squared/workspace/series.rb', line 88 def populate(proj, **) group, parent, id = @session.values ws = proj.workspace @data.each do |key, items| next if (tasks = ws.task_resolve(proj, key)).empty? if (g = proj.group) id << g (group[:"#{key}:#{g}"] ||= []).concat(tasks) else items.concat(tasks) end if tasks.size > 1 && batch?(proj, key) && !ws.task_exclude?(key, proj) ws.task_desc(t = ws.task_join(proj.name, key)) task t => tasks end next unless (b = ws.find_base(proj)) && (n = b.ref.to_s) != g id << n (parent[:"#{key}:#{n}"] ||= []).concat(tasks) end end |
#some?(key) ⇒ Boolean
153 154 155 156 157 158 159 160 |
# File 'lib/squared/workspace/series.rb', line 153 def some?(key) return @data.key?(key) && !@data[key].empty? unless (batch = batch_get(key)) batch.each_value do |items| return true if items.all? { |val| some?(val) || alias_get(val)&.any? { |_, alt| some?(alt) } } end false end |
#sync?(val = nil) ⇒ Boolean
194 195 196 |
# File 'lib/squared/workspace/series.rb', line 194 def sync?(val = nil) already_invoked?(sync, val) end |