simple_query 0.3.1 → 0.3.2
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.
- checksums.yaml +4 -4
- data/README.md +8 -3
- data/lib/simple_query/builder.rb +14 -2
- data/lib/simple_query/clauses/join_clause.rb +23 -6
- data/lib/simple_query/version.rb +1 -1
- data/lib/simple_query.rb +7 -13
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6aeb71d493d14743e43b8c9a37eed697f131db105ffc4dc0fa35dd0dd189255b
|
4
|
+
data.tar.gz: 82b1815e569f24a4c4da9e4cd727d95ad6c938403bd2b781eccfc39398cb264b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d422a6a3484d4242b6666bb6536f4828b666c0f16dd6a0c42104b12e3f077bd30e580dc9cf5eb4292ecbb1cd0eda218aabe29af6e221a86c3291fc116b62b856
|
7
|
+
data.tar.gz: cf6e7c8a7e198d1b5376053237d7bdfac59819e07571adb5656e859de9a3bb840dace69e2e600703b14a5ff01bfedbf448d1aadb471a3875874c7d390599878a
|
data/README.md
CHANGED
@@ -54,11 +54,12 @@ User.simple_query.select(:name, :email).where(active: true).execute
|
|
54
54
|
```
|
55
55
|
|
56
56
|
Query with join
|
57
|
+
|
58
|
+
SimpleQuery now supports **all major SQL join types** — including LEFT, RIGHT, and FULL — through the following DSL methods:
|
57
59
|
```ruby
|
58
60
|
User.simple_query
|
59
|
-
.
|
60
|
-
.
|
61
|
-
.where(Company.arel_table[:name].eq("TechCorp"))
|
61
|
+
.left_join(:users, :companies, foreign_key: :user_id, primary_key: :id)
|
62
|
+
.select("users.name", "companies.name")
|
62
63
|
.execute
|
63
64
|
```
|
64
65
|
|
@@ -143,9 +144,13 @@ class User < ActiveRecord::Base
|
|
143
144
|
where(admin: true)
|
144
145
|
end
|
145
146
|
|
147
|
+
# Block-based scope with parameter
|
146
148
|
simple_scope :by_name do |name|
|
147
149
|
where(name: name)
|
148
150
|
end
|
151
|
+
|
152
|
+
# Lambda-based scope with parameter
|
153
|
+
simple_scope :by_name, ->(name) { where(name: name) }
|
149
154
|
end
|
150
155
|
```
|
151
156
|
You can then chain these scopes seamlessly with the normal SimpleQuery DSL:
|
data/lib/simple_query/builder.rb
CHANGED
@@ -34,12 +34,24 @@ module SimpleQuery
|
|
34
34
|
self
|
35
35
|
end
|
36
36
|
|
37
|
-
def join(table1, table2, foreign_key:, primary_key:)
|
38
|
-
@joins.add(table1, table2, foreign_key: foreign_key, primary_key: primary_key)
|
37
|
+
def join(table1, table2, foreign_key:, primary_key:, type: :inner)
|
38
|
+
@joins.add(table1, table2, foreign_key: foreign_key, primary_key: primary_key, join_type: type)
|
39
39
|
reset_query
|
40
40
|
self
|
41
41
|
end
|
42
42
|
|
43
|
+
def left_join(table1, table2, foreign_key:, primary_key:)
|
44
|
+
join(table1, table2, foreign_key: foreign_key, primary_key: primary_key, type: :left)
|
45
|
+
end
|
46
|
+
|
47
|
+
def right_join(table1, table2, foreign_key:, primary_key:)
|
48
|
+
join(table1, table2, foreign_key: foreign_key, primary_key: primary_key, type: :right)
|
49
|
+
end
|
50
|
+
|
51
|
+
def full_join(table1, table2, foreign_key:, primary_key:)
|
52
|
+
join(table1, table2, foreign_key: foreign_key, primary_key: primary_key, type: :full)
|
53
|
+
end
|
54
|
+
|
43
55
|
def order(order_conditions)
|
44
56
|
@orders.add(order_conditions)
|
45
57
|
reset_query
|
@@ -8,20 +8,37 @@ module SimpleQuery
|
|
8
8
|
@joins = []
|
9
9
|
end
|
10
10
|
|
11
|
-
def add(table1, table2, foreign_key:, primary_key:)
|
11
|
+
def add(table1, table2, foreign_key:, primary_key:, join_type: :inner)
|
12
12
|
@joins << {
|
13
13
|
table1: to_arel_table(table1),
|
14
14
|
table2: to_arel_table(table2),
|
15
15
|
foreign_key: foreign_key,
|
16
|
-
primary_key: primary_key
|
16
|
+
primary_key: primary_key,
|
17
|
+
type: join_type
|
17
18
|
}
|
18
19
|
end
|
19
20
|
|
20
21
|
def apply_to(query)
|
21
|
-
@joins.each do |
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
@joins.each do |join_def|
|
23
|
+
table1 = join_def[:table1]
|
24
|
+
table2 = join_def[:table2]
|
25
|
+
fk = join_def[:foreign_key]
|
26
|
+
pk = join_def[:primary_key]
|
27
|
+
type = join_def[:type]
|
28
|
+
|
29
|
+
join_class = case type
|
30
|
+
when :left
|
31
|
+
Arel::Nodes::OuterJoin
|
32
|
+
when :right
|
33
|
+
Arel::Nodes::RightOuterJoin
|
34
|
+
when :full
|
35
|
+
Arel::Nodes::FullOuterJoin
|
36
|
+
else
|
37
|
+
Arel::Nodes::InnerJoin
|
38
|
+
end
|
39
|
+
|
40
|
+
condition = table2[fk].eq(table1[pk])
|
41
|
+
query.join(table2, join_class).on(condition)
|
25
42
|
end
|
26
43
|
query
|
27
44
|
end
|
data/lib/simple_query/version.rb
CHANGED
data/lib/simple_query.rb
CHANGED
@@ -41,19 +41,13 @@ module SimpleQuery
|
|
41
41
|
@_simple_scopes ||= {}
|
42
42
|
end
|
43
43
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
# simple_scope :by_name do |name|
|
52
|
-
# where(name: name)
|
53
|
-
# end
|
54
|
-
#
|
55
|
-
def simple_scope(name, &block)
|
56
|
-
_simple_scopes[name.to_sym] = block
|
44
|
+
def simple_scope(name, body = nil, &block)
|
45
|
+
raise ArgumentError, "Pass either a proc/lambda or a block, not both" if body && block_given?
|
46
|
+
|
47
|
+
scope_body = body || block
|
48
|
+
raise ArgumentError, "You must provide a block or a proc" unless scope_body
|
49
|
+
|
50
|
+
_simple_scopes[name.to_sym] = scope_body
|
57
51
|
end
|
58
52
|
end
|
59
53
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_query
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Kholodniak
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-03-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|