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, 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

#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

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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (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

Returns:

  • (Boolean)


114
115
116
# File 'lib/squared/workspace/series.rb', line 114

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

#sync?(val = nil) ⇒ Boolean

Returns:

  • (Boolean)


106
107
108
# File 'lib/squared/workspace/series.rb', line 106

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