spiderfw 0.6.26 → 0.6.27

Sign up to get free protection for your applications and to get access to all the features.
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