isomorfeus-data 1.0.0.zeta25 → 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +47 -21
  3. data/README.md +38 -46
  4. data/lib/isomorfeus/data/attribute_support.rb +176 -176
  5. data/lib/isomorfeus/data/config.rb +79 -110
  6. data/lib/isomorfeus/data/element_validator.rb +147 -147
  7. data/lib/isomorfeus/data/ferret_accelerator.rb +66 -0
  8. data/lib/isomorfeus/data/field_support.rb +110 -0
  9. data/lib/isomorfeus/data/generic_class_api.rb +136 -116
  10. data/lib/isomorfeus/data/generic_instance_api.rb +150 -145
  11. data/lib/isomorfeus/data/hamster_accelerator.rb +87 -0
  12. data/lib/isomorfeus/data/hamster_storage_expander.rb +94 -0
  13. data/lib/isomorfeus/data/handler/generic.rb +134 -138
  14. data/lib/isomorfeus/data/reducer.rb +30 -30
  15. data/lib/isomorfeus/data/version.rb +4 -4
  16. data/lib/isomorfeus-data.rb +56 -64
  17. data/lib/isomorfeus_data/lucid_document/base.rb +10 -0
  18. data/lib/isomorfeus_data/lucid_document/mixin.rb +148 -0
  19. data/lib/isomorfeus_data/lucid_file/base.rb +10 -0
  20. data/lib/isomorfeus_data/lucid_file/mixin.rb +217 -0
  21. data/lib/isomorfeus_data/lucid_object/base.rb +10 -0
  22. data/lib/isomorfeus_data/lucid_object/mixin.rb +216 -0
  23. data/lib/isomorfeus_data/lucid_query/base.rb +10 -0
  24. data/lib/isomorfeus_data/lucid_query/mixin.rb +81 -0
  25. data/lib/isomorfeus_data/lucid_query_result.rb +97 -0
  26. data/opal/uri/common.rb +18 -0
  27. data/opal/uri/generic.rb +47 -0
  28. data/opal/uri.rb +29 -0
  29. metadata +85 -96
  30. data/lib/isomorfeus/data/handler/arango.rb +0 -56
  31. data/lib/isomorfeus/data/handler/object_call.rb +0 -40
  32. data/lib/isomorfeus/data/handler/object_store.rb +0 -40
  33. data/lib/isomorfeus_data/lucid_data/array/base.rb +0 -13
  34. data/lib/isomorfeus_data/lucid_data/array/mixin.rb +0 -580
  35. data/lib/isomorfeus_data/lucid_data/collection/base.rb +0 -13
  36. data/lib/isomorfeus_data/lucid_data/collection/finders.rb +0 -83
  37. data/lib/isomorfeus_data/lucid_data/collection/mixin.rb +0 -737
  38. data/lib/isomorfeus_data/lucid_data/composition/base.rb +0 -13
  39. data/lib/isomorfeus_data/lucid_data/composition/mixin.rb +0 -234
  40. data/lib/isomorfeus_data/lucid_data/document/base.rb +0 -13
  41. data/lib/isomorfeus_data/lucid_data/document/mixin.rb +0 -9
  42. data/lib/isomorfeus_data/lucid_data/edge/base.rb +0 -13
  43. data/lib/isomorfeus_data/lucid_data/edge/mixin.rb +0 -286
  44. data/lib/isomorfeus_data/lucid_data/edge_collection/base.rb +0 -13
  45. data/lib/isomorfeus_data/lucid_data/edge_collection/finders.rb +0 -134
  46. data/lib/isomorfeus_data/lucid_data/edge_collection/mixin.rb +0 -747
  47. data/lib/isomorfeus_data/lucid_data/generic_collection.rb +0 -4
  48. data/lib/isomorfeus_data/lucid_data/generic_edge.rb +0 -4
  49. data/lib/isomorfeus_data/lucid_data/generic_edge_collection.rb +0 -4
  50. data/lib/isomorfeus_data/lucid_data/generic_node.rb +0 -4
  51. data/lib/isomorfeus_data/lucid_data/graph/base.rb +0 -13
  52. data/lib/isomorfeus_data/lucid_data/graph/finders.rb +0 -141
  53. data/lib/isomorfeus_data/lucid_data/graph/mixin.rb +0 -489
  54. data/lib/isomorfeus_data/lucid_data/hash/base.rb +0 -13
  55. data/lib/isomorfeus_data/lucid_data/hash/mixin.rb +0 -427
  56. data/lib/isomorfeus_data/lucid_data/link/base.rb +0 -13
  57. data/lib/isomorfeus_data/lucid_data/link/mixin.rb +0 -9
  58. data/lib/isomorfeus_data/lucid_data/link_collection/base.rb +0 -13
  59. data/lib/isomorfeus_data/lucid_data/link_collection/mixin.rb +0 -9
  60. data/lib/isomorfeus_data/lucid_data/node/base.rb +0 -13
  61. data/lib/isomorfeus_data/lucid_data/node/mixin.rb +0 -232
  62. data/lib/isomorfeus_data/lucid_data/query/base.rb +0 -13
  63. data/lib/isomorfeus_data/lucid_data/query/mixin.rb +0 -83
  64. data/lib/isomorfeus_data/lucid_data/query_result.rb +0 -95
  65. data/lib/isomorfeus_data/lucid_data/vertex/base.rb +0 -13
  66. data/lib/isomorfeus_data/lucid_data/vertex/mixin.rb +0 -9
  67. data/lib/lucid_arango/collection/base.rb +0 -13
  68. data/lib/lucid_arango/collection/mixin.rb +0 -18
  69. data/lib/lucid_arango/document/base.rb +0 -13
  70. data/lib/lucid_arango/document/mixin.rb +0 -9
  71. data/lib/lucid_arango/edge/base.rb +0 -13
  72. data/lib/lucid_arango/edge/mixin.rb +0 -18
  73. data/lib/lucid_arango/edge_collection/base.rb +0 -13
  74. data/lib/lucid_arango/edge_collection/mixin.rb +0 -18
  75. data/lib/lucid_arango/graph/base.rb +0 -13
  76. data/lib/lucid_arango/graph/mixin.rb +0 -18
  77. data/lib/lucid_arango/node/base.rb +0 -13
  78. data/lib/lucid_arango/node/mixin.rb +0 -79
  79. data/lib/lucid_arango/object/base.rb +0 -11
  80. data/lib/lucid_arango/object/mixin.rb +0 -158
  81. data/lib/lucid_arango/remote_object/base.rb +0 -11
  82. data/lib/lucid_arango/remote_object/mixin.rb +0 -17
  83. data/lib/lucid_arango/vertex/base.rb +0 -13
  84. data/lib/lucid_arango/vertex/mixin.rb +0 -9
