Sha256: e09c622e5dd7fa65185221549cb60b564be0954e1d92ee2dc828811285eb3cab

Contents?: true

Size: 979 Bytes

Versions: 7

Compression:

Stored size: 979 Bytes

Contents

module Finitio
  class Contract
    include Metadata

    def initialize(infotype, dresser, undresser, name = nil, metadata = nil)
      unless infotype.is_a?(Type)
        raise ArgumentError, "Type expected, got `#{infotype}`"
      end
      unless dresser.respond_to?(:call)
        raise ArgumentError, "r(:call) expected, got `#{dresser}`"
      end
      unless undresser.respond_to?(:call)
        raise ArgumentError, "r(:call) expected, got `#{undresser}`"
      end
      unless name.nil? or name.is_a?(Symbol)
        raise ArgumentError, "Symbol expected, got `#{name}`"
      end

      @name      = name
      @infotype  = infotype
      @dresser   = dresser
      @undresser = undresser
      @metadata  = metadata
    end
    attr_reader :name, :infotype, :dresser, :undresser

    def bind_ruby_type(clazz)
      @dresser   = clazz.method(name.to_sym)
      @undresser = clazz.instance_method(:"to_#{name}")
    end

  end # class Contract
end # module Finitio

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
finitio-0.7.0.pre.rc2 lib/finitio/support/contract.rb
finitio-0.7.0.pre.rc1 lib/finitio/support/contract.rb
finitio-0.6.1 lib/finitio/support/contract.rb
finitio-0.6.0 lib/finitio/support/contract.rb
finitio-0.5.2 lib/finitio/support/contract.rb
finitio-0.5.1 lib/finitio/support/contract.rb
finitio-0.5.0 lib/finitio/support/contract.rb