class Quacks::Signature
Internal: The class responsible for massaging parameters before passing them to the signatured method.
Attributes
Public Class Methods
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
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
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
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
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
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