arcabouco 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|