newjs 1.4.1 → 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +12 -1
- data/app_generators/newjs/templates/test/assets/jsunittest.js +41 -13
- data/app_generators/newjs/templates/test/assets/unittest.css +4 -0
- data/config/hoe.rb +5 -5
- data/lib/newjs/version.rb +2 -2
- data/rails_generators/javascript_test/templates/assets/jsunittest.js +41 -13
- data/rails_generators/javascript_test/templates/assets/unittest.css +4 -0
- data/test/test_newjs_iphone_generator.rb +58 -0
- data/website/index.html +114 -293
- metadata +4 -43
data/History.txt
CHANGED
@@ -1,4 +1,15 @@
|
|
1
|
-
== 1.
|
1
|
+
== 1.5.0 2008-10-05
|
2
|
+
|
3
|
+
* newjs_iphone: installs variant of newjs in Html/ subfolder of an Xcode project
|
4
|
+
This includes Html/Rakefile, Html/script/generate etc.
|
5
|
+
It is still a work in progress, e.g. do we need specific generators etc.
|
6
|
+
* Update jsunittest files for 0.7.2
|
7
|
+
|
8
|
+
== 1.4.2 2008-07-08
|
9
|
+
|
10
|
+
* Updated the gem dependencies
|
11
|
+
|
12
|
+
== 1.4.1 2008-07-08
|
2
13
|
|
3
14
|
* rstakeout: fixed !# ruby
|
4
15
|
* newjs: creates src/proj_name.js.erb to show its a template, not a js file
|
@@ -1,4 +1,4 @@
|
|
1
|
-
/* Jsunittest, version 0.
|
1
|
+
/* Jsunittest, version 0.7.2
|
2
2
|
* (c) 2008 Dr Nic Williams
|
3
3
|
*
|
4
4
|
* Jsunittest is freely distributable under
|
@@ -199,7 +199,7 @@ JsUnitTest.gsub.prepareReplacement = function(replacement) {
|
|
199
199
|
return function(match) { return template.evaluate(match) };
|
200
200
|
};
|
201
201
|
|
202
|
-
JsUnitTest.Version = '0.
|
202
|
+
JsUnitTest.Version = '0.7.2';
|
203
203
|
|
204
204
|
JsUnitTest.Template = function(template, pattern) {
|
205
205
|
this.template = template; //template.toString();
|
@@ -441,7 +441,7 @@ JsUnitTest.ajax = function( options ) {
|
|
441
441
|
};
|
442
442
|
|
443
443
|
// Create the request object
|
444
|
-
var xml = new XMLHttpRequest();
|
444
|
+
var xml = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
|
445
445
|
|
446
446
|
// Open the asynchronous POST request
|
447
447
|
xml.open(options.type, options.url, true);
|
@@ -529,7 +529,7 @@ JsUnitTest.ajax = function( options ) {
|
|
529
529
|
return data;
|
530
530
|
}
|
531
531
|
|
532
|
-
}
|
532
|
+
};
|
533
533
|
JsUnitTest.Unit.Assertions = {
|
534
534
|
buildMessage: function(message, template) {
|
535
535
|
var args = JsUnitTest.arrayfromargs(arguments).slice(2);
|
@@ -675,7 +675,16 @@ JsUnitTest.Unit.Assertions = {
|
|
675
675
|
this.assertBlock(message, function() { return !(new RegExp(expected).exec(actual)) });
|
676
676
|
},
|
677
677
|
|
678
|
+
assertHasClass: function(element, klass, message) {
|
679
|
+
element = JsUnitTest.$(element);
|
680
|
+
message = this.buildMessage(message || 'assertHasClass', '? doesn\'t have class <?>.', element, klass);
|
681
|
+
this.assertBlock(message, function() {
|
682
|
+
return !!element.className.match(new RegExp(klass))
|
683
|
+
});
|
684
|
+
},
|
685
|
+
|
678
686
|
assertHidden: function(element, message) {
|
687
|
+
element = JsUnitTest.$(element);
|
679
688
|
message = this.buildMessage(message || 'assertHidden', '? isn\'t hidden.', element);
|
680
689
|
this.assertBlock(message, function() { return !element.style.display || element.style.display == 'none' });
|
681
690
|
},
|
@@ -822,7 +831,8 @@ JsUnitTest.Unit.Runner.prototype.getResult = function() {
|
|
822
831
|
tests: this.tests.length,
|
823
832
|
assertions: 0,
|
824
833
|
failures: 0,
|
825
|
-
errors: 0
|
834
|
+
errors: 0,
|
835
|
+
warnings: 0
|
826
836
|
};
|
827
837
|
|
828
838
|
for (var i=0; i < this.tests.length; i++) {
|
@@ -830,6 +840,7 @@ JsUnitTest.Unit.Runner.prototype.getResult = function() {
|
|
830
840
|
results.assertions += test.assertions;
|
831
841
|
results.failures += test.failures;
|
832
842
|
results.errors += test.errors;
|
843
|
+
results.warnings += test.warnings;
|
833
844
|
};
|
834
845
|
return results;
|
835
846
|
};
|
@@ -840,7 +851,9 @@ JsUnitTest.Unit.Runner.prototype.postResults = function() {
|
|
840
851
|
// { method: 'get', parameters: this.getResult(), asynchronous: false });
|
841
852
|
var results = this.getResult();
|
842
853
|
var url = this.options.resultsURL + "?";
|
854
|
+
url += "tests="+ this.tests.length + "&";
|
843
855
|
url += "assertions="+ results.assertions + "&";
|
856
|
+
url += "warnings=" + results.warnings + "&";
|
844
857
|
url += "failures=" + results.failures + "&";
|
845
858
|
url += "errors=" + results.errors;
|
846
859
|
JsUnitTest.ajax({
|
@@ -879,7 +892,7 @@ JsUnitTest.Unit.Runner.prototype.finish = function() {
|
|
879
892
|
};
|
880
893
|
|
881
894
|
JsUnitTest.Unit.Runner.prototype.summary = function() {
|
882
|
-
return new JsUnitTest.Template('#{tests} tests, #{assertions} assertions, #{failures} failures, #{errors} errors').evaluate(this.getResult());
|
895
|
+
return new JsUnitTest.Template('#{tests} tests, #{assertions} assertions, #{failures} failures, #{errors} errors, #{warnings} warnings').evaluate(this.getResult());
|
883
896
|
};
|
884
897
|
JsUnitTest.Unit.Testcase = function(name, test, setup, teardown) {
|
885
898
|
this.name = name;
|
@@ -895,14 +908,16 @@ for (method in JsUnitTest.Unit.Assertions) {
|
|
895
908
|
JsUnitTest.Unit.Testcase.prototype[method] = JsUnitTest.Unit.Assertions[method];
|
896
909
|
}
|
897
910
|
|
898
|
-
JsUnitTest.Unit.Testcase.prototype.isWaiting
|
899
|
-
JsUnitTest.Unit.Testcase.prototype.timeToWait
|
900
|
-
JsUnitTest.Unit.Testcase.prototype.assertions
|
901
|
-
JsUnitTest.Unit.Testcase.prototype.failures
|
902
|
-
JsUnitTest.Unit.Testcase.prototype.errors
|
903
|
-
|
911
|
+
JsUnitTest.Unit.Testcase.prototype.isWaiting = false;
|
912
|
+
JsUnitTest.Unit.Testcase.prototype.timeToWait = 1000;
|
913
|
+
JsUnitTest.Unit.Testcase.prototype.assertions = 0;
|
914
|
+
JsUnitTest.Unit.Testcase.prototype.failures = 0;
|
915
|
+
JsUnitTest.Unit.Testcase.prototype.errors = 0;
|
916
|
+
JsUnitTest.Unit.Testcase.prototype.warnings = 0;
|
904
917
|
JsUnitTest.Unit.Testcase.prototype.isRunningFromRake = window.location.port;
|
905
918
|
|
919
|
+
// JsUnitTest.Unit.Testcase.prototype.isRunningFromRake = window.location.port == 4711;
|
920
|
+
|
906
921
|
JsUnitTest.Unit.Testcase.prototype.wait = function(time, nextPart) {
|
907
922
|
this.isWaiting = true;
|
908
923
|
this.test = nextPart;
|
@@ -928,7 +943,7 @@ JsUnitTest.Unit.Testcase.prototype.run = function(rethrow) {
|
|
928
943
|
};
|
929
944
|
|
930
945
|
JsUnitTest.Unit.Testcase.prototype.summary = function() {
|
931
|
-
var msg = '#{assertions} assertions, #{failures} failures, #{errors} errors\n';
|
946
|
+
var msg = '#{assertions} assertions, #{failures} failures, #{errors} errors, #{warnings} warnings\n';
|
932
947
|
return new JsUnitTest.Template(msg).evaluate(this) +
|
933
948
|
this.messages.join("\n");
|
934
949
|
};
|
@@ -948,6 +963,18 @@ JsUnitTest.Unit.Testcase.prototype.fail = function(message) {
|
|
948
963
|
this.messages.push("Failure: " + message + (line ? " Line #" + line : ""));
|
949
964
|
};
|
950
965
|
|
966
|
+
JsUnitTest.Unit.Testcase.prototype.warning = function(message) {
|
967
|
+
this.warnings++;
|
968
|
+
var line = "";
|
969
|
+
try {
|
970
|
+
throw new Error("stack");
|
971
|
+
} catch(e){
|
972
|
+
line = (/\.html:(\d+)/.exec(e.stack || '') || ['',''])[1];
|
973
|
+
}
|
974
|
+
this.messages.push("Warning: " + message + (line ? " Line #" + line : ""));
|
975
|
+
};
|
976
|
+
JsUnitTest.Unit.Testcase.prototype.warn = JsUnitTest.Unit.Testcase.prototype.warning;
|
977
|
+
|
951
978
|
JsUnitTest.Unit.Testcase.prototype.info = function(message) {
|
952
979
|
this.messages.push("Info: " + message);
|
953
980
|
};
|
@@ -961,6 +988,7 @@ JsUnitTest.Unit.Testcase.prototype.error = function(error, test) {
|
|
961
988
|
JsUnitTest.Unit.Testcase.prototype.status = function() {
|
962
989
|
if (this.failures > 0) return 'failed';
|
963
990
|
if (this.errors > 0) return 'error';
|
991
|
+
if (this.warnings > 0) return 'warning';
|
964
992
|
return 'passed';
|
965
993
|
};
|
966
994
|
|
data/config/hoe.rb
CHANGED
@@ -58,11 +58,11 @@ hoe = Hoe.new(GEM_NAME, VERS) do |p|
|
|
58
58
|
# == Optional
|
59
59
|
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
60
60
|
p.extra_deps = [
|
61
|
-
['hoe', '>=1.
|
62
|
-
['RedCloth'
|
63
|
-
['syntax','>=1.0.0'],
|
64
|
-
['activesupport'
|
65
|
-
['rubigen','>=1.
|
61
|
+
# ['hoe', '>=1.7.0'],
|
62
|
+
# ['RedCloth'],
|
63
|
+
# ['syntax','>=1.0.0'],
|
64
|
+
# # ['activesupport'],
|
65
|
+
# ['rubigen','>=1.3.2']
|
66
66
|
]
|
67
67
|
|
68
68
|
#p.spec_extras = {} # A hash of extra values to set in the gemspec.
|
data/lib/newjs/version.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
/* Jsunittest, version 0.
|
1
|
+
/* Jsunittest, version 0.7.2
|
2
2
|
* (c) 2008 Dr Nic Williams
|
3
3
|
*
|
4
4
|
* Jsunittest is freely distributable under
|
@@ -199,7 +199,7 @@ JsUnitTest.gsub.prepareReplacement = function(replacement) {
|
|
199
199
|
return function(match) { return template.evaluate(match) };
|
200
200
|
};
|
201
201
|
|
202
|
-
JsUnitTest.Version = '0.
|
202
|
+
JsUnitTest.Version = '0.7.2';
|
203
203
|
|
204
204
|
JsUnitTest.Template = function(template, pattern) {
|
205
205
|
this.template = template; //template.toString();
|
@@ -441,7 +441,7 @@ JsUnitTest.ajax = function( options ) {
|
|
441
441
|
};
|
442
442
|
|
443
443
|
// Create the request object
|
444
|
-
var xml = new XMLHttpRequest();
|
444
|
+
var xml = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : new XMLHttpRequest();
|
445
445
|
|
446
446
|
// Open the asynchronous POST request
|
447
447
|
xml.open(options.type, options.url, true);
|
@@ -529,7 +529,7 @@ JsUnitTest.ajax = function( options ) {
|
|
529
529
|
return data;
|
530
530
|
}
|
531
531
|
|
532
|
-
}
|
532
|
+
};
|
533
533
|
JsUnitTest.Unit.Assertions = {
|
534
534
|
buildMessage: function(message, template) {
|
535
535
|
var args = JsUnitTest.arrayfromargs(arguments).slice(2);
|
@@ -675,7 +675,16 @@ JsUnitTest.Unit.Assertions = {
|
|
675
675
|
this.assertBlock(message, function() { return !(new RegExp(expected).exec(actual)) });
|
676
676
|
},
|
677
677
|
|
678
|
+
assertHasClass: function(element, klass, message) {
|
679
|
+
element = JsUnitTest.$(element);
|
680
|
+
message = this.buildMessage(message || 'assertHasClass', '? doesn\'t have class <?>.', element, klass);
|
681
|
+
this.assertBlock(message, function() {
|
682
|
+
return !!element.className.match(new RegExp(klass))
|
683
|
+
});
|
684
|
+
},
|
685
|
+
|
678
686
|
assertHidden: function(element, message) {
|
687
|
+
element = JsUnitTest.$(element);
|
679
688
|
message = this.buildMessage(message || 'assertHidden', '? isn\'t hidden.', element);
|
680
689
|
this.assertBlock(message, function() { return !element.style.display || element.style.display == 'none' });
|
681
690
|
},
|
@@ -822,7 +831,8 @@ JsUnitTest.Unit.Runner.prototype.getResult = function() {
|
|
822
831
|
tests: this.tests.length,
|
823
832
|
assertions: 0,
|
824
833
|
failures: 0,
|
825
|
-
errors: 0
|
834
|
+
errors: 0,
|
835
|
+
warnings: 0
|
826
836
|
};
|
827
837
|
|
828
838
|
for (var i=0; i < this.tests.length; i++) {
|
@@ -830,6 +840,7 @@ JsUnitTest.Unit.Runner.prototype.getResult = function() {
|
|
830
840
|
results.assertions += test.assertions;
|
831
841
|
results.failures += test.failures;
|
832
842
|
results.errors += test.errors;
|
843
|
+
results.warnings += test.warnings;
|
833
844
|
};
|
834
845
|
return results;
|
835
846
|
};
|
@@ -840,7 +851,9 @@ JsUnitTest.Unit.Runner.prototype.postResults = function() {
|
|
840
851
|
// { method: 'get', parameters: this.getResult(), asynchronous: false });
|
841
852
|
var results = this.getResult();
|
842
853
|
var url = this.options.resultsURL + "?";
|
854
|
+
url += "tests="+ this.tests.length + "&";
|
843
855
|
url += "assertions="+ results.assertions + "&";
|
856
|
+
url += "warnings=" + results.warnings + "&";
|
844
857
|
url += "failures=" + results.failures + "&";
|
845
858
|
url += "errors=" + results.errors;
|
846
859
|
JsUnitTest.ajax({
|
@@ -879,7 +892,7 @@ JsUnitTest.Unit.Runner.prototype.finish = function() {
|
|
879
892
|
};
|
880
893
|
|
881
894
|
JsUnitTest.Unit.Runner.prototype.summary = function() {
|
882
|
-
return new JsUnitTest.Template('#{tests} tests, #{assertions} assertions, #{failures} failures, #{errors} errors').evaluate(this.getResult());
|
895
|
+
return new JsUnitTest.Template('#{tests} tests, #{assertions} assertions, #{failures} failures, #{errors} errors, #{warnings} warnings').evaluate(this.getResult());
|
883
896
|
};
|
884
897
|
JsUnitTest.Unit.Testcase = function(name, test, setup, teardown) {
|
885
898
|
this.name = name;
|
@@ -895,14 +908,16 @@ for (method in JsUnitTest.Unit.Assertions) {
|
|
895
908
|
JsUnitTest.Unit.Testcase.prototype[method] = JsUnitTest.Unit.Assertions[method];
|
896
909
|
}
|
897
910
|
|
898
|
-
JsUnitTest.Unit.Testcase.prototype.isWaiting
|
899
|
-
JsUnitTest.Unit.Testcase.prototype.timeToWait
|
900
|
-
JsUnitTest.Unit.Testcase.prototype.assertions
|
901
|
-
JsUnitTest.Unit.Testcase.prototype.failures
|
902
|
-
JsUnitTest.Unit.Testcase.prototype.errors
|
903
|
-
|
911
|
+
JsUnitTest.Unit.Testcase.prototype.isWaiting = false;
|
912
|
+
JsUnitTest.Unit.Testcase.prototype.timeToWait = 1000;
|
913
|
+
JsUnitTest.Unit.Testcase.prototype.assertions = 0;
|
914
|
+
JsUnitTest.Unit.Testcase.prototype.failures = 0;
|
915
|
+
JsUnitTest.Unit.Testcase.prototype.errors = 0;
|
916
|
+
JsUnitTest.Unit.Testcase.prototype.warnings = 0;
|
904
917
|
JsUnitTest.Unit.Testcase.prototype.isRunningFromRake = window.location.port;
|
905
918
|
|
919
|
+
// JsUnitTest.Unit.Testcase.prototype.isRunningFromRake = window.location.port == 4711;
|
920
|
+
|
906
921
|
JsUnitTest.Unit.Testcase.prototype.wait = function(time, nextPart) {
|
907
922
|
this.isWaiting = true;
|
908
923
|
this.test = nextPart;
|
@@ -928,7 +943,7 @@ JsUnitTest.Unit.Testcase.prototype.run = function(rethrow) {
|
|
928
943
|
};
|
929
944
|
|
930
945
|
JsUnitTest.Unit.Testcase.prototype.summary = function() {
|
931
|
-
var msg = '#{assertions} assertions, #{failures} failures, #{errors} errors\n';
|
946
|
+
var msg = '#{assertions} assertions, #{failures} failures, #{errors} errors, #{warnings} warnings\n';
|
932
947
|
return new JsUnitTest.Template(msg).evaluate(this) +
|
933
948
|
this.messages.join("\n");
|
934
949
|
};
|
@@ -948,6 +963,18 @@ JsUnitTest.Unit.Testcase.prototype.fail = function(message) {
|
|
948
963
|
this.messages.push("Failure: " + message + (line ? " Line #" + line : ""));
|
949
964
|
};
|
950
965
|
|
966
|
+
JsUnitTest.Unit.Testcase.prototype.warning = function(message) {
|
967
|
+
this.warnings++;
|
968
|
+
var line = "";
|
969
|
+
try {
|
970
|
+
throw new Error("stack");
|
971
|
+
} catch(e){
|
972
|
+
line = (/\.html:(\d+)/.exec(e.stack || '') || ['',''])[1];
|
973
|
+
}
|
974
|
+
this.messages.push("Warning: " + message + (line ? " Line #" + line : ""));
|
975
|
+
};
|
976
|
+
JsUnitTest.Unit.Testcase.prototype.warn = JsUnitTest.Unit.Testcase.prototype.warning;
|
977
|
+
|
951
978
|
JsUnitTest.Unit.Testcase.prototype.info = function(message) {
|
952
979
|
this.messages.push("Info: " + message);
|
953
980
|
};
|
@@ -961,6 +988,7 @@ JsUnitTest.Unit.Testcase.prototype.error = function(error, test) {
|
|
961
988
|
JsUnitTest.Unit.Testcase.prototype.status = function() {
|
962
989
|
if (this.failures > 0) return 'failed';
|
963
990
|
if (this.errors > 0) return 'error';
|
991
|
+
if (this.warnings > 0) return 'warning';
|
964
992
|
return 'passed';
|
965
993
|
};
|
966
994
|
|
@@ -0,0 +1,58 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), "test_generator_helper.rb")
|
2
|
+
|
3
|
+
class TestNewjsIphoneGenerator < Test::Unit::TestCase
|
4
|
+
include RubiGen::GeneratorTestHelper
|
5
|
+
|
6
|
+
def setup
|
7
|
+
bare_setup
|
8
|
+
end
|
9
|
+
|
10
|
+
def teardown
|
11
|
+
bare_teardown
|
12
|
+
end
|
13
|
+
|
14
|
+
# Some generator-related assertions:
|
15
|
+
# assert_generated_file(name, &block) # block passed the file contents
|
16
|
+
# assert_directory_exists(name)
|
17
|
+
# assert_generated_class(name, &block)
|
18
|
+
# assert_generated_module(name, &block)
|
19
|
+
# assert_generated_test_for(name, &block)
|
20
|
+
# The assert_generated_(class|module|test_for) &block is passed the body of the class/module within the file
|
21
|
+
# assert_has_method(body, *methods) # check that the body has a list of methods (methods with parentheses not supported yet)
|
22
|
+
#
|
23
|
+
# Other helper methods are:
|
24
|
+
# app_root_files - put this in teardown to show files generated by the test method (e.g. p app_root_files)
|
25
|
+
# bare_setup - place this in setup method to create the APP_ROOT folder for each test
|
26
|
+
# bare_teardown - place this in teardown method to destroy the TMP_ROOT or APP_ROOT folder after each test
|
27
|
+
|
28
|
+
def test_generator_without_options
|
29
|
+
run_generator('newjs_iphone', [APP_ROOT], sources)
|
30
|
+
assert_directory_exists "Html"
|
31
|
+
assert_directory_exists "Html/lib"
|
32
|
+
assert_directory_exists "Html/config"
|
33
|
+
assert_directory_exists "Html/src"
|
34
|
+
assert_directory_exists "Html/script"
|
35
|
+
assert_directory_exists "Html/tasks"
|
36
|
+
assert_directory_exists "Html/test/assets"
|
37
|
+
assert_generated_file "Html/test/assets/unittest.css"
|
38
|
+
assert_generated_file "Html/test/assets/jsunittest.js"
|
39
|
+
assert_generated_file "Html/Rakefile"
|
40
|
+
assert_generated_file "Html/script/rstakeout"
|
41
|
+
assert_generated_file "Html/script/js_autotest"
|
42
|
+
assert_generated_file "Html/tasks/javascript_test_autotest_tasks.rake"
|
43
|
+
assert_generated_file "Html/config/javascript_test_autotest.yml.sample"
|
44
|
+
assert_generated_file "Html/src/myproject.js.erb"
|
45
|
+
assert_generated_file "Html/lib/protodoc.rb"
|
46
|
+
assert_generated_file "Html/lib/jstest.rb"
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
def sources
|
51
|
+
[RubiGen::PathSource.new(:test, File.join(File.dirname(__FILE__),"..", generator_path))
|
52
|
+
]
|
53
|
+
end
|
54
|
+
|
55
|
+
def generator_path
|
56
|
+
"app_generators"
|
57
|
+
end
|
58
|
+
end
|
data/website/index.html
CHANGED
@@ -31,57 +31,32 @@
|
|
31
31
|
<h1>JavaScript Project Generator</h1>
|
32
32
|
<div id="version" class="clickable" onclick='document.location = "http://rubyforge.org/projects/newjs"; return false'>
|
33
33
|
<p>Get Version</p>
|
34
|
-
<a href="http://rubyforge.org/projects/newjs" class="numbers">1.
|
34
|
+
<a href="http://rubyforge.org/projects/newjs" class="numbers">1.5.0</a>
|
35
35
|
</div>
|
36
|
-
<h1
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
<p>A simple command-line tool to create the folders and helper files
|
43
|
-
for a new JavaScript project/library. As a bonus, you can quickly
|
36
|
+
<h1>&#x2192; ‘newjs’</h1>
|
37
|
+
<h2>What</h2>
|
38
|
+
<p>A simple command-line tool to create the folders and helper files<br />
|
39
|
+
for a new JavaScript project/library. As a bonus, you can quickly<br />
|
44
40
|
create a website to promote your project.</p>
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
the tests, the distribution files? Do you have support scripts to
|
49
|
-
generate distributions from source files? Run your JavaScript unit tests?
|
41
|
+
<p>When you start a new JavaScript library, how do you layout the source files,<br />
|
42
|
+
the tests, the distribution files? Do you have support scripts to<br />
|
43
|
+
generate distributions from source files? Run your JavaScript unit tests?<br />
|
50
44
|
Generators to create new unit test <span class="caps">HTML</span> files?</p>
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
<p>Once <code>newjs</code> has finished helping you write your source libraries,
|
57
|
-
write test <span class="caps">HTML</span> files, providing autotesting scripts to make <span class="caps">TDD</span> a piece of cake,
|
58
|
-
it finally helps you bundle all your source files into a single JavaScript file
|
45
|
+
<p><strong>No? Me neither</strong>, so I created the JavaScript Project Generator.</p>
|
46
|
+
<p>Once <code>newjs</code> has finished helping you write your source libraries,<br />
|
47
|
+
write test <span class="caps">HTML</span> files, providing autotesting scripts to make <span class="caps">TDD</span> a piece of cake,<br />
|
48
|
+
it finally helps you bundle all your source files into a single JavaScript file<br />
|
59
49
|
for distribution.</p>
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
<h2>Installing</h2>
|
66
|
-
|
67
|
-
|
68
|
-
<p>Installation and maintenance of generated JavaScript projects
|
50
|
+
<p>What a nice helpful tool it is!</p>
|
51
|
+
<h2>Installing</h2>
|
52
|
+
<p>Installation and maintenance of generated JavaScript projects<br />
|
69
53
|
requires the installation of <a href="http://www.ruby-lang.org/">Ruby</a> and <a href="http://rubygems.org/">RubyGems</a>.</p>
|
70
|
-
|
71
|
-
|
72
|
-
<p>The command-line application <code>newjs</code> is installed as below,
|
54
|
+
<p>The command-line application <code>newjs</code> is installed as below, <br />
|
73
55
|
for any operating system (except the ‘sudo’ part – use as necessary):</p>
|
74
|
-
|
75
|
-
|
76
56
|
<pre>sudo gem install newjs</pre>
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
<p>To kick-off your new project/library, run the command-line app <code>newjs</code>:</p>
|
82
|
-
|
83
|
-
|
84
|
-
<pre>$ newjs mylib -a "Dr Nic" -e "drnicwilliams@gmail.com" -u "http://mylib.rubyforge.org"
|
57
|
+
<h2>Getting started</h2>
|
58
|
+
<p>To kick-off your new project/library, run the command-line app <code>newjs</code>:</p>
|
59
|
+
<pre>$ newjs mylib -a "Dr Nic" -e "drnicwilliams@gmail.com" -u "http://mylib.rubyforge.org"
|
85
60
|
create config
|
86
61
|
create lib
|
87
62
|
create src
|
@@ -110,310 +85,156 @@ for any operating system (except the ‘sudo’ part – use as nece
|
|
110
85
|
create script/generate
|
111
86
|
create script/destroy
|
112
87
|
</pre>
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
<p>Unit testing uses the <code>unittest.js</code> library
|
118
|
-
developed within <a href="http://www.prototypejs.org/">prototypejs</a>. It should
|
88
|
+
<p>Look at all that!</p>
|
89
|
+
<p>Unit testing uses the <code>unittest.js</code> library <br />
|
90
|
+
developed within <a href="http://www.prototypejs.org/">prototypejs</a>. It should<br />
|
119
91
|
also support JavaScript development using any non-prototype.js libraries.</p>
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
<p>Your functional test <span class="caps">HTML</span> files, go in <code>test/functional/</code> (see test generator below).</p>
|
129
|
-
|
130
|
-
|
131
|
-
When you’ve got a new version to release, edit <code>Rakefile</code> and modify the
|
132
|
-
<code>APP_VERSION</code> string (see Distribution section below).
|
133
|
-
|
134
|
-
<p>To merge your <code>src/</code> files into a distribution file, see below.</p>
|
135
|
-
|
136
|
-
|
137
|
-
<h2>Unit testing</h2>
|
138
|
-
|
139
|
-
|
140
|
-
<p>If you are going to have a <code>src/some_lib.js</code> file, then you’ll want a unit
|
92
|
+
<p>Your raw, unconcatenated library/source files go in <code>src/</code></p>
|
93
|
+
<p>Your unit test <span class="caps">HTML</span> files, go in <code>test/unit/</code> (see test generator below).</p>
|
94
|
+
<p>Your functional test <span class="caps">HTML</span> files, go in <code>test/functional/</code> (see test generator below).</p>
|
95
|
+
<p>When you’ve got a new version to release, edit <code>Rakefile</code> and modify the<br />
|
96
|
+
<code>APP_VERSION</code> string (see Distribution section below).</p>
|
97
|
+
<p>To merge your <code>src/</code> files into a distribution file, see below.</p>
|
98
|
+
<h2>Unit testing</h2>
|
99
|
+
<p>If you are going to have a <code>src/some_lib.js</code> file, then you’ll want a unit<br />
|
141
100
|
test file(s). By default you’d call it <code>test/some_lib_test.html</code>.</p>
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
goes in the test <span class="caps">HTML</span> files. I quite like the <a href="http://drnicwilliams.com/2008/01/04/autotesting-javascript-in-rails/">javascript_test plugin</a> for <a href="http://www.rubyonrails.org/">Ruby
|
149
|
-
on Rails</a>, which allows you to generate a
|
150
|
-
test <span class="caps">HTML</span> stub. So I’ve included a version of it
|
151
|
-
here. That is, your JavaScript project comes with a generator to create new
|
101
|
+
<h3>Generating test <span class="caps">HTML</span> files</h3>
|
102
|
+
<p>And then what? Personally, I can never remember what basic <span class="caps">HTML</span> + JavaScript<br />
|
103
|
+
goes in the test <span class="caps">HTML</span> files. I quite like the <a href="http://drnicwilliams.com/2008/01/04/autotesting-javascript-in-rails/">javascript_test plugin</a> for <a href="http://www.rubyonrails.org/">Ruby <br />
|
104
|
+
on Rails</a>, which allows you to generate a<br />
|
105
|
+
test <span class="caps">HTML</span> stub. So I’ve included a version of it<br />
|
106
|
+
here. That is, your JavaScript project comes with a generator to create new<br />
|
152
107
|
test <span class="caps">HTML</span> files, ready to rock and roll.</p>
|
153
|
-
|
154
|
-
|
155
108
|
<pre>$ script/generate unit_test some_lib
|
156
109
|
create test/unit
|
157
110
|
create test/unit/some_lib_test.html</pre>
|
158
|
-
|
159
|
-
<p>Now edit <code>test/unit/some_lib_test.html</code> and follow the comments
|
111
|
+
<p>Now edit <code>test/unit/some_lib_test.html</code> and follow the comments<br />
|
160
112
|
that tell you what to do to write your unit tests.</p>
|
161
|
-
|
162
|
-
|
163
|
-
<p>Want to name your test file something different? Specify the target
|
113
|
+
<p>Want to name your test file something different? Specify the target<br />
|
164
114
|
library as an additional parameter.</p>
|
165
|
-
|
166
|
-
|
167
115
|
<pre>$ script/generate unit_test my_library_tests some_lib
|
168
116
|
exists test/unit
|
169
117
|
create test/unit/my_library_tests_test.html</pre>
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
<p>Each test <span class="caps">HTML</span> file should be self-executable: just open it in a target
|
175
|
-
browser. That is, to run the <code>test/some_lib_test.html</code> tests
|
118
|
+
<h3>Running unit tests</h3>
|
119
|
+
<p>Each test <span class="caps">HTML</span> file should be self-executable: just open it in a target<br />
|
120
|
+
browser. That is, to run the <code>test/some_lib_test.html</code> tests<br />
|
176
121
|
in Firefox, open the file in Firefox.</p>
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
<p><img src="images/example-unittest-log.jpg" width="647" height="427" alt="Example Unittest Log"></p>
|
183
|
-
|
184
|
-
|
185
|
-
<h2>Functional tests</h2>
|
186
|
-
|
187
|
-
|
188
|
-
<p>End-to-end functional tests will test the final distribution file(s), rather than
|
122
|
+
<p>It will print out a beautiful log success/error messages for each test.</p>
|
123
|
+
<p><img src="images/example-unittest-log.jpg" width="647" height="427" alt="Example Unittest Log"></p>
|
124
|
+
<h2>Functional tests</h2>
|
125
|
+
<p>End-to-end functional tests will test the final distribution file(s), rather than<br />
|
189
126
|
the <code>src/</code> files.</p>
|
190
|
-
|
191
|
-
|
192
|
-
<p>As shown below, your <code>src/</code> files will be merged into (commonly) one
|
127
|
+
<p>As shown below, your <code>src/</code> files will be merged into (commonly) one <br />
|
193
128
|
distribution file – a merging of your source files.</p>
|
194
|
-
|
195
|
-
|
196
|
-
<h3>Generating test <span class="caps">HTML</span> files</h3>
|
197
|
-
|
198
|
-
|
199
|
-
<p>To create functional tests, there is another generator:</p>
|
200
|
-
|
201
|
-
|
129
|
+
<h3>Generating test <span class="caps">HTML</span> files</h3>
|
130
|
+
<p>To create functional tests, there is another generator:</p>
|
202
131
|
<pre>$ script/generate functional_test basic_usage
|
203
132
|
create test/functional
|
204
133
|
create test/functional/basic_usage_test.html</pre>
|
205
|
-
|
206
|
-
<h3>Running functional tests</h3>
|
207
|
-
|
208
|
-
|
134
|
+
<h3>Running functional tests</h3>
|
209
135
|
<pre>rake test_functionals</pre>
|
210
|
-
|
211
|
-
|
212
|
-
you are running these tests it is best to use the <code>rake test_functionals</code>
|
136
|
+
<p>The generated <span class="caps">HTML</span> file uses the <code>dist/mylib.js</code> file. So, if<br />
|
137
|
+
you are running these tests it is best to use the <code>rake test_functionals</code><br />
|
213
138
|
as it pre-builds the distribution files first.</p>
|
214
|
-
|
215
|
-
|
216
|
-
<h2>Distribution of library</h2>
|
217
|
-
|
218
|
-
|
219
|
-
<p>Your project comes with the ability to concatenate all your <code>src/*.js</code>
|
139
|
+
<h2>Distribution of library</h2>
|
140
|
+
<p>Your project comes with the ability to concatenate all your <code>src/*.js</code><br />
|
220
141
|
files into a single file for distribution, as <code>dist/project_name.js</code>.</p>
|
221
|
-
|
222
|
-
|
223
|
-
<p>First, edit <code>src/HEADER</code> with information that will be included
|
142
|
+
<p>First, edit <code>src/HEADER</code> with information that will be included<br />
|
224
143
|
at the top of the generated distribution file.</p>
|
225
|
-
|
226
|
-
|
227
|
-
<p>Second, edit <code>src/project_name.js</code> to include the names of
|
228
|
-
all the <code>src/</code> files that will be concatenated together
|
144
|
+
<p>Second, edit <code>src/project_name.js</code> to include the names of<br />
|
145
|
+
all the <code>src/</code> files that will be concatenated together<br />
|
229
146
|
in your required order.</p>
|
230
|
-
|
231
|
-
|
232
|
-
<p>Finally, run the command:</p>
|
233
|
-
|
234
|
-
|
147
|
+
<p>Finally, run the command:</p>
|
235
148
|
<pre>rake dist</pre>
|
236
|
-
|
237
|
-
<p>Two files are added into the <code>dist/</code> folder:</p>
|
238
|
-
|
239
|
-
|
149
|
+
<p>Two files are added into the <code>dist/</code> folder:</p>
|
240
150
|
<pre>$ ls dist/
|
241
151
|
drnic_js_test_helpers-0.5.0.js drnic_js_test_helpers.js</pre>
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
<h3>Upload library to rubyforge</h3>
|
247
|
-
|
248
|
-
|
249
|
-
<p>Assuming you don’t really care where your package/library is uploaded
|
250
|
-
and made available for downloading, <code>newjs</code> projects comes
|
152
|
+
<p>One with a version number, and one without.</p>
|
153
|
+
<h3>Upload library to rubyforge</h3>
|
154
|
+
<p>Assuming you don’t really care where your package/library is uploaded<br />
|
155
|
+
and made available for downloading, <code>newjs</code> projects comes<br />
|
251
156
|
pre-built ready to upload them to <code>rubyforge</code>.</p>
|
252
|
-
|
253
|
-
|
254
|
-
<p>First, you’ll need a rubyforge account.</p>
|
255
|
-
|
256
|
-
|
257
|
-
<p>Second, create a rubyforge project. It can take 12-48hrs for confirmation
|
157
|
+
<p>First, you’ll need a rubyforge account.</p>
|
158
|
+
<p>Second, create a rubyforge project. It can take 12-48hrs for confirmation<br />
|
258
159
|
to come back.</p>
|
259
|
-
|
260
|
-
|
261
|
-
<p>Third, use the <code>rubyforge</code> command-line app to
|
160
|
+
<p>Third, use the <code>rubyforge</code> command-line app to <br />
|
262
161
|
store your rubyforge project information locally.</p>
|
263
|
-
|
264
|
-
|
265
162
|
<pre>$ rubyforge setup # first time only
|
266
163
|
$ rubyforge login
|
267
164
|
$ rubyforge config
|
268
165
|
$ rubyforge create_package project_name project_name
|
269
166
|
</pre>
|
270
|
-
|
271
|
-
|
272
|
-
rubyforge project, then the two <code>project_name</code> values
|
167
|
+
<p>Note, if you are placing your JavaScript project within an existing<br />
|
168
|
+
rubyforge project, then the two <code>project_name</code> values<br />
|
273
169
|
are different:</p>
|
274
|
-
|
275
|
-
|
276
|
-
<
|
277
|
-
|
278
|
-
|
279
|
-
</ol>
|
280
|
-
|
281
|
-
|
282
|
-
<p>Finally, each time you want to release a new version of your library you do
|
170
|
+
<ol>
|
171
|
+
<li>The rubyforge project name (e.g. drnicutilities)</li>
|
172
|
+
<li>The JavaScript project/library name (e.g. drnic_js_test_helpers)</li>
|
173
|
+
</ol>
|
174
|
+
<p>Finally, each time you want to release a new version of your library you do <br />
|
283
175
|
two things:</p>
|
284
|
-
|
285
|
-
|
286
|
-
<ol>
|
176
|
+
<ol>
|
287
177
|
<li>Update Rakefile’s <code>APP_VERSION</code> value to the new version number</li>
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
<p>Your files are now available for download via rubyforge.org.</p>
|
293
|
-
|
294
|
-
|
295
|
-
<p>If you use the generated website (below), it comes with a link to these
|
178
|
+
<li>Run <code>rake release VERSION=X.Y.Z</code></li>
|
179
|
+
</ol>
|
180
|
+
<p>Your files are now available for download via rubyforge.org.</p>
|
181
|
+
<p>If you use the generated website (below), it comes with a link to these<br />
|
296
182
|
files when you click the large version number (e.g. “Get Version X.Y.Z”).</p>
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
<p>You can quickly create a clean, readable website for your project
|
303
|
-
that prominently displays the current version number (which is a
|
183
|
+
<h2>Create a website for your project</h2>
|
184
|
+
<p>You can quickly create a clean, readable website for your project<br />
|
185
|
+
that prominently displays the current version number (which is a <br />
|
304
186
|
clickable link through to the download page), just like this page.</p>
|
305
|
-
|
306
|
-
|
307
187
|
<pre>script/generate install_website</pre>
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
<p>To convert it to <span class="caps">HTML</span>, run:</p>
|
313
|
-
|
314
|
-
|
188
|
+
<p>Now edit the generated <code>website/index.txt</code> file (<a href="http://www.textism.com/tools/textile/">Textile</a> format).</p>
|
189
|
+
<p>To convert it to <span class="caps">HTML</span>, run:</p>
|
315
190
|
<pre>rake website_generate</pre>
|
316
|
-
|
317
|
-
|
318
|
-
The project’s version number is automatically inserted into the page
|
191
|
+
<p>And open <code>website/index.html</code> in your browser to preview.<br />
|
192
|
+
The project’s version number is automatically inserted into the page<br />
|
319
193
|
(change version numbers via <code>APP_VERSION</code> in <code>Rakefile</code>).</p>
|
320
|
-
|
321
|
-
|
322
|
-
<h3>Configuration of website upload</h3>
|
323
|
-
|
324
|
-
|
325
|
-
<p>It is assumed you will upload your website files to rubyforge.org server.
|
194
|
+
<h3>Configuration of website upload</h3>
|
195
|
+
<p>It is assumed you will upload your website files to rubyforge.org server.<br />
|
326
196
|
To push files to an alternate server, modify the <code>tasks/website.rake</code> file.</p>
|
327
|
-
|
328
|
-
|
329
|
-
<p>To configure which rubyforge project to upload to, create <code>config/website.yml</code>.
|
197
|
+
<p>To configure which rubyforge project to upload to, create <code>config/website.yml</code>.<br />
|
330
198
|
There is an example in <code>code/website.yml.sample</code>.</p>
|
331
|
-
|
332
|
-
|
333
|
-
<p>An example might be:</p>
|
334
|
-
|
335
|
-
|
199
|
+
<p>An example might be:</p>
|
336
200
|
<pre>host: nicwilliams@rubyforge.org
|
337
201
|
remote_dir: /var/www/gforge-projects/drnicutilities/drnic_js_test_helpers
|
338
202
|
</pre>
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
<p>If your website lives in its own rubyforge project, then just specify the project
|
203
|
+
<p>Here, the files will be uploaded into the <code>drnicutilities</code> rubyforge<br />
|
204
|
+
project, under a sub-directory <code>drnic_js_test_helpers</code>. This site<br />
|
205
|
+
would be visible at <a href="http://drnicutilities.rubyforge.org/drnic_js_test_helpers">http://drnicutilities.rubyforge.org/drnic_js_test_helpers</a><br />
|
206
|
+
<br />
|
207
|
+
If your website lives in its own rubyforge project, then just specify the project<br />
|
346
208
|
name, and the website will be uploaded into the root folder.</p>
|
347
|
-
|
348
|
-
|
349
|
-
<p>For example, the website would be available at <a href="http://drnicutilities.rubyforge.org/">http://drnicutilities.rubyforge.org/</a> if your
|
209
|
+
<p>For example, the website would be available at <a href="http://drnicutilities.rubyforge.org/">http://drnicutilities.rubyforge.org/</a> if your<br />
|
350
210
|
configuration was:</p>
|
351
|
-
|
352
|
-
|
353
211
|
<pre>host: nicwilliams@rubyforge.org
|
354
212
|
remote_dir: /var/www/gforge-projects/drnicutilities
|
355
213
|
</pre>
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
<p>To upload the website (and its <span class="caps">CSS</span> etc) run:</p>
|
361
|
-
|
362
|
-
|
214
|
+
<h3>Uploading website to server</h3>
|
215
|
+
<p>To upload the website (and its <span class="caps">CSS</span> etc) run:</p>
|
363
216
|
<pre>rake website_upload</pre>
|
364
|
-
|
365
|
-
<p>More commonly, to generate and upload the website:</p>
|
366
|
-
|
367
|
-
|
217
|
+
<p>More commonly, to generate and upload the website:</p>
|
368
218
|
<pre>rake website</pre>
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
<p>A hard-core, “how to do JavaScript unit testing” screencast will
|
374
|
-
soon be published by <a href="http://peepcode.com/">PeepCode</a>. It will cost $9
|
219
|
+
<h2>Screencast coming soon</h2>
|
220
|
+
<p>A hard-core, “how to do JavaScript unit testing” screencast will<br />
|
221
|
+
soon be published by <a href="http://peepcode.com/">PeepCode</a>. It will cost $9<br />
|
375
222
|
and you’ll love every minute of it.</p>
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
<h2>Examples</h2>
|
382
|
-
|
383
|
-
|
384
|
-
<p>The development of <code>newjs</code> was done in parallel with
|
385
|
-
<a href="http://drnicutilities.rubyforge.org/drnic_js_test_helpers/">Dr Nic’s JavaScript Test Helpers</a>
|
223
|
+
<p>Subscribe to PeepCode’s blog for announcement details.</p>
|
224
|
+
<h2>Examples</h2>
|
225
|
+
<p>The development of <code>newjs</code> was done in parallel with<br />
|
226
|
+
<a href="http://drnicutilities.rubyforge.org/drnic_js_test_helpers/">Dr Nic’s JavaScript Test Helpers</a><br />
|
386
227
|
(source: <a href="http://github.com/drnic/drnic_js_test_helpers/tree/master">git</a>).</p>
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
<h2>How to submit patches</h2>
|
399
|
-
|
400
|
-
|
401
|
-
<p>Read the <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/">8 steps for fixing other people’s code</a> and for section <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups">8b: Submit patch to Google Groups</a>, use the Google Group above.</p>
|
402
|
-
|
403
|
-
|
404
|
-
<p>The source project is a <a href="http://git.or.cz/">Git</a> repository. See Dr Nic’s <a href="http://github.com/drnic/newjs/tree/master">master branch</a> for clone/checkout details.</p>
|
405
|
-
|
406
|
-
|
407
|
-
<h2>License</h2>
|
408
|
-
|
409
|
-
|
410
|
-
<p>This code is free to use under the terms of the <span class="caps">MIT</span> license.</p>
|
411
|
-
|
412
|
-
|
413
|
-
<h2>Contact</h2>
|
414
|
-
|
415
|
-
|
416
|
-
<p>Comments are welcome. Send an email to <a href="mailto:drnicwilliams@gmail.com">Dr Nic Williams</a> via the <a href="http://groups.google.com/group/javascript-project-generator">forum</a></p>
|
228
|
+
<p>Checkout this project to see examples of unit tests, configuration etc.</p>
|
229
|
+
<h2>Forum</h2>
|
230
|
+
<p><a href="http://groups.google.com/group/javascript-project-generator">http://groups.google.com/group/javascript-project-generator</a></p>
|
231
|
+
<h2>How to submit patches</h2>
|
232
|
+
<p>Read the <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/">8 steps for fixing other people’s code</a> and for section <a href="http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups">8b: Submit patch to Google Groups</a>, use the Google Group above.</p>
|
233
|
+
<p>The source project is a <a href="http://git.or.cz/">Git</a> repository. See Dr Nic’s <a href="http://github.com/drnic/newjs/tree/master">master branch</a> for clone/checkout details.</p>
|
234
|
+
<h2>License</h2>
|
235
|
+
<p>This code is free to use under the terms of the <span class="caps">MIT</span> license.</p>
|
236
|
+
<h2>Contact</h2>
|
237
|
+
<p>Comments are welcome. Send an email to <a href="mailto:drnicwilliams@gmail.com">Dr Nic Williams</a> via the <a href="http://groups.google.com/group/javascript-project-generator">forum</a></p>
|
417
238
|
<p class="coda">
|
418
239
|
<a href="drnicwilliams@gmail.com">Dr Nic Williams</a>, 21st June 2008<br>
|
419
240
|
Theme extended from <a href="http://rb2js.rubyforge.org/">Paul Battley</a>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: newjs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dr Nic Williams
|
@@ -9,49 +9,9 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-10-08 00:00:00 +10:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
name: RedCloth
|
17
|
-
type: :runtime
|
18
|
-
version_requirement:
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">="
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 3.0.4
|
24
|
-
version:
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: syntax
|
27
|
-
type: :runtime
|
28
|
-
version_requirement:
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 1.0.0
|
34
|
-
version:
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: activesupport
|
37
|
-
type: :runtime
|
38
|
-
version_requirement:
|
39
|
-
version_requirements: !ruby/object:Gem::Requirement
|
40
|
-
requirements:
|
41
|
-
- - ">="
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: 2.0.2
|
44
|
-
version:
|
45
|
-
- !ruby/object:Gem::Dependency
|
46
|
-
name: rubigen
|
47
|
-
type: :runtime
|
48
|
-
version_requirement:
|
49
|
-
version_requirements: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - ">="
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 1.2.2
|
54
|
-
version:
|
55
15
|
- !ruby/object:Gem::Dependency
|
56
16
|
name: hoe
|
57
17
|
type: :development
|
@@ -196,7 +156,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
196
156
|
requirements: []
|
197
157
|
|
198
158
|
rubyforge_project: newjs
|
199
|
-
rubygems_version: 1.
|
159
|
+
rubygems_version: 1.3.0
|
200
160
|
signing_key:
|
201
161
|
specification_version: 2
|
202
162
|
summary: = New JavaScript Generator - newjs
|
@@ -207,5 +167,6 @@ test_files:
|
|
207
167
|
- test/test_install_website_generator.rb
|
208
168
|
- test/test_javascript_test_generator.rb
|
209
169
|
- test/test_newjs_generator.rb
|
170
|
+
- test/test_newjs_iphone_generator.rb
|
210
171
|
- test/test_plain_theme_generator.rb
|
211
172
|
- test/test_unit_test_generator.rb
|