ruote-kit 2.1.4

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.
Files changed (73) hide show
  1. data/.document +0 -0
  2. data/.gitignore +8 -0
  3. data/Gemfile +10 -0
  4. data/README.rdoc +132 -0
  5. data/Rakefile +57 -0
  6. data/config.ru +21 -0
  7. data/lib/ruote-kit/application.rb +50 -0
  8. data/lib/ruote-kit/configuration.rb +52 -0
  9. data/lib/ruote-kit/helpers/engine_helpers.rb +24 -0
  10. data/lib/ruote-kit/helpers/form_helpers.rb +11 -0
  11. data/lib/ruote-kit/helpers/launch_item_parser.rb +59 -0
  12. data/lib/ruote-kit/helpers/navigation_helpers.rb +54 -0
  13. data/lib/ruote-kit/helpers/render_helpers.rb +103 -0
  14. data/lib/ruote-kit/helpers.rb +9 -0
  15. data/lib/ruote-kit/public/_ruote/images/bg.gif +0 -0
  16. data/lib/ruote-kit/public/_ruote/images/bg_button_left.gif +0 -0
  17. data/lib/ruote-kit/public/_ruote/images/bg_button_left_cancel.gif +0 -0
  18. data/lib/ruote-kit/public/_ruote/images/bg_button_left_submit.gif +0 -0
  19. data/lib/ruote-kit/public/_ruote/images/bg_button_right.gif +0 -0
  20. data/lib/ruote-kit/public/_ruote/javascripts/SimplyButtons.js +191 -0
  21. data/lib/ruote-kit/public/_ruote/javascripts/fluo-can.js +1111 -0
  22. data/lib/ruote-kit/public/_ruote/javascripts/fluo-dial.js +149 -0
  23. data/lib/ruote-kit/public/_ruote/javascripts/fluo-json.js +183 -0
  24. data/lib/ruote-kit/public/_ruote/javascripts/fluo-tred.js +515 -0
  25. data/lib/ruote-kit/public/_ruote/stylesheets/SimplyButtons.css +226 -0
  26. data/lib/ruote-kit/public/_ruote/stylesheets/base.css +336 -0
  27. data/lib/ruote-kit/public/_ruote/stylesheets/rk.css +30 -0
  28. data/lib/ruote-kit/public/_ruote/stylesheets/style.css +393 -0
  29. data/lib/ruote-kit/resources/expressions.rb +55 -0
  30. data/lib/ruote-kit/resources/processes.rb +52 -0
  31. data/lib/ruote-kit/resources/workitems.rb +64 -0
  32. data/lib/ruote-kit/spec/ruote_helpers.rb +47 -0
  33. data/lib/ruote-kit/vendor/sinatra-respond_to/LICENSE +21 -0
  34. data/lib/ruote-kit/vendor/sinatra-respond_to/README.markdown +102 -0
  35. data/lib/ruote-kit/vendor/sinatra-respond_to/Rakefile +30 -0
  36. data/lib/ruote-kit/vendor/sinatra-respond_to/VERSION.yml +4 -0
  37. data/lib/ruote-kit/vendor/sinatra-respond_to/lib/sinatra/respond_to.rb +206 -0
  38. data/lib/ruote-kit/vendor/sinatra-respond_to/sinatra-respond_to.gemspec +56 -0
  39. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/public/static folder/.keep +0 -0
  40. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/public/static.txt +1 -0
  41. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/test_app.rb +53 -0
  42. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/unreachable_static.txt +1 -0
  43. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/views/layout.html.haml +2 -0
  44. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/views/resource.html.haml +1 -0
  45. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/views/resource.js.erb +3 -0
  46. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/views/resource.xml.builder +3 -0
  47. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/extension_spec.rb +403 -0
  48. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/spec_helper.rb +18 -0
  49. data/lib/ruote-kit/views/expression.html.haml +38 -0
  50. data/lib/ruote-kit/views/expressions.html.haml +30 -0
  51. data/lib/ruote-kit/views/index.html.haml +1 -0
  52. data/lib/ruote-kit/views/launch_process.html.haml +19 -0
  53. data/lib/ruote-kit/views/layout.html.haml +46 -0
  54. data/lib/ruote-kit/views/process.html.haml +55 -0
  55. data/lib/ruote-kit/views/processes.html.haml +27 -0
  56. data/lib/ruote-kit/views/resource_not_found.html.haml +7 -0
  57. data/lib/ruote-kit/views/workitem.html.haml +39 -0
  58. data/lib/ruote-kit/views/workitems.html.haml +23 -0
  59. data/lib/ruote-kit.rb +105 -0
  60. data/ruote-kit.gemspec +136 -0
  61. data/spec/helpers/render_helpers_spec.rb +211 -0
  62. data/spec/resources/expressions_spec.rb +179 -0
  63. data/spec/resources/index_spec.rb +46 -0
  64. data/spec/resources/processes_spec.rb +259 -0
  65. data/spec/resources/workitems_spec.rb +308 -0
  66. data/spec/ruote-kit_spec.rb +4 -0
  67. data/spec/spec.opts +2 -0
  68. data/spec/spec_helper.rb +152 -0
  69. data/spec/views/launch_process.html.haml_spec.rb +21 -0
  70. data/spec/views/process.html.haml_spec.rb +16 -0
  71. data/spec/views/processes.html.haml_spec.rb +30 -0
  72. data/spec/views/workitems.html.haml_spec.rb +68 -0
  73. metadata +185 -0
@@ -0,0 +1,149 @@
1
+
2
+ /*
3
+ * OpenWFEru - open source ruby workflow and bpm engine
4
+ * (c) 2008 John Mettraux
5
+ *
6
+ * OpenWFEru is freely distributable under the terms
7
+ * of a BSD-style license.
8
+ * For details, see the OpenWFEru web site: http://openwferu.rubyforge.org
9
+ *
10
+ * Made in Japan
11
+ */
12
+
13
+ //
14
+ // example usage :
15
+ //
16
+ // var d = FluoDial.newDialog
17
+ // ("upload new version of expression (as YAML file)", 500, 105);
18
+ //
19
+ // var f = new Element
20
+ // ("form", { "method": "POST", "enctype": "multipart/form-data" });
21
+ // var fi = new Element
22
+ // ("input", { "type": "file", "name": "expression", "size": "50" });
23
+ // var si = new Element
24
+ // ("input", { "type": "submit", "value": "upload" });
25
+ // f.appendChild(fi);
26
+ // f.appendChild(si);
27
+ // d.body.appendChild(f);
28
+ //
29
+
30
+ var FluoDial = function() {
31
+
32
+ //
33
+ // private methods
34
+
35
+ function resizeItem (id, width, height) {
36
+ var item = $(id);
37
+ item.setStyle({ "width": ""+width+"px" });
38
+ item.setStyle({ "height": ""+height+"px" });
39
+ }
40
+
41
+ function centerItem (id) {
42
+
43
+ var item = $(id);
44
+
45
+ var w = item.getDimensions()["width"];
46
+ var h = item.getDimensions()["height"];
47
+
48
+ if (centerItem.arguments.length > 1) {
49
+ w = centerItem.arguments[1];
50
+ h = centerItem.arguments[2];
51
+ }
52
+
53
+ var l = (window.innerWidth - w) / 2;
54
+ var t = (window.innerHeight - h) / 2;
55
+
56
+ item.setStyle({ "left": ""+l+"px" });
57
+ item.setStyle({ "top": ""+t+"px" });
58
+ }
59
+
60
+ function resizeAndCenterItem (id, width, height) {
61
+
62
+ resizeItem(id, width, height);
63
+ centerItem(id, width, height);
64
+ }
65
+
66
+ function newRectangle (id, cclass, width, height) {
67
+
68
+ var r = $(id);
69
+
70
+ if (r) {
71
+ r.childElements().each(function (elt) {
72
+ elt.remove();
73
+ });
74
+ r.show();
75
+ }
76
+ else {
77
+ r = new Element("div", { "id": id, "class": cclass });
78
+ }
79
+
80
+ resizeAndCenterItem(r, width, height);
81
+
82
+ return r;
83
+ }
84
+
85
+ function newDialog (title, width, height) {
86
+
87
+ var sheet = newRectangle
88
+ ("dial_sheet", "dial_sheet", width, height);
89
+ var dialog = newRectangle
90
+ ("dial_dialog", "dial_dialog", width-20, height-20);
91
+
92
+ document.body.appendChild(sheet);
93
+ document.body.appendChild(dialog);
94
+
95
+ var header = new Element
96
+ ("div", { "class": "dial_header" });
97
+ var body = new Element
98
+ ("div", { "id": dialog.id+"_body", "class": "dial_body" });
99
+
100
+ dialog.appendChild(header);
101
+ dialog.appendChild(body);
102
+
103
+ dialog.header = header;
104
+ dialog.body = body;
105
+
106
+ dialog.close = function () {
107
+ sheet.hide();
108
+ dialog.hide();
109
+ };
110
+ dialog.show = function () {
111
+ sheet.show();
112
+ dialog.show();
113
+ };
114
+ dialog.resize = function (w, h) {
115
+ resizeAndCenterItem(sheet, w, h);
116
+ resizeAndCenterItem(dialog, w-20, h-20);
117
+ };
118
+ dialog.stealElement = function (el) {
119
+ if ( ! (el instanceof HTMLElement)) el = document.getElementById(el);
120
+ this.body.appendChild(el);
121
+ //el.parentNode = dialog.body;
122
+ }
123
+
124
+ var htitle = new Element("div", { "class": "dial_title" });
125
+ htitle.appendChild(document.createTextNode(title));
126
+ header.appendChild(htitle);
127
+
128
+ var hmenu = new Element("div", { "class": "dial_menu" });
129
+ var hclose = new Element
130
+ ("a",
131
+ { "href": "#",
132
+ "title": "close this dialog",
133
+ "onclick": "$('dial_dialog').close(); return false;" });
134
+ hclose.innerHTML = "close";
135
+ hmenu.appendChild(hclose);
136
+ header.appendChild(hmenu);
137
+
138
+ return dialog;
139
+ }
140
+
141
+ return {
142
+
143
+ //
144
+ // public methods
145
+
146
+ newDialog: newDialog
147
+ };
148
+ }();
149
+
@@ -0,0 +1,183 @@
1
+ // Copyright (C) 2008 Google Inc.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ /**
16
+ * @param {string} json per RFC 4627
17
+ * @return {Object|Array}
18
+ * @author Mike Samuel <mikesamuel@gmail.com>
19
+ */
20
+ //var jsonParse = (function () {
21
+ var fluoFromJson = (function () {
22
+ var number
23
+ = '(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)';
24
+ var oneChar = '(?:[^\\0-\\x08\\x0a-\\x1f\"\\\\]'
25
+ + '|\\\\(?:[\"/\\\\bfnrt]|u[0-9A-Fa-f]{4}))';
26
+ var string = '(?:\"' + oneChar + '*\")';
27
+
28
+ // Will match a value in a well-formed JSON file.
29
+ // If the input is not well-formed, may match strangely, but not in an unsafe
30
+ // way.
31
+ // Since this only matches value tokens, it does not match whitespace, colons,
32
+ // or commas.
33
+ var jsonToken = new RegExp(
34
+ '(?:false|true|null|[\\{\\}\\[\\]]'
35
+ + '|' + number
36
+ + '|' + string
37
+ + ')', 'g');
38
+
39
+ // Matches escape sequences in a string literal
40
+ var escapeSequence = new RegExp('\\\\(?:([^u])|u(.{4}))', 'g');
41
+
42
+ // Decodes escape sequences in object literals
43
+ var escapes = {
44
+ '"': '"',
45
+ '/': '/',
46
+ '\\': '\\',
47
+ 'b': '\b',
48
+ 'f': '\f',
49
+ 'n': '\n',
50
+ 'r': '\r',
51
+ 't': '\t'
52
+ };
53
+ function unescapeOne(_, ch, hex) {
54
+ return ch ? escapes[ch] : String.fromCharCode(parseInt(hex, 16));
55
+ }
56
+
57
+ // A non-falsy value that coerces to the empty string when used as a key.
58
+ var EMPTY_STRING = new String('');
59
+ var SLASH = '\\';
60
+
61
+ // Constructor to use based on an open token.
62
+ var firstTokenCtors = { '{': Object, '[': Array };
63
+
64
+ return function (json) {
65
+ // Split into tokens
66
+ var toks = json.match(jsonToken);
67
+ // Construct the object to return
68
+ var result;
69
+ var tok = toks[0];
70
+ if ('{' === tok) {
71
+ result = {};
72
+ } else if ('[' === tok) {
73
+ result = [];
74
+ } else {
75
+ throw new Error(tok);
76
+ }
77
+
78
+ // If undefined, the key in an object key/value record to use for the next
79
+ // value parsed.
80
+ var key;
81
+ // Loop over remaining tokens maintaining a stack of uncompleted objects and
82
+ // arrays.
83
+ var stack = [result];
84
+ for (var i = 1, n = toks.length; i < n; ++i) {
85
+ tok = toks[i];
86
+
87
+ var cont;
88
+ switch (tok.charCodeAt(0)) {
89
+ default: // sign or digit
90
+ cont = stack[0];
91
+ cont[key || cont.length] = +(tok);
92
+ key = void 0;
93
+ break;
94
+ case 0x22: // '"'
95
+ tok = tok.substring(1, tok.length - 1);
96
+ if (tok.indexOf(SLASH) !== -1) {
97
+ tok = tok.replace(escapeSequence, unescapeOne);
98
+ }
99
+ cont = stack[0];
100
+ if (!key) {
101
+ if (cont instanceof Array) {
102
+ key = cont.length;
103
+ } else {
104
+ key = tok || EMPTY_STRING; // Use as key for next value seen.
105
+ break;
106
+ }
107
+ }
108
+ cont[key] = tok;
109
+ key = void 0;
110
+ break;
111
+ case 0x5b: // '['
112
+ cont = stack[0];
113
+ stack.unshift(cont[key || cont.length] = []);
114
+ key = void 0;
115
+ break;
116
+ case 0x5d: // ']'
117
+ stack.shift();
118
+ break;
119
+ case 0x66: // 'f'
120
+ cont = stack[0];
121
+ cont[key || cont.length] = false;
122
+ key = void 0;
123
+ break;
124
+ case 0x6e: // 'n'
125
+ cont = stack[0];
126
+ cont[key || cont.length] = null;
127
+ key = void 0;
128
+ break;
129
+ case 0x74: // 't'
130
+ cont = stack[0];
131
+ cont[key || cont.length] = true;
132
+ key = void 0;
133
+ break;
134
+ case 0x7b: // '{'
135
+ cont = stack[0];
136
+ stack.unshift(cont[key || cont.length] = {});
137
+ key = void 0;
138
+ break;
139
+ case 0x7d: // '}'
140
+ stack.shift();
141
+ break;
142
+ }
143
+ }
144
+ // Fail if we've got an uncompleted object.
145
+ if (stack.length) { throw new Error(); }
146
+ return result;
147
+ };
148
+ })();
149
+
150
+
151
+ //
152
+ // the following code is ruote-fluo code, under the BSD license.
153
+ //
154
+ function fluoToJson (o, quotes) {
155
+ if (quotes != false) quotes = true;
156
+ if (o == null) return 'null';
157
+ var t = (typeof o);
158
+ if (t == 'undefined') return 'null' // really ?
159
+ if (t == 'number') return o;
160
+ if (t == 'string') {
161
+ //return quotes ? '"' + o + '"' : o;
162
+ if ( ! quotes) return o;
163
+ return '"' +
164
+ o
165
+ .replace(/"/g, '\\"')
166
+ .replace(/\r/g, '')
167
+ .replace(/\n/g, '\\n') +
168
+ '"';
169
+ // this global replace works with safari (webkit) and ffox
170
+ }
171
+ if (o.constructor.toString().indexOf(' Array()') == 8) {
172
+ var a = [];
173
+ for (var i = 0; i < o.length; i++) a.push(fluoToJson(o[i]));
174
+ return '[' + a.join(', ') + ']';
175
+ }
176
+ if (t == 'object') {
177
+ var a = [];
178
+ for (var key in o) a.push(fluoToJson(key) + ': ' + fluoToJson(o[key]));
179
+ return '{' + a.join(', ') + '}';
180
+ }
181
+ return o.toString();
182
+ }
183
+