origin 0.0.0.alpha → 1.0.0.alpha

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