class Cult::Role

Attributes

path[RW]
project[RW]

Public Class Methods

all(project) click to toggle source
# File lib/cult/role.rb, line 163
def self.all(project)
  fail if block_given?
  all_files(project).map do |filename|
    new(project, filename)
  end.select(&:exist?).to_named_array
end
all_files(project) click to toggle source
# File lib/cult/role.rb, line 156
def self.all_files(project)
  Dir.glob(File.join(path(project), "*")).select do |file|
    Dir.exist?(file)
  end
end
by_name(project, name) click to toggle source
# File lib/cult/role.rb, line 146
def self.by_name(project, name)
  new(project, File.join(path(project), name))
end
delegate_to_definition(method_name, definition_key = nil) click to toggle source
# File lib/cult/role.rb, line 7
def self.delegate_to_definition(method_name, definition_key = nil)
  definition_key ||= method_name
  define_method(method_name) do
    definition[definition_key.to_s]
  end
end
new(project, path) click to toggle source
# File lib/cult/role.rb, line 19
def initialize(project, path)
  @project = project
  @path = path
end
path(project) click to toggle source
# File lib/cult/role.rb, line 151
def self.path(project)
  File.join(project.path, "roles")
end

Public Instance Methods

==(rhs) click to toggle source
# File lib/cult/role.rb, line 66
def ==(rhs)
  [self.class, project, path] == [rhs.class, rhs.project, rhs.path]
end
Also aliased as: eql?
artifacts() click to toggle source
# File lib/cult/role.rb, line 87
def artifacts
  Artifact.all_for_role(project, self)
end
Also aliased as: files
build_order() click to toggle source
# File lib/cult/role.rb, line 171
def build_order
  all_items = [self] + parent_roles

  each_node = ->(&block) {
    all_items.each(&block)
  }

  each_child = ->(node, &block) {
    node.parent_roles.each(&block)
  }

  TSort.tsort(each_node, each_child).to_named_array
end
build_tasks() click to toggle source
# File lib/cult/role.rb, line 77
def build_tasks
  tasks.select { |t| t.is_a?(Cult::BuildTask) }
end
collection_name() click to toggle source
# File lib/cult/role.rb, line 38
def collection_name
  class_name = self.class.name.split('::')[-1]
  class_name.downcase + 's'
end
definition() click to toggle source
# File lib/cult/role.rb, line 96
def definition
  @definition ||= Definition.new(self)
end
definition_parameters() click to toggle source
# File lib/cult/role.rb, line 107
def definition_parameters
  { project: project, role: self }
end
definition_parents() click to toggle source
# File lib/cult/role.rb, line 112
def definition_parents
  parent_roles
end
definition_path() click to toggle source
# File lib/cult/role.rb, line 101
def definition_path
  [ File.join(path, "extra.json"),
    role_file ]
end
eql?(rhs)
Alias for: ==
event_tasks() click to toggle source
# File lib/cult/role.rb, line 82
def event_tasks
  tasks.select { |t| t.is_a?(Cult::EventTask) }
end
exist?() click to toggle source
# File lib/cult/role.rb, line 28
def exist?
  Dir.exist?(path)
end
files()
Alias for: artifacts
has_role?(role) click to toggle source
# File lib/cult/role.rb, line 186
def has_role?(role)
  ! tree[role].nil?
end
hash() click to toggle source
# File lib/cult/role.rb, line 61
def hash
  [self.class, project, path].hash
end
includes() click to toggle source
# File lib/cult/role.rb, line 117
def includes
  definition.direct('includes') || ['base']
end
inspect() click to toggle source
# File lib/cult/role.rb, line 55
def inspect
  "\#<#{self.class.name} id:#{object_id.to_s(36)} #{name.inspect}>"
end
Also aliased as: to_s
name() click to toggle source
# File lib/cult/role.rb, line 33
def name
  File.basename(path)
end
names_for_role(*a) click to toggle source
# File lib/cult/role.rb, line 190
def names_for_role(*a)
  build_order.map(&:name)
end
names_for_task() click to toggle source
# File lib/cult/role.rb, line 198
def names_for_task
  tasks.map(&:name)
end
node?() click to toggle source
# File lib/cult/role.rb, line 24
def node?
  false
end
parent_roles() click to toggle source
# File lib/cult/role.rb, line 122
def parent_roles
  Array(includes).map do |name|
    Role.by_name(project, name)
  end.to_named_array
end
query_for_role() click to toggle source
# File lib/cult/role.rb, line 194
def query_for_role
  build_order
end
recursive_parent_roles(seen = []) click to toggle source
# File lib/cult/role.rb, line 129
def recursive_parent_roles(seen = [])
  result = []
  parent_roles.each do |role|
    next if seen.include?(role)
    seen.push(role)
    result.push(role)
    result += role.recursive_parent_roles(seen)
  end
  result.to_named_array
end
relative_path(obj_path) click to toggle source
# File lib/cult/role.rb, line 49
def relative_path(obj_path)
  fail unless obj_path.start_with?(path)
  obj_path[path.size + 1 .. -1]
end
remote_path() click to toggle source
# File lib/cult/role.rb, line 44
def remote_path
  File.join(project.remote_path, collection_name, name)
end
role_file() click to toggle source
# File lib/cult/role.rb, line 92
def role_file
  File.join(path, "role.json")
end
tasks() click to toggle source
# File lib/cult/role.rb, line 72
def tasks
  Task.all_for_role(project, self)
end
to_s()
Alias for: inspect
tree() click to toggle source
# File lib/cult/role.rb, line 141
def tree
  ([self] + recursive_parent_roles).to_named_array
end