Class: CopycopterClient::Cache
- Inherits:
-
Object
- Object
- CopycopterClient::Cache
- Defined in:
- lib/copycopter_client/cache.rb
Overview
Manages synchronization of copy between I18nBackend and Client. Acts like a Hash. Applications using the client will not need to interact with this class directly.
Responsible for locking down access to data used by both threads.
Instance Method Summary collapse
-
#[](key) ⇒ String
Returns content for the given blurb.
-
#[]=(key, value) ⇒ Object
Sets content for the given blurb.
- #download ⇒ Object
-
#export ⇒ String
Yaml representation of all blurbs.
- #flush ⇒ Object
-
#initialize(client, options) ⇒ Cache
constructor
Usually instantiated when CopycopterClient::Configuration#apply is invoked.
-
#keys ⇒ Array<String>
Keys for all blurbs stored on the server.
-
#sync ⇒ Object
Downloads and then flushes.
-
#wait_for_download ⇒ Object
Waits until the first download has finished.
Constructor Details
#initialize(client, options) ⇒ Cache
Usually instantiated when CopycopterClient::Configuration#apply is invoked.
15 16 17 18 19 20 21 22 23 |
# File 'lib/copycopter_client/cache.rb', line 15 def initialize(client, ) @blurbs = {} @client = client @downloaded = false @logger = [:logger] @mutex = Mutex.new @queued = {} @started = false end |
Instance Method Details
#[](key) ⇒ String
Returns content for the given blurb.
28 29 30 |
# File 'lib/copycopter_client/cache.rb', line 28 def [](key) lock { @blurbs[key] } end |
#[]=(key, value) ⇒ Object
Sets content for the given blurb. The content will be pushed to the server on the next flush.
36 37 38 |
# File 'lib/copycopter_client/cache.rb', line 36 def []=(key, value) lock { @queued[key] = value } end |
#download ⇒ Object
98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/copycopter_client/cache.rb', line 98 def download @started = true client.download do |downloaded_blurbs| downloaded_blurbs.reject! { |key, value| value == '' } lock { @blurbs = downloaded_blurbs } end rescue ConnectionError => error logger.error error. ensure @downloaded = true end |
#export ⇒ String
Yaml representation of all blurbs
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/copycopter_client/cache.rb', line 48 def export keys = {} lock do @blurbs.sort.each do |(blurb_key, value)| current = keys yaml_keys = blurb_key.split('.') 0.upto(yaml_keys.size - 2) do |i| key = yaml_keys[i] # Overwrite en.key with en.sub.key unless current[key].class == Hash current[key] = {} end current = current[key] end current[yaml_keys.last] = value end end unless keys.size < 1 keys.to_yaml end end |
#flush ⇒ Object
90 91 92 93 94 95 96 |
# File 'lib/copycopter_client/cache.rb', line 90 def flush with_queued_changes do |queued| client.upload queued end rescue ConnectionError => error logger.error error. end |
#keys ⇒ Array<String>
Keys for all blurbs stored on the server.
42 43 44 |
# File 'lib/copycopter_client/cache.rb', line 42 def keys lock { @blurbs.keys } end |
#sync ⇒ Object
Downloads and then flushes
112 113 114 115 |
# File 'lib/copycopter_client/cache.rb', line 112 def sync download flush end |
#wait_for_download ⇒ Object
Waits until the first download has finished.
76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/copycopter_client/cache.rb', line 76 def wait_for_download if pending? logger.info 'Waiting for first download' if logger.respond_to? :flush logger.flush end while pending? sleep 0.1 end end end |