Class: Squared::Workspace::Series

Inherits:
Object
  • Object
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, workspace, 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
32
# File 'lib/squared/workspace/series.rb', line 15

def initialize(tasks, workspace, keys: Workspace::Application::WORKSPACE_KEYS)
  if tasks.is_a?(Array)
    @data = {}
    tasks.each { |key| __set__ key }
  else
    @data = tasks.dup
  end
  @workspace = workspace
  @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



62
63
64
# File 'lib/squared/workspace/series.rb', line 62

def method_missing(key, *)
  self[key]
end

Instance Attribute Details

#multipleObject (readonly)

Returns the value of attribute multiple.



11
12
13
# File 'lib/squared/workspace/series.rb', line 11

def multiple
  @multiple
end

#parallelObject (readonly)

Returns the value of attribute parallel.



11
12
13
# File 'lib/squared/workspace/series.rb', line 11

def parallel
  @parallel
end

#syncObject (readonly)

Returns the value of attribute sync.



11
12
13
# File 'lib/squared/workspace/series.rb', line 11

def sync
  @sync
end

#workspaceObject (readonly)

Returns the value of attribute workspace.



11
12
13
# File 'lib/squared/workspace/series.rb', line 11

def workspace
  @workspace
end

Instance Method Details

#__set__(key) ⇒ Object



34
35
36
# File 'lib/squared/workspace/series.rb', line 34

def __set__(key)
  self[key.to_sym] ||= []
end

#finalize!(thread = []) ⇒ Object



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
93
94
# File 'lib/squared/workspace/series.rb', line 66

def finalize!(thread = [])
  thread.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

Returns:

  • (Boolean)


96
97
98
# File 'lib/squared/workspace/series.rb', line 96

def has?(key)
  !key.nil? && key?(key = key.to_sym) && !self[key].empty?
end

#multiple?(val = nil) ⇒ Boolean

Returns:

  • (Boolean)


100
101
102
# File 'lib/squared/workspace/series.rb', line 100

def multiple?(val = nil)
  already_invoked?(multiple, val)
end

#parallel?(val = nil) ⇒ Boolean

Returns:

  • (Boolean)


108
109
110
# File 'lib/squared/workspace/series.rb', line 108

def parallel?(val = nil)
  already_invoked?(parallel, val)
end

#populate(proj) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/squared/workspace/series.rb', line 38

def populate(proj)
  return unless @session

  group, parent, id = @session.values
  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
    if (g = proj.group)
      id << g
      (group[:"#{key}:#{g}"] ||= []).push(target)
    else
      items << target
    end
    next unless (b = find_base(proj)) && (name = b.to_sym.to_s) != g

    id << name
    (parent[:"#{key}:#{name}"] ||= []).push(target)
  end
end

#respond_to_missing?(key) ⇒ Boolean

Returns:

  • (Boolean)


112
113
114
# File 'lib/squared/workspace/series.rb', line 112

def respond_to_missing?(key, *)
  key?(key)
end

#sync?(val = nil) ⇒ Boolean

Returns:

  • (Boolean)


104
105
106
# File 'lib/squared/workspace/series.rb', line 104

def sync?(val = nil)
  already_invoked?(sync, val)
end