File: constants.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 (123 lines) | stat: -rw-r--r-- 3,009 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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
module Celluloid
  module Supervision
    # TODO: Do not hard-code. Allow configurable values.
    INSTANCE_RETRY_WAIT = 3
    INSTANCE_RETRY_LIMIT = 5

    module Error
      class NoPublicService < Celluloid::Error; end
    end

    class Configuration
      module Error
        class AlreadyDefined < Celluloid::Error; end
        class InvalidSupervisor < Celluloid::Error; end
        class InvalidValues < Celluloid::Error; end
        class Incomplete < Celluloid::Error; end
        class Invalid < Celluloid::Error; end
      end

      # Using class variable so that parameters can be added by plugins.

      @@parameters = {

        mandatory: [:type],

        optional: %i[
          as
          args
          block
        ],

        # TODO: Move these into Behaviors.
        plugins: [
          # de :size,        # Supervision::Pool
          # de :routers,     # Supervision::Coordinator
          # de :supervises   # Supervision::Tree
        ],

        meta: %i[
          registry
          branch
          method
        ]
      }

      @@arity = {
        type: :args
      }

      @@aliases = {
        name: :as,
        kind: :type,
        # de :pool => :size,   # TODO: Move into Behaviors.
        # de :supervise => :supervises
      }

      @@defaults = {}

      class << self
        def save_defaults
          @@defaults = {
            parameters: @@parameters.each_with_object({}) { |(k, v), p| p[k] = v.dup; },
            aliases: @@aliases.dup,
            arity: @@arity.dup
          }
        end

        def resync_parameters
          @@parameters = @@defaults[:parameters].each_with_object({}) { |(k, v), p| p[k] = v.dup; }
          @@aliases = @@defaults[:aliases].dup
          @@arity = @@defaults[:arity].dup
        end

        def parameters(*args)
          args.inject([]) { |parameters, p| parameters += @@parameters[p]; parameters }
        end

        def parameter!(key, value)
          @@parameters[key] << value unless @@parameters[key].include? value
        end

        def arity
          @@arity
        end

        def arity!(key, value)
          @@arity[key] = value
        end

        def aliases
          @@aliases
        end

        def alias!(aliased, original)
          @@aliases[aliased] = original
        end
      end

      save_defaults
      resync_parameters

      # This was originally added for `#pool` and `PoolManager
      # `:before_initialize` was added to allow detecting `:size => N`
      # and turning that into a pool. Other uses could be for `coordinator`
      # appointing a `router` by detecting `:routers => N`, and many other uses.

      ################ These are applied inside Supervision::Member ################

      REMOVE_AT_EXPORT = %i[
        configuration
        behavior
      ].freeze

      INJECTIONS = %i[
        configuration
        before_initialization
        after_initialization
        before_start
        before_restart
      ].freeze
    end
  end
end