yaqb 0.2.0 → 0.3.0

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 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