Class: Arf::RPC::Metadata
Instance Method Summary
collapse
Methods inherited from BaseMessage
#decode_bytes, #decode_string, #decode_uint16, encode, #encode_bytes, #encode_string, #encode_uint16, has_metadata, has_status, has_streaming, initialize_from, kind, message_by_kind, register
Constructor Details
#initialize(**kwargs) ⇒ Metadata
6
7
8
9
10
11
12
|
# File 'lib/arf/rpc/metadata.rb', line 6
def initialize(**kwargs)
super()
@pairs = {}
@dirty = false
@observer = Observer.new
kwargs.each { |k, v| set(k, v) }
end
|
Instance Method Details
#[](k) ⇒ Object
20
|
# File 'lib/arf/rpc/metadata.rb', line 20
def [](k) = @pairs[k]
|
#[]=(k, v) ⇒ Object
23
24
25
|
# File 'lib/arf/rpc/metadata.rb', line 23
def []=(k, v)
@observer.modify { _add(k, v) }
end
|
#add(k, v) ⇒ Object
18
|
# File 'lib/arf/rpc/metadata.rb', line 18
def add(k, v) = @observer.modify { _add(k, v) }
|
#attach_observer(obs) ⇒ Object
14
15
16
|
# File 'lib/arf/rpc/metadata.rb', line 14
def attach_observer(obs)
@observer.attach_handler(obs)
end
|
#decode(data) ⇒ Object
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
# File 'lib/arf/rpc/metadata.rb', line 89
def decode(data)
len = decode_uint16(data)
keys = []
values = []
len.times { keys << decode_string(data) }
len.times { values << decode_bytes(data) }
@pairs = {}
keys.zip(values).each { |pair| _add(*pair) }
@dirty = false
self
end
|
#dirty? ⇒ Boolean
67
|
# File 'lib/arf/rpc/metadata.rb', line 67
def dirty? = @dirty
|
#each(&block) ⇒ Object
Also known as:
each_pair
61
|
# File 'lib/arf/rpc/metadata.rb', line 61
def each(&block) = tap { @pairs.each(&block) }
|
#each_key(&block) ⇒ Object
65
|
# File 'lib/arf/rpc/metadata.rb', line 65
def each_key(&block) = tap { @pairs.keys(&block) }
|
#encode ⇒ Object
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
# File 'lib/arf/rpc/metadata.rb', line 69
def encode
pairs = []
@pairs.each do |k, v|
v.each { pairs << [k, _1] }
end
keys = IO::Buffer.new
values = IO::Buffer.new
pairs.each do |p|
keys.write_raw(encode_string(p.first))
values.write_raw(encode_bytes(p.last))
end
@dirty = false
IO::Buffer.new
.write_raw(encode_uint16(pairs.length))
.write_raw(keys.string)
.write_raw(values.string)
.string
end
|
#get(k) ⇒ Object
21
|
# File 'lib/arf/rpc/metadata.rb', line 21
def get(k) = @pairs[k]&.first
|
#key?(k) ⇒ Boolean
Also known as:
has_key?
58
|
# File 'lib/arf/rpc/metadata.rb', line 58
def key?(k) = @pairs.key?(k.to_s)
|
#keys ⇒ Object
64
|
# File 'lib/arf/rpc/metadata.rb', line 64
def keys = @pairs.keys
|
#merge!(other) ⇒ Object
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/arf/rpc/metadata.rb', line 35
def merge!(other)
@observer.modify do
other.each do |k, v|
@pairs[k] ||= []
@pairs[k].append(*v)
end
@dirty = true
end
self
end
|
#replace!(other) ⇒ Object
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/arf/rpc/metadata.rb', line 46
def replace!(other)
@observer.modify do
@pairs = {}
other.each do |k, v|
@pairs[k] ||= []
@pairs[k].append(*v)
end
@dirty = true
end
self
end
|
#set(k, v) ⇒ Object
27
28
29
30
31
32
33
|
# File 'lib/arf/rpc/metadata.rb', line 27
def set(k, v)
v = [v] unless v.is_a? Array
@observer.modify do
@pairs[k] = []
v.each { _add(k, _1) }
end
end
|