class Quacks::Signature

Internal: The class responsible for massaging parameters before passing them to the signatured method.

Attributes

signature[R]

Public Class Methods

new(*signature) click to toggle source

Internal: Initialize a signature object.

signature - The Symbol or Hash conversion method(s) that depicts this

signature.
# File lib/quacks/signature.rb, line 10
def initialize(*signature)
  @signature = signature
end

Public Instance Methods

apply!(*args) click to toggle source

Internal: Convert the given arguments, with the given conversion methods.

Examples:

Quacks::Signature.new(:to_i, bignum: :to_s).apply!('1', 100)
#=> [1, { bignum: '100' }]

Returns an Array of arguments. Raises Quacks::SignatureError if the arguments could not be converted. Raises Quacks::WrongNumberOfArgumentsError if wrong number of arguments.

# File lib/quacks/signature.rb, line 24
def apply!(*args)
  validate args, signature
  signature.each_with_index.map do |arg_signature, i|
    convert! args[i], arg_signature
  end
end

Private Instance Methods

convert!(arguments, conversion) click to toggle source

Internal: Converts the given arguments with the given conversion(s).

arguments - The Hash symbol arguments or any Object to convert. conversion = An Hash with conversions or a Symbol conversion.

Returns the converted argument.

# File lib/quacks/signature.rb, line 61
def convert!(arguments, conversion)
  convertor_for(conversion).convert!(arguments)
end
convertor_class(conversion) click to toggle source

Internal: Returns the class to be used for applying the given conversion.

conversion = An Hash with conversions or a Symbol conversion.

# File lib/quacks/signature.rb, line 45
def convertor_class(conversion)
  case conversion
  when Hash
    Quacks::HashConvertor
  else
    Quacks::DefaultConvertor
  end
end
convertor_for(conversion) click to toggle source

Internal: Returns a convertor to perform the given conversion.

conversion - An Hash with conversions or a Symbol conversion.

Returns a Quacks::HashConvertor or Quacks::DefaultConvertor instance.

# File lib/quacks/signature.rb, line 38
def convertor_for(conversion)
  convertor_class(conversion).new(conversion)
end
validate(arguments, signature) click to toggle source

Internal: Determine if correct number of arguments were given.

Returns true if correct number of arguments. Raises Quacks::WrongNumberOfArgumentsError if wrong number of arguments

given.
# File lib/quacks/signature.rb, line 70
def validate(arguments, signature)
  return true if arguments.length == signature.length
  raise Quacks::WrongNumberOfArgumentsError
end