factbase 0.19.1 → 0.19.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7bf5fda6f7bf7cfd9e62897b505924688938a0acfb326e0533ad80e9be8e01cd
4
- data.tar.gz: 10f2a249d9e3eb5bcc560a6cf07606cec54a6d35d325c00c7c6ee17075cc92f3
3
+ metadata.gz: 515345c86598dcc29f0795b9bb64fe31fc770469f596185103bc3ae62b95bec9
4
+ data.tar.gz: adcf851edc23a66a4297bf4888ae54987431cc853f3157d751bbb57f5a89ef01
5
5
  SHA512:
6
- metadata.gz: bef44475330c1835b4822894ca5460427e47271b60927d7dc920889dc77d5eb2249f77f334a9c283d87df137342642c10042ea66b41ad2de71ddfeb4a17443f9
7
- data.tar.gz: 0b5d3cbfff4ac2479ea5887fae0e6b545dfe5b1dc5e008503f04a517eb6922a1604864d6348864515a87c2518ab3c227a62fa34a35659cffee73c97be7209dbd
6
+ metadata.gz: 37488e2dd8a395abb1ddfb4700fa794592d3ce910981f4c468c2f6b0ebdfa703400873f5caea6cdee42a62971ae88009956fb6cb38b3bc5d8eebca698bdf4367
7
+ data.tar.gz: 7798feb2f2e05fb795e6cfffe3a3311d6e2867fd4b21d1ffb5f1e03aa818bacae442faf47a507a99a402081d5048146be883685adcef62a9ace4ef85ac4ee90e
@@ -31,6 +31,7 @@ class Factbase::CachedFactbase
31
31
  # Insert a new fact and return it.
32
32
  # @return [Factbase::Fact] The fact just inserted
33
33
  def insert
34
+ @cache[:__dirty__] = true
34
35
  Factbase::CachedFact.new(@origin.insert, @cache, fresh: true)
35
36
  end
36
37
 
@@ -35,6 +35,7 @@ class Factbase::CachedQuery
35
35
  # @return [Integer] Total number of facts yielded
36
36
  def each(fb = @fb, params = {})
37
37
  return to_enum(__method__, fb, params) unless block_given?
38
+ invalidate_if_dirty!
38
39
  key = "each #{@origin}" # params are ignored!
39
40
  before = @cache[key]
40
41
  @cache[key] = @origin.each(fb, params).to_a if before.nil?
@@ -51,6 +52,7 @@ class Factbase::CachedQuery
51
52
  # @param [Hash] params Optional params accessible in the query via the "$" symbol (unused)
52
53
  # @return The value evaluated
53
54
  def one(fb = @fb, params = {})
55
+ invalidate_if_dirty!
54
56
  key = "one: #{@origin} #{params}"
55
57
  before = @cache[key]
56
58
  @cache[key] = @origin.one(fb, params) if before.nil?
@@ -63,4 +65,14 @@ class Factbase::CachedQuery
63
65
  @cache.clear
64
66
  @origin.delete!(fb)
65
67
  end
68
+
69
+ private
70
+
71
+ # Clear cache if it was marked dirty by a fresh fact insertion.
72
+ # This implements lazy invalidation: we don't clear on every insert,
73
+ # only when a query actually runs after inserts happened.
74
+ def invalidate_if_dirty!
75
+ return unless @cache.delete(:__dirty__)
76
+ @cache.clear
77
+ end
66
78
  end
@@ -9,5 +9,5 @@
9
9
  # License:: MIT
10
10
  class Factbase
11
11
  # Current version of the gem (changed by .rultor.yml on every release)
12
- VERSION = '0.19.1' unless const_defined?(:VERSION)
12
+ VERSION = '0.19.2' unless const_defined?(:VERSION)
13
13
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: factbase
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.1
4
+ version: 0.19.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yegor Bugayenko