mongo_ql 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1b2d85bf237fe01d81f3c4f07053f2f536220bee0142678693be766e9f1f4caf
4
- data.tar.gz: 783abc9d2dc5ca65fed6064ee10978f7cd8d59faa41dfe58f9fb4d57b847fed7
3
+ metadata.gz: a2694eccc5339f8c810e6988339bf6faa9325d86518d810eb1f1d43645022e26
4
+ data.tar.gz: 605cf542eeae93fd97ae4135d5c62dd8b07abf8a6c593c2f415b1676071aa185
5
5
  SHA512:
6
- metadata.gz: b57f65ea24dcad07a359ae7ed500f5be06679495b1ce9b0c3d67b57d25188fb1a34de044997b55b8a4fbc37b5c9de59ab66cd6da5c73148e2fd3326c370ffd4c
7
- data.tar.gz: 13e6bd11d96fa929b6ce186ddc21457c570cbc4a958e03b383c1a5f3a97b86df5fd2e7d634ac8553addd01b7f7d3dfc6b279e5e75628abb24c6b7bd19aaed48f
6
+ metadata.gz: a7032e9dc8bce476e20345e0c3702f9563e778612914db1080b4c85022d2de8cc610a26c8cac4a2b4e4fc92dce1bade62498d25b36e9cf60bcab55e00d24be92
7
+ data.tar.gz: eba833dc7d70fee8958ea30812f01181ce943b9cce00a9d5b7663458ce5547dd874bc3aea907fa19719a72fabc08036899a2c559f9b6718a0490b28bd4612fbb
data/README.md CHANGED
@@ -27,12 +27,14 @@ MongoQL.compose do
27
27
  status == :shipped
28
28
  end
29
29
 
30
- where province == "ON"
30
+ where province == "ON",
31
+ discounts.any? { |d| d.price > 6 }
31
32
 
32
- project :_id,
33
+ project _id,
33
34
  total,
34
35
  customer => customers.name,
35
- tax => total * tax_rate
36
+ tax => total * tax_rate,
37
+ status => If price <= 10, "Not Bad", "Good"
36
38
 
37
39
  group customer,
38
40
  total => total.sum,
@@ -42,7 +44,7 @@ MongoQL.compose do
42
44
  end
43
45
  ```
44
46
 
45
- ## The above aggregation is equivalent to the following mognodb pipeline
47
+ ## The above aggregation DSL generates the following MongoDB pipeline
46
48
  ```json
47
49
  [{
48
50
  "$lookup": {
@@ -10,7 +10,8 @@ module MongoQL
10
10
  "sum": "$sum",
11
11
  "avg": "$avg",
12
12
  "size": "$size",
13
- "push": "$push"
13
+ "push": "$push",
14
+ "reverse": "$reverseArray"
14
15
  }.freeze
15
16
 
16
17
  AGGREGATE_OPS.keys.each do |op|
@@ -70,5 +71,8 @@ module MongoQL
70
71
  alias_method :include?, :contains
71
72
  alias_method :includes?, :contains
72
73
 
74
+ def any?(&block)
75
+ if_null([]).filter(&block).size > 0
76
+ end
73
77
  end
74
78
  end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MongoQL
4
+ class Expression::Condition < Expression
5
+ attr_accessor :condition, :then_expr, :else_expr
6
+
7
+ def initialize(condition, then_val = nil, else_val = nil, &block)
8
+ @condition = condition
9
+ @then_expr = then_val
10
+ @else_expr = else_val
11
+
12
+ @then_expr = yield if block_given?
13
+ end
14
+
15
+ def then(then_val = nil, &block)
16
+ @then_expr = then_val
17
+ @then_expr = yield if block_given?
18
+ self
19
+ end
20
+ alias_method :Then, :then
21
+
22
+ def else(else_val = nil, &block)
23
+ @else_expr = else_val
24
+ @else_expr = yield if block_given?
25
+ self
26
+ end
27
+ alias_method :Else, :else
28
+
29
+ def to_ast
30
+ {
31
+ "$cond" => [condition, then_expr, else_expr]
32
+ }
33
+ end
34
+ end
35
+ end
@@ -52,6 +52,10 @@ module MongoQL
52
52
  Expression::DateNode.new(self)
53
53
  end
54
54
 
55
+ def then(then_expr = nil, &block)
56
+ Expression::Condition.new(self, then_expr, nil, &block)
57
+ end
58
+
55
59
  def to_ast
56
60
  raise NotImplementedError, "#{self.class.name} must implement to_ast"
57
61
  end
@@ -60,6 +60,11 @@ module MongoQL
60
60
  Expression::ValueNode.new(val)
61
61
  end
62
62
 
63
+ def cond(conditon_expr, then_expr = nil, else_expr = nil, &block)
64
+ Expression::Condition.new(conditon_expr, then_expr, else_expr, &block)
65
+ end
66
+ alias_method :If, :cond
67
+
63
68
  def to_ast
64
69
  pipeline.map(&:to_ast)
65
70
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MongoQL
4
- VERSION = "1.0.1"
4
+ VERSION = "1.0.2"
5
5
  end
data/lib/mongo_ql.rb CHANGED
@@ -54,6 +54,7 @@ require_relative "mongo_ql/expression/value_node"
54
54
  require_relative "mongo_ql/expression/method_call"
55
55
  require_relative "mongo_ql/expression/binary"
56
56
  require_relative "mongo_ql/expression/unary"
57
+ require_relative "mongo_ql/expression/condition"
57
58
 
58
59
  require_relative "mongo_ql/expression/descend"
59
60
  require_relative "mongo_ql/expression/ascend"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo_ql
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Xizheng Ding
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-10-26 00:00:00.000000000 Z
11
+ date: 2019-10-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -64,6 +64,7 @@ files:
64
64
  - lib/mongo_ql/expression.rb
65
65
  - lib/mongo_ql/expression/ascend.rb
66
66
  - lib/mongo_ql/expression/binary.rb
67
+ - lib/mongo_ql/expression/condition.rb
67
68
  - lib/mongo_ql/expression/date_note.rb
68
69
  - lib/mongo_ql/expression/descend.rb
69
70
  - lib/mongo_ql/expression/field_node.rb