architect 0.0.7 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 9bec81cd66ce034cb54efbab4035fd141a0ee8d5
4
- data.tar.gz: a002476eafc68ddb9ebf222bbd318ef25e54cafb
3
+ metadata.gz: 5cc29094107fa1e8e42c14a8ada858d19648e954
4
+ data.tar.gz: 15b940dc6ced00de718d161289b17b53a563515d
5
5
  SHA512:
6
- metadata.gz: 096b8f8d8d97127b6e25e9a50fcee3b6fdd370b10f4d82ba502bba5d68e031c5dd2b388bf1b2fcccea2d4666ab09c58865488554c4f7b4ff8dfd13d04c97446a
7
- data.tar.gz: fe231e602cb01f153b0ff66d20b8eba440cecd4682bc48750606607390cf9dec7a80281e72fbb3f3a51dfa782dd67a52c1e5f20f443b3382c0547b3861d83bb2
6
+ metadata.gz: bd3e5db5706aabcccbc7b6b179f328fe72331292c6baebcf4ce6b63d244342c82464853848e8d6bd64110b2801c88b0a9f5ae36f0f32de9f1d94964f2ba0faff
7
+ data.tar.gz: 64693c0b448646829b70e10a8e9c9d07d1e972b65bd6f8a926e44ad04061f24471cc2686c3ce6a18ca7fcdd045394800753084ff324a5ced3d0ae54fab6f93b7
@@ -0,0 +1 @@
1
+ Gemfile.lock
@@ -1,3 +1,6 @@
1
+ ## [v0.1.0](https://github.com/EtienneLem/architect/tree/v0.1.0)
2
+ - Add X-Requested-With header to xhr request
3
+
1
4
  ## [v0.0.7](https://github.com/EtienneLem/architect/tree/v0.0.7)
2
5
  - Serve your workers from any path
3
6
  - Make `workFrom` fallback optional
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source 'https://rubygems.org'
2
+ gemspec
data/README.md CHANGED
@@ -9,6 +9,10 @@
9
9
  He will manage and polyfill them workers so you don’t have to.
10
10
  </p>
11
11
 
12
+ <p align="center">
13
+ <a href="http://badge.fury.io/rb/architect"><img src="https://badge.fury.io/rb/architect@2x.png" alt="Gem Version" height="18"></a>
14
+ </p>
15
+
12
16
  ## Short-lived workers
13
17
  These will be automatically terminated as soon as the work is done. It will spawn a new worker every time.
14
18
 
@@ -154,7 +158,7 @@ Architect.workFrom('workers/foozle.js', 'foo', foozleFallback, function(data) {
154
158
  3. Restart your server and you'll have access to your very own Architect!
155
159
 
156
160
  ### Other
157
- You’ll need to serve the [worker files](/static/workers) at `/architect` (i.e. `http://foo.com/architect/proxy_worker.min.js`) and manually include [architect.min.js](/static/architect.min.js) to your HTML pages.
161
+ You’ll need to serve the [worker files](https://github.com/EtienneLem/architect/tree/master/static/workers) at `/architect` (i.e. `http://foo.com/architect/proxy_worker.min.js`) and manually include [architect.min.js](https://github.com/EtienneLem/architect/tree/master/static/architect.min.js) to your HTML pages. Architect is also hosted on [cdnjs.com](http://cdnjs.com).
158
162
 
159
163
  #### Custom path
160
164
  You can also specify any path you want to serve the workers from.
data/Rakefile CHANGED
@@ -1,10 +1,16 @@
1
1
  $:.unshift File.join(File.dirname(__FILE__), *%w[lib])
2
2
  require 'tasks/task_helpers'
3
3
 
4
+ # Rubygems
5
+ require 'bundler'
6
+ Bundler::GemHelper.install_tasks
7
+
8
+ # Dependencies
4
9
  require 'uglifier'
5
10
  require 'architect'
6
11
  require 'sprockets'
7
12
 
13
+ # Tasks
8
14
  desc 'Merge, compiles and minify CoffeeScript files'
9
15
  task :compile do
10
16
  @environment = Sprockets::Environment.new
@@ -27,6 +33,21 @@ task :default => :compile
27
33
  def compile(file)
28
34
  minjs = @environment[file].to_s
29
35
  out = "static/#{file.sub('.js', '.min.js')}"
30
- File.open(out, 'w') { |f| f.write(minjs) }
36
+
37
+ File.open(out, 'w') { |f| f.write(copyright + minjs + "\n") }
31
38
  success "Compiled #{out}"
32
39
  end
40
+
41
+ def copyright
42
+ @copyright ||= <<-EOS
43
+ /*
44
+ * Architect v#{Architect::VERSION}
45
+ * http://architectjs.org
46
+ *
47
+ * Copyright 2013, Etienne Lemay http://heliom.ca
48
+ * Released under the MIT license
49
+ *
50
+ * Date: #{Time.now}
51
+ */
52
+ EOS
53
+ end
@@ -3,6 +3,7 @@ class @Architect.AjaxWorker extends @Architect.Worker
3
3
  postMessage: (url) ->
4
4
  xhr = new XMLHttpRequest
5
5
  xhr.open('GET', url)
6
+ xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest')
6
7
 
7
8
  xhr.onreadystatechange = (e) =>
8
9
  return unless xhr.readyState is 4 && xhr.status is 200
@@ -4,6 +4,8 @@ handleRequest = (data) ->
4
4
  addEventListener 'message', (e) ->
5
5
  xhr = new XMLHttpRequest
6
6
  xhr.open('GET', e.data)
7
+ xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest')
8
+
7
9
  xhr.onreadystatechange = (e) ->
8
10
  return unless xhr.readyState is 4 && xhr.status is 200
9
11
  handleRequest(xhr.responseText)
@@ -0,0 +1,21 @@
1
+ require './lib/architect/version'
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'architect'
5
+ s.version = Architect::VERSION
6
+ s.authors = ['Etienne Lemay']
7
+ s.email = ['etienne@heliom.ca']
8
+ s.homepage = 'http://architectjs.org'
9
+ s.summary = 'Your web workers’ supervisor'
10
+ s.description = 'Architect is a JavaScript library built on top of Web Workers that will handle and polyfill HTML Web Workers.'
11
+ s.license = 'MIT'
12
+
13
+ s.files = `git ls-files`.split($/)
14
+ s.test_files = s.files.grep(%r{^(test)/})
15
+
16
+ s.add_dependency 'coffee-rails'
17
+
18
+ s.add_development_dependency 'rake'
19
+ s.add_development_dependency 'uglifier'
20
+ s.add_development_dependency 'sprockets'
21
+ end
@@ -1,3 +1,3 @@
1
1
  module Architect
2
- VERSION = '0.0.7'
2
+ VERSION = '0.1.0'
3
3
  end
@@ -10,7 +10,7 @@ end
10
10
  35 => 'magenta',
11
11
  36 => 'cyan',
12
12
  }.each do |code, color|
13
- define_method(color) { |text| colorize(text, code) }
13
+ Kernel.send(:define_method, color) { |text| colorize(text, code) }
14
14
  end
15
15
 
16
16
  def error(text); puts red('ERROR: ') + text; end
@@ -1 +1,10 @@
1
- !function(){this.Architect={},this.Architect.VERSION="0.0.7"}.call(this),function(){this.Architect.Worker=function(){function t(){this.callbacks={},this.callbacksQueue={}}return t.prototype.addEventListener=function(t,r){var e;return this.callbacks[t]=r,(e=this.callbacksQueue[t])?(delete this.callbacksQueue[t],this.dispatch(t,e)):void 0},t.prototype.dispatch=function(t,r){return this.callbacks[t]?this.callbacks[t]({data:r}):this.callbacksQueue[t]=r},t.prototype.handleRequest=function(t){return this.dispatch("message",t)},t.prototype.terminate=function(){},t}()}.call(this),function(){var t,r={}.hasOwnProperty,e=function(t,e){function n(){this.constructor=t}for(var o in e)r.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t};this.Architect.AjaxWorker=function(r){function n(){return t=n.__super__.constructor.apply(this,arguments)}return e(n,r),n.prototype.postMessage=function(t){var r,e=this;return r=new XMLHttpRequest,r.open("GET",t),r.onreadystatechange=function(){return 4===r.readyState&&200===r.status?e.handleRequest(r.responseText):void 0},r.send()},n}(this.Architect.Worker)}.call(this),function(){var t={}.hasOwnProperty,r=function(r,e){function n(){this.constructor=r}for(var o in e)t.call(e,o)&&(r[o]=e[o]);return n.prototype=e.prototype,r.prototype=new n,r.__super__=e.prototype,r};this.Architect.JSONPWorker=function(t){function e(){e.__super__.constructor.call(this),window.jsonpID||(window.jsonpID=0)}return r(e,t),e.prototype.postMessage=function(t){var r,e,n=this;return e=document.createElement("script"),r="architect_jsonp"+ ++window.jsonpID,window[r]=function(t){return delete window[r],document.head.removeChild(e),n.handleRequest(t)},e.src=this.appendQuery(t,"callback="+r),document.head.appendChild(e)},e.prototype.appendQuery=function(t,r){return(t+"&"+r).replace(/[&?]{1,2}/,"?")},e}(this.Architect.Worker)}.call(this),function(){var t,r={}.hasOwnProperty,e=function(t,e){function n(){this.constructor=t}for(var o in e)r.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t};this.Architect.ProxyWorker=function(r){function n(){return t=n.__super__.constructor.apply(this,arguments)}return e(n,r),n.prototype.postMessage=function(t){return this.handleRequest(t)},n}(this.Architect.Worker)}.call(this),function(){var t,r,e,n=this;this.Architect.SUPPORT_WORKER=!!window.Worker,this.Architect.WORKERS={proxy:{polyfill:this.Architect.ProxyWorker,workerPath:"architect/proxy_worker.min.js"},ajax:{polyfill:this.Architect.AjaxWorker,workerPath:"architect/ajax_worker.min.js"},jsonp:{polyfill:this.Architect.JSONPWorker,workerPath:"architect/jsonp_worker.min.js"}},t=function(t){return this.Architect.workersPath?""+this.Architect.workersPath+"/"+t+"_worker.min.js":this.Architect.WORKERS[t].workerPath},e=function(r){return this.Architect.SUPPORT_WORKER?new Worker(t(r)):new this.Architect.WORKERS[r].polyfill},this.Architect.setupWorkersPath=function(t){return n.Architect.workersPath=t.replace(/\/$/,"")},this.Architect.work=function(t,r,n){var o;return o=e(r),o.postMessage(t),o.addEventListener("message",function(t){return o.terminate(),n(t.data)})},this.Architect.proxy=function(t,r){return n.Architect.work(t,"proxy",r)},this.Architect.ajax=function(t,r){return n.Architect.work(t,"ajax",r)},this.Architect.jsonp=function(t,r){return n.Architect.work(t,"jsonp",r)},r={},this.Architect.workOn=function(t,n,o,c){var i,s,a=this;return this.workOnCallback=c,i=!!r[t],s=r[t]||(r[t]=e(o)),s.postMessage(n),i?void 0:s.addEventListener("message",function(t){return a.workOnCallback(t.data)})},this.Architect.endJob=function(t){var e;if(e=r[t])return e.terminate(),delete r[t]},this.Architect.proxyOn=function(t,r,e){return n.Architect.workOn(t,r,"proxy",e)},this.Architect.ajaxOn=function(t,r,e){return n.Architect.workOn(t,r,"ajax",e)},this.Architect.jsonpOn=function(t,r,e){return n.Architect.workOn(t,r,"jsonp",e)},this.Architect.workFrom=function(t,r,e,o){var c;return null==e&&(e=null),void 0===o&&(o=e,e=null),n.Architect.SUPPORT_WORKER?(c=new Worker(t),c.postMessage(r),c.addEventListener("message",function(t){return c.terminate(),o(t.data)})):e?o(e(r)):console.warn("No fallback provided for "+t)}}.call(this);
1
+ /*
2
+ * Architect v0.1.0
3
+ * http://architectjs.org
4
+ *
5
+ * Copyright 2013, Etienne Lemay http://heliom.ca
6
+ * Released under the MIT license
7
+ *
8
+ * Date: 2013-12-09 22:51:38 -0500
9
+ */
10
+ (function(){this.Architect={},this.Architect.VERSION="0.1.0"}).call(this),function(){this.Architect.Worker=function(){function t(){this.callbacks={},this.callbacksQueue={}}return t.prototype.addEventListener=function(t,r){var e;return this.callbacks[t]=r,(e=this.callbacksQueue[t])?(delete this.callbacksQueue[t],this.dispatch(t,e)):void 0},t.prototype.dispatch=function(t,r){return this.callbacks[t]?this.callbacks[t]({data:r}):this.callbacksQueue[t]=r},t.prototype.handleRequest=function(t){return this.dispatch("message",t)},t.prototype.terminate=function(){},t}()}.call(this),function(){var t,r={}.hasOwnProperty,e=function(t,e){function n(){this.constructor=t}for(var o in e)r.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t};this.Architect.AjaxWorker=function(r){function n(){return t=n.__super__.constructor.apply(this,arguments)}return e(n,r),n.prototype.postMessage=function(t){var r,e=this;return r=new XMLHttpRequest,r.open("GET",t),r.setRequestHeader("X-Requested-With","XMLHttpRequest"),r.onreadystatechange=function(){return 4===r.readyState&&200===r.status?e.handleRequest(r.responseText):void 0},r.send()},n}(this.Architect.Worker)}.call(this),function(){var t={}.hasOwnProperty,r=function(r,e){function n(){this.constructor=r}for(var o in e)t.call(e,o)&&(r[o]=e[o]);return n.prototype=e.prototype,r.prototype=new n,r.__super__=e.prototype,r};this.Architect.JSONPWorker=function(t){function e(){e.__super__.constructor.call(this),window.jsonpID||(window.jsonpID=0)}return r(e,t),e.prototype.postMessage=function(t){var r,e,n=this;return e=document.createElement("script"),r="architect_jsonp"+ ++window.jsonpID,window[r]=function(t){return delete window[r],document.head.removeChild(e),n.handleRequest(t)},e.src=this.appendQuery(t,"callback="+r),document.head.appendChild(e)},e.prototype.appendQuery=function(t,r){return(t+"&"+r).replace(/[&?]{1,2}/,"?")},e}(this.Architect.Worker)}.call(this),function(){var t,r={}.hasOwnProperty,e=function(t,e){function n(){this.constructor=t}for(var o in e)r.call(e,o)&&(t[o]=e[o]);return n.prototype=e.prototype,t.prototype=new n,t.__super__=e.prototype,t};this.Architect.ProxyWorker=function(r){function n(){return t=n.__super__.constructor.apply(this,arguments)}return e(n,r),n.prototype.postMessage=function(t){return this.handleRequest(t)},n}(this.Architect.Worker)}.call(this),function(){var t,r,e,n=this;this.Architect.SUPPORT_WORKER=!!window.Worker,this.Architect.WORKERS={proxy:{polyfill:this.Architect.ProxyWorker,workerPath:"architect/proxy_worker.min.js"},ajax:{polyfill:this.Architect.AjaxWorker,workerPath:"architect/ajax_worker.min.js"},jsonp:{polyfill:this.Architect.JSONPWorker,workerPath:"architect/jsonp_worker.min.js"}},t=function(t){return this.Architect.workersPath?""+this.Architect.workersPath+"/"+t+"_worker.min.js":this.Architect.WORKERS[t].workerPath},e=function(r){return this.Architect.SUPPORT_WORKER?new Worker(t(r)):new this.Architect.WORKERS[r].polyfill},this.Architect.setupWorkersPath=function(t){return n.Architect.workersPath=t.replace(/\/$/,"")},this.Architect.work=function(t,r,n){var o;return o=e(r),o.postMessage(t),o.addEventListener("message",function(t){return o.terminate(),n(t.data)})},this.Architect.proxy=function(t,r){return n.Architect.work(t,"proxy",r)},this.Architect.ajax=function(t,r){return n.Architect.work(t,"ajax",r)},this.Architect.jsonp=function(t,r){return n.Architect.work(t,"jsonp",r)},r={},this.Architect.workOn=function(t,n,o,c){var i,s,a=this;return this.workOnCallback=c,i=!!r[t],s=r[t]||(r[t]=e(o)),s.postMessage(n),i?void 0:s.addEventListener("message",function(t){return a.workOnCallback(t.data)})},this.Architect.endJob=function(t){var e;if(e=r[t])return e.terminate(),delete r[t]},this.Architect.proxyOn=function(t,r,e){return n.Architect.workOn(t,r,"proxy",e)},this.Architect.ajaxOn=function(t,r,e){return n.Architect.workOn(t,r,"ajax",e)},this.Architect.jsonpOn=function(t,r,e){return n.Architect.workOn(t,r,"jsonp",e)},this.Architect.workFrom=function(t,r,e,o){var c;return null==e&&(e=null),void 0===o&&(o=e,e=null),n.Architect.SUPPORT_WORKER?(c=new Worker(t),c.postMessage(r),c.addEventListener("message",function(t){return c.terminate(),o(t.data)})):e?o(e(r)):console.warn("No fallback provided for "+t)}}.call(this);
@@ -1 +1,10 @@
1
- !function(){var e;e=function(e){return postMessage(e)},addEventListener("message",function(t){var n;return n=new XMLHttpRequest,n.open("GET",t.data),n.onreadystatechange=function(){return 4===n.readyState&&200===n.status?e(n.responseText):void 0},n.send()})}.call(this);
1
+ /*
2
+ * Architect v0.1.0
3
+ * http://architectjs.org
4
+ *
5
+ * Copyright 2013, Etienne Lemay http://heliom.ca
6
+ * Released under the MIT license
7
+ *
8
+ * Date: 2013-12-09 22:51:38 -0500
9
+ */
10
+ (function(){var e;e=function(e){return postMessage(e)},addEventListener("message",function(t){var n;return n=new XMLHttpRequest,n.open("GET",t.data),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.onreadystatechange=function(){return 4===n.readyState&&200===n.status?e(n.responseText):void 0},n.send()})}).call(this);
@@ -1 +1,10 @@
1
- !function(){var e;self.handleRequest=function(e){return postMessage(e)},e=function(e,t){return(e+"&"+t).replace(/[&?]{1,2}/,"?")},addEventListener("message",function(t){var n;return n=e(t.data,"callback=handleRequest"),importScripts(n)})}.call(this);
1
+ /*
2
+ * Architect v0.1.0
3
+ * http://architectjs.org
4
+ *
5
+ * Copyright 2013, Etienne Lemay http://heliom.ca
6
+ * Released under the MIT license
7
+ *
8
+ * Date: 2013-12-09 22:51:38 -0500
9
+ */
10
+ (function(){var e;self.handleRequest=function(e){return postMessage(e)},e=function(e,t){return(e+"&"+t).replace(/[&?]{1,2}/,"?")},addEventListener("message",function(t){var n;return n=e(t.data,"callback=handleRequest"),importScripts(n)})}).call(this);
@@ -1 +1,10 @@
1
- !function(){addEventListener("message",function(e){return postMessage(e.data)})}.call(this);
1
+ /*
2
+ * Architect v0.1.0
3
+ * http://architectjs.org
4
+ *
5
+ * Copyright 2013, Etienne Lemay http://heliom.ca
6
+ * Released under the MIT license
7
+ *
8
+ * Date: 2013-12-09 22:51:38 -0500
9
+ */
10
+ (function(){addEventListener("message",function(e){return postMessage(e.data)})}).call(this);
@@ -0,0 +1,4 @@
1
+ addEventListener('message', function(e) {
2
+ data = e.data + 'zle'
3
+ postMessage(data.toUpperCase())
4
+ })
@@ -0,0 +1,19 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <title>QUnit Example</title>
6
+ <link rel="stylesheet" href="http://code.jquery.com/qunit/qunit-1.12.0.css">
7
+ </head>
8
+ <body>
9
+ <div id="qunit"></div>
10
+ <div id="qunit-fixture"></div>
11
+
12
+ <script src="http://code.jquery.com/qunit/qunit-1.12.0.js"></script>
13
+ <script src="../static/architect.min.js"></script>
14
+ <script>Architect.setupWorkersPath('../static/workers')</script>
15
+
16
+ <script src="./unit/architect_test.js"></script>
17
+ <script src="./unit/architect/polyfill_test.js"></script>
18
+ </body>
19
+ </html>
@@ -0,0 +1,139 @@
1
+ /*
2
+ * QtWebKit-powered headless test runner using PhantomJS
3
+ *
4
+ * PhantomJS binaries: http://phantomjs.org/download.html
5
+ * Requires PhantomJS 1.6+ (1.7+ recommended)
6
+ *
7
+ * Run with:
8
+ * phantomjs runner.js [url-of-your-qunit-testsuite]
9
+ *
10
+ * e.g.
11
+ * phantomjs runner.js http://localhost/qunit/test/index.html
12
+ */
13
+
14
+ /*global phantom:false, require:false, console:false, window:false, QUnit:false */
15
+
16
+ (function() {
17
+ 'use strict';
18
+
19
+ var url, page, timeout,
20
+ args = require('system').args;
21
+
22
+ // arg[0]: scriptName, args[1...]: arguments
23
+ if (args.length < 2 || args.length > 3) {
24
+ console.error('Usage:\n phantomjs runner.js [url-of-your-qunit-testsuite] [timeout-in-seconds]');
25
+ phantom.exit(1);
26
+ }
27
+
28
+ url = args[1];
29
+ page = require('webpage').create();
30
+ if (args[2] !== undefined) {
31
+ timeout = parseInt(args[2], 10);
32
+ }
33
+
34
+ // Route `console.log()` calls from within the Page context to the main Phantom context (i.e. current `this`)
35
+ page.onConsoleMessage = function(msg) {
36
+ console.log(msg);
37
+ };
38
+
39
+ page.onInitialized = function() {
40
+ page.evaluate(addLogging);
41
+ };
42
+
43
+ page.onCallback = function(message) {
44
+ var result,
45
+ failed;
46
+
47
+ if (message) {
48
+ if (message.name === 'QUnit.done') {
49
+ result = message.data;
50
+ failed = !result || result.failed;
51
+
52
+ phantom.exit(failed ? 1 : 0);
53
+ }
54
+ }
55
+ };
56
+
57
+ page.open(url, function(status) {
58
+ if (status !== 'success') {
59
+ console.error('Unable to access network: ' + status);
60
+ phantom.exit(1);
61
+ } else {
62
+ // Cannot do this verification with the 'DOMContentLoaded' handler because it
63
+ // will be too late to attach it if a page does not have any script tags.
64
+ var qunitMissing = page.evaluate(function() { return (typeof QUnit === 'undefined' || !QUnit); });
65
+ if (qunitMissing) {
66
+ console.error('The `QUnit` object is not present on this page.');
67
+ phantom.exit(1);
68
+ }
69
+
70
+ // Set a timeout on the test running, otherwise tests with async problems will hang forever
71
+ if (typeof timeout === 'number') {
72
+ setTimeout(function() {
73
+ console.error('The specified timeout of ' + timeout + ' seconds has expired. Aborting...');
74
+ phantom.exit(1);
75
+ }, timeout * 1000);
76
+ }
77
+
78
+ // Do nothing... the callback mechanism will handle everything!
79
+ }
80
+ });
81
+
82
+ function addLogging() {
83
+ window.document.addEventListener('DOMContentLoaded', function() {
84
+ var currentTestAssertions = [];
85
+
86
+ QUnit.log(function(details) {
87
+ var response;
88
+
89
+ // Ignore passing assertions
90
+ if (details.result) {
91
+ return;
92
+ }
93
+
94
+ response = details.message || '';
95
+
96
+ if (typeof details.expected !== 'undefined') {
97
+ if (response) {
98
+ response += ', ';
99
+ }
100
+
101
+ response += 'expected: ' + details.expected + ', but was: ' + details.actual;
102
+ }
103
+
104
+ if (details.source) {
105
+ response += "\n" + details.source;
106
+ }
107
+
108
+ currentTestAssertions.push('Failed assertion: ' + response);
109
+ });
110
+
111
+ QUnit.testDone(function(result) {
112
+ var i,
113
+ len,
114
+ name = result.module + ': ' + result.name;
115
+
116
+ if (result.failed) {
117
+ console.log('Test failed: ' + name);
118
+
119
+ for (i = 0, len = currentTestAssertions.length; i < len; i++) {
120
+ console.log(' ' + currentTestAssertions[i]);
121
+ }
122
+ }
123
+
124
+ currentTestAssertions.length = 0;
125
+ });
126
+
127
+ QUnit.done(function(result) {
128
+ console.log('Took ' + result.runtime + 'ms to run ' + result.total + ' tests. ' + result.passed + ' passed, ' + result.failed + ' failed.');
129
+
130
+ if (typeof window.callPhantom === 'function') {
131
+ window.callPhantom({
132
+ 'name': 'QUnit.done',
133
+ 'data': result
134
+ });
135
+ }
136
+ });
137
+ }, false);
138
+ }
139
+ })();
@@ -0,0 +1,54 @@
1
+ // Helpers
2
+ var disableWorkers = function() {
3
+ Architect.SUPPORT_WORKER = false
4
+ }
5
+
6
+ var makeSureWorkersAreDisabled = function() {
7
+ ok(Architect.SUPPORT_WORKER === false, 'Workers are disabled')
8
+ }
9
+
10
+ // Default Workers
11
+ asyncTest('Proxy Polyfill', function() {
12
+ disableWorkers()
13
+ makeSureWorkersAreDisabled()
14
+
15
+ Architect.proxy('Foo', function(data) {
16
+ ok(data === 'Foo')
17
+ start()
18
+ })
19
+ })
20
+
21
+ asyncTest('Ajax Polyfill', function() {
22
+ disableWorkers()
23
+ makeSureWorkersAreDisabled()
24
+
25
+ Architect.ajax('https://api.github.com/users/etiennelem', function(data) {
26
+ ok(JSON.parse(data).login === 'EtienneLem')
27
+ start()
28
+ })
29
+ })
30
+
31
+ asyncTest('JSONP Polyfill', function() {
32
+ disableWorkers()
33
+ makeSureWorkersAreDisabled()
34
+
35
+ Architect.jsonp('https://api.github.com/users/etiennelem', function(data) {
36
+ ok(data.data.login === 'EtienneLem')
37
+ start()
38
+ })
39
+ })
40
+
41
+ // Custom Workers
42
+ asyncTest('Custom Fallback', function() {
43
+ disableWorkers()
44
+ makeSureWorkersAreDisabled()
45
+
46
+ var foozleWorkerFallback = function(data) {
47
+ return (data + 'zle_doo').toUpperCase()
48
+ }
49
+
50
+ Architect.workFrom('./fixture/foozle_worker.js', 'foo', foozleWorkerFallback, function(data) {
51
+ ok(data === 'FOOZLE_DOO')
52
+ start()
53
+ })
54
+ })
@@ -0,0 +1,49 @@
1
+ // Config
2
+ test('Worker Support', function() {
3
+ ok(Architect.SUPPORT_WORKER === true)
4
+ })
5
+
6
+ test('Custom Workers Path', function() {
7
+ initialWorkerPath = Architect.workersPath
8
+
9
+ Architect.setupWorkersPath('fake/path')
10
+ ok(Architect.workersPath === 'fake/path', 'Custom path')
11
+
12
+ Architect.setupWorkersPath('./fake/path')
13
+ ok(Architect.workersPath === './fake/path', 'Relative path')
14
+
15
+ Architect.setupWorkersPath('fake/path/')
16
+ ok(Architect.workersPath === 'fake/path', 'Removes trailing slash')
17
+
18
+ Architect.setupWorkersPath(initialWorkerPath)
19
+ })
20
+
21
+ // Default Workers
22
+ asyncTest('Proxy Worker', function() {
23
+ Architect.proxy('Foo', function(data) {
24
+ ok(data === 'Foo')
25
+ start()
26
+ })
27
+ })
28
+
29
+ asyncTest('Ajax Worker', function() {
30
+ Architect.ajax('https://api.github.com/users/etiennelem', function(data) {
31
+ ok(JSON.parse(data).login === 'EtienneLem')
32
+ start()
33
+ })
34
+ })
35
+
36
+ asyncTest('JSONP Worker', function() {
37
+ Architect.jsonp('https://api.github.com/users/etiennelem', function(data) {
38
+ ok(data.data.login === 'EtienneLem')
39
+ start()
40
+ })
41
+ })
42
+
43
+ // Custom Workers
44
+ asyncTest('Custom Worker', function() {
45
+ Architect.workFrom('./fixture/foozle_worker.js', 'foo', function(data) {
46
+ ok(data === 'FOOZLE')
47
+ start()
48
+ })
49
+ })
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: architect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Etienne Lemay
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-05 00:00:00.000000000 Z
11
+ date: 2013-12-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: coffee-rails
@@ -74,29 +74,37 @@ executables: []
74
74
  extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
+ - .gitignore
78
+ - CHANGELOG.md
79
+ - Gemfile
80
+ - MIT-LICENSE
81
+ - README.md
82
+ - Rakefile
83
+ - app/assets/javascripts/architect.coffee.erb
77
84
  - app/assets/javascripts/architect/version.coffee.erb
78
85
  - app/assets/javascripts/architect/worker.coffee
79
86
  - app/assets/javascripts/architect/workers/ajax_worker.coffee
80
87
  - app/assets/javascripts/architect/workers/jsonp_worker.coffee
81
88
  - app/assets/javascripts/architect/workers/proxy_worker.coffee
82
- - app/assets/javascripts/architect.coffee.erb
83
89
  - app/assets/javascripts/workers/ajax_worker.coffee
84
90
  - app/assets/javascripts/workers/jsonp_worker.coffee
85
91
  - app/assets/javascripts/workers/proxy_worker.coffee
92
+ - architect.gemspec
93
+ - lib/architect.rb
86
94
  - lib/architect/engine.rb
87
95
  - lib/architect/helpers.rb
88
96
  - lib/architect/version.rb
89
- - lib/architect.rb
90
97
  - lib/tasks/task_helpers.rb
91
98
  - static/architect.min.js
92
99
  - static/workers/ajax_worker.min.js
93
100
  - static/workers/jsonp_worker.min.js
94
101
  - static/workers/proxy_worker.min.js
95
- - Rakefile
96
- - MIT-LICENSE
97
- - README.md
98
- - CHANGELOG.md
99
- homepage: https://github.com/EtienneLem/architect
102
+ - test/fixture/foozle_worker.js
103
+ - test/index.html
104
+ - test/runner.js
105
+ - test/unit/architect/polyfill_test.js
106
+ - test/unit/architect_test.js
107
+ homepage: http://architectjs.org
100
108
  licenses:
101
109
  - MIT
102
110
  metadata: {}
@@ -120,4 +128,9 @@ rubygems_version: 2.0.0
120
128
  signing_key:
121
129
  specification_version: 4
122
130
  summary: Your web workers’ supervisor
123
- test_files: []
131
+ test_files:
132
+ - test/fixture/foozle_worker.js
133
+ - test/index.html
134
+ - test/runner.js
135
+ - test/unit/architect/polyfill_test.js
136
+ - test/unit/architect_test.js