spiderfw 0.6.26 → 0.6.27

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 (44) hide show
  1. data/CHANGELOG +4 -0
  2. data/VERSION +1 -1
  3. data/apps/core/forms/_init.rb +1 -0
  4. data/apps/core/forms/public/date_time.js +0 -1
  5. data/apps/core/forms/public/html_area.js +1 -1
  6. data/apps/core/forms/public/text_area.js +2 -2
  7. data/apps/core/forms/widgets/form/form.rb +40 -38
  8. data/apps/core/forms/widgets/inputs/checkbox_list/checkbox_list.rb +71 -0
  9. data/apps/core/forms/widgets/inputs/checkbox_list/checkbox_list.shtml +5 -0
  10. data/apps/core/forms/widgets/inputs/date_time/date_time.rb +1 -1
  11. data/apps/core/forms/widgets/inputs/search_select/search_select.shtml +2 -2
  12. data/apps/messenger/backends/sms/mobyt.rb +72 -0
  13. data/apps/messenger/config/options.rb +6 -1
  14. data/apps/messenger/controllers/mixins/messenger_helper.rb +6 -4
  15. data/apps/messenger/lib/backends/mobyt.rb +43 -4
  16. data/apps/messenger/test/features/mobyt.feature +29 -0
  17. data/apps/messenger/test/features/step_definitions/mobyt_steps.rb +59 -0
  18. data/lib/spiderfw/app.rb +0 -2
  19. data/lib/spiderfw/cmd/commands/model.rb +10 -6
  20. data/lib/spiderfw/config/configuration.rb +1 -4
  21. data/lib/spiderfw/config/options/spider.rb +4 -3
  22. data/lib/spiderfw/controller/http_controller.rb +5 -1
  23. data/lib/spiderfw/http/adapters/rack.rb +5 -1
  24. data/lib/spiderfw/model/base_model.rb +5 -5
  25. data/lib/spiderfw/model/identity_mapper.rb +4 -2
  26. data/lib/spiderfw/model/mappers/db_mapper.rb +5 -2
  27. data/lib/spiderfw/model/mappers/mapper.rb +15 -8
  28. data/lib/spiderfw/model/storage/db/adapters/mysql.rb +48 -44
  29. data/lib/spiderfw/model/storage/db/connectors/mysql.rb +16 -0
  30. data/lib/spiderfw/model/storage/db/connectors/mysql2.rb +9 -0
  31. data/lib/spiderfw/setup/app_manager.rb +0 -5
  32. data/lib/spiderfw/spider.rb +34 -5
  33. data/lib/spiderfw/templates/layout.rb +6 -6
  34. data/lib/spiderfw/templates/resources/sass.rb +1 -2
  35. data/lib/spiderfw/templates/template.rb +5 -1
  36. metadata +161 -248
  37. data/apps/core/components/public/js/jquery/plugins/jquery.ui.nestedSortable.js +0 -356
  38. data/apps/messenger/test/features/sms_mobyt.feature +0 -24
  39. data/apps/messenger/test/features/step_definitions/sms_mobyt.rb +0 -21
  40. data/blueprints/.DS_Store +0 -0
  41. data/blueprints/home/.DS_Store +0 -0
  42. data/blueprints/install/.DS_Store +0 -0
  43. data/data/keys/spider.rsa +0 -27
  44. data/data/keys/spider.rsa.pub +0 -1
