Class: Composed

Inherits:
Object
  • Object
show all
Defined in:
lib/composed.rb,
lib/composed/version.rb,
lib/composed/keywords.rb,
lib/composed/positional.rb

Defined Under Namespace

Modules: Macro Classes: Keywords, Positional

Constant Summary collapse

VERSION =
"0.1.1"

Instance Method Summary collapse

Constructor Details

#initialize(klass, interface = :new, &block) ⇒ Composed

Returns a new instance of Composed.

Raises:

  • (ArgumentError)


6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'lib/composed.rb', line 6

def initialize(klass, interface = :new, &block)
  raise ArgumentError, "Must provide a block to define Composed Type" unless block_given?
  @klass = klass
  @injected_pos_args = Positional.new
  @injected_kw_args = Keywords.new
  @interface = interface
  @ctor = nil

  instance_eval(&block)

  singleton_class.send(:alias_method, interface, :execute_composition)
  singleton_class.send(:public, interface, :execute_composition)
  
  if interface == :call
    singleton_class.send(:alias_method, :[], :execute_composition)
    singleton_class.send(:public, :[])
  end
end