class Deterministic::ProtocolBuilder

Constants

Signature

Public Class Methods

new(typevar, block) click to toggle source
# File lib/deterministic/protocol.rb, line 4
def initialize(typevar, block)
  @typevar, @block = typevar, block
  @protocol = Class.new
end

Public Instance Methods

build() click to toggle source
# File lib/deterministic/protocol.rb, line 9
def build
  instance_exec(&@block)
  @protocol
end
fn(signature, &block) click to toggle source
# File lib/deterministic/protocol.rb, line 20
def fn(signature, &block)
  m = signature.to_a.flatten
  name        = m[0]
  return_type = m[-1]
  params      = Hash[(m[1..-2][0] || {}).map { |k, v| [k[0], v] }]

  @protocol.instance_eval {
      define_singleton_method(name) {
        Signature.new(name, params, return_type, block)
      }
  }

  @protocol.instance_eval {
    if block
      define_method(name) { |*args|
        block.call(args)
      }
    end
  }
end
method_missing(m, *args) click to toggle source
# File lib/deterministic/protocol.rb, line 14
def method_missing(m, *args)
  [m, args]
end