service-worker-cache-rails 0.2.0

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a6102ef72ad3bfd04faf78eab9b1c791830c016f
4
+ data.tar.gz: 0f3c5470fa1e9a98f04df48ffa0610865c4b9bd3
5
+ SHA512:
6
+ metadata.gz: 8ef61b832d14753199f6b00e642aceb945707b35857759000551cbf4ec05b99ce9a4590927269b514ba0a1419203de7c04ebf789db1128d401ea603d5e7a73d2
7
+ data.tar.gz: 2a946a38c95e39ef55921a0bb8d71414f25c448476abfd8170a46cc9a410de3b97c7cf4c58c0d636668a23bac5106ca72390d1f91a4c0e6f655c4c36d748e559
@@ -0,0 +1,48 @@
1
+
2
+ self.addEventListener('install', function(event) {
3
+ 'use strict';
4
+
5
+ // Open device cache and store our list of items
6
+ event.waitUntil(
7
+ caches.open(CACHE_NAME).then(function(cache) {
8
+ return cache.addAll(URLS_TO_CACHE);
9
+ })
10
+ );
11
+ });
12
+
13
+ self.addEventListener('fetch', function(event) {
14
+ 'use strict';
15
+
16
+ // Intercept fetch request
17
+ event.respondWith(
18
+ // match and serve cached asset if it exists
19
+ caches.match(event.request).then(function(response) {
20
+ if (response)
21
+ log_message('Read from cache', response);
22
+
23
+ return response || fetch(event.request);
24
+ })
25
+ );
26
+ });
27
+
28
+ self.addEventListener('activate', function(event) {
29
+ 'use strict';
30
+
31
+ event.waitUntil(
32
+ // Open our apps cache and delete any old cache items
33
+ caches.open(CACHE_NAME).then(function(cacheNames){
34
+ cacheNames.keys().then(function(cache){
35
+ cache.forEach(function(element, index, array) {
36
+ if (URLS_TO_CACHE.indexOf(element) === -1)
37
+ caches.delete(element);
38
+ });
39
+ });
40
+ })
41
+ );
42
+ });
43
+
44
+ function log_message(message, event){
45
+ 'use strict';
46
+ if (DEBUG)
47
+ console.info('SWCR: ' + message, event );
48
+ }
@@ -0,0 +1,27 @@
1
+ require 'service-worker-cache-rails/rails'
2
+ require 'service-worker-cache-rails/rails/version'
3
+ require 'service-worker-cache-rails/rails/engine'
4
+ require 'service-worker-cache-rails/rails/railtie'
5
+
6
+ module ServiceWorkerCacheRails
7
+ class << self
8
+ attr_accessor :configuration
9
+ end
10
+
11
+ def self.configure
12
+ self.configuration ||= Configuration.new
13
+ yield(configuration)
14
+ end
15
+
16
+ class Configuration
17
+ attr_accessor :assets
18
+ attr_accessor :debug
19
+ attr_accessor :cache_name
20
+
21
+ def initialize
22
+ @assets = []
23
+ @debug = false
24
+ @cache_name = 'my-app-cache'
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,7 @@
1
+ require 'service-worker-cache-rails/rails/engine' if defined?(Rails)
2
+ require 'service-worker-cache-rails/rails/railtie' if defined?(Rails)
3
+
4
+ module ServiceWorkerCacheRails
5
+ module Rails
6
+ end
7
+ end
@@ -0,0 +1,8 @@
1
+ require 'rails'
2
+
3
+ module ServiceWorkerCacheRails
4
+ module Rails
5
+ class Engine < ::Rails::Engine
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,13 @@
1
+ require 'rails'
2
+
3
+ module ServiceWorkerCacheRails
4
+ module Rails
5
+ class Railtie < ::Rails::Railtie
6
+ railtie_name :rails_service_worker_cache
7
+
8
+ rake_tasks do
9
+ load "tasks/process_service_worker.rake"
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,5 @@
1
+ module ServiceWorkerCacheRails
2
+ module Rails
3
+ VERSION = '0.2.0'
4
+ end
5
+ end
@@ -0,0 +1,78 @@
1
+ require 'service-worker-cache-rails/rails'
2
+ require 'service-worker-cache-rails/rails/version'
3
+ require 'service-worker-cache-rails/rails/engine'
4
+ require 'service-worker-cache-rails/rails/railtie'
5
+ require 'sprockets/manifest'
6
+
7
+ desc 'update the caching service worker file'
8
+ task process_service_worker_cache: :environment do
9
+ puts 'Service Worker: Task Started'
10
+ ServiceWorker.new
11
+ end
12
+
13
+ # Trigger the task to run when assets are precompiiled
14
+ Rake::Task['assets:precompile'].enhance do
15
+ Rake::Task['process_service_worker_cache'].invoke
16
+ end
17
+
18
+ # Encapsulate creating the service worker file
19
+ class ServiceWorker
20
+ attr_accessor :create
21
+
22
+ def initialize
23
+ self.create
24
+ end
25
+
26
+ def create
27
+ log_message('Creating file')
28
+
29
+ File.open("#{Rails.root}/public/serviceWorker.js", 'w') do | file |
30
+ file = self.insert_debug_variable(file)
31
+ file = self.insert_cache_name(file)
32
+ file = self.insert_versioned_asset_strings(file)
33
+ file = self.insert_service_worker(file)
34
+ end
35
+
36
+ self.log_message('Finished creating file')
37
+ end
38
+
39
+ def insert_versioned_asset_strings(file)
40
+ self.log_message("Inserting versioned asset strings")
41
+
42
+ manifest_path = Dir.glob(File.join(Rails.root, 'public/assets/.sprockets-manifest-*.json')).first
43
+ manifest_data = JSON.load(File.new(manifest_path))
44
+
45
+ file.puts 'var URLS_TO_CACHE = ['
46
+ ServiceWorkerCacheRails.configuration.assets.each_with_index do | asset, i |
47
+ file.puts " 'assets/#{manifest_data['assets'][asset]}'#{',' if (i+1) < ServiceWorkerCacheRails.configuration.assets.length}"
48
+ end
49
+ file.puts '];'
50
+ file
51
+ end
52
+
53
+ def insert_debug_variable(file)
54
+ self.log_message("Setting debug status")
55
+ file.puts 'var DEBUG = true;' if ServiceWorkerCacheRails.configuration.debug
56
+ file
57
+ end
58
+
59
+ def insert_cache_name(file)
60
+ self.log_message("Setting cache name")
61
+ file.puts "var CACHE_NAME = '#{ServiceWorkerCacheRails.configuration.cache_name}';"
62
+ file
63
+ end
64
+
65
+ def insert_service_worker(file)
66
+ log_message('Merging service worker script')
67
+ path = File.join(File.dirname(__FILE__), '../js/service_worker_client.js')
68
+ text = File.read(path)
69
+ file.puts text
70
+ file
71
+ end
72
+
73
+ def log_message(message)
74
+ if ServiceWorkerCacheRails.configuration.debug == true
75
+ puts "Service Worker Cache: #{message}"
76
+ end
77
+ end
78
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: service-worker-cache-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Tony Edwards
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-04-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.10'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.10'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ~>
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ~>
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ description: Drop in solution for caching assets using a service worker.
42
+ email: tony@plymouthsoftware.com
43
+ executables: []
44
+ extensions: []
45
+ extra_rdoc_files: []
46
+ files:
47
+ - lib/js/service_worker_client.js
48
+ - lib/service-worker-cache-rails.rb
49
+ - lib/service-worker-cache-rails/rails.rb
50
+ - lib/service-worker-cache-rails/rails/engine.rb
51
+ - lib/service-worker-cache-rails/rails/railtie.rb
52
+ - lib/service-worker-cache-rails/rails/version.rb
53
+ - lib/tasks/process_service_worker.rake
54
+ homepage: http://rubygems.org/gems/service-worker-cache-rails
55
+ licenses:
56
+ - MIT
57
+ metadata: {}
58
+ post_install_message:
59
+ rdoc_options: []
60
+ require_paths:
61
+ - lib
62
+ required_ruby_version: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - '>='
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ requirements: []
73
+ rubyforge_project:
74
+ rubygems_version: 2.5.2
75
+ signing_key:
76
+ specification_version: 4
77
+ summary: Drop in solution for caching assets using a service worker.
78
+ test_files: []