sproutcore 0.9.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.
- data/History.txt +4 -0
- data/License.txt +20 -0
- data/Manifest.txt +269 -0
- data/README.txt +67 -0
- data/Rakefile +4 -0
- data/app_generators/sproutcore/USAGE +5 -0
- data/app_generators/sproutcore/sproutcore_generator.rb +66 -0
- data/app_generators/sproutcore/templates/README +77 -0
- data/app_generators/sproutcore/templates/environment.yml +4 -0
- data/bin/sc-build +145 -0
- data/bin/sc-gen +24 -0
- data/bin/sc-server +63 -0
- data/bin/sproutcore +21 -0
- data/clients/sc_docs/controllers/docs.js +118 -0
- data/clients/sc_docs/core.js +19 -0
- data/clients/sc_docs/english.lproj/body.css +159 -0
- data/clients/sc_docs/english.lproj/body.rhtml +33 -0
- data/clients/sc_docs/english.lproj/controls.css +0 -0
- data/clients/sc_docs/english.lproj/icons/small/next.png +0 -0
- data/clients/sc_docs/english.lproj/icons/small/reset.png +0 -0
- data/clients/sc_docs/english.lproj/images/gradients.png +0 -0
- data/clients/sc_docs/english.lproj/images/indicator.gif +0 -0
- data/clients/sc_docs/english.lproj/images/toolbar.png +0 -0
- data/clients/sc_docs/english.lproj/no_docs.rhtml +7 -0
- data/clients/sc_docs/english.lproj/strings.js +14 -0
- data/clients/sc_docs/english.lproj/warning.rhtml +6 -0
- data/clients/sc_docs/fixtures/doc.js +11 -0
- data/clients/sc_docs/main.js +21 -0
- data/clients/sc_docs/models/doc.js +9 -0
- data/clients/sc_docs/tests/controllers/docs.rhtml +21 -0
- data/clients/sc_docs/tests/models/doc.rhtml +21 -0
- data/clients/sc_docs/tests/views/doc_frame.rhtml +21 -0
- data/clients/sc_docs/tests/views/doc_label_view.rhtml +21 -0
- data/clients/sc_docs/views/doc_frame.js +33 -0
- data/clients/sc_docs/views/doc_label.js +20 -0
- data/clients/sc_test_runner/controllers/runner.js +175 -0
- data/clients/sc_test_runner/core.js +19 -0
- data/clients/sc_test_runner/english.lproj/body.css +151 -0
- data/clients/sc_test_runner/english.lproj/body.rhtml +35 -0
- data/clients/sc_test_runner/english.lproj/controls.css +0 -0
- data/clients/sc_test_runner/english.lproj/icons/small/next.png +0 -0
- data/clients/sc_test_runner/english.lproj/icons/small/reset.png +0 -0
- data/clients/sc_test_runner/english.lproj/images/gradients.png +0 -0
- data/clients/sc_test_runner/english.lproj/images/indicator.gif +0 -0
- data/clients/sc_test_runner/english.lproj/images/toolbar.png +0 -0
- data/clients/sc_test_runner/english.lproj/no_tests.rhtml +6 -0
- data/clients/sc_test_runner/english.lproj/strings.js +14 -0
- data/clients/sc_test_runner/english.lproj/warning.rhtml +6 -0
- data/clients/sc_test_runner/fixtures/test.js +12 -0
- data/clients/sc_test_runner/main.js +26 -0
- data/clients/sc_test_runner/models/test.js +11 -0
- data/clients/sc_test_runner/views/runner_frame.js +72 -0
- data/clients/sc_test_runner/views/test_label.js +20 -0
- data/config/hoe.rb +70 -0
- data/config/requirements.rb +17 -0
- data/environment.yml +9 -0
- data/frameworks/prototype/prototype.js +4186 -0
- data/frameworks/sproutcore/Core.js +378 -0
- data/frameworks/sproutcore/README +3 -0
- data/frameworks/sproutcore/controllers/array.js +236 -0
- data/frameworks/sproutcore/controllers/collection.js +305 -0
- data/frameworks/sproutcore/controllers/controller.js +323 -0
- data/frameworks/sproutcore/controllers/object.js +372 -0
- data/frameworks/sproutcore/drag/drag.js +549 -0
- data/frameworks/sproutcore/drag/drag_data_source.js +32 -0
- data/frameworks/sproutcore/drag/drag_source.js +64 -0
- data/frameworks/sproutcore/drag/drop_target.js +153 -0
- data/frameworks/sproutcore/english.lproj/blank.gif +0 -0
- data/frameworks/sproutcore/english.lproj/buttons.css +589 -0
- data/frameworks/sproutcore/english.lproj/buttons.png +0 -0
- data/frameworks/sproutcore/english.lproj/inline_text_editor.css +21 -0
- data/frameworks/sproutcore/english.lproj/menu.css +121 -0
- data/frameworks/sproutcore/english.lproj/panels/background-fat.jpg +0 -0
- data/frameworks/sproutcore/english.lproj/panels/background-thin.jpg +0 -0
- data/frameworks/sproutcore/english.lproj/panels/bottom-edge.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/bottom-left-corner.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/bottom-right-corner.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/left-edge.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/overlay.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/right-edge.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/top-edge.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/top-left-corner.png +0 -0
- data/frameworks/sproutcore/english.lproj/panels/top-right-corner.png +0 -0
- data/frameworks/sproutcore/english.lproj/panes.css +155 -0
- data/frameworks/sproutcore/english.lproj/picker.css +22 -0
- data/frameworks/sproutcore/english.lproj/strings.js +15 -0
- data/frameworks/sproutcore/english.lproj/tab.css +23 -0
- data/frameworks/sproutcore/english.lproj/tests.css +67 -0
- data/frameworks/sproutcore/english.lproj/theme.css +77 -0
- data/frameworks/sproutcore/foundation/animator.js +670 -0
- data/frameworks/sproutcore/foundation/application.js +199 -0
- data/frameworks/sproutcore/foundation/array.js +348 -0
- data/frameworks/sproutcore/foundation/benchmark.js +211 -0
- data/frameworks/sproutcore/foundation/binding.js +384 -0
- data/frameworks/sproutcore/foundation/date.js +357 -0
- data/frameworks/sproutcore/foundation/error.js +39 -0
- data/frameworks/sproutcore/foundation/input_manager.js +153 -0
- data/frameworks/sproutcore/foundation/json.js +296 -0
- data/frameworks/sproutcore/foundation/mock.js +42 -0
- data/frameworks/sproutcore/foundation/node_descriptor.js +56 -0
- data/frameworks/sproutcore/foundation/object.js +777 -0
- data/frameworks/sproutcore/foundation/observable.js +451 -0
- data/frameworks/sproutcore/foundation/page.js +63 -0
- data/frameworks/sproutcore/foundation/path_module.js +413 -0
- data/frameworks/sproutcore/foundation/responder.js +310 -0
- data/frameworks/sproutcore/foundation/routes.js +371 -0
- data/frameworks/sproutcore/foundation/run_loop.js +21 -0
- data/frameworks/sproutcore/foundation/server.js +491 -0
- data/frameworks/sproutcore/foundation/set.js +96 -0
- data/frameworks/sproutcore/foundation/string.js +149 -0
- data/frameworks/sproutcore/foundation/undo_manager.js +186 -0
- data/frameworks/sproutcore/foundation/unittest.js +622 -0
- data/frameworks/sproutcore/foundation/utils.js +61 -0
- data/frameworks/sproutcore/globals/panels.js +182 -0
- data/frameworks/sproutcore/globals/popups.js +60 -0
- data/frameworks/sproutcore/globals/window.js +381 -0
- data/frameworks/sproutcore/lib/index.rhtml +66 -0
- data/frameworks/sproutcore/models/collection.js +395 -0
- data/frameworks/sproutcore/models/record.js +622 -0
- data/frameworks/sproutcore/models/store.js +295 -0
- data/frameworks/sproutcore/panes/dialog.js +16 -0
- data/frameworks/sproutcore/panes/manager.js +164 -0
- data/frameworks/sproutcore/panes/menu.js +45 -0
- data/frameworks/sproutcore/panes/overlay.js +231 -0
- data/frameworks/sproutcore/panes/pane.js +90 -0
- data/frameworks/sproutcore/panes/panel.js +19 -0
- data/frameworks/sproutcore/panes/picker.js +45 -0
- data/frameworks/sproutcore/tests/controllers/array.rhtml +86 -0
- data/frameworks/sproutcore/tests/controllers/controller.rhtml +273 -0
- data/frameworks/sproutcore/tests/controllers/object.rhtml +327 -0
- data/frameworks/sproutcore/tests/foundation/application.rhtml +125 -0
- data/frameworks/sproutcore/tests/foundation/array.rhtml +221 -0
- data/frameworks/sproutcore/tests/foundation/object.rhtml +69 -0
- data/frameworks/sproutcore/tests/globals/window.rhtml +45 -0
- data/frameworks/sproutcore/tests/panes/pane.rhtml +88 -0
- data/frameworks/sproutcore/tests/views/collection.rhtml +137 -0
- data/frameworks/sproutcore/tests/views/popup_button.rhtml +115 -0
- data/frameworks/sproutcore/tests/views/text_field.rhtml +37 -0
- data/frameworks/sproutcore/validators/credit_card.js +92 -0
- data/frameworks/sproutcore/validators/date.js +36 -0
- data/frameworks/sproutcore/validators/email.js +29 -0
- data/frameworks/sproutcore/validators/not_empty.js +24 -0
- data/frameworks/sproutcore/validators/number.js +55 -0
- data/frameworks/sproutcore/validators/password.js +78 -0
- data/frameworks/sproutcore/validators/validator.js +304 -0
- data/frameworks/sproutcore/views/button.js +425 -0
- data/frameworks/sproutcore/views/checkbox_field.js +30 -0
- data/frameworks/sproutcore/views/collection.js +1521 -0
- data/frameworks/sproutcore/views/container.js +62 -0
- data/frameworks/sproutcore/views/error_explanation.js +45 -0
- data/frameworks/sproutcore/views/field.js +214 -0
- data/frameworks/sproutcore/views/filter_button.js +29 -0
- data/frameworks/sproutcore/views/form.js +591 -0
- data/frameworks/sproutcore/views/image.js +141 -0
- data/frameworks/sproutcore/views/inline_text_editor.js +96 -0
- data/frameworks/sproutcore/views/label.js +176 -0
- data/frameworks/sproutcore/views/menu_item.js +90 -0
- data/frameworks/sproutcore/views/pagination.js +54 -0
- data/frameworks/sproutcore/views/popup_button.js +86 -0
- data/frameworks/sproutcore/views/popup_menu.js +137 -0
- data/frameworks/sproutcore/views/progress.js +100 -0
- data/frameworks/sproutcore/views/radio_field.js +107 -0
- data/frameworks/sproutcore/views/radio_group.js +48 -0
- data/frameworks/sproutcore/views/segmented.js +80 -0
- data/frameworks/sproutcore/views/select_field.js +272 -0
- data/frameworks/sproutcore/views/spinner.js +11 -0
- data/frameworks/sproutcore/views/tab.js +126 -0
- data/frameworks/sproutcore/views/text_field.js +179 -0
- data/frameworks/sproutcore/views/textarea_field.js +14 -0
- data/frameworks/sproutcore/views/toolbar.js +29 -0
- data/frameworks/sproutcore/views/view.js +1389 -0
- data/frameworks/sproutcore/views/workspace.js +170 -0
- data/generators/client/README +3 -0
- data/generators/client/USAGE +12 -0
- data/generators/client/client_generator.rb +53 -0
- data/generators/client/templates/core.js +19 -0
- data/generators/client/templates/english.lproj/body.css +0 -0
- data/generators/client/templates/english.lproj/body.rhtml +3 -0
- data/generators/client/templates/english.lproj/controls.css +0 -0
- data/generators/client/templates/english.lproj/strings.js +14 -0
- data/generators/client/templates/main.js +37 -0
- data/generators/controller/USAGE +16 -0
- data/generators/controller/controller_generator.rb +51 -0
- data/generators/controller/templates/controller.js +21 -0
- data/generators/controller/templates/test.rhtml +21 -0
- data/generators/framework/README +7 -0
- data/generators/framework/USAGE +12 -0
- data/generators/framework/framework_generator.rb +53 -0
- data/generators/framework/templates/core.js +20 -0
- data/generators/framework/templates/english.lproj/body.css +0 -0
- data/generators/framework/templates/english.lproj/body.rhtml +3 -0
- data/generators/framework/templates/english.lproj/controls.css +0 -0
- data/generators/framework/templates/english.lproj/strings.js +14 -0
- data/generators/language/USAGE +16 -0
- data/generators/language/language_generator.rb +47 -0
- data/generators/language/templates/strings.js +10 -0
- data/generators/model/USAGE +24 -0
- data/generators/model/model_generator.rb +55 -0
- data/generators/model/templates/fixture.js +11 -0
- data/generators/model/templates/model.js +20 -0
- data/generators/model/templates/test.rhtml +21 -0
- data/generators/test/USAGE +16 -0
- data/generators/test/templates/test.rhtml +21 -0
- data/generators/test/test_generator.rb +47 -0
- data/generators/view/USAGE +16 -0
- data/generators/view/templates/test.rhtml +21 -0
- data/generators/view/templates/view.js +20 -0
- data/generators/view/view_generator.rb +51 -0
- data/jsdoc/README.txt +119 -0
- data/jsdoc/app/DocFile.js +137 -0
- data/jsdoc/app/DocTag.js +110 -0
- data/jsdoc/app/Doclet.js +63 -0
- data/jsdoc/app/Dumper.js +143 -0
- data/jsdoc/app/JsDoc.js +103 -0
- data/jsdoc/app/JsHilite.js +45 -0
- data/jsdoc/app/JsIO.js +163 -0
- data/jsdoc/app/JsParse.js +385 -0
- data/jsdoc/app/JsPlate.js +130 -0
- data/jsdoc/app/JsTestrun.js +129 -0
- data/jsdoc/app/JsToke.js +564 -0
- data/jsdoc/app/Symbol.js +298 -0
- data/jsdoc/app/Transformer.js +14 -0
- data/jsdoc/app/Util.js +97 -0
- data/jsdoc/app/js.jar +0 -0
- data/jsdoc/app/run.js +144 -0
- data/jsdoc/plugins/min.js +316 -0
- data/jsdoc/plugins/strip.js +20 -0
- data/jsdoc/templates/sproutcore/class.tmpl +438 -0
- data/jsdoc/templates/sproutcore/default.css +241 -0
- data/jsdoc/templates/sproutcore/index.html +13 -0
- data/jsdoc/templates/sproutcore/index.tmpl +21 -0
- data/jsdoc/templates/sproutcore/prototype.js +4186 -0
- data/jsdoc/templates/sproutcore/publish.js +236 -0
- data/jsdoc/templates/sproutcore/splash.html +7 -0
- data/lib/sproutcore/build_tools/html_builder.rb +88 -0
- data/lib/sproutcore/build_tools/resource_builder.rb +194 -0
- data/lib/sproutcore/build_tools.rb +44 -0
- data/lib/sproutcore/bundle.rb +517 -0
- data/lib/sproutcore/bundle_manifest.rb +397 -0
- data/lib/sproutcore/generator_helper.rb +170 -0
- data/lib/sproutcore/helpers/capture_helper.rb +42 -0
- data/lib/sproutcore/helpers/static_helper.rb +80 -0
- data/lib/sproutcore/helpers/tag_helper.rb +110 -0
- data/lib/sproutcore/helpers/text_helper.rb +336 -0
- data/lib/sproutcore/helpers.rb +3 -0
- data/lib/sproutcore/jsdoc.rb +40 -0
- data/lib/sproutcore/jsmin.rb +247 -0
- data/lib/sproutcore/library.rb +258 -0
- data/lib/sproutcore/merb/bundle_controller.rb +179 -0
- data/lib/sproutcore/merb/router.rb +43 -0
- data/lib/sproutcore/merb.rb +27 -0
- data/lib/sproutcore/version.rb +9 -0
- data/lib/sproutcore/view_helpers/button_views.rb +302 -0
- data/lib/sproutcore/view_helpers/core_views.rb +284 -0
- data/lib/sproutcore/view_helpers/form_views.rb +258 -0
- data/lib/sproutcore/view_helpers/menu_views.rb +94 -0
- data/lib/sproutcore/view_helpers.rb +628 -0
- data/lib/sproutcore.rb +30 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/script/txt2html +74 -0
- data/setup.rb +1585 -0
- data/spec/spec.opts +1 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/sproutcore_spec.rb +11 -0
- data/tasks/deployment.rake +34 -0
- data/tasks/environment.rake +7 -0
- data/tasks/rspec.rake +21 -0
- data/tasks/website.rake +17 -0
- metadata +365 -0
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// TestRunner.runnerController
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
|
|
5
|
+
require('core');
|
|
6
|
+
|
|
7
|
+
TestRunner.runnerController = SC.Object.create({
|
|
8
|
+
|
|
9
|
+
// This is used in the client warning dialog.
|
|
10
|
+
windowLocation: window.location.href,
|
|
11
|
+
|
|
12
|
+
// This is the current client name.
|
|
13
|
+
clientName: '',
|
|
14
|
+
|
|
15
|
+
// This is displayed as the main UI label.
|
|
16
|
+
displayClientName: function() {
|
|
17
|
+
return "%@ Tests".fmt((this.get('clientName') || '').humanize().capitalize()) ;
|
|
18
|
+
}.property('clientName'),
|
|
19
|
+
|
|
20
|
+
arrangedObjects: [],
|
|
21
|
+
selection: [],
|
|
22
|
+
|
|
23
|
+
selectedTest: function() {
|
|
24
|
+
var sel = this.get('selection') ;
|
|
25
|
+
return (sel && sel.length > 0) ? sel[0] : null ;
|
|
26
|
+
}.property('selection'),
|
|
27
|
+
|
|
28
|
+
testState: null,
|
|
29
|
+
|
|
30
|
+
testStateLabel: function() {
|
|
31
|
+
switch(this.get('testState')) {
|
|
32
|
+
case TestRunner.TEST_LOADING:
|
|
33
|
+
return 'Loading Test...' ;
|
|
34
|
+
|
|
35
|
+
case TestRunner.TEST_RUNNING:
|
|
36
|
+
return 'Test Running...' ;
|
|
37
|
+
|
|
38
|
+
case TestRunner.TEST_PASSED:
|
|
39
|
+
return 'Passed!' ;
|
|
40
|
+
|
|
41
|
+
case TestRunner.TEST_FAILED:
|
|
42
|
+
return 'Failed.' ;
|
|
43
|
+
|
|
44
|
+
default:
|
|
45
|
+
return '' ;
|
|
46
|
+
}
|
|
47
|
+
}.property('testState'),
|
|
48
|
+
|
|
49
|
+
isRunning: NO,
|
|
50
|
+
isContinuousIntegrationEnabled: NO,
|
|
51
|
+
|
|
52
|
+
runTestLabel: function() {
|
|
53
|
+
return (this.get('isRunning')) ? "Stop Tests" : "Run Tests" ;
|
|
54
|
+
}.property('isRunning'),
|
|
55
|
+
|
|
56
|
+
toggleRunTests: function() {
|
|
57
|
+
this.toggleProperty('isRunning') ;
|
|
58
|
+
},
|
|
59
|
+
|
|
60
|
+
reloadTests: function() {
|
|
61
|
+
|
|
62
|
+
// Use Ajax to ask the server for the latest set of tests for the
|
|
63
|
+
// current client.
|
|
64
|
+
var ids = [this.get('clientName')] ;
|
|
65
|
+
TestRunner.server.request('sc_test_runner', 'list', ids, {
|
|
66
|
+
onSuccess: this._reloadSuccess.bind(this),
|
|
67
|
+
onFailure: this._reloadFailure.bind(this)
|
|
68
|
+
}) ;
|
|
69
|
+
},
|
|
70
|
+
|
|
71
|
+
_reloadSuccess: function(status, transport) {
|
|
72
|
+
var json = transport.responseText ;
|
|
73
|
+
var records = eval(json) ;
|
|
74
|
+
if ($type(records) != T_ARRAY) {
|
|
75
|
+
return this._reloadFailure(status, transport) ;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// update the list of tests from the server. The return value will be
|
|
79
|
+
// the records included in the list. This is what will become our new
|
|
80
|
+
// list.
|
|
81
|
+
var recs = SC.Store.updateRecords(records, this, TestRunner.Test, true);
|
|
82
|
+
|
|
83
|
+
// show warning panel if the records are empty. Also reload tests
|
|
84
|
+
// periodically so that when the user resolves the problem, we can start
|
|
85
|
+
// working away immediately.
|
|
86
|
+
if (recs.length == 0) {
|
|
87
|
+
SC.page.get('noTestsPanel').set('isVisible',true) ;
|
|
88
|
+
setTimeout(this.reloadTests.bind(this),2000) ;
|
|
89
|
+
} else {
|
|
90
|
+
SC.page.get('noTestsPanel').set('isVisible',false) ;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// sort the records by name and set as the new arrangedObjects.
|
|
94
|
+
recs = recs.sort(function(a,b) {
|
|
95
|
+
a = a.get('name') || '';
|
|
96
|
+
b = b.get('name') || '';
|
|
97
|
+
return a.localeCompare(b) ;
|
|
98
|
+
}) ;
|
|
99
|
+
|
|
100
|
+
var hadArrangedObjects = this.get('arrangedObjects').length > 0 ;
|
|
101
|
+
this.set('arrangedObjects', recs) ;
|
|
102
|
+
|
|
103
|
+
// if the current selection is not in the list, clear the selection.
|
|
104
|
+
var test = this.get('selectedTest') ;
|
|
105
|
+
if (test && !(recs.include(test))) this.set('selection', []) ;
|
|
106
|
+
|
|
107
|
+
// if continuous integration is turned on and we are running, restart
|
|
108
|
+
// the tests immediately. or if we did not have arranged objects.
|
|
109
|
+
if (!hadArrangedObjects || (this.get('isRunning') && (this.get('isContinuousIntegrationEnabled')))) {
|
|
110
|
+
if (recs.length >0) this.set('selection',[recs.first()]) ;
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
_reloadFailure: function(status, transport) {
|
|
115
|
+
console.log('TEST RELOAD FAILED!') ;
|
|
116
|
+
},
|
|
117
|
+
|
|
118
|
+
// whenever isRunning changes to YES, select the first test.
|
|
119
|
+
isRunningObserver: function() {
|
|
120
|
+
if (this.didChangeFor('isRunningObserver', 'isRunning')) {
|
|
121
|
+
if (this.get('isRunning')) {
|
|
122
|
+
var tests = this.get('arrangedObjects') ;
|
|
123
|
+
var firstTest = (tests && tests.length > 0) ? [tests[0]] : [] ;
|
|
124
|
+
this.set('selection', []) ; // clear selection.
|
|
125
|
+
setTimeout(function() {
|
|
126
|
+
this.set('selection', firstTest) ;
|
|
127
|
+
}.bind(this),1) ;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}.observes('isRunning'),
|
|
131
|
+
|
|
132
|
+
// whenever the testState changes, then go on to the next test, if
|
|
133
|
+
// running.
|
|
134
|
+
testStateObserver: function() {
|
|
135
|
+
if (!this.didChangeFor('testStateObserver', 'testState')) return ;
|
|
136
|
+
if (!this.get('isRunning')) return ;
|
|
137
|
+
|
|
138
|
+
var testState = this.get('testState') ;
|
|
139
|
+
|
|
140
|
+
// If test passed, go onto the next test.
|
|
141
|
+
if (testState == TestRunner.TEST_PASSED) {
|
|
142
|
+
var tests = this.get('arrangedObjects') || [];
|
|
143
|
+
var test = this.get('selectedTest') || tests.first();
|
|
144
|
+
|
|
145
|
+
// find the idx of the next item.
|
|
146
|
+
var idx = tests.indexOf(test) ;
|
|
147
|
+
if (idx < 0) idx = 0 ;
|
|
148
|
+
idx++ ;
|
|
149
|
+
|
|
150
|
+
// if the idx is at the end of the set of tests, go back to the
|
|
151
|
+
// beginning only if continuous integration is enabled.
|
|
152
|
+
if (idx >= tests.length) {
|
|
153
|
+
if (this.get('isContinuousIntegrationEnabled')) {
|
|
154
|
+
this.reloadTests() ;
|
|
155
|
+
} else {
|
|
156
|
+
this.set('isRunning', false) ;
|
|
157
|
+
}
|
|
158
|
+
return ;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// now load the next test.
|
|
162
|
+
test = tests[idx] ;
|
|
163
|
+
if (!test) test = tests[0] ;
|
|
164
|
+
this.set('selection', (test) ? [test] : []) ;
|
|
165
|
+
|
|
166
|
+
// if the test failed, then stop running the tests and throw an alert
|
|
167
|
+
// if continuous integration is on.
|
|
168
|
+
} else if (testState == TestRunner.TEST_FAILED) {
|
|
169
|
+
this.set('isRunning', false) ;
|
|
170
|
+
if (this.get('isContinuousIntegrationEnabled') == YES) {
|
|
171
|
+
alert('Unit Test Failed!') ;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}.observes('testState')
|
|
175
|
+
}) ;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// TestRunner
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
|
|
5
|
+
TestRunner = SC.Object.create({
|
|
6
|
+
|
|
7
|
+
// This will create the server for your application. Add any namespaces
|
|
8
|
+
// your model objects are defined in to the prefix array.
|
|
9
|
+
server: SC.Server.create({ prefix: ['TestRunner'] }),
|
|
10
|
+
|
|
11
|
+
// When you are in development mode, this array will be populated with
|
|
12
|
+
// any fixtures you create for testing and loaded automatically in your
|
|
13
|
+
// main method. When in production, this will be an empty array.
|
|
14
|
+
FIXTURES: [],
|
|
15
|
+
|
|
16
|
+
// Any keys in this array will be instantiated automatically from main.
|
|
17
|
+
controllers: [],
|
|
18
|
+
|
|
19
|
+
}) ;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
|
|
2
|
+
|
|
3
|
+
/* @group Workspace */
|
|
4
|
+
|
|
5
|
+
#workspace {
|
|
6
|
+
background-color: #8db69a;
|
|
7
|
+
position: absolute ;
|
|
8
|
+
top: 0;
|
|
9
|
+
left: 0;
|
|
10
|
+
right: 0;
|
|
11
|
+
bottom: 0;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
#workspace .container {
|
|
15
|
+
position: absolute ;
|
|
16
|
+
top: 49px;
|
|
17
|
+
left: 171px;
|
|
18
|
+
right: 0px;
|
|
19
|
+
bottom: 26px;
|
|
20
|
+
background-color: white ;
|
|
21
|
+
overflow: auto;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
#workspace .container iframe {
|
|
25
|
+
border: none ;
|
|
26
|
+
width: 100%;
|
|
27
|
+
height: 100%;
|
|
28
|
+
outline: hidden ;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
#workspace .footer {
|
|
32
|
+
position: absolute ;
|
|
33
|
+
bottom: 0px;
|
|
34
|
+
left: 0px;
|
|
35
|
+
height: 26px;
|
|
36
|
+
right: 0px;
|
|
37
|
+
background: static_url('images/gradients') repeat-x left -72px;
|
|
38
|
+
border-top: 1px solid #62806d;
|
|
39
|
+
text-align: center ;
|
|
40
|
+
font-weight: bold ;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
#workspace .footer div {
|
|
44
|
+
margin-top: 5px;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
/* @end */
|
|
49
|
+
|
|
50
|
+
/* @group Toolbar */
|
|
51
|
+
|
|
52
|
+
#workspace .toolbar {
|
|
53
|
+
position: absolute ;
|
|
54
|
+
top: 0;
|
|
55
|
+
left: 0px;
|
|
56
|
+
right: 0px;
|
|
57
|
+
height: 48px;
|
|
58
|
+
border-bottom: 1px solid #62806d;
|
|
59
|
+
background: static_url('images/gradients') repeat-x center top;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
#workspace .toolbar .buttons {
|
|
63
|
+
text-align: right ;
|
|
64
|
+
position: absolute ;
|
|
65
|
+
top: 13px ;
|
|
66
|
+
right: 10px ;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
#workspace .toolbar h1 {
|
|
70
|
+
border: none ;
|
|
71
|
+
padding: 0;
|
|
72
|
+
margin : 0;
|
|
73
|
+
position: absolute ;
|
|
74
|
+
left: 8px;
|
|
75
|
+
top: 4px;
|
|
76
|
+
font-size: 28px;
|
|
77
|
+
font-weight: normal ;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/* @end */
|
|
81
|
+
|
|
82
|
+
/* @group Sidebar */
|
|
83
|
+
|
|
84
|
+
#workspace .sidebar {
|
|
85
|
+
position: absolute ;
|
|
86
|
+
top: 49px;
|
|
87
|
+
left: 0px;
|
|
88
|
+
width: 170px;
|
|
89
|
+
bottom: 26px;
|
|
90
|
+
background-color: #e0efed;
|
|
91
|
+
border-right: 1px #62806d solid;
|
|
92
|
+
overflow: auto ;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.sidebar {
|
|
96
|
+
list-style-type: none ;
|
|
97
|
+
padding: 0;
|
|
98
|
+
margin: 0;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.sidebar a {
|
|
102
|
+
display: block ;
|
|
103
|
+
text-decoration: none ;
|
|
104
|
+
color: black ;
|
|
105
|
+
border: 1px solid #e0efed;
|
|
106
|
+
padding-bottom: 4px;
|
|
107
|
+
padding-top: 7px ;
|
|
108
|
+
padding-left: 8px ;
|
|
109
|
+
border-left-style: none;
|
|
110
|
+
border-right-style: none;
|
|
111
|
+
-moz-user-select: none;
|
|
112
|
+
-khtml-user-select: none;
|
|
113
|
+
user-select: none;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
.sidebar a.sel {
|
|
117
|
+
border: 1px solid #1e504a;
|
|
118
|
+
color: white ;
|
|
119
|
+
font-weight: bold;
|
|
120
|
+
padding-top: 6px;
|
|
121
|
+
background: static_url('images/gradients') repeat-x center -144px;
|
|
122
|
+
border-top-color: #188b7d;
|
|
123
|
+
border-right-style: none;
|
|
124
|
+
border-left-style: none;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.sidebar a.sel:active {
|
|
128
|
+
border: 1px solid #1e504a;
|
|
129
|
+
color: white ;
|
|
130
|
+
font-weight: bold;
|
|
131
|
+
padding-top: 6px;
|
|
132
|
+
background: static_url('images/gradients') repeat-x center -144px;
|
|
133
|
+
border-top-color: #188b7d;
|
|
134
|
+
border-right-style: none;
|
|
135
|
+
border-left-style: none;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
.sidebar a:active {
|
|
139
|
+
background-color: #cedfdf;
|
|
140
|
+
border: 1px solid #cedfdf;
|
|
141
|
+
border-right-style: none;
|
|
142
|
+
border-left-style: none;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.sidebar hr {
|
|
146
|
+
border: none ;
|
|
147
|
+
border-top: #ccc solid 1px;
|
|
148
|
+
margin: 4px 8px;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/* @end */
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<% content_for('body') do %>
|
|
2
|
+
|
|
3
|
+
<% view :workspace do %>
|
|
4
|
+
|
|
5
|
+
<% # PRIMARY TOOLBAR -%>
|
|
6
|
+
<div class="toolbar">
|
|
7
|
+
<%= label_view :outlet => true, :tag => 'h1', :bind => {
|
|
8
|
+
:content => 'TestRunner.runnerController.displayClientName'
|
|
9
|
+
} %>
|
|
10
|
+
<div class="buttons">
|
|
11
|
+
<%= checkbox_view :outlet => true, :label => "Continuous Integration", :bind => { :value => 'TestRunner.runnerController.isContinuousIntegrationEnabled' } %>
|
|
12
|
+
<%= button_view :outlet => true, :label => "Run Tests", :image => static_url('icons/small/reset'), :bind => {
|
|
13
|
+
:label_text => 'TestRunner.runnerController.runTestLabel' }, :action => 'TestRunner.runnerController.toggleRunTests' %>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<%= collection_view :outlet => :sidebar, :class => :sidebar, :bind => {
|
|
18
|
+
:content => 'TestRunner.runnerController.arrangedObjects',
|
|
19
|
+
:selection => 'TestRunner.runnerController.selection'
|
|
20
|
+
}, :example_view => 'TestRunner.TestLabelView' %>
|
|
21
|
+
|
|
22
|
+
<div class="container">
|
|
23
|
+
<%= view :outlet => :runner_frame, :tag => :iframe, :view => 'TestRunner.RunnerFrameView', :bind => {
|
|
24
|
+
:test => 'TestRunner.runnerController.selectedTest',
|
|
25
|
+
:state => 'TestRunner.runnerController.testState' } %>
|
|
26
|
+
</div>
|
|
27
|
+
|
|
28
|
+
<% # FOOTER -%>
|
|
29
|
+
<div class="footer">
|
|
30
|
+
<%= label_view :outlet => :runner_status, :bind => { :content => 'TestRunner.runnerController.testStateLabel' } %>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<% end %>
|
|
34
|
+
|
|
35
|
+
<% end %>
|
|
File without changes
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<% view :no_tests_panel, :panel => true, :width => 400 do %>
|
|
2
|
+
<h1>Client Has No Tests</h1>
|
|
3
|
+
<p style="font-size: 15px;">This client does not currently have any unit tests. To add a unit test, open a terminal to the root directly and type:</p>
|
|
4
|
+
<p style="font-size: 15px; text-align:center;"><code>./script/generate sc_test <%= label_view :outlet => true, :tag => 'span', :bind => { :content => 'TestRunner.runnerController.clientName' } %>/<b>test_name</b></code></p>
|
|
5
|
+
</div>
|
|
6
|
+
<% end %>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// TestRunner English Strings
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
|
|
5
|
+
// Place strings you want to localize here. In your app, use the key and
|
|
6
|
+
// localize it using "key string".loc(). HINT: For your key names, use the
|
|
7
|
+
// english string with an underscore in front. This way you can still see
|
|
8
|
+
// how your UI will look and you'll notice right away when something needs a
|
|
9
|
+
// localized string added to this file!
|
|
10
|
+
//
|
|
11
|
+
Object.extend(String.English,{
|
|
12
|
+
// "_String Key": "Localized String"
|
|
13
|
+
}) ;
|
|
14
|
+
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<% view :warning_panel, :panel => true, :width => 400 do %>
|
|
2
|
+
<h1>Client Name Required</h1>
|
|
3
|
+
<p style="font-size: 15px;">To test a client, add the client name at the end of the URL preceded by a hash (#). For example, to run unit tests for the "contacts" client enter:</p>
|
|
4
|
+
<p style="font-size: 15px; text-align: center;"><%= label_view :outlet => true, :tag => 'span', :bind => { :content => 'TestRunner.runnerController.windowLocation' } %><b>#contacts</b></p>
|
|
5
|
+
</div>
|
|
6
|
+
<% end %>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// TestRunner.Test Fixtures
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
|
|
5
|
+
require('core') ;
|
|
6
|
+
|
|
7
|
+
TestRunner.FIXTURES = TestRunner.FIXTURES.concat([
|
|
8
|
+
|
|
9
|
+
{ guid: 1, type: 'Test', name: 'Test Model', url: '/test_model' },
|
|
10
|
+
{ guid: 2, type: 'Test', name: 'Test View', url: '/test_view' }
|
|
11
|
+
|
|
12
|
+
]);
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// TestRunner
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
|
|
5
|
+
function main() {
|
|
6
|
+
//TestRunner.server.preload(TestRunner.FIXTURES) ;
|
|
7
|
+
SC.page.awake() ;
|
|
8
|
+
//TestRunner.runnerController.reloadTests() ;
|
|
9
|
+
} ;
|
|
10
|
+
|
|
11
|
+
TestRunner.hidePanels = function() {
|
|
12
|
+
SC.page.get('warningPanel').set('isVisible', false) ;
|
|
13
|
+
SC.page.get('noTestsPanel').set('isVisible',false) ;
|
|
14
|
+
} ;
|
|
15
|
+
|
|
16
|
+
SC.Routes.addRoute('', function() {
|
|
17
|
+
TestRunner.hidePanels() ;
|
|
18
|
+
SC.page.get('warningPanel').set('isVisible', true) ;
|
|
19
|
+
}) ;
|
|
20
|
+
|
|
21
|
+
SC.Routes.addRoute(':client', function(params) {
|
|
22
|
+
TestRunner.hidePanels() ;
|
|
23
|
+
TestRunner.runnerController.set('selection',[]) ;
|
|
24
|
+
TestRunner.runnerController.set('clientName', params.client) ;
|
|
25
|
+
TestRunner.runnerController.reloadTests() ;
|
|
26
|
+
}) ;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// TestRunner.Test
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
|
|
5
|
+
require('core');
|
|
6
|
+
|
|
7
|
+
TestRunner.Test = SC.Record.extend({
|
|
8
|
+
|
|
9
|
+
// TODO: Add your own code here.
|
|
10
|
+
|
|
11
|
+
}) ;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// TestRunner.RunnerFrameView
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
|
|
5
|
+
require('core');
|
|
6
|
+
|
|
7
|
+
TestRunner.TEST_NONE = 'none' ;
|
|
8
|
+
TestRunner.TEST_LOADING = 'loading' ;
|
|
9
|
+
TestRunner.TEST_RUNNING = 'running' ;
|
|
10
|
+
TestRunner.TEST_PASSED = 'passed' ;
|
|
11
|
+
TestRunner.TEST_FAILED = 'failed' ;
|
|
12
|
+
|
|
13
|
+
TestRunner.RunnerFrameView = SC.View.extend({
|
|
14
|
+
|
|
15
|
+
// This is set to the test you want to run.
|
|
16
|
+
test: null,
|
|
17
|
+
|
|
18
|
+
// This will automatically change to reflect the current load state.
|
|
19
|
+
state: TestRunner.TEST_NONE,
|
|
20
|
+
|
|
21
|
+
// when the test changes, set the URL of the iframe
|
|
22
|
+
testObserver: function() {
|
|
23
|
+
var test = this.get('test') ;
|
|
24
|
+
var url = (test) ? test.get('url') : '' ;
|
|
25
|
+
|
|
26
|
+
// make sure we clear out the old document settings if needed.
|
|
27
|
+
var doc = (this.rootElement.contentWindow) ? this.rootElement.contentWindow.document : this.rootElement.document ;
|
|
28
|
+
if (doc) doc.testExpired = YES ;
|
|
29
|
+
|
|
30
|
+
// if the document URL is already loaded, then reload it...
|
|
31
|
+
if (url == this.rootElement.src) {
|
|
32
|
+
if (doc && doc.location) doc.location.reload() ;
|
|
33
|
+
|
|
34
|
+
// otherwise set to the new URL.
|
|
35
|
+
} else {
|
|
36
|
+
this.rootElement.src = url ;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
this.set('state', TestRunner.TEST_LOADING) ;
|
|
40
|
+
this.checkState() ;
|
|
41
|
+
}.observes('test'),
|
|
42
|
+
|
|
43
|
+
// this can be called periodically to update the current test state,
|
|
44
|
+
// possibly rescheduling itself.
|
|
45
|
+
checkState: function() {
|
|
46
|
+
var doc = (this.rootElement.contentWindow) ? this.rootElement.contentWindow.document : this.rootElement.document ;
|
|
47
|
+
|
|
48
|
+
var queuedTests = (doc) ? doc.queuedTests : null ;
|
|
49
|
+
var testStatus = (doc) ? doc.testStatus : null ;
|
|
50
|
+
var status = TestRunner.TEST_NONE ;
|
|
51
|
+
var reschedule = true ;
|
|
52
|
+
|
|
53
|
+
if (!doc || (queuedTests == null) || doc.testExpired) {
|
|
54
|
+
status = (this.get('test')) ? TestRunner.TEST_LOADING : TestRunner.TEST_NONE;
|
|
55
|
+
|
|
56
|
+
// tests have finished running.
|
|
57
|
+
} else if (queuedTests == 0) {
|
|
58
|
+
status = (testStatus != 'SUCCESS') ? TestRunner.TEST_FAILED : TestRunner.TEST_PASSED ;
|
|
59
|
+
reschedule = false ;
|
|
60
|
+
|
|
61
|
+
// test still need to run?
|
|
62
|
+
} else {
|
|
63
|
+
status = ((testStatus != 'FAILED') && (testStatus != 'ERROR')) ? TestRunner.TEST_RUNNING : TestRunner.TEST_FAILED ;
|
|
64
|
+
if (status == TestRunner.TEST_FAILED) reschedule = false ;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
if (this.get('state') != status) this.set('state', status) ;
|
|
68
|
+
if (reschedule) setTimeout(this.checkState.bind(this),100) ;
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
}) ;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// ==========================================================================
|
|
2
|
+
// TestRunner.TestLabelView
|
|
3
|
+
// ==========================================================================
|
|
4
|
+
|
|
5
|
+
require('core');
|
|
6
|
+
|
|
7
|
+
TestRunner.TestLabelView = SC.ButtonView.extend({
|
|
8
|
+
|
|
9
|
+
emptyElement: '<a href="javascript:;"><span></span></a>',
|
|
10
|
+
|
|
11
|
+
contentObserver: function() {
|
|
12
|
+
var c = this.get('content') ;
|
|
13
|
+
this.set('labelText', (c) ? c.get('name') : '(NONE)') ;
|
|
14
|
+
}.observes('content'),
|
|
15
|
+
|
|
16
|
+
labelSelector: 'span',
|
|
17
|
+
|
|
18
|
+
mouseDown: function() { return false; }
|
|
19
|
+
|
|
20
|
+
}) ;
|
data/config/hoe.rb
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
require 'sproutcore/version'
|
|
2
|
+
|
|
3
|
+
AUTHOR = 'Charles Jolley' # can also be an array of Authors
|
|
4
|
+
EMAIL = "charles@sproutit.com"
|
|
5
|
+
DESCRIPTION = "SproutCore - JavaScript Application Framework + Build Tools"
|
|
6
|
+
GEM_NAME = 'sproutcore' # what ppl will type to install your gem
|
|
7
|
+
RUBYFORGE_PROJECT = 'sproutcore' # The unix name for your project
|
|
8
|
+
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
|
9
|
+
DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
|
|
10
|
+
|
|
11
|
+
@config_file = "~/.rubyforge/user-config.yml"
|
|
12
|
+
@config = nil
|
|
13
|
+
RUBYFORGE_USERNAME = "okito"
|
|
14
|
+
def rubyforge_username
|
|
15
|
+
unless @config
|
|
16
|
+
begin
|
|
17
|
+
@config = YAML.load(File.read(File.expand_path(@config_file)))
|
|
18
|
+
rescue
|
|
19
|
+
puts <<-EOS
|
|
20
|
+
ERROR: No rubyforge config file found: #{@config_file}
|
|
21
|
+
Run 'rubyforge setup' to prepare your env for access to Rubyforge
|
|
22
|
+
- See http://newgem.rubyforge.org/rubyforge.html for more details
|
|
23
|
+
EOS
|
|
24
|
+
exit
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
RUBYFORGE_USERNAME.replace @config["username"]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
REV = nil
|
|
32
|
+
# UNCOMMENT IF REQUIRED:
|
|
33
|
+
#REV = `svn info`.each {|line| if line =~ /^Revision:/ then k,v = line.split(': '); break v.chomp; else next; end} rescue nil
|
|
34
|
+
VERS = SproutCore::VERSION::STRING + (REV ? ".#{REV}" : "")
|
|
35
|
+
RDOC_OPTS = ['--quiet', '--title', 'sproutcore documentation',
|
|
36
|
+
"--opname", "index.html",
|
|
37
|
+
"--line-numbers",
|
|
38
|
+
"--main", "README",
|
|
39
|
+
"--inline-source"]
|
|
40
|
+
|
|
41
|
+
class Hoe
|
|
42
|
+
def extra_deps
|
|
43
|
+
@extra_deps.reject! { |x| Array(x).first == 'hoe' }
|
|
44
|
+
@extra_deps
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# Generate all the Rake tasks
|
|
49
|
+
# Run 'rake -T' to see list of generated tasks (from gem root directory)
|
|
50
|
+
hoe = Hoe.new(GEM_NAME, VERS) do |p|
|
|
51
|
+
p.developer(AUTHOR, EMAIL)
|
|
52
|
+
p.description = DESCRIPTION
|
|
53
|
+
p.summary = DESCRIPTION
|
|
54
|
+
p.url = HOMEPATH
|
|
55
|
+
p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
|
|
56
|
+
p.test_globs = ["spec/**/*_spec.rb"]
|
|
57
|
+
p.clean_globs |= ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store'] #An array of file patterns to delete on clean.
|
|
58
|
+
|
|
59
|
+
# == Optional
|
|
60
|
+
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
|
61
|
+
p.extra_deps = [['activesupport', '>= 2.0.2'], ['merb-core', '>= 0.9.1'], ['erubis'], ['rubigen'], ]
|
|
62
|
+
|
|
63
|
+
#p.spec_extras = {} # A hash of extra values to set in the gemspec.
|
|
64
|
+
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
CHANGES = hoe.paragraphs_of('History.txt', 0..1).join("\\n\\n")
|
|
68
|
+
PATH = (RUBYFORGE_PROJECT == GEM_NAME) ? RUBYFORGE_PROJECT : "#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
|
|
69
|
+
hoe.remote_rdoc_dir = File.join(PATH.gsub(/^#{RUBYFORGE_PROJECT}\/?/,''), 'rdoc')
|
|
70
|
+
hoe.rsync_args = '-av --delete --ignore-errors'
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'fileutils'
|
|
2
|
+
include FileUtils
|
|
3
|
+
|
|
4
|
+
require 'rubygems'
|
|
5
|
+
%w[rake hoe newgem rubigen actionpack activesupport].each do |req_gem|
|
|
6
|
+
begin
|
|
7
|
+
require req_gem
|
|
8
|
+
rescue LoadError
|
|
9
|
+
puts "This Rakefile requires the '#{req_gem}' RubyGem."
|
|
10
|
+
puts "Installation: gem install #{req_gem} -y"
|
|
11
|
+
exit
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
$:.unshift(File.join(File.dirname(__FILE__), %w[.. lib]))
|
|
16
|
+
|
|
17
|
+
require 'sproutcore'
|