like_query 0.0.1 → 0.0.3
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 +26 -20
- data/lib/like_query/collect.rb +76 -30
- data/lib/like_query/model_extensions.rb +1 -1
- data/lib/like_query/version.rb +1 -1
- 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: eb533ef11731913bdf3356f5177354cbdc85b4506ba2aae392f7149b7fe7e6d2
|
4
|
+
data.tar.gz: 4b256fb9aa9336559e6a9fc529e7376fae1f6fc09da1cd9b662eb18dd770c5dd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6fdeaadc79ef10c0690dff7d0213d8241ea0f01679fdb1494d95bb4b9f975813ef5319ae2639a431bb291793ca74ceb1902ca11e9ba5ad9b7423f114c4b3ed0e
|
7
|
+
data.tar.gz: 7d53223f4fe56b448e28aebb46e3db3f400de45b7698a5a3526543612180f4a937951733ade9cff093e177e9d4340fd50b90cc132ea64be811cde32ab2440e7b
|
data/README.md
CHANGED
@@ -47,22 +47,24 @@ art1 = Article.create(name: 'first', number: '01', customer: customer)
|
|
47
47
|
|
48
48
|
Article.like('fir', :name).like_result(limit: 10)
|
49
49
|
# returns:
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
50
|
+
{
|
51
|
+
:data=>[
|
52
|
+
{
|
53
|
+
:attributes=>[[:name, "first"]],
|
54
|
+
:id=>1}],
|
55
|
+
:length=>1,
|
56
|
+
:overflow=>false,
|
57
|
+
:columns_count=>1,
|
58
|
+
:sub_records_columns_count=>0
|
59
|
+
}
|
60
60
|
|
61
61
|
Article.like('fir', :name).like_result( :number, limit: 10)
|
62
62
|
# would query like the above example: Search scope is only :name
|
63
63
|
# but would return article-number instead of article-name inside the data block
|
64
64
|
```
|
65
65
|
|
66
|
+
`#like_result` uses `LikeQuery::Collect`, functionality is the same.
|
67
|
+
|
66
68
|
**Class LikeQuery::Collect**
|
67
69
|
|
68
70
|
```ruby
|
@@ -75,22 +77,26 @@ c = LikeQuery::Collect.new(4)
|
|
75
77
|
c.receive { Article.like('any-art', :name) }
|
76
78
|
# => would add 4 articles to the result hash because of limit
|
77
79
|
|
78
|
-
c.receive { Customer.like('any-art', :name, articles: :name) }
|
80
|
+
c.receive { Customer.like('any-art', :name, image: :image_column, articles: :name) }
|
79
81
|
# => limit is already exhausted: does nothing
|
80
82
|
# => otherwise it would add Customers to the result hash
|
81
83
|
|
82
84
|
c.result
|
83
|
-
# => would return anything like:
|
85
|
+
# => would return anything like (this output is from different code!!):
|
84
86
|
{
|
85
87
|
:data=>[
|
86
|
-
{:attributes=>[[
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
88
|
+
{:attributes=>[[:name, "Ambühl"]], :id=>1, :image=>"src:customer-image",
|
89
|
+
:associations=>{
|
90
|
+
:articles=>[
|
91
|
+
{:attributes=>[[:number, "01"]], :id=>1, :image=>"src:article-image"},
|
92
|
+
{:attributes=>[[:number, "01"]], :id=>2, :image=>"src:article-image"}
|
93
|
+
]
|
94
|
+
}
|
95
|
+
}
|
96
|
+
],
|
97
|
+
:length=>3,
|
98
|
+
:overflow=>false,
|
99
|
+
:columns_count=>1,
|
94
100
|
:sub_records_columns_count=>1
|
95
101
|
}
|
96
102
|
```
|
data/lib/like_query/collect.rb
CHANGED
@@ -7,20 +7,29 @@ module LikeQuery
|
|
7
7
|
@overflow = false
|
8
8
|
@columns_count = 0
|
9
9
|
@sub_records_columns_count = 0
|
10
|
+
@image = false
|
11
|
+
@sub_records_image = false
|
10
12
|
end
|
11
13
|
|
12
|
-
def receive(*result_pattern, image: nil, &block)
|
14
|
+
def receive(*result_pattern, limit: nil, image: nil, &block)
|
13
15
|
|
14
16
|
return false if @length >= @limit
|
17
|
+
length = 0
|
15
18
|
|
16
19
|
recs = yield
|
17
20
|
|
18
|
-
|
21
|
+
_pattern = (result_pattern.present? ? result_pattern : recs.like_query_pattern)
|
22
|
+
if _pattern.first.is_a?(Array)
|
23
|
+
raise 'pattern can only be a array of hashes or symbols' if _pattern.length >= 2
|
24
|
+
pattern = _pattern.first
|
25
|
+
else
|
26
|
+
pattern = _pattern
|
27
|
+
end
|
19
28
|
|
20
29
|
associations = []
|
21
30
|
pattern.each do |p|
|
22
31
|
if p.is_a?(Hash)
|
23
|
-
associations += p.keys
|
32
|
+
associations += p.keys.map { |k| (k.to_sym >= :image ? nil : k.to_sym) }.compact
|
24
33
|
end
|
25
34
|
end
|
26
35
|
|
@@ -29,52 +38,79 @@ module LikeQuery
|
|
29
38
|
pattern.each do |p|
|
30
39
|
if p.is_a?(Hash)
|
31
40
|
|
32
|
-
# ASSOCIATED RECORDS
|
33
|
-
|
34
41
|
p.each do |assoc, cols|
|
35
|
-
rec_attr[:associations] ||= {}
|
36
|
-
rec_attr[:associations][assoc] ||= []
|
37
|
-
sub = r.send(assoc)
|
38
|
-
_cols = (cols.is_a?(Enumerable) ? cols : [cols])
|
39
|
-
(sub.is_a?(Enumerable) ? sub : [sub]).each do |_sub|
|
40
|
-
sub_attr = []
|
41
|
-
_cols.each do |c|
|
42
|
-
sub_attr.push([c, _sub.send(c)])
|
43
|
-
end
|
44
42
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
43
|
+
if assoc.to_sym == :image
|
44
|
+
|
45
|
+
raise 'Missing input: image column for given key :image' unless cols.present?
|
46
|
+
|
47
|
+
# IMAGE COLUMN
|
48
|
+
|
49
|
+
rec_attr[:image] = get_column_value(r, cols)
|
50
|
+
@image = true
|
51
|
+
|
52
|
+
else
|
53
|
+
|
54
|
+
# ASSOCIATIONS
|
55
|
+
|
56
|
+
sub_records = r.send(assoc)
|
57
|
+
image_column = nil
|
58
|
+
|
59
|
+
_cols = if cols.is_a?(Hash)
|
60
|
+
image_column = cols[:image]
|
61
|
+
cols[:attributes]
|
62
|
+
elsif cols.is_a?(Enumerable)
|
63
|
+
cols
|
64
|
+
else
|
65
|
+
[cols]
|
66
|
+
end
|
67
|
+
|
68
|
+
(sub_records.is_a?(Enumerable) ? sub_records : [sub_records]).each do |sub_record|
|
69
|
+
sub_attr = []
|
70
|
+
_cols.each do |c|
|
71
|
+
sub_attr.push([c, sub_record.send(c)])
|
72
|
+
end
|
73
|
+
|
74
|
+
if @length >= @limit || (limit && length >= limit)
|
75
|
+
@overflow = true
|
76
|
+
break
|
77
|
+
else
|
78
|
+
c = sub_attr.length
|
79
|
+
@sub_records_columns_count = c if c > @sub_records_columns_count
|
80
|
+
rec_attr[:associations] ||= {}
|
81
|
+
rec_attr[:associations][assoc] ||= []
|
82
|
+
sub_hash = { attributes: sub_attr, id: sub_record.id, model: sub_record.class.to_s.underscore }
|
83
|
+
if image_column
|
84
|
+
sub_hash[:image] = get_column_value(sub_record, image_column)
|
85
|
+
@sub_records_image = true
|
86
|
+
end
|
87
|
+
rec_attr[:associations][assoc].push(sub_hash)
|
88
|
+
@length += 1
|
89
|
+
length += 1
|
90
|
+
end
|
54
91
|
end
|
55
|
-
|
56
92
|
end
|
57
93
|
end
|
58
94
|
elsif p.is_a?(Symbol) || p.is_a?(String)
|
59
95
|
|
60
96
|
# MAIN RECORD
|
61
97
|
|
62
|
-
v = nil
|
63
|
-
p.to_s.split('.').each { |_p| v = (v ? v : r).send(_p) }
|
64
98
|
rec_attr[:attributes] ||= []
|
65
|
-
rec_attr[:attributes].push([p,
|
99
|
+
rec_attr[:attributes].push([p, get_column_value(r, p)])
|
66
100
|
rec_attr[:id] = r.id
|
101
|
+
rec_attr[:model] = r.class.to_s.underscore
|
67
102
|
|
68
103
|
end
|
69
104
|
end
|
70
|
-
if @length >= @limit
|
105
|
+
if @length >= @limit || (limit && length >= limit)
|
71
106
|
@overflow = true
|
72
107
|
break
|
73
|
-
|
108
|
+
else
|
74
109
|
c = (image ? 1 : 0) + rec_attr[:attributes].length
|
75
110
|
@columns_count = c if c > @columns_count
|
76
111
|
@data.push(rec_attr)
|
77
112
|
@length += 1
|
113
|
+
length += 1
|
78
114
|
end
|
79
115
|
end
|
80
116
|
|
@@ -87,9 +123,19 @@ module LikeQuery
|
|
87
123
|
length: @length,
|
88
124
|
overflow: @overflow,
|
89
125
|
columns_count: @columns_count,
|
90
|
-
sub_records_columns_count: @sub_records_columns_count
|
126
|
+
sub_records_columns_count: @sub_records_columns_count,
|
127
|
+
image: @image,
|
128
|
+
sub_records_image: @sub_records_image
|
91
129
|
}
|
92
130
|
end
|
93
131
|
|
132
|
+
private
|
133
|
+
|
134
|
+
def get_column_value(record, column)
|
135
|
+
val = nil
|
136
|
+
column.to_s.split('.').each { |i| val = (val ? val : record).send(i) }
|
137
|
+
val
|
138
|
+
end
|
139
|
+
|
94
140
|
end
|
95
141
|
end
|
data/lib/like_query/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: like_query
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- christian
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-08-
|
11
|
+
date: 2023-08-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|