Class: Squared::Workspace::Application
- Inherits:
-
Object
- Object
- Squared::Workspace::Application
- Includes:
- Rake::DSL, Common::Format, Git, Repo, Utils
- Defined in:
- lib/squared/workspace/application.rb
Constant Summary collapse
- @@task_desc =
Rake::TaskManager.
Constants included from Common
Class Attribute Summary collapse
-
.attr_banner ⇒ Object
Returns the value of attribute attr_banner.
-
.impl_project ⇒ Object
Returns the value of attribute impl_project.
-
.impl_series ⇒ Object
Returns the value of attribute impl_series.
-
.kind_project ⇒ Object
readonly
Returns the value of attribute kind_project.
Instance Attribute Summary collapse
-
#closed ⇒ Object
readonly
Returns the value of attribute closed.
-
#exception ⇒ Object
readonly
Returns the value of attribute exception.
-
#home ⇒ Object
readonly
Returns the value of attribute home.
-
#main ⇒ Object
readonly
Returns the value of attribute main.
-
#pipe ⇒ Object
readonly
Returns the value of attribute pipe.
-
#prefix ⇒ Object
readonly
Returns the value of attribute prefix.
-
#root ⇒ Object
readonly
Returns the value of attribute root.
-
#series ⇒ Object
readonly
Returns the value of attribute series.
-
#theme ⇒ Object
readonly
Returns the value of attribute theme.
-
#verbose ⇒ Object
readonly
Returns the value of attribute verbose.
-
#warning ⇒ Object
readonly
Returns the value of attribute warning.
Attributes included from Repo
Class Method Summary collapse
- .baseref ⇒ Object
- .find(ref = nil, path: nil) ⇒ Object
- .implement(*objs, base: false) ⇒ Object
- .to_s ⇒ Object
Instance Method Summary collapse
- #add(path, project = nil, **kwargs, &blk) ⇒ Object
- #apply(&blk) ⇒ Object
- #banner(*args, command: true, styles: nil, border: nil, group: @group, ref: @ref) ⇒ Object
- #banner_get(*ref, group: nil) ⇒ Object
- #baseref ⇒ Object
- #build(parallel: [], pass: nil, **kwargs) {|_self| ... } ⇒ Object
- #clean(script, group: @group, ref: @ref, on: nil) ⇒ Object
- #compose(name, &blk) ⇒ Object
- #depend(script, group: @group, ref: @ref, on: nil) ⇒ Object
- #describe(data) ⇒ Object
- #dev?(**kwargs) ⇒ Boolean
- #doc(script, group: @group, ref: @ref, on: nil) ⇒ Object
- #enabled? ⇒ Boolean
- #events_get(*args, group: nil, ref: nil) ⇒ Object
- #exclude(base, group: @group, ref: @ref) ⇒ Object
- #find(path = nil, name: nil, group: nil, ref: nil, &blk) ⇒ Object
- #find_base(obj) ⇒ Object
- #format_desc(val, opts = nil, arg: 'opts*', before: nil, after: nil, out: false) ⇒ Object
- #get(name, &blk) ⇒ Object
- #graph(script, group: @group, ref: @ref, on: nil) ⇒ Object
- #group(path, val, override: {}, **kwargs, &blk) ⇒ Object
- #home? ⇒ Boolean
- #homepath(*args) ⇒ Object
-
#initialize(home = (ARG[:HOME] && ENV[ARG[:HOME]]) || Dir.pwd, main: nil, prefix: nil, verbose: , common: , pipe: , exception: ) ⇒ Application
constructor
A new instance of Application.
- #initialize_session ⇒ Object
- #inspect ⇒ Object
- #invokeargs ⇒ Object
- #jruby? ⇒ Boolean
- #jruby_win? ⇒ Boolean
- #lint(script, group: @group, ref: @ref, on: nil) ⇒ Object
- #log(script, group: @group, ref: @ref) ⇒ Object
- #pass(name, group: @group, ref: @ref, &blk) ⇒ Object
- #prod?(**kwargs) ⇒ Boolean
- #pwd ⇒ Object
- #rootpath(*args) ⇒ Object
- #run(script, group: @group, ref: @ref, on: nil) ⇒ Object
- #script(script, group: @group, ref: @ref, on: nil) ⇒ Object
- #script_find(*args) ⇒ Object
- #script_get(*args, group: nil, ref: nil) ⇒ Object
- #style(obj, *args, target: nil, empty: false) ⇒ Object
- #task_base?(key) ⇒ Boolean
- #task_defined?(*key) ⇒ Boolean
- #task_desc(*args, **kwargs) ⇒ Object
- #task_exclude?(key, obj = nil) ⇒ Boolean
- #task_extend?(obj, key) ⇒ Boolean
- #task_include?(obj, key, ref = nil) ⇒ Boolean
- #task_localname(val) ⇒ Object
- #task_name(val) ⇒ Object
- #task_namespace(val, first: false) ⇒ Object
- #task_resolve(obj, key) ⇒ Object
- #task_sync(key) ⇒ Object
- #test(script, group: @group, ref: @ref, on: nil) ⇒ Object
- #to_s ⇒ Object
- #windows? ⇒ Boolean
- #with(*val, group: nil, **kwargs, &blk) ⇒ Object
Methods included from Repo
Methods included from Git
Methods included from Common::Format
Constructor Details
#initialize(home = (ARG[:HOME] && ENV[ARG[:HOME]]) || Dir.pwd, main: nil, prefix: nil, verbose: , common: , pipe: , exception: ) ⇒ Application
Returns a new instance of Application.
71 72 73 74 75 76 77 78 79 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 113 114 115 116 117 118 119 120 121 |
# File 'lib/squared/workspace/application.rb', line 71 def initialize(home = (ARG[:HOME] && ENV[ARG[:HOME]]) || Dir.pwd, *, main: nil, prefix: nil, verbose: ARG[:VERBOSE], common: ARG[:COMMON], pipe: ARG[:PIPE], exception: ARG[:FAIL], **) @home = Pathname.new(home).realdirpath basename = @home.basename.to_s if main @main = main.to_s.freeze @home = @home.join(@main) unless @main == basename || (windows? && @main.downcase == basename.downcase) else @main = basename.freeze end @home.mkpath rescue nil @root = @home.parent @prefix = prefix @series = Application.impl_series.new(self) @project = {} @kind = {} @extensions = [] @envname = @main.gsub(/[^\w]+/, '_').upcase.freeze @pipe = env_pipe(pipe, (ARG[:OUT] && env(ARG[:OUT])) || 1, root: @home) @exception = env_bool(exception) @verbose = env_bool(verbose, verbose.nil? || verbose.is_a?(String) ? @pipe != 0 : verbose, index: true) @warning = @verbose != false @closed = false if common @theme = __get__(:theme)[:workspace] ARG[:COLOR] = false if @pipe == 0 || @pipe.is_a?(Pathname) else @theme = {} end @script = { group: {}, ref: {}, group!: {}, ref!: {} }.freeze @events = { group: {}, ref: {} }.freeze @pass = { group: {}, ref: {}, global: {}, pattern: [] }.freeze @banner = { group: {}, ref: {} }.freeze initialize_session end |
Class Attribute Details
.attr_banner ⇒ Object
Returns the value of attribute attr_banner.
63 64 65 |
# File 'lib/squared/workspace/application.rb', line 63 def @attr_banner end |
.impl_project ⇒ Object
Returns the value of attribute impl_project.
63 64 65 |
# File 'lib/squared/workspace/application.rb', line 63 def impl_project @impl_project end |
.impl_series ⇒ Object
Returns the value of attribute impl_series.
63 64 65 |
# File 'lib/squared/workspace/application.rb', line 63 def impl_series @impl_series end |
.kind_project ⇒ Object (readonly)
Returns the value of attribute kind_project.
62 63 64 |
# File 'lib/squared/workspace/application.rb', line 62 def kind_project @kind_project end |
Instance Attribute Details
#closed ⇒ Object (readonly)
Returns the value of attribute closed.
69 70 71 |
# File 'lib/squared/workspace/application.rb', line 69 def closed @closed end |
#exception ⇒ Object (readonly)
Returns the value of attribute exception.
69 70 71 |
# File 'lib/squared/workspace/application.rb', line 69 def exception @exception end |
#home ⇒ Object (readonly)
Returns the value of attribute home.
69 70 71 |
# File 'lib/squared/workspace/application.rb', line 69 def home @home end |
#main ⇒ Object (readonly)
Returns the value of attribute main.
69 70 71 |
# File 'lib/squared/workspace/application.rb', line 69 def main @main end |
#pipe ⇒ Object (readonly)
Returns the value of attribute pipe.
69 70 71 |
# File 'lib/squared/workspace/application.rb', line 69 def pipe @pipe end |
#prefix ⇒ Object (readonly)
Returns the value of attribute prefix.
69 70 71 |
# File 'lib/squared/workspace/application.rb', line 69 def prefix @prefix end |
#root ⇒ Object (readonly)
Returns the value of attribute root.
69 70 71 |
# File 'lib/squared/workspace/application.rb', line 69 def root @root end |
#series ⇒ Object (readonly)
Returns the value of attribute series.
69 70 71 |
# File 'lib/squared/workspace/application.rb', line 69 def series @series end |
#theme ⇒ Object (readonly)
Returns the value of attribute theme.
69 70 71 |
# File 'lib/squared/workspace/application.rb', line 69 def theme @theme end |
#verbose ⇒ Object (readonly)
Returns the value of attribute verbose.
69 70 71 |
# File 'lib/squared/workspace/application.rb', line 69 def verbose @verbose end |
#warning ⇒ Object (readonly)
Returns the value of attribute warning.
69 70 71 |
# File 'lib/squared/workspace/application.rb', line 69 def warning @warning end |
Class Method Details
.baseref ⇒ Object
54 55 56 |
# File 'lib/squared/workspace/application.rb', line 54 def baseref impl_project.ref end |
.find(ref = nil, path: nil) ⇒ Object
46 47 48 49 50 51 52 |
# File 'lib/squared/workspace/application.rb', line 46 def find(ref = nil, path: nil) if ref && (ret = kind_project.find { |proj| proj.ref == ref }) ret elsif path kind_project.find { |proj| proj.config?(path) } end end |
.implement(*objs, base: false) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/squared/workspace/application.rb', line 21 def implement(*objs, base: false) return if base && objs.size > 1 objs.each do |obj| next unless base || obj < impl_project if base @impl_project = obj impl_series.base_set(obj) else kind_project.unshift(obj) obj.tasks&.each { |task| impl_series.add(task, obj) } end if (args = obj.batchargs) impl_series.batch(*args) end if (args = obj.aliasargs) impl_series.alias(*args) end if (args = obj.) @attr_banner += args end end end |
.to_s ⇒ Object
58 59 60 |
# File 'lib/squared/workspace/application.rb', line 58 def to_s super[/[^:]+\z/, 0] end |
Instance Method Details
#add(path, project = nil, **kwargs, &blk) ⇒ Object
277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 |
# File 'lib/squared/workspace/application.rb', line 277 def add(path, project = nil, **kwargs, &blk) if @withargs data = @withargs.dup data.merge!(kwargs) kwargs = data end ref = if kwargs.key?(:ref) kwargs = kwargs.dup unless @withargs kwargs.delete(:ref) elsif @ref.is_a?(Symbol) @ref end if @group.is_a?(String) && !kwargs.key?(:group) kwargs = kwargs.dup unless @withargs kwargs[:group] = @group end path = rootpath(path) project = (project || path.basename).to_s name = task_name(project) index = 0 while @project[name] index += 1 name = task_name "#{project}-#{index}" end proj = ((if !ref.is_a?(Class) Application.find(ref, path: path) elsif ref < Project::Base ref end) || @kind[name]&.last || Project::Base).new(self, path, name, **kwargs) @project[name] = proj __get__(:project)[name] = proj unless kwargs[:private] proj.instance_eval(&blk) if block_given? self end |
#apply(&blk) ⇒ Object
332 333 334 335 |
# File 'lib/squared/workspace/application.rb', line 332 def apply(&blk) instance_eval(&blk) self end |
#banner(*args, command: true, styles: nil, border: nil, group: @group, ref: @ref) ⇒ Object
239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 |
# File 'lib/squared/workspace/application.rb', line 239 def (*args, command: true, styles: nil, border: nil, group: @group, ref: @ref) data = { command: command, order: [], styles: check_style(styles, empty: false), border: check_style(border) } args.each do |meth| if meth.is_a?(Array) found = false meth = meth.select do |val| case val when Symbol found = true Application..include?(val) when String true else false end end if !found next elsif meth.size == 1 meth = meth.first end elsif !Application..include?(meth = meth.to_sym) next end data[:order] << meth end data = {} if !command && data[:order].empty? if group label = :group items = as_a(group) else label = :ref items = ref ? as_a(ref) : [:_] end items.each { |val| @banner[label][val.to_sym] = data } self end |
#banner_get(*ref, group: nil) ⇒ Object
535 536 537 538 539 540 541 |
# File 'lib/squared/workspace/application.rb', line 535 def (*ref, group: nil) ret = nil return ret if group && (ret = @banner[:group][group.to_sym]) ref.reverse_each { |val| return ret if (ret = @banner[:ref][val]) } @banner[:ref][:''] end |
#baseref ⇒ Object
610 611 612 |
# File 'lib/squared/workspace/application.rb', line 610 def baseref Application.baseref end |
#build(parallel: [], pass: nil, **kwargs) {|_self| ... } ⇒ Object
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/squared/workspace/application.rb', line 130 def build(parallel: [], pass: nil, **kwargs) return self unless enabled? && !@closed if kwargs[:pattern].is_a?(Array) kwargs[:parallel] = parallel.map(&:to_s) else kwargs[:pattern] = [] kwargs[:parallel] = parallel.reject { |val| val.is_a?(Regexp) && (kwargs[:pattern] << val) } .map(&:to_s) end @pass[:pattern].concat(pass.map { |val| val.is_a?(Regexp) ? val : val.to_s }) if pass @project.each_value do |proj| if proj.enabled? proj.populate(series.keys.dup, **kwargs) elsif proj.enabled?(base: false) proj.generate([], **kwargs) else next end series.populate(proj, **kwargs) end Application.kind_project.each { |obj| obj.populate(self, **kwargs) } @extensions.uniq.each { |ext| __send__(ext, **kwargs) } series.build(**kwargs) __build__(**kwargs) yield self if block_given? @closed = true self end |
#clean(script, group: @group, ref: @ref, on: nil) ⇒ Object
203 204 205 |
# File 'lib/squared/workspace/application.rb', line 203 def clean(script, group: @group, ref: @ref, on: nil) script_command :clean, script, group, ref, on end |
#compose(name, &blk) ⇒ Object
327 328 329 330 |
# File 'lib/squared/workspace/application.rb', line 327 def compose(name, &blk) namespace(task_name(name), &blk) if block_given? self end |
#depend(script, group: @group, ref: @ref, on: nil) ⇒ Object
195 196 197 |
# File 'lib/squared/workspace/application.rb', line 195 def depend(script, group: @group, ref: @ref, on: nil) script_command :depend, script, group, ref, on end |
#describe(data) ⇒ Object
352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 |
# File 'lib/squared/workspace/application.rb', line 352 def describe(data) @describe ||= { alias: {}, replace: [], pattern: {} } data.each do |key, val| key = key.to_s if /\A(\\A|\^)/ =~ key || /(\\z|\$)\z/ =~ key @describe[:replace] << [Regexp.new(key), val] else @describe[val.is_a?(Regexp) ? :pattern : :alias][key.to_s] = val end end self end |
#dev?(**kwargs) ⇒ Boolean
574 575 576 |
# File 'lib/squared/workspace/application.rb', line 574 def dev?(**kwargs) script?(:dev, **kwargs) end |
#doc(script, group: @group, ref: @ref, on: nil) ⇒ Object
207 208 209 |
# File 'lib/squared/workspace/application.rb', line 207 def doc(script, group: @group, ref: @ref, on: nil) script_command :doc, script, group, ref, on end |
#enabled? ⇒ Boolean
543 544 545 |
# File 'lib/squared/workspace/application.rb', line 543 def enabled? !@extensions.empty? || @project.values.any? { |proj| proj.enabled?(base: false) } end |
#events_get(*args, group: nil, ref: nil) ⇒ Object
531 532 533 |
# File 'lib/squared/workspace/application.rb', line 531 def events_get(*args, group: nil, ref: nil) data_get(*args, group: group, ref: ref, target: @events) end |
#exclude(base, group: @group, ref: @ref) ⇒ Object
223 224 225 |
# File 'lib/squared/workspace/application.rb', line 223 def exclude(base, group: @group, ref: @ref) script_command :exclude, as_a(base, :to_sym).freeze, group, ref end |
#find(path = nil, name: nil, group: nil, ref: nil, &blk) ⇒ Object
369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 |
# File 'lib/squared/workspace/application.rb', line 369 def find(path = nil, name: nil, group: nil, ref: nil, &blk) ret = group ? @project.select { |_, item| item.group == group }.map(&:last) : [] if path.is_a?(Symbol) ref ||= path path = nil end if ret.empty? ret = @project.select { |_, item| item.ref?(ref) }.map(&:last) if ref if ret.empty? && (path || name) path &&= rootpath(path) name &&= name.to_s proj = @project.find { |_, item| (path && item.path == path) || (name && item.name == name) }&.last ret << proj if proj end end return (group || ref ? ret : ret[0]) unless block_given? ret.each(&blk) self end |
#find_base(obj) ⇒ Object
398 399 400 |
# File 'lib/squared/workspace/application.rb', line 398 def find_base(obj) Application.kind_project.find { |proj| obj.instance_of?(proj) } end |
#format_desc(val, opts = nil, arg: 'opts*', before: nil, after: nil, out: false) ⇒ Object
498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 |
# File 'lib/squared/workspace/application.rb', line 498 def format_desc(val, opts = nil, arg: 'opts*', before: nil, after: nil, out: false) return unless @@task_desc || out val = val.to_s.split(':') if val.is_a?(String) if before || after || opts pos = [] pos << (before.is_a?(Array) ? before.join(',') : before) if before if opts pos << if opts.is_a?(Array) arg ? "#{arg}=#{opts.join(',')}" : opts.join('|') else opts end end pos << (after.is_a?(Array) ? after.join(',') : after) if after val << "#{val.pop}[#{pos.join(',')}]" end out ? (*val) : task_desc(*val) end |
#get(name, &blk) ⇒ Object
390 391 392 393 394 395 396 |
# File 'lib/squared/workspace/application.rb', line 390 def get(name, &blk) ret = @project[name.to_s] return ret unless block_given? ret&.instance_eval(&blk) self end |
#graph(script, group: @group, ref: @ref, on: nil) ⇒ Object
199 200 201 |
# File 'lib/squared/workspace/application.rb', line 199 def graph(script, group: @group, ref: @ref, on: nil) script_command :graph, as_a(script, :to_s).freeze, group, ref, on end |
#group(path, val, override: {}, **kwargs, &blk) ⇒ Object
312 313 314 315 316 317 318 319 320 321 322 323 324 325 |
# File 'lib/squared/workspace/application.rb', line 312 def group(path, val, override: {}, **kwargs, &blk) rootpath(path).children.map do |dir| next unless dir.directory? basename = dir.basename.to_s [dir, basename, override[basename.to_sym]] end .each do |dir, basename, opts| args = kwargs.dup args.merge!(opts) if opts add(dir, basename, group: val, **args, &blk) end self end |
#home? ⇒ Boolean
582 583 584 |
# File 'lib/squared/workspace/application.rb', line 582 def home? !(proj = find(home)).nil? && proj.enabled? end |
#homepath(*args) ⇒ Object
602 603 604 |
# File 'lib/squared/workspace/application.rb', line 602 def homepath(*args) home.join(*args) end |
#initialize_session ⇒ Object
123 124 125 126 127 128 |
# File 'lib/squared/workspace/application.rb', line 123 def initialize_session return unless @pipe.is_a?(Pathname) bord = '#' * Project.line_width puts bord, format('Session started on %s by %s', Time.now.to_s, @main), bord end |
#inspect ⇒ Object
622 623 624 |
# File 'lib/squared/workspace/application.rb', line 622 def inspect "#<#{self.class}: #{main} => #{self}>" end |
#invokeargs ⇒ Object
614 615 616 |
# File 'lib/squared/workspace/application.rb', line 614 def invokeargs { exception: exception, warning: warning } end |
#jruby? ⇒ Boolean
590 591 592 |
# File 'lib/squared/workspace/application.rb', line 590 def jruby? RUBY_ENGINE == 'jruby' end |
#jruby_win? ⇒ Boolean
594 595 596 |
# File 'lib/squared/workspace/application.rb', line 594 def jruby_win? jruby? && windows? end |
#lint(script, group: @group, ref: @ref, on: nil) ⇒ Object
211 212 213 |
# File 'lib/squared/workspace/application.rb', line 211 def lint(script, group: @group, ref: @ref, on: nil) script_command :lint, script, group, ref, on end |
#log(script, group: @group, ref: @ref) ⇒ Object
219 220 221 |
# File 'lib/squared/workspace/application.rb', line 219 def log(script, group: @group, ref: @ref) script_command :log, script, group, ref end |
#pass(name, group: @group, ref: @ref, &blk) ⇒ Object
227 228 229 230 231 232 233 234 235 236 237 |
# File 'lib/squared/workspace/application.rb', line 227 def pass(name, group: @group, ref: @ref, &blk) data = if group @pass[:group][group] ||= {} elsif ref @pass[:ref][ref] ||= {} else @pass[:global] end data[name.to_sym] = blk self end |
#prod?(**kwargs) ⇒ Boolean
578 579 580 |
# File 'lib/squared/workspace/application.rb', line 578 def prod?(**kwargs) script?(:prod, **kwargs) end |
#pwd ⇒ Object
606 607 608 |
# File 'lib/squared/workspace/application.rb', line 606 def pwd Pathname.new(Rake.application.original_dir) end |
#rootpath(*args) ⇒ Object
598 599 600 |
# File 'lib/squared/workspace/application.rb', line 598 def rootpath(*args) root.join(*args) end |
#run(script, group: @group, ref: @ref, on: nil) ⇒ Object
187 188 189 |
# File 'lib/squared/workspace/application.rb', line 187 def run(script, group: @group, ref: @ref, on: nil) script_command :run, script, group, ref, on end |
#script(script, group: @group, ref: @ref, on: nil) ⇒ Object
191 192 193 |
# File 'lib/squared/workspace/application.rb', line 191 def script(script, group: @group, ref: @ref, on: nil) script_command :script, script, group, ref, on end |
#script_find(*args) ⇒ Object
518 519 520 521 522 523 524 525 |
# File 'lib/squared/workspace/application.rb', line 518 def script_find(*args) args.reverse_each do |val| next unless val && (ret = val.is_a?(Symbol) ? @script[:ref!][val] : @script[:group!][val.to_sym]) return ret end @script[:ref!][:''] || SCRIPT_OBJ end |
#script_get(*args, group: nil, ref: nil) ⇒ Object
527 528 529 |
# File 'lib/squared/workspace/application.rb', line 527 def script_get(*args, group: nil, ref: nil) data_get(*args, group: group, ref: ref, target: @script) end |
#style(obj, *args, target: nil, empty: false) ⇒ Object
337 338 339 340 341 342 343 344 345 346 347 348 349 350 |
# File 'lib/squared/workspace/application.rb', line 337 def style(obj, *args, target: nil, empty: false) data = nil if target as_a(target).each_with_index do |key, i| if i == 0 break unless (data = __get__(:theme)[key.to_sym]) else data = data[key.to_sym] ||= {} end end end apply_style(data || theme, obj, args, empty: empty) unless target && !data self end |
#task_base?(key) ⇒ Boolean
547 548 549 |
# File 'lib/squared/workspace/application.rb', line 547 def task_base?(key) series.base?(key) end |
#task_defined?(*key) ⇒ Boolean
570 571 572 |
# File 'lib/squared/workspace/application.rb', line 570 def task_defined?(*key) Rake::Task.task_defined?(key.size == 1 ? key.first : task_join(*key)) end |
#task_desc(*args, **kwargs) ⇒ Object
410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 |
# File 'lib/squared/workspace/application.rb', line 410 def task_desc(*args, **kwargs) return unless @@task_desc name = kwargs.delete(:name) if @describe val = name || task_join(*args) found = false replace = lambda do |data, out| if (index = data.size) > 0 data.to_a.reverse_each { |group| out.sub!("%#{index -= 1}", group) } end out end @describe[:replace].each do |pat, key| next unless (data = pat.match(val)) val = replace.(data, key.dup) found = true end if (out = @describe[:alias][val]) val = out found = true else @describe[:pattern].each do |key, pat| next unless (data = pat.match(val)) val = replace.(data, key.dup) found = true break end end args = Shell.split_escape(val, char: ':').map! { |s| s.gsub('\\:', ':') } if found end desc (*args, **kwargs) end |
#task_exclude?(key, obj = nil) ⇒ Boolean
559 560 561 562 563 564 565 566 567 568 |
# File 'lib/squared/workspace/application.rb', line 559 def task_exclude?(key, obj = nil) if obj data = obj.group ? @pass[:group][obj.group] : @pass[:ref][obj.ref] blk = (data && data[key.to_sym]) || @pass[:global][key.to_sym] return true if blk && obj.instance_eval(&blk) key = task_join(task_localname(obj.name), key) end @pass[:pattern].any? { |item| item.is_a?(Regexp) ? key =~ item : key == item } end |
#task_extend?(obj, key) ⇒ Boolean
551 552 553 |
# File 'lib/squared/workspace/application.rb', line 551 def task_extend?(obj, key) series.extend?(obj, key) end |
#task_include?(obj, key, ref = nil) ⇒ Boolean
555 556 557 |
# File 'lib/squared/workspace/application.rb', line 555 def task_include?(obj, key, ref = nil) task_base?(key) ? obj.has?(key, ref || baseref) : task_extend?(obj, key) end |
#task_localname(val) ⇒ Object
406 407 408 |
# File 'lib/squared/workspace/application.rb', line 406 def task_localname(val) prefix && val.is_a?(String) ? val.sub(/\A#{Regexp.escape(prefix)}:/, '') : val.to_s end |
#task_name(val) ⇒ Object
402 403 404 |
# File 'lib/squared/workspace/application.rb', line 402 def task_name(val) prefix ? task_join(prefix, val) : val.to_s end |
#task_namespace(val, first: false) ⇒ Object
446 447 448 449 450 |
# File 'lib/squared/workspace/application.rb', line 446 def task_namespace(val, first: false) return nil unless (ret = val.to_s.split(':')).size > 1 first ? ret.first : task_join(*ret[0..-2]) end |
#task_resolve(obj, key) ⇒ Object
452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 |
# File 'lib/squared/workspace/application.rb', line 452 def task_resolve(obj, key) tasks = [] if (base = task_base?(key)) tasks << key if obj.has?(key, baseref) elsif (batch = series.batch_get(key)) obj.allref.each do |ref| next unless obj.has?(key, ref) && (data = batch[ref]) data.each do |val| if (items = task_resolve(obj, val)).empty? tasks.clear break end tasks += items end return tasks unless tasks.empty? end elsif task_extend?(obj, key) tasks << key end ret = [] if tasks.empty? return [] if (base && !obj.ref?(baseref)) || !(data = series.alias_get(key)) obj.allref.each do |ref| next unless obj.has?(key, ref) && (alt = data[ref]) ret = task_resolve(obj, alt) break unless ret.empty? end else tasks.each do |val| target = task_join(obj.name, series.name_get(val)) return [] unless task_defined?(target) ret << target end end ret end |
#task_sync(key) ⇒ Object
493 494 495 496 |
# File 'lib/squared/workspace/application.rb', line 493 def task_sync(key) key = task_name(key) task_defined?(ret = task_join(key, 'sync')) ? ret : key end |
#test(script, group: @group, ref: @ref, on: nil) ⇒ Object
215 216 217 |
# File 'lib/squared/workspace/application.rb', line 215 def test(script, group: @group, ref: @ref, on: nil) script_command :test, script, group, ref, on end |
#to_s ⇒ Object
618 619 620 |
# File 'lib/squared/workspace/application.rb', line 618 def to_s (home? ? home : root).to_s end |
#windows? ⇒ Boolean
586 587 588 |
# File 'lib/squared/workspace/application.rb', line 586 def windows? Rake::Win32.windows? end |
#with(*val, group: nil, **kwargs, &blk) ⇒ Object
163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# File 'lib/squared/workspace/application.rb', line 163 def with(*val, group: nil, **kwargs, &blk) @group = nil @ref = nil @withargs = kwargs.empty? ? nil : kwargs val = as_a(group || kwargs[:ref], flat: true, compact: true) if val.empty? kind = val.first val = kind if val.size == 1 case kind when String @group = val when Symbol @ref = val else raise_error('group{Symbol} | ref{String}', hint: 'missing') if block_given? end if block_given? instance_eval(&blk) @group = nil @ref = nil @withargs = nil end self end |