class MinimumTerm::Infrastructure

Attributes

data_dir[R]
errors[R]

Public Class Methods

new(data_dir:, verbose: false) click to toggle source
# File lib/minimum-term/infrastructure.rb, line 7
def initialize(data_dir:, verbose: false)
  @verbose = !!verbose
  @data_dir = data_dir
  @mutex1 = Mutex.new
  @mutex2 = Mutex.new
end

Public Instance Methods

consumers() click to toggle source
# File lib/minimum-term/infrastructure.rb, line 36
def consumers
  services.values.select do |service|
    service.consumed_objects.length > 0
  end
end
contracts_fulfilled?() click to toggle source
# File lib/minimum-term/infrastructure.rb, line 18
def contracts_fulfilled?
  @mutex1.synchronize do
    @errors = {}
    publishers.each do |publisher|
      publisher.satisfies_consumers?(verbose: @verbose)
      next if publisher.errors.empty?
      @errors.merge! publisher.errors
    end
    @errors.empty?
  end
end
convert_all!(keep_intermediary_files = false) click to toggle source
# File lib/minimum-term/infrastructure.rb, line 42
def convert_all!(keep_intermediary_files = false)
  json_files.each{ |file| FileUtils.rm_f(file) }
  mson_files.each do |file|
    MinimumTerm::Conversion.mson_to_json_schema!(
      filename: file,
      keep_intermediary_files: keep_intermediary_files,
      verbose: @verbose)
  end
  reload
end
json_files() click to toggle source
# File lib/minimum-term/infrastructure.rb, line 57
def json_files
  Dir.glob(File.join(@data_dir, "/**/*.schema.json"))
end
mson_files() click to toggle source
# File lib/minimum-term/infrastructure.rb, line 53
def mson_files
  Dir.glob(File.join(@data_dir, "/**/*.mson"))
end
publishers() click to toggle source
# File lib/minimum-term/infrastructure.rb, line 30
def publishers
  services.values.select do |service|
    service.published_objects.length > 0
  end
end
reload() click to toggle source
# File lib/minimum-term/infrastructure.rb, line 14
def reload
  @services = nil
end
services() click to toggle source
# File lib/minimum-term/infrastructure.rb, line 61
def services
  @mutex2.synchronize do
    return @services if @services
    @services = {}.with_indifferent_access
    dirs = Dir.glob(File.join(@data_dir, "*/"))
    dirs.each do |dir|
      service = MinimumTerm::Service.new(self, dir)
      @services[service.name] = service
    end
    @services
  end
end