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: a04bf5ad9bfc9480751951e4ff8d5130c63720fada33e09012d9204ac5a3082e
4
- data.tar.gz: 3cbe75005b7df8d27bb0569db90dfc05377c59266bd137959a97281a0c944a7b
3
+ metadata.gz: 35af8dca94c4f277264099454912310c6d060e7ee02c1e54984cbc2e343dd546
4
+ data.tar.gz: 68271a354d61302b574c0d91688378b8dd5458ab51c9c505506439b37c7348b8
5
5
  SHA512:
6
- metadata.gz: 0b1095d0e8d279e3d6d3ff7526ad3b92621676edfc43642e141b9275ef9aae43ec65b4f350da5e0c5b5c06fc9f51b362091f80366e92375dbeb838e4066271d6
7
- data.tar.gz: 7cc7b2b5c26915c326da053903d129c55daca8575df356c836ca3703224d57c3995a3f4b6f7a73948e214d3524e115e0b8e7fb6c4d6204e81bfd03ae8320a412
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([]) do |(k, v), links|
20
- query_params = @query_params.merge("page" => v, "per" => @per).to_param
21
- links << "<#{@url}?#{query_params}>; rel=\"#{k}\""
22
- end.join(', ')
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
- @scope
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
@@ -1,3 +1,3 @@
1
1
  module Yaqb
2
- VERSION = '0.2.0'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
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.2.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 00:00:00.000000000 Z
11
+ date: 2019-10-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler