File: validation.rb

package info (click to toggle)
ruby-celluloid 0.18.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 848 kB
  • sloc: ruby: 7,579; makefile: 10
file content (40 lines) | stat: -rw-r--r-- 1,304 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
module Celluloid
  module Supervision
    class Configuration
      class << self
        def valid?(configuration, fails = false)
          parameters(:mandatory).each do |k|
            unless configuration.key? k
              if fails
                raise Error::Incomplete, "Missing `:#{k}` in supervision configuration."
              else
                return false
              end
            end
          end
          arity.each do |klass, args|
            next if configuration[args].is_a? Proc
            __a = configuration[args] && configuration[args].count || 0
            __arity = configuration[klass].allocate.method(:initialize).arity
            unless (__arity < 0 && __a >= __arity.abs - 1) || __a == __arity.abs
              if fails
                raise ArgumentError, "#{__a} vs. #{__arity}"
              else
                return false
              end
            end
          end
          true
        end

        def options(config = {}, options = {})
          configuration = config.merge(options)
          return configuration if configuration.is_a? Configuration
          configuration[:configuration] = Container::Behavior.configure(configuration)
          valid?(configuration, true)
          configuration
        end
      end
    end
  end
end