phlex 2.0.0.rc1 → 2.0.0.rc2
Sign up to get free protection for your applications and to get access to all the features.
- 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