origin 0.0.0.alpha → 1.0.0.alpha

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 (83) hide show
  1. data/Rakefile +3 -0
  2. data/lib/origin.rb +3 -4
  3. data/lib/origin/extensions.rb +25 -0
  4. data/lib/origin/extensions/array.rb +153 -0
  5. data/lib/origin/extensions/big_decimal.rb +33 -0
  6. data/lib/origin/extensions/boolean.rb +30 -0
  7. data/lib/origin/extensions/date.rb +59 -0
  8. data/lib/origin/extensions/date_time.rb +44 -0
  9. data/lib/origin/extensions/hash.rb +180 -0
  10. data/lib/origin/extensions/nil_class.rb +82 -0
  11. data/lib/origin/extensions/numeric.rb +86 -0
  12. data/lib/origin/extensions/object.rb +182 -0
  13. data/lib/origin/extensions/range.rb +66 -0
  14. data/lib/origin/extensions/regexp.rb +41 -0
  15. data/lib/origin/extensions/set.rb +28 -0
  16. data/lib/origin/extensions/string.rb +100 -0
  17. data/lib/origin/extensions/symbol.rb +74 -0
  18. data/lib/origin/extensions/time.rb +44 -0
  19. data/lib/origin/extensions/time_with_zone.rb +50 -0
  20. data/lib/origin/forwardable.rb +57 -0
  21. data/lib/origin/key.rb +74 -0
  22. data/lib/origin/macroable.rb +23 -0
  23. data/lib/origin/mergeable.rb +226 -0
  24. data/lib/origin/optional.rb +314 -29
  25. data/lib/origin/options.rb +64 -1
  26. data/lib/origin/queryable.rb +55 -12
  27. data/lib/origin/selectable.rb +613 -0
  28. data/lib/origin/selector.rb +140 -1
  29. data/lib/origin/smash.rb +85 -0
  30. data/lib/origin/version.rb +1 -1
  31. metadata +94 -62
  32. data/lib/origin/ext.rb +0 -5
  33. data/lib/origin/ext/array.rb +0 -21
  34. data/lib/origin/ext/hash.rb +0 -38
  35. data/lib/origin/ext/nil.rb +0 -9
  36. data/lib/origin/ext/object.rb +0 -25
  37. data/lib/origin/optional/batch_size.rb +0 -11
  38. data/lib/origin/optional/hint.rb +0 -15
  39. data/lib/origin/optional/limit.rb +0 -11
  40. data/lib/origin/optional/max_scan.rb +0 -11
  41. data/lib/origin/optional/no_timeout.rb +0 -11
  42. data/lib/origin/optional/only.rb +0 -15
  43. data/lib/origin/optional/read.rb +0 -11
  44. data/lib/origin/optional/return_key.rb +0 -11
  45. data/lib/origin/optional/show_disk_loc.rb +0 -11
  46. data/lib/origin/optional/skip.rb +0 -11
  47. data/lib/origin/optional/slice.rb +0 -17
  48. data/lib/origin/optional/snapshot.rb +0 -13
  49. data/lib/origin/optional/transformer.rb +0 -11
  50. data/lib/origin/optional/without.rb +0 -15
  51. data/lib/origin/selection.rb +0 -59
  52. data/lib/origin/selection/all.rb +0 -18
  53. data/lib/origin/selection/and.rb +0 -11
  54. data/lib/origin/selection/between.rb +0 -16
  55. data/lib/origin/selection/elem_match.rb +0 -18
  56. data/lib/origin/selection/exists.rb +0 -18
  57. data/lib/origin/selection/gt.rb +0 -18
  58. data/lib/origin/selection/gte.rb +0 -18
  59. data/lib/origin/selection/in.rb +0 -18
  60. data/lib/origin/selection/key.rb +0 -20
  61. data/lib/origin/selection/lt.rb +0 -18
  62. data/lib/origin/selection/lte.rb +0 -18
  63. data/lib/origin/selection/max_distance.rb +0 -11
  64. data/lib/origin/selection/mod.rb +0 -18
  65. data/lib/origin/selection/ne.rb +0 -18
  66. data/lib/origin/selection/near.rb +0 -18
  67. data/lib/origin/selection/near_sphere.rb +0 -18
  68. data/lib/origin/selection/nin.rb +0 -18
  69. data/lib/origin/selection/nor.rb +0 -11
  70. data/lib/origin/selection/or.rb +0 -11
  71. data/lib/origin/selection/size.rb +0 -18
  72. data/lib/origin/selection/strategies.rb +0 -40
  73. data/lib/origin/selection/strategies/add.rb +0 -18
  74. data/lib/origin/selection/strategies/expanded.rb +0 -15
  75. data/lib/origin/selection/strategies/intersect.rb +0 -22
  76. data/lib/origin/selection/strategies/multi.rb +0 -21
  77. data/lib/origin/selection/strategies/override.rb +0 -19
  78. data/lib/origin/selection/strategies/union.rb +0 -22
  79. data/lib/origin/selection/type.rb +0 -18
  80. data/lib/origin/selection/where.rb +0 -29
  81. data/lib/origin/selection/within_box.rb +0 -18
  82. data/lib/origin/selection/within_circle.rb +0 -18
  83. data/lib/origin/selection/within_spherical_circle.rb +0 -18
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Gt
5
-
6
- def gt(criterion = nil)
7
- _override(criterion, "$gt")
8
- end
9
-
10
- ::Symbol.class_eval do
11
-
12
- def gt
13
- Key.new(self, "$gt")
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Gte
5
-
6
- def gte(criterion = nil)
7
- _override(criterion, "$gte")
8
- end
9
-
10
- ::Symbol.class_eval do
11
-
12
- def gte
13
- Key.new(self, "$gte")
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module In
5
-
6
- def in(criterion = nil)
7
- send(strategy || :_intersect, criterion, "$in")
8
- end
9
-
10
- ::Symbol.class_eval do
11
-
12
- def in
13
- Key.new(self, "$in")
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,20 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- class Key
5
- attr_reader :name, :operator, :expanded
6
-
7
- def initialize(name, operator, expanded = nil)
8
- @name, @operator, @expanded = name, operator, expanded
9
- end
10
-
11
- def specify(value)
12
- if expanded
13
- { name => { operator => { expanded => value }}}
14
- else
15
- { name => { operator => value }}
16
- end
17
- end
18
- end
19
- end
20
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Lt
5
-
6
- def lt(criterion = nil)
7
- _override(criterion, "$lt")
8
- end
9
-
10
- ::Symbol.class_eval do
11
-
12
- def lt
13
- Key.new(self, "$lt")
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Lte
5
-
6
- def lte(criterion = nil)
7
- _override(criterion, "$lte")
8
- end
9
-
10
- ::Symbol.class_eval do
11
-
12
- def lte
13
- Key.new(self, "$lte")
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module MaxDistance
5
-
6
- def max_distance(criterion = nil)
7
- _add(criterion, "$maxDistance")
8
- end
9
- end
10
- end
11
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Mod
5
-
6
- def mod(criterion = nil)
7
- _override(criterion, "$mod")
8
- end
9
-
10
- ::Symbol.class_eval do
11
-
12
- def mod
13
- Key.new(self, "$mod")
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Ne
5
-
6
- def ne(criterion = nil)
7
- _override(criterion, "$ne")
8
- end
9
-
10
- ::Symbol.class_eval do
11
-
12
- def ne
13
- Key.new(self, "$ne")
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Near
5
-
6
- def near(criterion = nil)
7
- _override(criterion, "$near")
8
- end
9
-
10
- ::Symbol.class_eval do
11
-
12
- def near
13
- Key.new(self, "$near")
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module NearSphere
5
-
6
- def near_sphere(criterion = nil)
7
- _override(criterion, "$nearSphere")
8
- end
9
-
10
- ::Symbol.class_eval do
11
-
12
- def near_sphere
13
- Key.new(self, "$nearSphere")
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Nin
5
-
6
- def nin(criterion = nil)
7
- send(strategy || :_intersect, criterion, "$nin")
8
- end
9
-
10
- ::Symbol.class_eval do
11
-
12
- def nin
13
- Key.new(self, "$nin")
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Nor
5
-
6
- def nor(*criterion)
7
- multi!(criterion, "$nor")
8
- end
9
- end
10
- end
11
- end
@@ -1,11 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Or
5
-
6
- def or(*criterion)
7
- multi!(criterion, "$or")
8
- end
9
- end
10
- end
11
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Size
5
-
6
- def with_size(criterion = nil)
7
- _override(criterion, "$size")
8
- end
9
-
10
- ::Symbol.class_eval do
11
-
12
- def with_size
13
- Key.new(self, "$size")
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,40 +0,0 @@
1
- # encoding: utf-8
2
- require "origin/selection/strategies/add"
3
- require "origin/selection/strategies/expanded"
4
- require "origin/selection/strategies/intersect"
5
- require "origin/selection/strategies/multi"
6
- require "origin/selection/strategies/override"
7
- require "origin/selection/strategies/union"
8
-
9
- module Origin
10
- module Selection
11
- module Strategies
12
- include Add
13
- include Expanded
14
- include Intersect
15
- include Multi
16
- include Override
17
- include Union
18
-
19
- attr_accessor :strategy
20
-
21
- def selection(criterion = nil)
22
- clone.tap do |query|
23
- if criterion
24
- criterion.each_pair do |field, value|
25
- yield(query.selector, field, value)
26
- end
27
- end
28
- end
29
- end
30
-
31
- def option(*args)
32
- clone.tap do |query|
33
- unless args.compact.empty?
34
- yield(query.options)
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Strategies
5
- module Add
6
-
7
- def _add(criterion, operator)
8
- selection(criterion) do |selector, field, value|
9
- selector.store(
10
- field,
11
- selector[field]._add({ operator => value })
12
- )
13
- end
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,15 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Strategies
5
- module Expanded
6
-
7
- def _expanded(criterion, outer, inner)
8
- selection(criterion) do |selector, field, value|
9
- selector.store(field, { outer => { inner => value }})
10
- end
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,22 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Strategies
5
- module Intersect
6
-
7
- def intersect
8
- tap { |query| query.strategy = :_intersect }
9
- end
10
-
11
- def _intersect(criterion, operator)
12
- selection(criterion) do |selector, field, value|
13
- selector.store(
14
- field,
15
- selector[field]._intersect({ operator => value })
16
- )
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,21 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Strategies
5
- module Multi
6
-
7
- private
8
-
9
- def multi!(criterion, operator)
10
- clone.tap do |query|
11
- sel = query.selector
12
- criterion.each do |expr|
13
- next unless expr
14
- sel.fetch(operator){ |key| sel.store(operator, []) }.push(expr)
15
- end
16
- end
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,19 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Strategies
5
- module Override
6
-
7
- def override
8
- tap { |query| query.strategy = :_override }
9
- end
10
-
11
- def _override(criterion, operator)
12
- selection(criterion) do |selector, field, value|
13
- selector.store(field, { operator => value })
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,22 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Strategies
5
- module Union
6
-
7
- def union
8
- tap { |query| query.strategy = :_union }
9
- end
10
-
11
- def _union(criterion, operator)
12
- selection(criterion) do |selector, field, value|
13
- selector.store(
14
- field,
15
- selector[field]._union({ operator => value })
16
- )
17
- end
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,18 +0,0 @@
1
- # encoding: utf-8
2
- module Origin
3
- module Selection
4
- module Type
5
-
6
- def type(criterion = nil)
7
- _override(criterion, "$type")
8
- end
9
-
10
- ::Symbol.class_eval do
11
-
12
- def type
13
- Key.new(self, "$type")
14
- end
15
- end
16
- end
17
- end
18
- end