@@ -1,356 +0,0 @@
1
- /*
2
- * jQuery UI Nested Sortable
3
- * v 1.3.4 / 28 apr 2011
4
- * http://mjsarfatti.com/sandbox/nestedSortable
5
- *
6
- * Depends:
7
- * jquery.ui.sortable.js 1.8+
8
- *
9
- * License CC BY-SA 3.0
10
- * Copyright 2010-2011, Manuele J Sarfatti
11
- */
12
-
13
- (function($) {
14
-
15
- $.widget("ui.nestedSortable", $.extend({}, $.ui.sortable.prototype, {
16
-
17
- options: {
18
- tabSize: 20,
19
- disableNesting: 'ui-nestedSortable-no-nesting',
20
- errorClass: 'ui-nestedSortable-error',
21
- listType: 'ol',
22
- maxLevels: 0,
23
- noJumpFix: 0
24
- },
25
-
26
- _create: function(){
27
- if (this.noJumpFix == false)
28
- this.element.height(this.element.height());
29
- this.element.data('sortable', this.element.data('nestedSortable'));
30
- return $.ui.sortable.prototype._create.apply(this, arguments);
31
- },
32
-
33
-
34
-
35
- _mouseDrag: function(event) {
36
-
37
- //Compute the helpers position
38
- this.position = this._generatePosition(event);
39
- this.positionAbs = this._convertPositionTo("absolute");
40
-
41
- if (!this.lastPositionAbs) {
42
- this.lastPositionAbs = this.positionAbs;
43
- }
44
-
45
- //Do scrolling
46
- if(this.options.scroll) {
47
- var o = this.options, scrolled = false;
48
- if(this.scrollParent[0] != document && this.scrollParent[0].tagName != 'HTML') {
49
-
50
- if((this.overflowOffset.top + this.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
51
- this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop + o.scrollSpeed;
52
- else if(event.pageY - this.overflowOffset.top < o.scrollSensitivity)
53
- this.scrollParent[0].scrollTop = scrolled = this.scrollParent[0].scrollTop - o.scrollSpeed;
54
-
55
- if((this.overflowOffset.left + this.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
56
- this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft + o.scrollSpeed;
57
- else if(event.pageX - this.overflowOffset.left < o.scrollSensitivity)
58
- this.scrollParent[0].scrollLeft = scrolled = this.scrollParent[0].scrollLeft - o.scrollSpeed;
59
-
60
- } else {
61
-
62
- if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
63
- scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
64
- else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
65
- scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);
66
-
67
- if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
68
- scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
69
- else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
70
- scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);
71
-
72
- }
73
-
74
- if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
75
- $.ui.ddmanager.prepareOffsets(this, event);
76
- }
77
-
78
- //Regenerate the absolute position used for position checks
79
- this.positionAbs = this._convertPositionTo("absolute");
80
-
81
- //Set the helper position
82
- if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
83
- if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
84
-
85
- //Rearrange
86
- for (var i = this.items.length - 1; i >= 0; i--) {
87
-
88
- //Cache variables and intersection, continue if no intersection
89
- var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
90
- if (!intersection) continue;
91
-
92
- if(itemElement != this.currentItem[0] //cannot intersect with itself
93
- && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
94
- && !$.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
95
- && (this.options.type == 'semi-dynamic' ? !$.contains(this.element[0], itemElement) : true)
96
- //&& itemElement.parentNode == this.placeholder[0].parentNode // only rearrange items within the same container
97
- ) {
98
-
99
- this.direction = intersection == 1 ? "down" : "up";
100
-
101
- if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
102
- this._rearrange(event, item);
103
- } else {
104
- break;
105
- }
106
-
107
- // Clear emtpy ul's/ol's
108
- this._clearEmpty(itemElement);
109
-
110
- this._trigger("change", event, this._uiHash());
111
- break;
112
- }
113
- }
114
-
115
- var parentItem = (this.placeholder[0].parentNode.parentNode && $(this.placeholder[0].parentNode.parentNode).closest('.ui-sortable').length) ? $(this.placeholder[0].parentNode.parentNode) : null;
116
- var level = this._getLevel(this.placeholder);
117
- var childLevels = this._getChildLevels(this.helper);
118
- var previousItem = this.placeholder[0].previousSibling ? $(this.placeholder[0].previousSibling) : null;
119
- if (previousItem != null) {
120
- while (previousItem[0].nodeName.toLowerCase() != 'li' || previousItem[0] == this.currentItem[0]) {
121
- if (previousItem[0].previousSibling) {
122
- previousItem = $(previousItem[0].previousSibling);
123
- } else {
124
- previousItem = null;
125
- break;
126
- }
127
- }
128
- }
129
-
130
- newList = document.createElement(o.listType);
131
-
132
- this.beyondMaxLevels = 0;
133
-
134
- // If the item is moved to the left, send it to its parent level
135
- if (parentItem != null && this.positionAbs.left < parentItem.offset().left) {
136
- parentItem.after(this.placeholder[0]);
137
- this._clearEmpty(parentItem[0]);
138
- this._trigger("change", event, this._uiHash());
139
- }
140
- // If the item is below another one and is moved to the right, make it a children of it
141
- else if (previousItem != null && this.positionAbs.left > previousItem.offset().left + o.tabSize) {
142
- this._isAllowed(previousItem, level+childLevels+1);
143
- if (!previousItem.children(o.listType).length) {
144
- previousItem[0].appendChild(newList);
145
- }
146
- previousItem.children(o.listType)[0].appendChild(this.placeholder[0]);
147
- this._trigger("change", event, this._uiHash());
148
- }
149
- else {
150
- this._isAllowed(parentItem, level+childLevels);
151
- }
152
-
153
- //Post events to containers
154
- this._contactContainers(event);
155
-
156
- //Interconnect with droppables
157
- if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);
158
-
159
- //Call callbacks
160
- this._trigger('sort', event, this._uiHash());
161
-
162
- this.lastPositionAbs = this.positionAbs;
163
- return false;
164
-
165
- },
166
-
167
- _mouseStop: function(event, noPropagation) {
168
-
169
- // If the item is in a position not allowed, send it back
170
- if (this.beyondMaxLevels) {
171
- var parent = this.placeholder.parent().closest(this.options.items);
172
-
173
- for (var i = this.beyondMaxLevels - 1; i > 0; i--) {
174
- parent = parent.parent().closest(this.options.items);
175
- }
176
-
177
- this.placeholder.removeClass(this.options.errorClass);
178
- parent.after(this.placeholder);
179
- this._trigger("change", event, this._uiHash());
180
- }
181
-
182
- $.ui.sortable.prototype._mouseStop.apply(this, arguments);
183
-
184
- },
185
-
186
- serialize: function(o) {
187
-
188
- var items = this._getItemsAsjQuery(o && o.connected);
189
- var str = []; o = o || {};
190
-
191
- $(items).each(function() {
192
- var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
193
- var pid = ($(o.item || this).parent(o.listType).parent('li').attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
194
- if(res) str.push((o.key || res[1]+'['+(o.key && o.expression ? res[1] : res[2])+']')+'='+(pid ? (o.key && o.expression ? pid[1] : pid[2]) : 'root'));
195
- });
196
-
197
- if(!str.length && o.key) {
198
- str.push(o.key + '=');
199
- }
200
-
201
- return str.join('&');
202
-
203
- },
204
-
205
- toHierarchy: function(o) {
206
-
207
- o = o || {};
208
- var sDepth = o.startDepthCount || 0;
209
- var ret = [];
210
-
211
- $(this.element).children('li').each(function() {
212
- var level = _recursiveItems($(this));
213
- ret.push(level);
214
- });
215
-
216
- return ret;
217
-
218
- function _recursiveItems(li) {
219
- var id = ($(li).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
220
- if (id != null) {
221
- var item = {"id" : id[2]};
222
- if ($(li).children(o.listType).children('li').length > 0) {
223
- item.children = [];
224
- $(li).children(o.listType).children('li').each(function () {
225
- var level = _recursiveItems($(this));
226
- item.children.push(level);
227
- });
228
- }
229
- return item;
230
- }
231
- }
232
- },
233
-
234
- toArray: function(o) {
235
-
236
- o = o || {};
237
- var sDepth = o.startDepthCount || 0;
238
- var ret = [];
239
- var left = 2;
240
-
241
- ret.push({"item_id": 'root', "parent_id": 'none', "depth": sDepth, "left": '1', "right": ($('li', this.element).length + 1) * 2});
242
-
243
- $(this.element).children('li').each(function () {
244
- left = _recursiveArray(this, sDepth + 1, left);
245
- });
246
-
247
- function _sortByLeft(a,b) {
248
- return a['left'] - b['left'];
249
- }
250
- ret = ret.sort(_sortByLeft);
251
-
252
- return ret;
253
-
254
- function _recursiveArray(item, depth, left) {
255
-
256
- right = left + 1;
257
-
258
- if ($(item).children(o.listType).children('li').length > 0) {
259
- depth ++;
260
- $(item).children(o.listType).children('li').each(function () {
261
- right = _recursiveArray($(this), depth, right);
262
- });
263
- depth --;
264
- }
265
-
266
- id = ($(item).attr(o.attribute || 'id')).match(o.expression || (/(.+)[-=_](.+)/));
267
-
268
- if (depth === sDepth + 1) pid = 'root';
269
- else {
270
- parentItem = ($(item).parent(o.listType).parent('li').attr('id')).match(o.expression || (/(.+)[-=_](.+)/));
271
- pid = parentItem[2];
272
- }
273
-
274
- if (id != null) {
275
- ret.push({"item_id": id[2], "parent_id": pid, "depth": depth, "left": left, "right": right});
276
- }
277
-
278
- return left = right + 1;
279
- }
280
-
281
- },
282
-
283
- _clear: function(event, noPropagation) {
284
-
285
- $.ui.sortable.prototype._clear.apply(this, arguments);
286
-
287
- // Clean last empty ul/ol
288
- for (var i = this.items.length - 1; i >= 0; i--) {
289
- var item = this.items[i].item[0];
290
- this._clearEmpty(item);
291
- }
292
- return true;
293
-
294
- },
295
-
296
- _clearEmpty: function(item) {
297
-
298
- if (item.children[1] && item.children[1].children.length == 0) {
299
- item.removeChild(item.children[1]);
300
- }
301
-
302
- },
303
-
304
- _getLevel: function(item) {
305
-
306
- var level = 1;
307
-
308
- if (this.options.listType) {
309
- var list = item.closest(this.options.listType);
310
- while (!list.is('.ui-sortable')/* && level < this.options.maxLevels*/) {
311
- level++;
312
- list = list.parent().closest(this.options.listType);
313
- }
314
- }
315
-
316
- return level;
317
- },
318
-
319
- _getChildLevels: function(parent, depth) {
320
- var self = this,
321
- o = this.options,
322
- result = 0;
323
- depth = depth || 0;
324
-
325
- $(parent).children(o.listType).children(o.items).each(function (index, child) {
326
- result = Math.max(self._getChildLevels(child, depth + 1), result);
327
- });
328
-
329
- return depth ? result + 1 : result;
330
- },
331
-
332
- _isAllowed: function(parentItem, levels) {
333
- var o = this.options
334
- // Are we trying to nest under a no-nest or are we nesting too deep?
335
- if (parentItem == null || !(parentItem.hasClass(o.disableNesting))) {
336
- if (o.maxLevels < levels && o.maxLevels != 0) {
337
- this.placeholder.addClass(o.errorClass);
338
- this.beyondMaxLevels = levels - o.maxLevels;
339
- } else {
340
- this.placeholder.removeClass(o.errorClass);
341
- this.beyondMaxLevels = 0;
342
- }
343
- } else {
344
- this.placeholder.addClass(o.errorClass);
345
- if (o.maxLevels < levels && o.maxLevels != 0) {
346
- this.beyondMaxLevels = levels - o.maxLevels;
347
- } else {
348
- this.beyondMaxLevels = 1;
349
- }
350
- }
351
- }
352
-
353
- }));
354
-
355
- $.ui.nestedSortable.prototype.options = $.extend({}, $.ui.sortable.prototype.options, $.ui.nestedSortable.prototype.options);
356
- })(jQuery);
@@ -1,24 +0,0 @@
1
- # language: it
2
-
3
- Funzionalità: invio SMS con Mobyt
4
-
5
-
6
- Scenario: invio SMS semplice
7
- Dato che lo username per l'invio è "aaaa"
8
- E che la password per l'invio è "bbbb"
9
- Quando invio un SMS con i seguenti dati:
10
- | to | from | testo |
11
- | +39123456789 | mittente-prova | Ciao |
12
- Allora la libreria Mobyt deve ritornare i seguenti parametri:
13
- | operation | TEXT |
14
- | from | mittente-prova |
15
- | data | Ciao |
16
- | id | aaaa |
17
- | qty | a |
18
- | password | |
19
- | ticket | 3ad6bd5c1d3ea7b021b3f7ddad2398bd |
20
-
21
- Scenario: invio SMS multiplo
22
-
23
- Scenario: invio SMS UTF8
24
-
@@ -1,21 +0,0 @@
1
- Dato /^che lo username per l.invio è "([^\"]*)"$/ do |username|
2
- @username = username
3
- end
4
-
5
-
6
- Dato /^che la password per l.invio è "([^\"]*)"$/ do |password|
7
- @password = password
8
- end
9
-
10
- Quando /^invio un SMS con i seguenti dati:$/ do |table|
11
- dati = table.hashes
12
- @risultato = Spider::Messenger::Mobyt.parametri(@username, @password, dati['from'], dati['to'], dati['testo'])
13
- end
14
-
15
-
16
- Allora /^la libreria Mobyt deve ritornare i seguenti parametri:$/ do |table|
17
- dati = table.rows_hash
18
- dati.each do |key, value|
19
- @risultato[key].should eq value
20
- end
21
- end
data/blueprints/.DS_Store DELETED
Binary file
Binary file
Binary file
data/data/keys/spider.rsa DELETED
@@ -1,27 +0,0 @@
1
- -----BEGIN RSA PRIVATE KEY-----
2
- MIIEpQIBAAKCAQEAxq4+mlIi6yi7tPZhrs0X2mYzltmKZuPB06RXsOvTsycb6q6a
3
- k4svlkbw+yHBkmegkBTUaTTR9VZ+YWNRjpts4TXcgmTQRdi9R2LFEP8OXd7QrEt4
4
- oJ8ah4LXbkVZMxcf83spIzSfk/1vqWOVEFs8cCTTATNLzwGbSMl7p+aIJ+px2VDU
5
- f2E/1apICmQyF20h1sobZMjUysDC1fLpRNKBVDtLMCorEttnXEJOEF55aefJDCSN
6
- bkPLszF+vMFCD0bbIAjoVp7ts8EQsl9951tUpr0zw0vFf1p9qi8ikF4yJIgI1u2M
7
- ECUHu32lZ4XLLaKmI9Lz5L++CG28YFQI20GpkwIDAQABAoIBAQCAXoTEYN1+40qk
8
- maxzrMAEtJQQm235HJ9Xh4/BGB4oWtSGxVnKitusVRnOqPjRB3OOpGa5sw8VXVU6
9
- x1kisvmeaZaYCVsoRenF/eMmICXAMP7S09CUtzgE5l0bOmNvxzk1sBXcUVvp2o4S
10
- ++yMLObX7nMHC4WnsnoKhWQID8NZRdRoqsAA/kzzhfdPPMug/abLWVkKHNTS0p8M
11
- d1MoADuM4BB+fBv4P2Yug+BEXeQ7pptgAfQQWfXinq6+nzAUNl7XCsdMIKkI2kku
12
- iROQIWCDSoa/zZOPHiXH+aMKk7KddzS8hd8cdbeuIfwLSSw9hX9Hkl5J90GnEcFj
13
- ZNi2bosBAoGBAPmoawc+K6kQgYvLjbKuTLJ2jo9MdT9RH/6Xk9kLUJ42dst7dJXZ
14
- 7HVaB+tBwVb/WTlfL1gQuQcVQp/UAFuZq4gNrFxapbSX0UQTsm14ivNMycGjhwX1
15
- PJZBjD7CCDr3gEiDTTEj+0gSCqoxD1EnNIgz73OFvGmbDHen6gVNUbtDAoGBAMu6
16
- T1TySWIKWldrdGUELfqRCGXp3CB6/E/IzdLBfc2QCLXiYxq74zOzt85GO8VBI3w9
17
- rzLWIT6dtkZIe1utbiHmPf1cOL6W6Skv2z2lxqeloACk2FDmDMC6O5xYIzLNyX3A
18
- uUo44+6NrVh6e11NwldRC6hwrm0OOVDH2nziY2txAoGAYjfe+3d7B8VFofDP60bl
19
- R6Say0eCLQnGc4vAj7gC3GuC6uTD5hxZCYYE7Ynt/ULyID8RSi0yDdZQYr6t8VuQ
20
- fzMZ5y+GV3kOzCCPpr+wsq04BqVF/pMPZfGdsib1w/URE/YMDVQhjKYEahZo9z1c
21
- TmVYQ/OOP2HPUtfNmo5jpC8CgYEArxA+M4SvwmubDhvsPRHGYNZYHRtEaTTFs9md
22
- 5EkYzZfDpGgROVvS9Q6uF7cKjYpX798hudF/Z8smYmbOeg0h4kdzZU/mAwCzAw14
23
- nBTkDBOq1mLQ71OACez+ZG7ocDOdvU3q6vjQBKICH1HAyICVS2r9VZTejh/26I+U
24
- FFSFkkECgYEAvG9CJuoPw7OT6bt97J9TUA/ncJ9mKCZc1C2n6k3dsWX0m/EPnLHJ
25
- GGOJq53dW3N+JpLPgWPxkkKgYw/rscfZXu3PzIm2D1MM5C7I3tk1Fk1CpM9XtlKu
26
- UtikH9spio1M8LB7bPZ4+chW2rBxqNZHLyAcPJ3j03KVj6SsFzCBVBE=
27
- -----END RSA PRIVATE KEY-----
@@ -1 +0,0 @@
1
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGrj6aUiLrKLu09mGuzRfaZjOW2Ypm48HTpFew69OzJxvqrpqTiy+WRvD7IcGSZ6CQFNRpNNH1Vn5hY1GOm2zhNdyCZNBF2L1HYsUQ/w5d3tCsS3ignxqHgtduRVkzFx/zeykjNJ+T/W+pY5UQWzxwJNMBM0vPAZtIyXun5ogn6nHZUNR/YT/VqkgKZDIXbSHWyhtkyNTKwMLV8ulE0oFUO0swKisS22dcQk4QXnlp58kMJI1uQ8uzMX68wUIPRtsgCOhWnu2zwRCyX33nW1SmvTPDS8V/Wn2qLyKQXjIkiAjW7YwQJQe7faVnhcstoqYj0vPkv74IbbxgVAjbQamT cerebus@Mac-mini-di-Ivan.local