ruflet_server 0.0.13 → 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 +56 -5
- 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
|
|
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
|
+
|
|
19
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
|
|
@@ -86,7 +94,41 @@ module Ruflet
|
|
|
86
94
|
value.encoding == Encoding::BINARY || !value.valid_encoding?
|
|
87
95
|
end
|
|
88
96
|
|
|
89
|
-
def
|
|
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)
|
|
90
132
|
len = value.length
|
|
91
133
|
head =
|
|
92
134
|
if len <= 15
|
|
@@ -98,7 +140,7 @@ module Ruflet
|
|
|
98
140
|
end
|
|
99
141
|
|
|
100
142
|
body = +"".b
|
|
101
|
-
value.each { |item| body << pack(item) }
|
|
143
|
+
value.each { |item| body << pack(item, context) }
|
|
102
144
|
head + body
|
|
103
145
|
end
|
|
104
146
|
|
|
@@ -115,13 +157,22 @@ module Ruflet
|
|
|
115
157
|
end
|
|
116
158
|
|
|
117
159
|
body = +"".b
|
|
160
|
+
control_type = pairs["_c"].to_s
|
|
118
161
|
pairs.each do |k, v|
|
|
119
162
|
body << pack(k)
|
|
120
|
-
body << pack(v)
|
|
163
|
+
body << pack(v, picker_prop_context(control_type, k))
|
|
121
164
|
end
|
|
122
165
|
head + body
|
|
123
166
|
end
|
|
124
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
|
+
|
|
125
176
|
def read_value(reader)
|
|
126
177
|
marker = reader.read_u8
|
|
127
178
|
|
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
|