class Dendrite::IO

Public Class Methods

load(source:) click to toggle source
# File lib/dendrite/io.rb, line 6
def load(source:)
  graph = Dendrite::ServiceGraph.new
  services = IO.services_from_folder(source: source)

  services.each do |service|
    graph << ServiceNode.new(service)
  end

  services.each do |service|
    node = ServiceNode.new(service)
    if service[:dependencies]
      service[:dependencies].each do |deps|
        dependency_name = "#{service[:organization]}_#{deps[:component]}_#{deps[:subcomponent]}"
        graph[node.name].add_dependency(service: graph[dependency_name], latency: deps[:latency], identifier: deps[:identifier], read_only: deps.fetch(:read_only, false))
      end
    end
  end

  graph
end
read(source:) click to toggle source
# File lib/dendrite/io.rb, line 34
def read(source:)
  YAML::load(File.open(source)).deep_symbolize_keys
end
services_from_file(source:) click to toggle source
# File lib/dendrite/io.rb, line 38
def services_from_file(source:)
  data = read(source: source)
  data[:subcomponents].collect do |service|
    service[:organization] = data[:organization]
    service[:component]    = data[:component]
    service[:lead_email]   = data[:lead_email]
    service[:team_email]   = data[:team_email]
    service
  end
end
services_from_folder(source:) click to toggle source
# File lib/dendrite/io.rb, line 49
def services_from_folder(source:)
  Dir["#{source}/**/*.yml"].collect {|file| services_from_file(source: file)}
                        .flatten
end
write(data:, destination:) click to toggle source
# File lib/dendrite/io.rb, line 27
def write(data:, destination:)
  FileUtils::mkdir_p(File.dirname(destination))
  File.open(destination, 'w') do |file|
    file.write(data)
  end
end