Interactions between Lolex, Timecop and the Cache in HyperSpec
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 35/100
Direzione di ricerca
Inizia individuando i metodi cache_read, cache_write e cache_delete di HyperSpec::Internal::Controller, quindi esamina Lolex.evaluate_ruby e il modo in cui Filecache e Timecop interagiscono al suo interno. Il lavoro è completato quando le operazioni di cache utilizzano l'ora di sistema e gli aggiornamenti di Lolex vengono conservati quando HyperSpec non è montato, senza inviare comunicazioni client non necessarie.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Hyperspec uses the Filecache gem, which uses Time.now. But if Timecop freezes time in a spec, then Time.now is not returning the system time, and the Filecache does not work. This should be fixable by wrapping calls to the Filecache with the timecop return method (and a block.) But this does not in general work because Hyperspec tries to communicate the "return" to the client, even if the client is not running.
The following series of patches fixes the issue, and can be incorporated into the next point release:
module HyperSpec
module Internal
module Controller
class << self
# wrap all calls with Timecop.return so the file cache gets the true system time
def cache_read(key)
Timecop.return { file_cache.get(key) }
end
def cache_write(key, value)
Timecop.return { file_cache.set(key, value) }
end
def cache_delete(key)
Timecop.return { file_cache.delete(key) }
rescue StandardError
nil
end
end
end
end
end
class Lolex
# store all lolex updates unless hyper_spec is mounted
def self.evaluate_ruby(&block)
if @capybara_page&.instance_variable_get('@hyper_spec_mounted')
@capybara_page.internal_evaluate_ruby(yield)
else
pending_evaluations << block
end
end
end
- Lingua principale
- JavaScript
- Stelle
- 538
- Fork
- 41
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di hyperstack-org/hyperstack
-
expose_as_operations method Apertaenhancement needs doc
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
hyperstack-org/hyperstack#359 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
hyperstack-org/hyperstack#267 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 25/100
hyperstack-org/hyperstack#457 ·
-
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
hyperstack-org/hyperstack#456 ·
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 15/100
hyperstack-org/hyperstack#455 · 2 commenti ·
Tutte le issue di hyperstack-org/hyperstack
Issue simili
-
ai-observability bug team/ai-observability
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
AllTheMods/ATM-10-L#19 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
SignalK/n2k-signalk#345 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
JuliaPluto/PlutoPlotly.jl#72 ·