active_shotgun 0.0.2.1 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -1
- data/Gemfile.lock +1 -1
- data/lib/active_shotgun/model/read.rb +34 -3
- data/lib/active_shotgun/query.rb +106 -0
- data/lib/active_shotgun/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1e2345b2533af34895ef3e5ba10ab8c161f24ad36edb318d4e101747dddeb9e
|
4
|
+
data.tar.gz: 39e87e5dfc26b9697094d2b826518ac9fa9a6021e24dcab684b56f08989720b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c37bf9627795d8a13f32755a0120fbe28b521b35d242e99727f3e15ceb9150b80928361f699ac4481d3f7424dea5418864e1852b957dc7285d6402d4f6f2139d
|
7
|
+
data.tar.gz: 2e949a1793fcd76a7cbf16fa894b9d23f5fe07eae3feaa0a035cddde61e38da69d102076df29935fd4b9b64dbc3859241e60f66a8e14cce3476424eb00e51190
|
data/CHANGELOG.md
CHANGED
@@ -6,6 +6,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
6
6
|
|
7
7
|
## [Unreleased]
|
8
8
|
|
9
|
+
## [0.0.3] - 2020-12-16
|
10
|
+
### Added
|
11
|
+
- First version of AR complient queries. Supports:
|
12
|
+
- find
|
13
|
+
- first(number)
|
14
|
+
- find_by
|
15
|
+
- all
|
16
|
+
- where => Partial support. Hash only.
|
17
|
+
- orders
|
18
|
+
- limit
|
19
|
+
- offset
|
20
|
+
- select
|
21
|
+
- pluck
|
22
|
+
- Behave as a Query as long as possible. Behave like an Array as soon as you look at the data.
|
23
|
+
### Missing
|
24
|
+
- multi-entity, entity
|
25
|
+
- count, extra methods
|
26
|
+
|
9
27
|
## [0.0.2.1] - 2020-12-16
|
10
28
|
### Changed
|
11
29
|
- Not everything is in one big file now
|
@@ -24,7 +42,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
24
42
|
### Added
|
25
43
|
- Gem init
|
26
44
|
|
27
|
-
[Unreleased]: https://github.com/zaratan/active_shotgun/compare/v0.0.
|
45
|
+
[Unreleased]: https://github.com/zaratan/active_shotgun/compare/v0.0.3...HEAD
|
46
|
+
[0.0.3]: https://github.com/zaratan/active_shotgun/releases/tag/v0.0.3
|
28
47
|
[0.0.2.1]: https://github.com/zaratan/active_shotgun/releases/tag/v0.0.2.1
|
29
48
|
[0.0.2]: https://github.com/zaratan/active_shotgun/releases/tag/v0.0.2
|
30
49
|
[0.0.1]: https://github.com/zaratan/active_shotgun/releases/tag/v0.0.1
|
data/Gemfile.lock
CHANGED
@@ -21,10 +21,41 @@ module ActiveShotgun
|
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
|
+
def reload
|
25
|
+
self.class.find(id)
|
26
|
+
end
|
27
|
+
|
24
28
|
module ClassMethods
|
25
|
-
def
|
26
|
-
|
27
|
-
|
29
|
+
def all
|
30
|
+
prepare_new_query.all
|
31
|
+
end
|
32
|
+
|
33
|
+
def limit(number)
|
34
|
+
prepare_new_query.limit(number)
|
35
|
+
end
|
36
|
+
|
37
|
+
def offset(number)
|
38
|
+
prepare_new_query.limit(number)
|
39
|
+
end
|
40
|
+
|
41
|
+
def first(number = 1)
|
42
|
+
prepare_new_query.first(number)
|
43
|
+
end
|
44
|
+
|
45
|
+
def where(conditions)
|
46
|
+
prepare_new_query.where(conditions)
|
47
|
+
end
|
48
|
+
|
49
|
+
def find_by(conditions)
|
50
|
+
prepare_new_query.find_by(conditions)
|
51
|
+
end
|
52
|
+
|
53
|
+
def orders(new_orders)
|
54
|
+
prepare_new_query.orders(new_orders)
|
55
|
+
end
|
56
|
+
|
57
|
+
def prepare_new_query
|
58
|
+
Query.new(type: shotgun_type, klass: self)
|
28
59
|
end
|
29
60
|
|
30
61
|
def find(id)
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module ActiveShotgun
|
4
|
+
class Query
|
5
|
+
def initialize(type:, klass:)
|
6
|
+
@type = type
|
7
|
+
@klass = klass
|
8
|
+
@conditions = nil
|
9
|
+
@limit = 100
|
10
|
+
@offset = 0
|
11
|
+
@orders = nil
|
12
|
+
@fields = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
extend Forwardable
|
16
|
+
def_delegators(
|
17
|
+
:to_a,
|
18
|
+
:each
|
19
|
+
)
|
20
|
+
include Enumerable
|
21
|
+
|
22
|
+
def all
|
23
|
+
page_calc = format_page_from_limit_and_offset(@limit, @offset)
|
24
|
+
results = shotgun_client.all(
|
25
|
+
fields: @fields,
|
26
|
+
sort: @orders,
|
27
|
+
filter: @conditions,
|
28
|
+
page: page_calc[:page],
|
29
|
+
page_size: page_calc[:page_size]
|
30
|
+
)
|
31
|
+
results.pop(page_calc[:end_trim])
|
32
|
+
results.shift(page_calc[:start_trim])
|
33
|
+
|
34
|
+
results.map{ |result| @klass.new(result.attributes.to_h.merge(id: result.id)) }
|
35
|
+
end
|
36
|
+
alias_method :to_a, :all
|
37
|
+
|
38
|
+
def first(number = 1)
|
39
|
+
results = limit(number).all
|
40
|
+
if @limit == 1
|
41
|
+
results.first
|
42
|
+
else
|
43
|
+
results
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def limit(number)
|
48
|
+
@limit = number
|
49
|
+
self
|
50
|
+
end
|
51
|
+
|
52
|
+
def offset(number)
|
53
|
+
@offset = number
|
54
|
+
self
|
55
|
+
end
|
56
|
+
|
57
|
+
def where(conditions)
|
58
|
+
@conditions = (@conditions || {}).merge(conditions)
|
59
|
+
self
|
60
|
+
end
|
61
|
+
|
62
|
+
def find_by(conditions)
|
63
|
+
where(conditions).first
|
64
|
+
end
|
65
|
+
|
66
|
+
def orders(new_orders)
|
67
|
+
@orders = new_orders
|
68
|
+
self
|
69
|
+
end
|
70
|
+
|
71
|
+
def select(*fields)
|
72
|
+
@fields = fields.flatten
|
73
|
+
self
|
74
|
+
end
|
75
|
+
|
76
|
+
def pluck(*fields)
|
77
|
+
fields.flatten!
|
78
|
+
result = select(fields).map{ |e| fields.map{ |field| e.public_send(field) } }
|
79
|
+
fields.size == 1 ? result.flatten : result
|
80
|
+
end
|
81
|
+
|
82
|
+
private
|
83
|
+
|
84
|
+
def format_page_from_limit_and_offset(limit, offset)
|
85
|
+
min = (offset + 1).to_f
|
86
|
+
max = (offset + limit).to_f
|
87
|
+
limit.upto(limit + offset) do |size|
|
88
|
+
next unless (min / size).ceil == (max / size).ceil
|
89
|
+
|
90
|
+
page = (min / size).ceil
|
91
|
+
start_trim = min - (page - 1) * size - 1
|
92
|
+
end_trim = page * size - max
|
93
|
+
return {
|
94
|
+
page_size: [size, 1000].min,
|
95
|
+
page: page,
|
96
|
+
start_trim: start_trim.to_i,
|
97
|
+
end_trim: end_trim.to_i,
|
98
|
+
}
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
def shotgun_client
|
103
|
+
Client.shotgun.entities(@type)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: active_shotgun
|
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
|
- Denis <Zaratan> Pasin
|
@@ -271,6 +271,7 @@ files:
|
|
271
271
|
- lib/active_shotgun/model/read.rb
|
272
272
|
- lib/active_shotgun/model/validations.rb
|
273
273
|
- lib/active_shotgun/model/write.rb
|
274
|
+
- lib/active_shotgun/query.rb
|
274
275
|
- lib/active_shotgun/version.rb
|
275
276
|
homepage: https://github.com/zaratan/active_shotgun
|
276
277
|
licenses:
|