Class: Ractor::Server::Client
- Inherits:
-
Object
- Object
- Ractor::Server::Client
show all
- Extended by:
- Debugging
- Includes:
- Debugging
- Defined in:
- lib/ractor/server/client.rb
Constant Summary
collapse
- CONFIG =
{
share_args: Set[].freeze,
tell_methods: Set[].freeze,
}
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Methods included from Debugging
debug
Constructor Details
#initialize(server) ⇒ Client
Returns a new instance of Client.
12
13
14
15
16
17
18
|
# File 'lib/ractor/server/client.rb', line 12
def initialize(server)
raise ArgumentError, "Expected a Ractor, got #{server.inspect}" unless server.is_a?(::Ractor)
@nest_request_key = :"Ractor::Server::Client#{object_id}"
@server = server
freeze
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, **options, &block) ⇒ Object
123
124
125
126
127
128
129
130
131
132
133
134
135
|
# File 'lib/ractor/server/client.rb', line 123
private def method_missing(method, *args, **options, &block)
if implemented_by_server?(method)
refresh_server_call_layer
unless self.class::ServerCallLayer.method_defined?(method)
raise "`refresh_server_call_layer` failed for #{method}"
end
return __send__(method, *args, **options, &block)
end
super
end
|
Instance Attribute Details
#server ⇒ Object
Returns the value of attribute server.
10
11
12
|
# File 'lib/ractor/server/client.rb', line 10
def server
@server
end
|
Class Method Details
.config(key) ⇒ Object
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/ractor/server/client.rb', line 69
def config(key)
cur = self::CONFIG
cur_value = cur.fetch(key)
if block_given?
cur_value = yield cur_value
remove_const(:CONFIG) if const_defined?(:CONFIG, false)
const_set(:CONFIG, Ractor.make_shareable(cur.merge(key => cur_value)))
end
cur_value
end
|
.interface_with_server(*methods) ⇒ Object
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/ractor/server/client.rb', line 51
def interface_with_server(*methods)
methods.flatten!(1)
self::ServerCallLayer.class_eval do
methods.each do |method|
public alias_method(method, :call_server_alias)
end
end
debug(:interface) { "Defined methods #{methods.join(', ')}" }
methods
end
|
.refresh_server_call_layer ⇒ Object
42
43
44
45
46
47
48
49
|
# File 'lib/ractor/server/client.rb', line 42
def refresh_server_call_layer
layer = self::ServerCallLayer
server_klass = self::Server
are_defined = layer.instance_methods
should_be_defined = server_klass.instance_methods - NOT_IMPLICITLY_DEFINED
(are_defined - should_be_defined).each { layer.remove_method _1 }
interface_with_server(*config(:tell_methods) | should_be_defined - are_defined)
end
|
.share_args(*methods) ⇒ Object
91
92
93
94
95
96
|
# File 'lib/ractor/server/client.rb', line 91
def share_args(*methods)
methods.flatten!(1)
config(:share_args) { |val| val + methods }
methods
end
|
.start(*args, **options) ⇒ Object
37
38
39
40
|
# File 'lib/ractor/server/client.rb', line 37
def start(*args, **options)
ractor = self.class::Server.start_ractor(*args, **options)
new(ractor)
end
|
.sync_kind(method, block_given) ⇒ Object
80
81
82
83
84
85
86
87
88
89
|
# File 'lib/ractor/server/client.rb', line 80
def sync_kind(method, block_given)
case
when setter?(method) || config(:tell_methods).include?(method)
:tell
when block_given
:converse
else
:ask
end
end
|
.tells(*methods) ⇒ Object
63
64
65
66
67
|
# File 'lib/ractor/server/client.rb', line 63
def tells(*methods)
methods.flatten!(1)
config(:tell_methods) { |set| set + methods }
interface_with_server(*methods)
end
|
Instance Method Details
#inspect ⇒ Object
Also known as:
to_s
25
26
27
|
# File 'lib/ractor/server/client.rb', line 25
def inspect
"<##{self.class} server: #{call_server(:inspect)}>"
end
|