active_shotgun 0.0.2.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/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:
|