yaqb 0.2.0 → 0.3.0
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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35af8dca94c4f277264099454912310c6d060e7ee02c1e54984cbc2e343dd546
|
4
|
+
data.tar.gz: 68271a354d61302b574c0d91688378b8dd5458ab51c9c505506439b37c7348b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3190cd9a92f8e31d7df0b8bd46f215cb8c26638512169508b4f183fad195d50a340da95270c12de0c0b33c445cab062fab27f0d799c0a6d13af70b63b34f088
|
7
|
+
data.tar.gz: a442e9c2973b4040b38dea491df9743d17b6b85710a8bb75bad87c292d2fc539884a84d53673a23ec545176d7313adf0b5c567e08417131c4a1cf83bf5d4f833
|
@@ -16,10 +16,10 @@ module Yaqb
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def links
|
19
|
-
@links ||= pages.each_with_object(
|
20
|
-
query_params = @query_params.merge(
|
21
|
-
|
22
|
-
end
|
19
|
+
@links ||= pages.each_with_object({}) do |(k, v), hash|
|
20
|
+
query_params = @query_params.merge('page' => v, 'per' => @per).to_param
|
21
|
+
hash[k] = "#{@url}?#{query_params}"
|
22
|
+
end
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
@@ -7,6 +7,8 @@ require 'yaqb/query_builders/filter'
|
|
7
7
|
module Yaqb
|
8
8
|
module QueryBuilders
|
9
9
|
class QueryOrchestrator
|
10
|
+
attr_reader :scope, :links
|
11
|
+
|
10
12
|
def initialize(scope, params, request, response, presenter)
|
11
13
|
@scope = scope
|
12
14
|
@params = params
|
@@ -16,11 +18,11 @@ module Yaqb
|
|
16
18
|
end
|
17
19
|
|
18
20
|
def call
|
21
|
+
@scope = filter
|
19
22
|
@scope = sort
|
20
23
|
@scope = paginate
|
21
|
-
@scope = filter
|
22
24
|
|
23
|
-
|
25
|
+
self
|
24
26
|
end
|
25
27
|
|
26
28
|
private
|
@@ -28,12 +30,12 @@ module Yaqb
|
|
28
30
|
def paginate
|
29
31
|
current_url = @request.base_url + @request.path
|
30
32
|
paginator = Paginate.new(@scope, @request.query_parameters, current_url)
|
31
|
-
@response.headers['Link'] = paginator.links
|
33
|
+
@response.headers['Link'] = @links = paginator.links
|
32
34
|
paginator.paginate
|
33
35
|
end
|
34
36
|
|
35
37
|
def sort
|
36
|
-
Sort.new(@scope, @params).sort
|
38
|
+
Sort.new(@scope, @params, @presenter).sort
|
37
39
|
end
|
38
40
|
|
39
41
|
def filter
|
@@ -5,8 +5,9 @@ module Yaqb
|
|
5
5
|
class Sort
|
6
6
|
DIRECTIONS = %w[asc desc].freeze
|
7
7
|
|
8
|
-
def initialize(scope, params)
|
8
|
+
def initialize(scope, params, presenter)
|
9
9
|
@scope = scope
|
10
|
+
@presenter = presenter
|
10
11
|
@column = params[:sort]
|
11
12
|
@direction = params[:dir]
|
12
13
|
end
|
@@ -14,8 +15,19 @@ module Yaqb
|
|
14
15
|
def sort
|
15
16
|
return @scope unless @column && @direction
|
16
17
|
|
18
|
+
validate!('sort', @column) unless @presenter.sort_attributes.include?(@column)
|
19
|
+
validate!('dir', @direction) unless DIRECTIONS.include?(@direction)
|
20
|
+
|
17
21
|
@scope.order(Arel.sql("#{@column} #{@direction}"))
|
18
22
|
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def validate!(name, value)
|
27
|
+
columns = @presenter.sort_attributes.join(', ')
|
28
|
+
raise QueryBuilderError.new("#{name}=#{value}"),
|
29
|
+
"Invalid sorting params. sort: (#{columns}), 'dir': asc, desc"
|
30
|
+
end
|
19
31
|
end
|
20
32
|
end
|
21
33
|
end
|
data/lib/yaqb/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaqb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ronald Chacon
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-10-
|
11
|
+
date: 2019-10-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|