ruflet_server 0.0.12 → 0.0.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/ruflet/server/wire_codec.rb +85 -8
- data/lib/ruflet/server.rb +1 -1
- data/lib/ruflet/version.rb +1 -1
- data/lib/ruflet_server.rb +14 -0
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 68ae173b9c0aa89989e40d996aed245db4c434b96e084b2bc83642c89f244208
|
|
4
|
+
data.tar.gz: 9aea810e84df29511565821252e06f7c0a73cc989b5df86df683393a496d8793
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: de44b6b80acfdc2ce0bca54a3460e027b053d16244cf8d1e44d81b6446d036795008cba9510d37ccec622734205b9bb41cecb8401456bbeb0fa349d8a51ad13e
|
|
7
|
+
data.tar.gz: 5a7e6e9e7623eebc5635ac8e200e13d8e62ba68335d5fe15533d6260b88a83fe5f5d3c279819c3f89d8f2465a5fac5014e399d1c4b9d67a52a15c0a3f3a76f91
|
|
@@ -2,8 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
module Ruflet
|
|
4
4
|
class WireCodec
|
|
5
|
+
PICKER_DATE_CONTROLS = %w[CupertinoDatePicker DatePicker DateRangePicker].freeze
|
|
6
|
+
PICKER_DATE_KEYS = %w[current_date end_value first_date last_date start_value value].freeze
|
|
7
|
+
PICKER_TIME_CONTROLS = %w[TimePicker].freeze
|
|
8
|
+
PICKER_TIME_KEYS = %w[value].freeze
|
|
9
|
+
|
|
5
10
|
class << self
|
|
6
|
-
def pack(value)
|
|
11
|
+
def pack(value, context = nil)
|
|
7
12
|
case value
|
|
8
13
|
when NilClass
|
|
9
14
|
"\xc0".b
|
|
@@ -16,11 +21,14 @@ module Ruflet
|
|
|
16
21
|
when Float
|
|
17
22
|
"\xcb".b + [value].pack("G")
|
|
18
23
|
when String
|
|
19
|
-
|
|
24
|
+
return pack_ext(1, normalize_date_ext(value)) if context == :date
|
|
25
|
+
return pack_ext(2, normalize_time_ext(value)) if context == :time
|
|
26
|
+
|
|
27
|
+
binary_string?(value) ? pack_binary(value) : pack_string(value)
|
|
20
28
|
when Symbol
|
|
21
29
|
pack_string(value.to_s)
|
|
22
30
|
when Array
|
|
23
|
-
pack_array(value)
|
|
31
|
+
pack_array(value, context)
|
|
24
32
|
when Hash
|
|
25
33
|
pack_map(value)
|
|
26
34
|
else
|
|
@@ -69,7 +77,58 @@ module Ruflet
|
|
|
69
77
|
end
|
|
70
78
|
end
|
|
71
79
|
|
|
72
|
-
def
|
|
80
|
+
def pack_binary(value)
|
|
81
|
+
bytes = value.to_s.b
|
|
82
|
+
len = bytes.bytesize
|
|
83
|
+
|
|
84
|
+
if len <= 0xff
|
|
85
|
+
"\xc4".b + [len].pack("C") + bytes
|
|
86
|
+
elsif len <= 0xffff
|
|
87
|
+
"\xc5".b + [len].pack("n") + bytes
|
|
88
|
+
else
|
|
89
|
+
"\xc6".b + [len].pack("N") + bytes
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def binary_string?(value)
|
|
94
|
+
value.encoding == Encoding::BINARY || !value.valid_encoding?
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def pack_ext(type, payload)
|
|
98
|
+
bytes = payload.to_s.b
|
|
99
|
+
len = bytes.bytesize
|
|
100
|
+
|
|
101
|
+
if len == 1
|
|
102
|
+
"\xd4".b + [type].pack("c") + bytes
|
|
103
|
+
elsif len == 2
|
|
104
|
+
"\xd5".b + [type].pack("c") + bytes
|
|
105
|
+
elsif len == 4
|
|
106
|
+
"\xd6".b + [type].pack("c") + bytes
|
|
107
|
+
elsif len == 8
|
|
108
|
+
"\xd7".b + [type].pack("c") + bytes
|
|
109
|
+
elsif len == 16
|
|
110
|
+
"\xd8".b + [type].pack("c") + bytes
|
|
111
|
+
elsif len <= 0xff
|
|
112
|
+
"\xc7".b + [len, type].pack("Cc") + bytes
|
|
113
|
+
elsif len <= 0xffff
|
|
114
|
+
"\xc8".b + [len, type].pack("nc") + bytes
|
|
115
|
+
else
|
|
116
|
+
"\xc9".b + [len, type].pack("Nc") + bytes
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def normalize_date_ext(value)
|
|
121
|
+
raw = value.to_s
|
|
122
|
+
return "#{raw}T00:00:00+00:00" if raw.match?(/\A\d{4}-\d{2}-\d{2}\z/)
|
|
123
|
+
|
|
124
|
+
raw
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
def normalize_time_ext(value)
|
|
128
|
+
value.to_s
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def pack_array(value, context = nil)
|
|
73
132
|
len = value.length
|
|
74
133
|
head =
|
|
75
134
|
if len <= 15
|
|
@@ -81,7 +140,7 @@ module Ruflet
|
|
|
81
140
|
end
|
|
82
141
|
|
|
83
142
|
body = +"".b
|
|
84
|
-
value.each { |item| body << pack(item) }
|
|
143
|
+
value.each { |item| body << pack(item, context) }
|
|
85
144
|
head + body
|
|
86
145
|
end
|
|
87
146
|
|
|
@@ -98,13 +157,22 @@ module Ruflet
|
|
|
98
157
|
end
|
|
99
158
|
|
|
100
159
|
body = +"".b
|
|
160
|
+
control_type = pairs["_c"].to_s
|
|
101
161
|
pairs.each do |k, v|
|
|
102
162
|
body << pack(k)
|
|
103
|
-
body << pack(v)
|
|
163
|
+
body << pack(v, picker_prop_context(control_type, k))
|
|
104
164
|
end
|
|
105
165
|
head + body
|
|
106
166
|
end
|
|
107
167
|
|
|
168
|
+
def picker_prop_context(control_type, key)
|
|
169
|
+
key = key.to_s
|
|
170
|
+
return :date if PICKER_DATE_CONTROLS.include?(control_type) && PICKER_DATE_KEYS.include?(key)
|
|
171
|
+
return :time if PICKER_TIME_CONTROLS.include?(control_type) && PICKER_TIME_KEYS.include?(key)
|
|
172
|
+
|
|
173
|
+
nil
|
|
174
|
+
end
|
|
175
|
+
|
|
108
176
|
def read_value(reader)
|
|
109
177
|
marker = reader.read_u8
|
|
110
178
|
|
|
@@ -178,8 +246,17 @@ module Ruflet
|
|
|
178
246
|
end
|
|
179
247
|
|
|
180
248
|
def read_ext(reader, size)
|
|
181
|
-
reader.read_i8
|
|
182
|
-
reader.read_exact(size)
|
|
249
|
+
type = reader.read_i8
|
|
250
|
+
data = reader.read_exact(size)
|
|
251
|
+
|
|
252
|
+
case type
|
|
253
|
+
when 1, 2, 4
|
|
254
|
+
data.dup.force_encoding("UTF-8")
|
|
255
|
+
when 3
|
|
256
|
+
data.to_i
|
|
257
|
+
else
|
|
258
|
+
data
|
|
259
|
+
end
|
|
183
260
|
end
|
|
184
261
|
end
|
|
185
262
|
|
data/lib/ruflet/server.rb
CHANGED
|
@@ -480,7 +480,7 @@ module Ruflet
|
|
|
480
480
|
|
|
481
481
|
def on_invoke_control_method(ws, payload)
|
|
482
482
|
page = fetch_page(ws)
|
|
483
|
-
page.handle_invoke_method_result(payload)
|
|
483
|
+
page.handle_invoke_method_result(Protocol.normalize_invoke_method_result_payload(payload))
|
|
484
484
|
end
|
|
485
485
|
|
|
486
486
|
def on_control_event(ws, payload)
|
data/lib/ruflet/version.rb
CHANGED
data/lib/ruflet_server.rb
CHANGED
|
@@ -10,8 +10,22 @@ module Ruflet
|
|
|
10
10
|
callback = entrypoint || block
|
|
11
11
|
raise ArgumentError, "Ruflet.run requires a callable entrypoint or block" unless callback.respond_to?(:call)
|
|
12
12
|
|
|
13
|
+
interceptor = run_interceptor
|
|
14
|
+
if interceptor
|
|
15
|
+
result = interceptor.call(entrypoint: callback, host: host, port: port)
|
|
16
|
+
return result unless result == :pass
|
|
17
|
+
end
|
|
18
|
+
|
|
13
19
|
Server.new(host: host, port: port) do |page|
|
|
14
20
|
callback.call(page)
|
|
15
21
|
end.start
|
|
16
22
|
end
|
|
23
|
+
|
|
24
|
+
def run_interceptor
|
|
25
|
+
return nil unless instance_variable_defined?(:@run_interceptors_mutex)
|
|
26
|
+
return nil unless instance_variable_defined?(:@run_interceptors)
|
|
27
|
+
|
|
28
|
+
@run_interceptors_mutex.synchronize { @run_interceptors.last }
|
|
29
|
+
end
|
|
30
|
+
private_class_method :run_interceptor
|
|
17
31
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ruflet_server
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.14
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- AdamMusa
|
|
@@ -15,14 +15,14 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - '='
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 0.0.
|
|
18
|
+
version: 0.0.14
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - '='
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 0.0.
|
|
25
|
+
version: 0.0.14
|
|
26
26
|
description: Ruflet WebSocket server runtime compatible with Flet protocol.
|
|
27
27
|
email:
|
|
28
28
|
- adammusa2222@gmail.com
|