File tree Expand file tree Collapse file tree 4 files changed +74
-6
lines changed Expand file tree Collapse file tree 4 files changed +74
-6
lines changed Original file line number Diff line number Diff line change @@ -100,4 +100,42 @@ describe GraphQL::DataLoader::Loader do
100100 loader.batch_log.size.should eq(1 )
101101 loader.batch_log.first.should eq([1 , 2 ])
102102 end
103+
104+ it " primes the cache" do
105+ users = [
106+ User .new(1 , " Ada" ),
107+ User .new(2 , " Grace" ),
108+ ]
109+ loader = UserLoader .new(users)
110+ loader.prime(1 , users[0 ])
111+ loader.load(1 ).should eq(users[0 ])
112+ loader.load(2 ).should eq(users[0 ])
113+ loader.batch_log.size.should eq(1 )
114+ end
115+
116+ it " clears the cache" do
117+ users = [
118+ User .new(1 , " Ada" ),
119+ User .new(2 , " Grace" ),
120+ ]
121+ loader = UserLoader .new(users)
122+ loader.load(1 ).should eq(users[0 ])
123+ loader.clear
124+ loader.load(1 ).should eq(users[0 ])
125+ loader.batch_log.size.should eq(2 )
126+ end
127+
128+ it " clears a single cache entry" do
129+ users = [
130+ User .new(1 , " Ada" ),
131+ User .new(2 , " Grace" ),
132+ ]
133+ loader = UserLoader .new(users)
134+ loader.load(1 ).should eq(users[0 ])
135+ loader.prime(2 , users[1 ])
136+ loader.clear(1 )
137+ loader.load(1 ).should eq(users[0 ])
138+ loader.load(2 ).should eq(users[1 ])
139+ loader.batch_log.size.should eq(2 )
140+ end
103141end
Original file line number Diff line number Diff line change @@ -11,9 +11,12 @@ module GraphQL::DataLoader
1111 end
1212 end
1313
14- private abstract def has_key? (key : K ) : Bool
15- private abstract def [] (key : K ) : V
16- private abstract def []= (key : K , value : V ) : Nil
14+ abstract def has_key ?(key : K ) : Bool
15+ abstract def [] (key : K ) : V
16+ abstract def []? (key : K ) : V ?
17+ abstract def []= (key : K , value : V ) : Nil
18+ abstract def delete (key : K ) : Nil
19+ abstract def clear : Nil
1720
1821 # Override this method for caches where values expire for thread safety
1922 private def synchronize (& block : - > V ) : V
Original file line number Diff line number Diff line change @@ -39,6 +39,21 @@ module GraphQL::DataLoader
3939 objects.map { |object | load(object) }
4040 end
4141
42+ def prime (object : O , value : V ) : self
43+ cache[key_for(object)] ||= value
44+ self
45+ end
46+
47+ def clear (object : O ) : self
48+ cache.delete(key_for(object))
49+ self
50+ end
51+
52+ def clear : self
53+ cache.clear
54+ self
55+ end
56+
4257 # The batch loading method.
4358 # Gets called with all objects that have been passed to `#load` in the current batch.
4459 # A batch is fetched after 1 microsecond since the first call to `#load`.
Original file line number Diff line number Diff line change @@ -4,16 +4,28 @@ module GraphQL::DataLoader
44
55 private getter cache = Hash (K , V ).new
66
7- private def has_key? (key : K ) : Bool
7+ def has_key ?(key : K ) : Bool
88 cache.has_key?(key)
99 end
1010
11- private def [] (key : K ) : V
11+ def [] (key : K ) : V
1212 cache[key]
1313 end
1414
15- private def []= (key : K , value : V ) : Nil
15+ def []? (key : K ) : V ?
16+ cache[key]?
17+ end
18+
19+ def []= (key : K , value : V ) : Nil
1620 cache[key] = value
1721 end
22+
23+ def clear : Nil
24+ cache.clear
25+ end
26+
27+ def delete (key : K ) : Nil
28+ cache.delete(key)
29+ end
1830 end
1931end
You can’t perform that action at this time.
0 commit comments