Class: Inprovise::Infrastructure::Group

Inherits:
Target
  • Object
show all
Defined in:
lib/inprovise/group.rb

Instance Attribute Summary

Attributes inherited from Target

#config, #name

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Target

#add_to, #get, #remove_from, #set

Constructor Details

#initialize(name, config = {}, targets = []) ⇒ Group

Returns a new instance of Group.



10
11
12
13
# File 'lib/inprovise/group.rb', line 10

def initialize(name, config={}, targets=[])
  @targets = targets.collect {|t| Inprovise::Infrastructure::Target === t ? t.name : t.to_s }
  super(name, config)
end

Class Method Details

.json_create(o) ⇒ Object



67
68
69
70
# File 'lib/inprovise/group.rb', line 67

def self.json_create(o)
  data = o['data']
  new(data['name'], Inprovise::Infrastructure.symbolize_keys(data['config']), data['targets'])
end

Instance Method Details

#add_target(tgt) ⇒ Object

Raises:

  • (ArgumentError)


19
20
21
22
23
# File 'lib/inprovise/group.rb', line 19

def add_target(tgt)
  tgt = Inprovise::Infrastructure::Target === tgt ? tgt : Inprovise::Infrastructure.find(tgt.to_s)
  raise ArgumentError, "Circular reference detected in [#{tgt.to_s}] to [#{self.to_s}]" if tgt.includes?(self)
  @targets << (Inprovise::Infrastructure::Target === tgt ? tgt.name : tgt.to_s)
end

#includes?(tgt) ⇒ Boolean

Returns:

  • (Boolean)


47
48
49
50
# File 'lib/inprovise/group.rb', line 47

def includes?(tgt)
  tgtname = Inprovise::Infrastructure::Target === tgt ? tgt.name : tgt.to_s
  @targets.include?(tgtname) || @targets.any? {|t| Inprovise::Infrastructure.find(t).includes?(tgtname) }
end

#remove_target(tgt) ⇒ Object



25
26
27
# File 'lib/inprovise/group.rb', line 25

def remove_target(tgt)
  @targets.delete(Inprovise::Infrastructure::Target === tgt ? tgt.name : tgt.to_s)
end

#targetsObject



29
30
31
# File 'lib/inprovise/group.rb', line 29

def targets
  @targets.collect {|t| Inprovise::Infrastructure.find(t).targets }.flatten.uniq
end

#targets_with_configObject



33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/inprovise/group.rb', line 33

def targets_with_config
  @targets.inject({}) do |hsh, t|
    Inprovise::Infrastructure.find(t).targets_with_config.each do |tgt, cfg|
      if hsh.has_key?(tgt)
        hsh[tgt].merge!(cfg)
      else
        hsh[tgt] = cfg
      end
      hsh[tgt].merge!(config)
    end
    hsh
  end
end

#to_json(*a) ⇒ Object



56
57
58
59
60
61
62
63
64
65
# File 'lib/inprovise/group.rb', line 56

def to_json(*a)
  {
    JSON.create_id  => self.class.name,
    :data => {
      :name => name,
      :config => config,
      :targets => @targets
    }
  }.to_json(*a)
end

#to_sObject



52
53
54
# File 'lib/inprovise/group.rb', line 52

def to_s
  "Group:#{name}"
end

#unresolved_targetsObject



15
16
17
# File 'lib/inprovise/group.rb', line 15

def unresolved_targets
  @targets.collect {|t| Inprovise::Infrastructure.find(t) }
end