Module: Accord

Defined in:
lib/accord/ro.rb,
lib/accord/tags.rb,
lib/accord/version.rb,
lib/accord/extendor.rb,
lib/accord/interface.rb,
lib/accord/exceptions.rb,
lib/accord/interfaces.rb,
lib/accord/declarations.rb,
lib/accord/base_registry.rb,
lib/accord/specification.rb,
lib/accord/interface_body.rb,
lib/accord/signature_info.rb,
lib/accord/nested_key_hash.rb,
lib/accord/adapter_registry.rb,
lib/accord/interface_method.rb,
lib/accord/interface_members.rb,
lib/accord/extendor_container.rb,
lib/accord/subscription_registry.rb

Defined Under Namespace

Modules: Declarations, Interfaces Classes: AdapterLookup, AdapterRegistry, BaseLookup, BaseRegistry, BrokenImplementation, DoesNotImplement, Error, Extendor, ExtendorContainer, InterfaceBody, InterfaceClass, InterfaceInvariants, InterfaceMembers, InterfaceMethod, Invalid, NestedKeyHash, RO, Registrations, SignatureInfo, Specification, SubscriberLookup, SubscriptionRegistry, Tags

Constant Summary collapse

VERSION =
'0.1.0'
Interface =
InterfaceClass.new(:'Accord::Interface')
UNSPECIFIED =
Object.new.tap do |o|
  o.define_singleton_method(:inspect) { 'UNSPECIFIED' }
end

Class Method Summary collapse

Class Method Details

.adapter_hooksObject



20
21
22
# File 'lib/accord/interface.rb', line 20

def adapter_hooks
  @adapter_hooks ||= []
end

.clear_adapter_hooksObject



16
17
18
# File 'lib/accord/interface.rb', line 16

def clear_adapter_hooks
  adapter_hooks.clear
end

.clear_default_adapter_hookObject



98
99
100
# File 'lib/accord/adapter_registry.rb', line 98

def clear_default_adapter_hook
  @default_adapter_registry = nil
end

.default_adapter_registryObject



102
103
104
# File 'lib/accord/adapter_registry.rb', line 102

def default_adapter_registry
  @default_adapter_registry ||= AdapterRegistry.new
end

.install_adapter_hook(hook) ⇒ Object



12
13
14
# File 'lib/accord/interface.rb', line 12

def install_adapter_hook(hook)
  adapter_hooks << hook
end

.install_default_adapter_hookObject



92
93
94
95
96
# File 'lib/accord/adapter_registry.rb', line 92

def install_default_adapter_hook
  install_adapter_hook(Proc.new { |provided, *objects|
    default_adapter_registry.get(objects, provided)
  })
end

.Interface(*args, &block) ⇒ Object



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/accord/interface.rb', line 24

def Interface(*args, &block)
  first_arg = args.shift
  if first_arg.is_a?(String) || first_arg.is_a?(Symbol)
    const_name = nil
    top_level = nil
    name = first_arg.to_s
  else
    const_name = args.shift.to_s
    top_level = first_arg
    name = top_level.name + '::' + const_name
  end

  interface = InterfaceClass.new(name, [Interface])

  InterfaceBody.run(interface, &block)

  top_level.const_set(const_name, interface) if const_name
  interface
end