Class: MinimumTerm::Infrastructure

Inherits:
Object
  • Object
show all
Defined in:
lib/minimum-term/infrastructure.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(data_dir:, verbose: false) ⇒ Infrastructure

Returns a new instance of Infrastructure.



7
8
9
10
11
12
# 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

Instance Attribute Details

#data_dirObject (readonly)

Returns the value of attribute data_dir.



5
6
7
# File 'lib/minimum-term/infrastructure.rb', line 5

def data_dir
  @data_dir
end

#errorsObject (readonly)

Returns the value of attribute errors.



5
6
7
# File 'lib/minimum-term/infrastructure.rb', line 5

def errors
  @errors
end

Instance Method Details

#consumersObject



36
37
38
39
40
# File 'lib/minimum-term/infrastructure.rb', line 36

def consumers
  services.values.select do |service|
    service.consumed_objects.length > 0
  end
end

#contracts_fulfilled?Boolean

Returns:

  • (Boolean)


18
19
20
21
22
23
24
25
26
27
28
# 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) ⇒ Object



42
43
44
45
46
47
48
49
50
51
# 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_filesObject



57
58
59
# File 'lib/minimum-term/infrastructure.rb', line 57

def json_files
  Dir.glob(File.join(@data_dir, "/**/*.schema.json"))
end

#mson_filesObject



53
54
55
# File 'lib/minimum-term/infrastructure.rb', line 53

def mson_files
  Dir.glob(File.join(@data_dir, "/**/*.mson"))
end

#publishersObject



30
31
32
33
34
# File 'lib/minimum-term/infrastructure.rb', line 30

def publishers
  services.values.select do |service|
    service.published_objects.length > 0
  end
end

#reloadObject



14
15
16
# File 'lib/minimum-term/infrastructure.rb', line 14

def reload
  @services = nil
end

#servicesObject



61
62
63
64
65
66
67
68
69
70
71
72
# 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