arcabouco 0.1.0 → 0.1.1
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 +4 -4
- data/lib/arcabouco/application.rb +2 -2
- data/lib/arcabouco/server.rb +36 -5
- data/lib/arcabouco/version.rb +1 -1
- data/lib/assets/css/vendor.css +0 -0
- data/lib/assets/js/core/environment.js.coffee +0 -1
- data/lib/assets/js/vendor.js +0 -1
- data/lib/templates/index.haml +1 -19
- data/lib/templates/index.html.erb +110 -0
- data/lib/templates/manifest.erb +4 -0
- data/lib/templates/save_app.html +7 -0
- data/lib/templates/save_app.html.erb +7 -0
- metadata +20 -2
- /data/lib/assets/js/{vendor/jquery.js → jquery.js} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9a671d00d7f4680fc4270f6969b711b773d05a6d
|
4
|
+
data.tar.gz: a20ef1281de933e9aa34788b99cc7da1f6e7beef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1322db098088a70aceafb2410c5d35990d50ea1ea2033a19faa0f2ebd2df323e0c39007e745909ec735bfe59d8a096271a1975a4ede42917eb130c2bcde3191
|
7
|
+
data.tar.gz: 447dd453f5d4897655d128d355bcf2634b024d530df9928b920b2ac6b910f84c59f4f8b7c7b0a7958911712bb0d644d6048b49bb334c5def753d8f435537430e
|
@@ -10,8 +10,8 @@ module Arcabouco
|
|
10
10
|
|
11
11
|
def configure_root_directory
|
12
12
|
Arcabouco.gem_root = File.expand_path("../..",__FILE__)
|
13
|
-
|
14
|
-
Arcabouco.root
|
13
|
+
Arcabouco.root = File.expand_path Bundler.root
|
14
|
+
Dir.chdir Arcabouco.root
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
data/lib/arcabouco/server.rb
CHANGED
@@ -23,16 +23,43 @@ module Arcabouco
|
|
23
23
|
super
|
24
24
|
end
|
25
25
|
|
26
|
+
def assets_list
|
27
|
+
%w(jquery.js app.css app.js vendor.js vendor.css *.png)
|
28
|
+
end
|
29
|
+
|
26
30
|
def relative_to
|
27
31
|
"../" + Pathname.new(File.expand_path('../templates', File.dirname(__FILE__))).relative_path_from(Pathname.new(Arcabouco.root)).to_s
|
32
|
+
# Pathname.new(File.expand_path('../templates', File.dirname(__FILE__))).relative_path_from(Pathname.new(Arcabouco.root)).to_s
|
28
33
|
end
|
29
34
|
|
30
35
|
get '/manifest.appcache' do
|
31
|
-
|
36
|
+
index_digest = Digest::MD5.new
|
37
|
+
index_digest.update content_for_index
|
38
|
+
erb :"#{relative_to}/manifest", :locals => { :assets => $environment, :index_digest => index_digest.hexdigest }
|
39
|
+
end
|
40
|
+
|
41
|
+
get '/manifest.json' do
|
42
|
+
content_type :json
|
43
|
+
obj = {}
|
44
|
+
obj['assets'] = {}
|
45
|
+
assets_list.each do |asset|
|
46
|
+
next if asset.to_s.index("*")
|
47
|
+
obj['assets'][asset] = "/app.assets/" + $environment[asset.to_s].digest_path
|
48
|
+
end
|
49
|
+
obj.to_json
|
50
|
+
end
|
51
|
+
|
52
|
+
def content_for_index
|
53
|
+
erb :"#{relative_to}/index.html", locals: { :assets => $environment }, layout: false, cache: false
|
54
|
+
end
|
55
|
+
|
56
|
+
get '/save_app.html' do
|
57
|
+
erb :"#{relative_to}/save_app.html"
|
32
58
|
end
|
33
59
|
|
34
60
|
get '/*' do
|
35
|
-
|
61
|
+
expires 0, :public, :'no-cache', :must_revalidate # Expire in 1 minute, require Auth
|
62
|
+
content_for_index
|
36
63
|
end
|
37
64
|
end
|
38
65
|
|
@@ -40,6 +67,7 @@ module Arcabouco
|
|
40
67
|
attr_accessor :root
|
41
68
|
attr_accessor :rack
|
42
69
|
attr_accessor :env
|
70
|
+
attr_accessor :web
|
43
71
|
|
44
72
|
def initialize
|
45
73
|
self.root = Arcabouco.root
|
@@ -66,7 +94,8 @@ module Arcabouco
|
|
66
94
|
end
|
67
95
|
|
68
96
|
def setup_rack
|
69
|
-
|
97
|
+
self.web = Arcabouco::WebServer.new
|
98
|
+
web = self.web
|
70
99
|
|
71
100
|
# app_css.write_to( Arcabouco.root + "/public/app-#{app_css.digest}.min.css" )
|
72
101
|
$environment = self.get_env()
|
@@ -74,7 +103,7 @@ module Arcabouco
|
|
74
103
|
map '/app.assets' do
|
75
104
|
run $environment
|
76
105
|
end
|
77
|
-
run
|
106
|
+
run web
|
78
107
|
end
|
79
108
|
self.rack
|
80
109
|
end
|
@@ -92,6 +121,7 @@ module Arcabouco
|
|
92
121
|
self.env.css_compressor = :sass
|
93
122
|
end
|
94
123
|
|
124
|
+
|
95
125
|
def build
|
96
126
|
FileUtils.mkpath Arcabouco.root + "/public"
|
97
127
|
FileUtils.mkpath Arcabouco.root + "/public/app.assets"
|
@@ -99,9 +129,10 @@ module Arcabouco
|
|
99
129
|
prepare_env_for_build
|
100
130
|
|
101
131
|
manifest = Sprockets::Manifest.new(env, Arcabouco.root + "/public/app.assets/manifest.json")
|
102
|
-
manifest.compile
|
132
|
+
manifest.compile self.web.assets_list
|
103
133
|
|
104
134
|
compile_view "/", "index.html"
|
135
|
+
compile_view "/save_app.html", "save_app.html"
|
105
136
|
compile_view "/manifest.appcache", "manifest.appcache"
|
106
137
|
end
|
107
138
|
|
data/lib/arcabouco/version.rb
CHANGED
File without changes
|
data/lib/assets/js/vendor.js
CHANGED
data/lib/templates/index.haml
CHANGED
@@ -3,13 +3,9 @@
|
|
3
3
|
-# Set a base Title (From Partial maybe?)
|
4
4
|
%link{:href => "//iugu.com/imgs/favicon.ico", :rel => "icon"}/
|
5
5
|
%link{:href => "//iugu.com/imgs/favicon.ico", :rel => "shortcut icon"}/
|
6
|
-
%title
|
6
|
+
%title ......
|
7
7
|
%meta{ :charset => "utf-8" }
|
8
8
|
|
9
|
-
%link{:rel => :stylesheet, :type => :"text/css", :href => "/app.assets/#{assets['app.css'].digest_path}" }
|
10
|
-
%script{:type => :"text/javascript", :src => "/app.assets/#{assets['vendor.js'].digest_path}"}
|
11
|
-
%script{:type => :"text/javascript", :src => "/app.assets/#{assets['app.js'].digest_path}"}
|
12
|
-
|
13
9
|
%meta{ :name => "viewport", :content => "width=device-width, initial-scale=1, maximum-scale=1" }
|
14
10
|
%meta{ :name => "apple-mobile-web-app-capable", :content => "yes" }
|
15
11
|
%meta{ :name => "apple-mobile-web-status-bar-style", :content => "black" }
|
@@ -22,17 +18,3 @@
|
|
22
18
|
.js-warning
|
23
19
|
|
24
20
|
#app
|
25
|
-
%h1
|
26
|
-
Application Place Holder
|
27
|
-
|
28
|
-
-# Need to render additional footer
|
29
|
-
-# Google Tag Manager and footer additional scripts
|
30
|
-
-# Best to have a base_footer
|
31
|
-
|
32
|
-
%script
|
33
|
-
(function() { $(function() {
|
34
|
-
if (typeof(run_webapp) == 'function')
|
35
|
-
return run_webapp(true);
|
36
|
-
});
|
37
|
-
}).call(this);
|
38
|
-
|
@@ -0,0 +1,110 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html class='no-js not-ready'>
|
3
|
+
<head>
|
4
|
+
<title>...</title>
|
5
|
+
<meta charset='utf-8'>
|
6
|
+
<meta content='width=device-width, initial-scale=1, maximum-scale=1' name='viewport'>
|
7
|
+
<meta content='yes' name='apple-mobile-web-app-capable'>
|
8
|
+
<meta content='black' name='apple-mobile-web-status-bar-style'>
|
9
|
+
<meta content='on' http-equiv='cleartype'>
|
10
|
+
<meta content='IE=edge,chrome=1' http-equiv='X-UA-Compatible'>
|
11
|
+
<meta content='320' name='MobileOptimized'>
|
12
|
+
<script type="text/javascript" src="/app.assets/<%= assets['jquery.js'].digest_path %>"></script>
|
13
|
+
</head>
|
14
|
+
<body>
|
15
|
+
<noscript>
|
16
|
+
<div class='js-warning'></div>
|
17
|
+
</noscript>
|
18
|
+
<div id='app'></div>
|
19
|
+
|
20
|
+
<script type="text/javascript">
|
21
|
+
window.app = {}
|
22
|
+
window.app.bootstraped = false;
|
23
|
+
window.app.assets_manifest = "/<%= ENV['RACK_ENV'] == 'production' ? 'app.assets/manifest.json' : 'manifest.json' %>";
|
24
|
+
|
25
|
+
function currentCacheStatus() {
|
26
|
+
appCache = app.applicationCache;
|
27
|
+
switch (appCache.status) {
|
28
|
+
case appCache.UNCACHED: // UNCACHED == 0
|
29
|
+
return 'UNCACHED';
|
30
|
+
break;
|
31
|
+
case appCache.IDLE: // IDLE == 1
|
32
|
+
return 'IDLE';
|
33
|
+
break;
|
34
|
+
case appCache.CHECKING: // CHECKING == 2
|
35
|
+
return 'CHECKING';
|
36
|
+
break;
|
37
|
+
case appCache.DOWNLOADING: // DOWNLOADING == 3
|
38
|
+
return 'DOWNLOADING';
|
39
|
+
break;
|
40
|
+
case appCache.UPDATEREADY: // UPDATEREADY == 4
|
41
|
+
return 'UPDATEREADY';
|
42
|
+
break;
|
43
|
+
case appCache.OBSOLETE: // OBSOLETE == 5
|
44
|
+
return 'OBSOLETE';
|
45
|
+
break;
|
46
|
+
default:
|
47
|
+
return 'UKNOWN CACHE STATUS';
|
48
|
+
break;
|
49
|
+
}
|
50
|
+
}
|
51
|
+
|
52
|
+
function addScriptTag(src)
|
53
|
+
{
|
54
|
+
var newScript = document.createElement('script');
|
55
|
+
newScript.type = 'text/javascript';
|
56
|
+
newScript.src = src;
|
57
|
+
document.head.appendChild(newScript);
|
58
|
+
}
|
59
|
+
|
60
|
+
function bootstrapApplication()
|
61
|
+
{
|
62
|
+
if (app.bootstraped) return;
|
63
|
+
app.bootstraped = true;
|
64
|
+
console.log("START");
|
65
|
+
console.log("FETCH " + app.assets_manifest );
|
66
|
+
jQuery.getJSON( app.assets_manifest, function(data) {
|
67
|
+
$('head').append('<link rel="stylesheet" href="' + data.assets["vendor.css"] + '" type="text/css" />');
|
68
|
+
$('head').append('<link rel="stylesheet" href="' + data.assets["app.css"] + '" type="text/css" />');
|
69
|
+
addScriptTag( data.assets['vendor.js'] );
|
70
|
+
addScriptTag( data.assets['app.js'] );
|
71
|
+
});
|
72
|
+
}
|
73
|
+
|
74
|
+
function updateApplicationDownloadProgress(progress)
|
75
|
+
{
|
76
|
+
if (app.bootstraped) return;
|
77
|
+
console.log("New asset downloaded");
|
78
|
+
}
|
79
|
+
|
80
|
+
function refreshApplicationFiles()
|
81
|
+
{
|
82
|
+
if (app.bootstraped == false) {
|
83
|
+
app.applicationCache.swapCache();
|
84
|
+
bootstrapApplication();
|
85
|
+
}
|
86
|
+
else {
|
87
|
+
if (confirm('A new version of this application is available. Load it?')) {
|
88
|
+
window.location.reload();
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}
|
92
|
+
|
93
|
+
$(document).ready( function() {
|
94
|
+
appcache_frame = $('<iframe>').attr('src', '/save_app.html').load(function() {
|
95
|
+
app.applicationCache = appcache_frame.contentWindow.applicationCache;
|
96
|
+
|
97
|
+
app.applicationCache.addEventListener('noupdate', bootstrapApplication, false);
|
98
|
+
app.applicationCache.addEventListener('updateready', refreshApplicationFiles, false);
|
99
|
+
app.applicationCache.addEventListener('progress', function(e) { updateApplicationDownloadProgress(e); }, false);
|
100
|
+
|
101
|
+
setInterval(function() {
|
102
|
+
console.log("Checking for new versions");
|
103
|
+
app.applicationCache.update();
|
104
|
+
}, 10*1000);
|
105
|
+
|
106
|
+
}).appendTo('head')[0]
|
107
|
+
});
|
108
|
+
</script>
|
109
|
+
</body>
|
110
|
+
</html>
|
data/lib/templates/manifest.erb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
CACHE MANIFEST
|
2
|
+
# <%= index_digest %>
|
2
3
|
|
3
4
|
CACHE:
|
4
5
|
<% if assets['app.css'] %>/app.assets/<%= assets['app.css'].digest_path %><% end %>
|
@@ -7,7 +8,10 @@ CACHE:
|
|
7
8
|
|
8
9
|
<% if assets['vendor.js'] %>/app.assets/<%= assets['vendor.js'].digest_path %><% end %>
|
9
10
|
|
11
|
+
<% if assets['jquery.js'] %>/app.assets/<%= assets['jquery.js'].digest_path %><% end %>
|
12
|
+
|
10
13
|
NETWORK:
|
14
|
+
*
|
11
15
|
|
12
16
|
FALLBACK:
|
13
17
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: arcabouco
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Patrick Negri
|
@@ -178,6 +178,20 @@ dependencies:
|
|
178
178
|
- - ">="
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: therubyracer
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
181
195
|
- !ruby/object:Gem::Dependency
|
182
196
|
name: eco
|
183
197
|
requirement: !ruby/object:Gem::Requirement
|
@@ -288,23 +302,27 @@ files:
|
|
288
302
|
- lib/assets/css/mixins.sass
|
289
303
|
- lib/assets/css/no-js.sass
|
290
304
|
- lib/assets/css/reset.sass
|
305
|
+
- lib/assets/css/vendor.css
|
291
306
|
- lib/assets/js/app.js
|
292
307
|
- lib/assets/js/config.js.coffee
|
293
308
|
- lib/assets/js/core/boot.js.coffee
|
294
309
|
- lib/assets/js/core/capabilities.js
|
295
310
|
- lib/assets/js/core/debug.js.coffee
|
296
311
|
- lib/assets/js/core/environment.js.coffee
|
312
|
+
- lib/assets/js/jquery.js
|
297
313
|
- lib/assets/js/templates.js
|
298
314
|
- lib/assets/js/usecode.js
|
299
315
|
- lib/assets/js/vendor.js
|
300
316
|
- lib/assets/js/vendor/async.js
|
301
317
|
- lib/assets/js/vendor/backbone.js
|
302
318
|
- lib/assets/js/vendor/handlebars.js
|
303
|
-
- lib/assets/js/vendor/jquery.js
|
304
319
|
- lib/assets/js/vendor/tasks.js.coffee
|
305
320
|
- lib/assets/js/vendor/underscore.js
|
306
321
|
- lib/templates/index.haml
|
322
|
+
- lib/templates/index.html.erb
|
307
323
|
- lib/templates/manifest.erb
|
324
|
+
- lib/templates/save_app.html
|
325
|
+
- lib/templates/save_app.html.erb
|
308
326
|
homepage: ''
|
309
327
|
licenses: []
|
310
328
|
metadata: {}
|
File without changes
|