@@ -1,580 +0,0 @@
1
- module LucidData
2
- module Array
3
- module Mixin
4
- def self.included(base)
5
- base.include(Enumerable)
6
- base.extend(Isomorfeus::Data::GenericClassApi)
7
- base.include(Isomorfeus::Data::GenericInstanceApi)
8
-
9
- base.instance_exec do
10
- def elements(validate_hash = {})
11
- @element_conditions = validate_hash
12
- end
13
- alias element elements
14
-
15
- def element_conditions
16
- @element_conditions ||= {}
17
- end
18
-
19
- def valid_element?(element)
20
- return true unless element_conditions.any?
21
- _validate_element(element)
22
- rescue
23
- false
24
- end
25
-
26
- def _validate_element(element)
27
- Isomorfeus::Data::ElementValidator.new(self.to_s, element, element_conditions).validate!
28
- end
29
-
30
- def _validate_elements(many_els)
31
- many_els.each { |e| _validate_element(e) } if element_conditions.any?
32
- end
33
- end
34
-
35
- def composition
36
- @_composition
37
- end
38
-
39
- def composition=(c)
40
- @_composition = c
41
- end
42
-
43
- def changed!
44
- @_composition.changed! if @_composition
45
- @_changed = true
46
- end
47
-
48
- def _validate_element(element)
49
- self.class._validate_element(element)
50
- end
51
-
52
- def _validate_elements(many_elements)
53
- self.class._validate_elements(many_elements)
54
- end
55
-
56
- if RUBY_ENGINE == 'opal'
57
- def initialize(key:, revision: nil, elements: nil, composition: nil)
58
- @key = key.to_s
59
- @class_name = self.class.name
60
- @class_name = @class_name.split('>::').last if @class_name.start_with?('#<')
61
- _update_paths
62
- @_revision = revision ? revision : Redux.fetch_by_path(:data_state, @class_name, @key, :revision)
63
- @_changed_array = nil
64
- @_composition = composition
65
- @_changed = false
66
- @_validate_elements = self.class.element_conditions.any?
67
- _validate_elements(elements)
68
- raw_array = Redux.fetch_by_path(*@_store_path)
69
- if `raw_array === null`
70
- @_changed_array = elements ? elements : []
71
- elsif raw_array && !elements.nil?
72
- @_changed_array = elements
73
- end
74
- end
75
-
76
- def _load_from_store!
77
- @_changed = false
78
- @_changed_array = nil
79
- end
80
-
81
- def _get_array
82
- return @_changed_array if @_changed_array
83
- Redux.fetch_by_path(*@_store_path)
84
- end
85
-
86
- def _update_paths
87
- @_store_path = [:data_state, @class_name, @key, :elements]
88
- end
89
-
90
- def changed?
91
- @_changed || !!@_changed_array
92
- end
93
-
94
- def each(&block)
95
- _get_array.each(&block)
96
- end
97
-
98
- def to_transport
99
- hash = { 'elements' => _get_array }
100
- hash.merge!('revision' => revision) if revision
101
- { @class_name => { @key => hash }}
102
- end
103
-
104
- # Array methods
105
- def method_missing(method_name, *args, &block)
106
- raw_array = _get_array
107
- raw_array.send(method_name, *args, &block)
108
- end
109
-
110
- def <<(element)
111
- _validate_element(element) if @_validate_elements
112
- raw_array = _get_array
113
- result = raw_array << element
114
- @_changed_array = raw_array
115
- changed!
116
- result
117
- end
118
-
119
- def [](idx)
120
- _get_array[idx]
121
- end
122
-
123
- def []=(idx, element)
124
- _validate_element(element) if @_validate_elements
125
- raw_array = _get_array
126
- raw_array[idx] = element
127
- @_changed_array = raw_array
128
- changed!
129
- element
130
- end
131
-
132
- def clear
133
- @_changed_array = []
134
- changed!
135
- self
136
- end
137
-
138
- def collect!(&block)
139
- raw_array = _get_array
140
- raw_array.collect!(&block)
141
- @_changed_array = raw_array
142
- changed!
143
- self
144
- end
145
-
146
- def compact!
147
- raw_array = _get_array
148
- result = raw_array.compact!
149
- return nil if result.nil?
150
- @_changed_array = raw_array
151
- changed!
152
- self
153
- end
154
-
155
- def concat(*args)
156
- raw_array = _get_array
157
- raw_array.concat(*args)
158
- @_changed_array = raw_array
159
- changed!
160
- self
161
- end
162
-
163
- def delete(element, &block)
164
- raw_array = _get_array
165
- result = raw_array.delete(element, &block)
166
- return nil if result.nil?
167
- @_changed_array = raw_array
168
- changed!
169
- result
170
- end
171
-
172
- def delete_at(idx)
173
- raw_array = _get_array
174
- result = raw_array.delete_at(idx)
175
- return nil if result.nil?
176
- @_changed_array = raw_array
177
- changed!
178
- result
179
- end
180
-
181
- def delete_if(&block)
182
- raw_array = _get_array
183
- raw_array.delete_if(&block)
184
- @_changed_array = raw_array
185
- changed!
186
- self
187
- end
188
-
189
- def fill(*args, &block)
190
- raw_array = _get_array
191
- raw_array.fill(*args, &block)
192
- @_changed_array = raw_array
193
- changed!
194
- self
195
- end
196
-
197
- def filter!(&block)
198
- raw_array = _get_array
199
- result = raw_array.filter!(&block)
200
- return nil if result.nil?
201
- @_changed_array = raw_array
202
- changed!
203
- self
204
- end
205
-
206
- def flatten!(level = nil)
207
- raw_array = _get_array
208
- result = raw_array.flatten!(level)
209
- return nil if result.nil?
210
- @_changed_array = raw_array
211
- changed!
212
- self
213
- end
214
-
215
- def insert(*args)
216
- raw_array = _get_array
217
- raw_array.insert(*args)
218
- @_changed_array = raw_array
219
- changed!
220
- self
221
- end
222
-
223
- def keep_if(&block)
224
- raw_array = _get_array
225
- raw_array.keep_if(&block)
226
- @_changed_array = raw_array
227
- changed!
228
- self
229
- end
230
-
231
- def map!(&block)
232
- raw_array = _get_array
233
- raw_array.map!(&block)
234
- @_changed_array = raw_array
235
- changed!
236
- self
237
- end
238
-
239
- def pop(n = nil)
240
- raw_array = _get_array
241
- result = raw_array.pop(n)
242
- @_changed_array = raw_array
243
- changed!
244
- result
245
- end
246
-
247
- def push(*elements)
248
- if @_validate_elements
249
- elements.each { |element| _validate_element(element) }
250
- end
251
- raw_array = _get_array
252
- raw_array.push(*elements)
253
- @_changed_array = raw_array
254
- changed!
255
- self
256
- end
257
- alias append push
258
-
259
- def reject!(&block)
260
- raw_array = _get_array
261
- result = raw_array.reject!(&block)
262
- return nil if result.nil?
263
- @_changed_array = raw_array
264
- changed!
265
- self
266
- end
267
-
268
- def reverse!
269
- raw_array = _get_array
270
- raw_array.reverse!
271
- @_changed_array = raw_array
272
- changed!
273
- self
274
- end
275
-
276
- def rotate!(count = 1)
277
- raw_array = _get_array
278
- raw_array.rotate!(count)
279
- @_changed_array = raw_array
280
- changed!
281
- self
282
- end
283
-
284
- def select!(&block)
285
- raw_array = _get_array
286
- result = raw_array.select!(&block)
287
- return nil if result.nil?
288
- @_changed_array = raw_array
289
- changed!
290
- self
291
- end
292
-
293
- def shift(n = nil)
294
- raw_array = _get_array
295
- result = raw_array.shift(n)
296
- @_changed_array = raw_array
297
- changed!
298
- result
299
- end
300
-
301
- def shuffle!(*args)
302
- raw_array = _get_array
303
- raw_array.shuffle!(*args)
304
- @_changed_array = raw_array
305
- changed!
306
- self
307
- end
308
-
309
- def slice!(*args)
310
- raw_array = _get_array
311
- result = raw_array.slice!(*args)
312
- @_changed_array = raw_array
313
- changed!
314
- result
315
- end
316
-
317
- def sort!(&block)
318
- raw_array = _get_array
319
- raw_array.sort!(&block)
320
- @_changed_array = raw_array
321
- changed!
322
- self
323
- end
324
-
325
- def sort_by!(&block)
326
- raw_array = _get_array
327
- raw_array.sort_by!(&block)
328
- @_changed_array = raw_array
329
- changed!
330
- self
331
- end
332
-
333
- def uniq!(&block)
334
- raw_array = _get_array
335
- raw_array.uniq!(&block)
336
- @_changed_array = raw_array
337
- changed!
338
- self
339
- end
340
-
341
- def unshift(*args)
342
- raw_array = _get_array
343
- raw_array.unshift(*args)
344
- @_changed_array = raw_array
345
- changed!
346
- self
347
- end
348
- alias prepend unshift
349
- else # RUBY_ENGINE
350
- Isomorfeus.add_valid_data_class(base) unless base == LucidData::Array::Base
351
-
352
- base.instance_exec do
353
- def instance_from_transport(instance_data, _included_items_data)
354
- key = instance_data[self.name].keys.first
355
- revision = instance_data[self.name][key].key?('revision') ? instance_data[self.name][key]['revision'] : nil
356
- elements = instance_data[self.name][key].key?('elements') ? instance_data[self.name][key]['elements'] : nil
357
- new(key: key, revision: revision, elements: elements)
358
- end
359
- end
360
-
361
- def initialize(key:, revision: nil, elements: nil, composition: nil)
362
- @key = key.to_s
363
- @class_name = self.class.name
364
- @class_name = @class_name.split('>::').last if @class_name.start_with?('#<')
365
- @_revision = revision
366
- @_changed = false
367
- @_composition = composition
368
- elements = [] unless elements
369
- @_validate_elements = self.class.element_conditions.any?
370
- _validate_elements(elements)
371
- @_raw_array = elements
372
- end
373
-
374
- def _unchange!
375
- @_changed = false
376
- end
377
-
378
- def changed?
379
- @_changed
380
- end
381
-
382
- def each(&block)
383
- @_raw_array.each(&block)
384
- end
385
-
386
- def to_transport
387
- hash = { 'elements' => @_raw_array }
388
- hash.merge!('revision' => revision) if revision
389
- result = { @class_name => { @key => hash }}
390
- result.deep_merge!(@class_name => { @previous_key => { new_key: @key}}) if @previous_key
391
- result
392
- end
393
-
394
- # Array methods
395
- def method_missing(method_name, *args, &block)
396
- @_raw_array.send(method_name, *args, &block)
397
- end
398
-
399
- def <<(element)
400
- _validate_element(element) if @_validate_elements
401
- changed!
402
- @_raw_array << element
403
- end
404
-
405
- def []=(idx, element)
406
- _validate_element(element) if @_validate_elements
407
- changed!
408
- @_raw_array[idx] = element
409
- end
410
-
411
- def clear
412
- @_raw_array = []
413
- self
414
- end
415
-
416
- def collect!(&block)
417
- changed!
418
- @_raw_array.collect!(&block)
419
- self
420
- end
421
-
422
- def compact!
423
- result = @_raw_array.compact!
424
- return nil if result.nil?
425
- changed!
426
- self
427
- end
428
-
429
- def concat(*args)
430
- changed!
431
- @_raw_array.concat(*args)
432
- self
433
- end
434
-
435
- def delete(element, &block)
436
- result = @_raw_array.delete(element, &block)
437
- changed!
438
- result
439
- end
440
-
441
- def delete_at(idx)
442
- result = @_raw_array.delete_at(idx)
443
- return nil if result.nil?
444
- changed!
445
- result
446
- end
447
-
448
- def delete_if(&block)
449
- @_raw_array.delete_if(&block)
450
- changed!
451
- self
452
- end
453
-
454
- def fill(*args, &block)
455
- @_raw_array.fill(*args, &block)
456
- changed!
457
- self
458
- end
459
-
460
- def filter!(&block)
461
- result = @_raw_array.filter!(&block)
462
- return nil if result.nil?
463
- changed!
464
- self
465
- end
466
-
467
- def flatten!(level = nil)
468
- result = @_raw_array.flatten!(level)
469
- return nil if result.nil?
470
- changed!
471
- self
472
- end
473
-
474
- def insert(*args)
475
- @_raw_array.insert(*args)
476
- changed!
477
- self
478
- end
479
-
480
- def keep_if(&block)
481
- @_raw_array.keep_if(&block)
482
- changed!
483
- self
484
- end
485
-
486
- def map!(&block)
487
- @_raw_array.map!(&block)
488
- changed!
489
- self
490
- end
491
-
492
- def pop(n = nil)
493
- result = @_raw_array.pop(n)
494
- changed!
495
- result
496
- end
497
-
498
- def push(*elements)
499
- if @_validate_elements
500
- elements.each { |element| _validate_element(element) }
501
- end
502
- @_raw_array.push(*elements)
503
- changed!
504
- self
505
- end
506
- alias append push
507
-
508
- def reject!(&block)
509
- result = @_raw_array.reject!(&block)
510
- return nil if result.nil?
511
- changed!
512
- self
513
- end
514
-
515
- def reverse!
516
- @_raw_array.reverse!
517
- changed!
518
- self
519
- end
520
-
521
- def rotate!(count = 1)
522
- @_raw_array.rotate!(count)
523
- changed!
524
- self
525
- end
526
-
527
- def select!(&block)
528
- result = @_raw_array.select!(&block)
529
- return nil if result.nil?
530
- changed!
531
- self
532
- end
533
-
534
- def shift(n = nil)
535
- result = @_raw_array.shift(n)
536
- changed!
537
- result
538
- end
539
-
540
- def shuffle!(*args)
541
- @_raw_array.shuffle!(*args)
542
- changed!
543
- self
544
- end
545
-
546
- def slice!(*argsk)
547
- result = @_raw_array.slice!(*args)
548
- changed!
549
- result
550
- end
551
-
552
- def sort!(&block)
553
- @_raw_array.sort!(&block)
554
- changed!
555
- self
556
- end
557
-
558
- def sort_by!(&block)
559
- @_raw_array.sort_by!(&block)
560
- changed!
561
- self
562
- end
563
-
564
- def uniq!(&block)
565
- @_raw_array.uniq!(&block)
566
- changed!
567
- self
568
- end
569
-
570
- def unshift(*args)
571
- @_raw_array.unshift(*args)
572
- changed!
573
- self
574
- end
575
- alias prepend unshift
576
- end # RUBY_ENGINE
577
- end
578
- end
579
- end
580
- end
@@ -1,13 +0,0 @@
1
- module LucidData
2
- module Collection
3
- class Base
4
- include LucidData::Collection::Mixin
5
-
6
- if RUBY_ENGINE != 'opal'
7
- def self.inherited(base)
8
- Isomorfeus.add_valid_data_class(base)
9
- end
10
- end
11
- end
12
- end
13
- end
@@ -1,83 +0,0 @@
1
- module LucidData
2
- module Collection
3
- module Finders
4
- def find(attribute_hash = nil, &block)
5
- if block_given?
6
- nodes.each do |node|
7
- return node if block.call(node)
8
- end
9
- else
10
- node_class = attribute_hash.delete(:class)
11
- is_a_module = attribute_hash.delete(:is_a)
12
- nodes.each do |node|
13
- if node_class
14
- next unless node.class == node_class
15
- end
16
- if is_a_module
17
- next unless node.is_a?(is_a_module)
18
- end
19
- found = true
20
- attribute_hash.each do |k,v|
21
- found &&= (node[k] == v)
22
- break unless found
23
- end
24
- return node if found
25
- end
26
- end
27
- nil
28
- end
29
-
30
- def find_all(attribute_hash = nil, &block)
31
- found_nodes = []
32
- if block_given?
33
- nodes.each do |node|
34
- found_nodes << node if block.call(node)
35
- end
36
- else
37
- node_class = attribute_hash.delete(:class)
38
- is_a_module = attribute_hash.delete(:is_a)
39
- nodes.each do |node|
40
- if node_class
41
- next unless node.class == node_class
42
- end
43
- if is_a_module
44
- next unless node.is_a?(is_a_module)
45
- end
46
- found = true
47
- attribute_hash.each do |k,v|
48
- found &&= (node[k] == v)
49
- break unless found
50
- end
51
- found_nodes << node if found
52
- end
53
- end
54
- found_nodes
55
- end
56
-
57
- def find_by_key(node_key)
58
- nodes.each do |node|
59
- return node if node.key == node_key
60
- end
61
- nil
62
- end
63
-
64
- if RUBY_ENGINE == 'opal'
65
- def find_by_sid(node)
66
- node_sid = node.respond_to?(:to_sid) ? node.to_sid : node
67
- nodes_as_sids.each do |sid|
68
- return Isomorfeus.instance_from_sid(node_sid) if sid == node_sid
69
- end
70
- nil
71
- end
72
- else
73
- def find_by_sid(node)
74
- node_sid = node.respond_to?(:to_sid) ? node.to_sid : node
75
- nodes.each do |node|
76
- return node if node.to_sid == node_sid
77
- end
78
- nil
79
- end
80
- end
81
- end
82
- end
83
- end