class DesignByContract::Signature::Spec

Constants

ACCEPTED_TYPES

Attributes

interface[R]
keyword[R]
type[R]

Public Class Methods

new(method_args_spec) click to toggle source
# File lib/design_by_contract/signature/spec.rb, line 4
def initialize(method_args_spec)
  @type, @keyword, @interface = format(method_args_spec)
end

Public Instance Methods

==(oth_spec) click to toggle source
# File lib/design_by_contract/signature/spec.rb, line 8
def ==(oth_spec)
  type == oth_spec.type &&
    keyword == oth_spec.keyword &&
    interface == oth_spec.interface
end
raw() click to toggle source
# File lib/design_by_contract/signature/spec.rb, line 14
def raw
  [type, keyword, interface.raw]
end

Private Instance Methods

format(spec) click to toggle source
# File lib/design_by_contract/signature/spec.rb, line 20
def format(spec)
  spec = [spec] if spec.is_a?(::Symbol)
  raise(ArgumentError) unless spec.is_a?(::Array)

  case spec.length
  when 1
    return parse_type(spec[0]), nil, parse_interface(nil)
  when 2
    return parse_type(spec[0]), parse_keyword(spec[1]), parse_interface(spec[1])
  when 3
    return parse_type(spec[0]), parse_keyword(spec[1]), parse_interface(spec[2])
  else
    raise(NotImplementedError)
  end
end
parse_interface(object) click to toggle source
# File lib/design_by_contract/signature/spec.rb, line 57
def parse_interface(object)
  case object
  when DesignByContract::Interface
    object
  when ::Hash
    DesignByContract::Interface.new(object)
  when ::NilClass, ::Symbol
    DesignByContract::Interface.new({})
  else
    raise(ArgumentError, 'interface can only be hash or interface type')
  end
end
parse_keyword(object) click to toggle source
# File lib/design_by_contract/signature/spec.rb, line 46
def parse_keyword(object)
  case object
  when ::Symbol, ::NilClass
    return object
  when ::Hash, DesignByContract::Interface
    return nil
  else
    raise(ArgumentError, 'keyword can only be symbol')
  end
end
parse_type(object) click to toggle source
# File lib/design_by_contract/signature/spec.rb, line 38
def parse_type(object)
  unless ACCEPTED_TYPES.include?(object)
    raise(ArgumentError, 'only the following types are accepted: ' + ACCEPTED_TYPES.join(', '))
  end

  object
end