Method: UV.klass_from_handler

Defined in:
lib/uv-rays.rb

.klass_from_handler(klass, handler = nil, *args) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/uv-rays.rb', line 28

def self.klass_from_handler(klass, handler = nil, *args)
    klass = if handler and handler.is_a?(Class)
        raise ArgumentError, "must provide module or subclass of #{klass.name}" unless klass >= handler
        handler
    elsif handler
        begin
            handler::UR_CONNECTION_CLASS
        rescue NameError
            handler::const_set(:UR_CONNECTION_CLASS, Class.new(klass) {include handler})
        end
    else
        klass
    end

    arity = klass.instance_method(:post_init).arity
    expected = arity >= 0 ? arity : -(arity + 1)
    if (arity >= 0 and args.size != expected) or (arity < 0 and args.size < expected)
        raise ArgumentError, "wrong number of arguments for #{klass}#post_init (#{args.size} for #{expected})"
    end

    klass
end