module Interface::DSL

Public Instance Methods

_interface_adapter() click to toggle source
# File lib/interface/dsl.rb, line 68
def _interface_adapter
  @result_adapter || _settings.config.response_adapter
end
_settings() click to toggle source
# File lib/interface/dsl.rb, line 72
def _settings
  @settings || ::Interface::DefaultSettings
end
defpoint(_name, &block) click to toggle source
# File lib/interface/dsl.rb, line 27
def defpoint(_name, &block)
  check_top_level_enpoint_policy

  points.merge!(_name => define_entity(_name, &block))
end
defsettings(configuration_class) click to toggle source
# File lib/interface/dsl.rb, line 5
def defsettings(configuration_class)
  if !configuration_class.is_a?(Class) || !configuration_class.is_a?(Module)
    fail(::Interface::Errors::UnexpectedInstanceError.new('Only classes and modules are supported'))
  end

  @settings ||= configuration_class
end
doc() click to toggle source
# File lib/interface/dsl.rb, line 53
def doc
  _name = self.respond_to?(:name) ? self.name : self.class.name
  puts _name
  doc_all_endpoints
  interfaces.each_pair { |_, i| i.doc }
end
extend_api(as: , with_class: ) click to toggle source

extend_api(as: 'northbound.operations.truck_load', with_class: TruckLoadAPI)

# File lib/interface/dsl.rb, line 46
def extend_api(as: , with_class: )
  # Maybe Define just a nested interface???
  _merge_point = respond_to?(:points) ? points : self

  _merge_point.merge!(as => with_class)
end
interface(name, &block) click to toggle source
# File lib/interface/dsl.rb, line 17
def interface(name, &block)
  if interfaces.key?(name)
    fail(::Interface::Errors::ImmutableInterfaceError.new("Interface can't be redefined or reopened! Use .extend_api method"))
  end

  interfaces.merge!(name => ::Interface::PortGroup.new(name, self).tap do |group|
    group.instance_eval(&block)
  end)
end
interfaces() click to toggle source
# File lib/interface/dsl.rb, line 60
def interfaces
  @interfaces ||= Hashie::Mash.new
end
method_missing(meth, *args, &block) click to toggle source
Calls superclass method
# File lib/interface/dsl.rb, line 33
def method_missing(meth, *args, &block)
  super unless respond_to?(:interfaces) || respond_to?(:points)

  if interfaces.respond_to?(meth)
    interfaces.send(meth)
  elsif points.respond_to?(meth)
    points.send(meth)
  else
    super
  end
end
points() click to toggle source
# File lib/interface/dsl.rb, line 64
def points
  @points ||= Hashie::Mash.new
end
returns(result_adapter) click to toggle source
# File lib/interface/dsl.rb, line 13
def returns(result_adapter)
  @result_adapter = result_adapter
end

Private Instance Methods

check_top_level_enpoint_policy() click to toggle source
# File lib/interface/dsl.rb, line 78
def check_top_level_enpoint_policy
  return if _settings.config.allow_top_level_api_endpoints? || !top_level?

  fail(::Interface::Errors::OrphanPortError.new("Can not be defined as a top level Interface"))
end
define_entity(_name, &block) click to toggle source
# File lib/interface/dsl.rb, line 104
def define_entity(_name, &block)
  ::Interface::PortEntity.new(_name, _interface_adapter).tap { |port| port.instance_eval(&block) }
end
doc_all_endpoints() click to toggle source
# File lib/interface/dsl.rb, line 92
def doc_all_endpoints
  traverse_all(points, print_doc)
end
print_doc() click to toggle source
top_level?() click to toggle source
# File lib/interface/dsl.rb, line 84
def top_level?
  if respond_to?(:parent)
    parent.nil? && interfaces.empty?
  else
    interfaces.empty?
  end
end
traverse_all(collection, execute_block) click to toggle source
# File lib/interface/dsl.rb, line 96
def traverse_all(collection, execute_block)
  collection.each_pair { |name, i| execute_block.call(i) }
end