require ‘service-worker-cache-rails/rails’ require ‘service-worker-cache-rails/rails/version’ require ‘service-worker-cache-rails/rails/engine’ require ‘service-worker-cache-rails/rails/railtie’ require ‘sprockets/manifest’
desc ‘update the caching service worker file’ task process_service_worker_cache: :environment do
puts 'Service Worker: Task Started' ServiceWorker.new
end
# Trigger the task to run when assets are precompiiled Rake::Task.enhance do
Rake::Task['process_service_worker_cache'].invoke
end
# Encapsulate creating the service worker file class ServiceWorker
attr_accessor :create def initialize self.create end def create log_message('Creating file') File.open("#{Rails.root}/public/serviceWorker.js", 'w') do | file | file = self.insert_debug_variable(file) file = self.insert_cache_name(file) file = self.insert_versioned_asset_strings(file) file = self.insert_service_worker(file) end self.log_message('Finished creating file') end def insert_versioned_asset_strings(file) self.log_message("Inserting versioned asset strings") manifest_path = Dir.glob(File.join(Rails.root, 'public/assets/.sprockets-manifest-*.json')).first manifest_data = JSON.load(File.new(manifest_path)) file.puts 'var URLS_TO_CACHE = [' ServiceWorkerCacheRails.configuration.assets.each_with_index do | asset, i | file.puts " 'assets/#{manifest_data['assets'][asset]}'#{',' if (i+1) < ServiceWorkerCacheRails.configuration.assets.length}" end file.puts '];' file end def insert_debug_variable(file) self.log_message("Setting debug status") file.puts 'var DEBUG = true;' if ServiceWorkerCacheRails.configuration.debug file end def insert_cache_name(file) self.log_message("Setting cache name") file.puts "var CACHE_NAME = '#{ServiceWorkerCacheRails.configuration.cache_name}';" file end def insert_service_worker(file) log_message('Merging service worker script') path = File.join(File.dirname(__FILE__), '../js/service_worker_client.js') text = File.read(path) file.puts text file end def log_message(message) if ServiceWorkerCacheRails.configuration.debug == true puts "Service Worker Cache: #{message}" end end
end