phlex 2.0.0.rc1 → 2.0.0.rc2
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/phlex/fifo.rb +10 -3
- data/lib/phlex/fifo_cache_store.rb +49 -0
- data/lib/phlex/helpers.rb +1 -1
- data/lib/phlex/html/standard_elements.rb +0 -101
- data/lib/phlex/html/void_elements.rb +0 -11
- data/lib/phlex/html.rb +3 -3
- data/lib/phlex/kit.rb +20 -15
- data/lib/phlex/null_cache_store.rb +9 -0
- data/lib/phlex/sgml/elements.rb +19 -53
- data/lib/phlex/sgml/state.rb +118 -0
- data/lib/phlex/sgml.rb +131 -68
- data/lib/phlex/svg/standard_elements.rb +0 -63
- data/lib/phlex/version.rb +1 -1
- data/lib/phlex.rb +16 -5
- metadata +6 -7
- data/lib/phlex/context.rb +0 -60
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35bbefcf5b9f49f4082f7b92e949e0dd5c13bb39fb65d435563ce6d93b8b002e
|
4
|
+
data.tar.gz: b5455009b59c52b2dc18364adcb4907dd17295b2fac82c42ee76dbe98106889c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f9a7b014d2821888a97afe5d822dcc04acede2623cfd2ac84d2ee9eb68aff30cf8e571b81d3c54cf3b344d06ea96de6f95b9a37213d5bb5acf805393150dccb
|
7
|
+
data.tar.gz: 1e940060016ea5d3ecf707bf33d0ad70ebb43e576825cb477be4a091eeec00787530cf8fb315e399196ae81c3cc88d8059e38ef6eeaeb816843f576a6124dc63
|
data/lib/phlex/fifo.rb
CHANGED
@@ -7,7 +7,7 @@ class Phlex::FIFO
|
|
7
7
|
@max_bytesize = max_bytesize
|
8
8
|
@max_value_bytesize = max_value_bytesize
|
9
9
|
@bytesize = 0
|
10
|
-
@mutex =
|
10
|
+
@mutex = Monitor.new
|
11
11
|
end
|
12
12
|
|
13
13
|
attr_reader :bytesize, :max_bytesize
|
@@ -20,7 +20,7 @@ class Phlex::FIFO
|
|
20
20
|
|
21
21
|
def [](key)
|
22
22
|
k, v = @store[key.hash]
|
23
|
-
v if k
|
23
|
+
v if k.eql?(key)
|
24
24
|
end
|
25
25
|
|
26
26
|
def []=(key, value)
|
@@ -32,7 +32,7 @@ class Phlex::FIFO
|
|
32
32
|
# Check the key definitely doesn't exist now we have the lock
|
33
33
|
return if @store[digest]
|
34
34
|
|
35
|
-
@store[digest] = [key, value]
|
35
|
+
@store[digest] = [key, value].freeze
|
36
36
|
@bytesize += value.bytesize
|
37
37
|
|
38
38
|
while @bytesize > @max_bytesize
|
@@ -45,4 +45,11 @@ class Phlex::FIFO
|
|
45
45
|
def size
|
46
46
|
@store.size
|
47
47
|
end
|
48
|
+
|
49
|
+
def clear
|
50
|
+
@mutex.synchronize do
|
51
|
+
@store.clear
|
52
|
+
@bytesize = 0
|
53
|
+
end
|
54
|
+
end
|
48
55
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# An extremely fast in-memory cache store that evicts keys on a first-in-first-out basis.
|
4
|
+
class Phlex::FIFOCacheStore
|
5
|
+
def initialize(max_bytesize: 2 ** 20)
|
6
|
+
@fifo = Phlex::FIFO.new(
|
7
|
+
max_bytesize:,
|
8
|
+
max_value_bytesize: max_bytesize
|
9
|
+
)
|
10
|
+
end
|
11
|
+
|
12
|
+
def fetch(key)
|
13
|
+
fifo = @fifo
|
14
|
+
key = map_key(key)
|
15
|
+
|
16
|
+
if (result = fifo[key])
|
17
|
+
JSON.parse(result)
|
18
|
+
else
|
19
|
+
result = yield
|
20
|
+
|
21
|
+
fifo[key] = JSON.fast_generate(result)
|
22
|
+
|
23
|
+
result
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def clear
|
28
|
+
@fifo.clear
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def map_key(value)
|
34
|
+
case value
|
35
|
+
when Array
|
36
|
+
value.map { |it| map_key(it) }
|
37
|
+
when Hash
|
38
|
+
value.to_h { |k, v| [map_key(k), map_key(v)].freeze }
|
39
|
+
when String, Symbol, Integer, Float, Time, true, false, nil
|
40
|
+
value
|
41
|
+
else
|
42
|
+
if value.respond_to?(:cache_key)
|
43
|
+
map_key(value.cache_key)
|
44
|
+
else
|
45
|
+
raise ArgumentError.new("Invalid cache key: #{value.class}")
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/phlex/helpers.rb
CHANGED