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 +7 -0
- data/lib/js/service_worker_client.js +48 -0
- data/lib/service-worker-cache-rails.rb +27 -0
- data/lib/service-worker-cache-rails/rails.rb +7 -0
- data/lib/service-worker-cache-rails/rails/engine.rb +8 -0
- data/lib/service-worker-cache-rails/rails/railtie.rb +13 -0
- data/lib/service-worker-cache-rails/rails/version.rb +5 -0
- data/lib/tasks/process_service_worker.rake +78 -0
- metadata +78 -0
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,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: []
|