class MinimumTerm::Service

Models a service and its published objects as well as consumed objects. The app itself is part of an Infrastructure

Attributes

consume[R]
errors[R]
infrastructure[R]
name[R]
publish[R]

Public Class Methods

new(infrastructure, data_dir) click to toggle source
# File lib/minimum-term/service.rb, line 9
def initialize(infrastructure, data_dir)
  @infrastructure = infrastructure
  @data_dir = data_dir
  @name = File.basename(data_dir).underscore
  load_contracts
end

Public Instance Methods

consumed_objects(publisher = nil) click to toggle source
# File lib/minimum-term/service.rb, line 26
def consumed_objects(publisher = nil)
  @consume.objects.select do |o|
    publisher.blank? or o.publisher == publisher
  end
end
consumers() click to toggle source
# File lib/minimum-term/service.rb, line 20
def consumers
  infrastructure.services.values.select do |service|
    service.consuming_from.include?(self)
  end
end
consuming_from() click to toggle source
# File lib/minimum-term/service.rb, line 16
def consuming_from
  consumed_objects.map(&:publisher).uniq
end
published_objects() click to toggle source
# File lib/minimum-term/service.rb, line 32
def published_objects
  @publish.objects
end
satisfies?(service) click to toggle source
# File lib/minimum-term/service.rb, line 36
def satisfies?(service)
  @publish.satisfies?(service)
end
satisfies_consumers?(verbose: false) click to toggle source
# File lib/minimum-term/service.rb, line 40
def satisfies_consumers?(verbose: false)
  @errors = {}
  print "#{name.camelize} satisfies: " if verbose
  consumers.each do |consumer|
    @publish.satisfies?(consumer)
    if @publish.errors.empty?
      print "#{consumer.name.camelize}".green if verbose
      next
    end
      print "#{consumer.name.camelize}".red if verbose
    @errors["#{name} -> #{consumer.name}"] = @publish.errors
  end
  print "\n" if verbose
  @errors.empty?
end

Private Instance Methods

load_contracts() click to toggle source
# File lib/minimum-term/service.rb, line 58
def load_contracts
  @publish = MinimumTerm::PublishContract.new(self, File.join(@data_dir, "publish.schema.json"))
  @consume = MinimumTerm::ConsumeContract.new(self, File.join(@data_dir, "consume.schema.json"))
end