yaqb 0.1.1 → 0.2.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: e04137221fff3125141b5bde2639f5cf593196c5cf0ebe8d5539b08ea015dda6
4
- data.tar.gz: 05c9f3e841fc59acc09aa8cb02384a5ab0734101af280f9caada7106b27d1d65
3
+ metadata.gz: a04bf5ad9bfc9480751951e4ff8d5130c63720fada33e09012d9204ac5a3082e
4
+ data.tar.gz: 3cbe75005b7df8d27bb0569db90dfc05377c59266bd137959a97281a0c944a7b
5
5
  SHA512:
6
- metadata.gz: 4671b0432e53842b4287c34889728ee91ac8e4368cd40402d49f580323ef5e4163a448dbe0bb362d14c055552b9dd3fb060ad386ce1d9587fe855f5775406377
7
- data.tar.gz: 7cd15411fc2abde2695d6d779578928d1ba1297557164ab81df4b9bdb262878e9bc8f56c5b6872b8dcdf3ccf17605f4dbcaacdc803e849b6af997dd0afd08942
6
+ metadata.gz: 0b1095d0e8d279e3d6d3ff7526ad3b92621676edfc43642e141b9275ef9aae43ec65b4f350da5e0c5b5c06fc9f51b362091f80366e92375dbeb838e4066271d6
7
+ data.tar.gz: 7cc7b2b5c26915c326da053903d129c55daca8575df356c836ca3703224d57c3995a3f4b6f7a73948e214d3524e115e0b8e7fb6c4d6204e81bfd03ae8320a412
@@ -3,11 +3,20 @@
3
3
  require 'yaqb/query_builders/query_orchestrator'
4
4
 
5
5
  module Yaqb
6
- module QueryBuilder
6
+ module Base
7
+ def self.included(base)
8
+ base.extend ClassMethods
9
+ base.class_eval do
10
+ rescue_from Yaqb::Errors::QueryBuilderError, with: :builder_error
11
+ end
12
+ end
13
+
14
+ module ClassMethods; end
15
+
7
16
  private
8
17
 
9
- def orchestrate(scope, options = {})
10
- QueryBuilders::QueryOrchestrator.new(scope, params, request, response, options).call
18
+ def orchestrate(scope, presenter)
19
+ QueryBuilders::QueryOrchestrator.new(scope, params, request, response, presenter).call
11
20
  end
12
21
 
13
22
  def builder_error(error)
data/lib/yaqb/hooks.rb CHANGED
@@ -3,22 +3,9 @@
3
3
  begin; require 'kaminari'; rescue LoadError; end
4
4
 
5
5
  unless defined?(Kaminari)
6
- Kernel.warn <<~HEREDOC.chomp
6
+ Kernel.warn <<~HEREDOC
7
7
  Warning: Yaqb relies on Kaminari. Please
8
8
  install dependency by adding the following to your Gemfile:
9
- gem 'kaminari'
9
+ gem 'kaminari'\n
10
10
  HEREDOC
11
11
  end
12
-
13
-
14
- if defined?(ActionController::Base)
15
- require 'yaqb/query_builder'
16
- ActionController::Base.send(:include, Yaqb::QueryBuilder)
17
- ActionController::Base.rescue_from Yaqb::Errors::QueryBuilderError, with: :builder_error
18
- end
19
-
20
- if defined?(ActionController::API)
21
- require 'yaqb/query_builder'
22
- ActionController::API.send(:include, Yaqb::QueryBuilder)
23
- ActionController::API.rescue_from Yaqb::Errors::QueryBuilderError, with: :builder_error
24
- end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Yaqb
4
+ class Presenter
5
+ @sort_attributes = []
6
+ @filter_attributes = []
7
+
8
+ class << self
9
+ attr_accessor :sort_attributes, :filter_attributes
10
+
11
+ def sort_by(*args)
12
+ @sort_attributes = args.map(&:to_s)
13
+ end
14
+
15
+ def filter_by(*args)
16
+ @filter_attributes = args.map(&:to_s)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -5,10 +5,10 @@ module Yaqb
5
5
  class Filter
6
6
  PREDICATES = %w[eq cont notcont start end gt lt].freeze
7
7
 
8
- def initialize(scope, params, options = {})
8
+ def initialize(scope, params, presenter)
9
9
  @scope = scope
10
10
  @filters = params['q'] || {}
11
- @options = options
11
+ @presenter = presenter
12
12
  end
13
13
 
14
14
  def filter
@@ -68,7 +68,8 @@ module Yaqb
68
68
  end
69
69
 
70
70
  def validate_filters
71
- attributes = @options[:columns]
71
+ attributes = @presenter.filter_attributes
72
+
72
73
  @filters.each do |key, data|
73
74
  error!(key, data) unless attributes.include?(data[:column])
74
75
  error!(key, data) unless PREDICATES.include?(data[:predicate])
@@ -76,7 +77,7 @@ module Yaqb
76
77
  end
77
78
 
78
79
  def error!(key, data)
79
- columns = @options[:columns].join(', ')
80
+ columns = @presenter.filter_attributes.join(', ')
80
81
  pred = PREDICATES.join(', ')
81
82
 
82
83
  raise Errors::QueryBuilderError.new("q[#{key}]=#{data[:value]}"),
@@ -7,12 +7,12 @@ require 'yaqb/query_builders/filter'
7
7
  module Yaqb
8
8
  module QueryBuilders
9
9
  class QueryOrchestrator
10
- def initialize(scope, params, request, response, options = {})
10
+ def initialize(scope, params, request, response, presenter)
11
11
  @scope = scope
12
12
  @params = params
13
13
  @request = request
14
14
  @response = response
15
- @options = options
15
+ @presenter = presenter
16
16
  end
17
17
 
18
18
  def call
@@ -37,7 +37,7 @@ module Yaqb
37
37
  end
38
38
 
39
39
  def filter
40
- Filter.new(@scope, @params.to_unsafe_hash, @options).filter
40
+ Filter.new(@scope, @params.to_unsafe_hash, @presenter).filter
41
41
  end
42
42
  end
43
43
  end
data/lib/yaqb/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Yaqb
2
- VERSION = '0.1.1'.freeze
2
+ VERSION = '0.2.0'.freeze
3
3
  end
data/lib/yaqb.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'yaqb/version'
4
+ require 'yaqb/hooks'
4
5
  require 'yaqb/configuration'
6
+ require 'yaqb/presenter'
7
+ require 'yaqb/base'
5
8
  require 'yaqb/errors/query_builder_error'
6
- require 'yaqb/railtie'
7
9
 
8
10
  module Yaqb
9
11
  class << self
data/yaqb.gemspec CHANGED
@@ -31,7 +31,6 @@ Gem::Specification.new do |spec|
31
31
 
32
32
  spec.add_development_dependency 'bundler', '~> 2.0'
33
33
  spec.add_development_dependency 'pry'
34
- spec.add_development_dependency 'railties', '>= 4.2.0'
35
34
  spec.add_development_dependency 'rake', '~> 12.3.0'
36
35
  spec.add_development_dependency 'rspec', '~> 3.8.0'
37
36
  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.1.1
4
+ version: 0.2.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-10 00:00:00.000000000 Z
11
+ date: 2019-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: railties
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: 4.2.0
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: 4.2.0
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -99,15 +85,15 @@ files:
99
85
  - bin/console
100
86
  - bin/setup
101
87
  - lib/yaqb.rb
88
+ - lib/yaqb/base.rb
102
89
  - lib/yaqb/configuration.rb
103
90
  - lib/yaqb/errors/query_builder_error.rb
104
91
  - lib/yaqb/hooks.rb
105
- - lib/yaqb/query_builder.rb
92
+ - lib/yaqb/presenter.rb
106
93
  - lib/yaqb/query_builders/filter.rb
107
94
  - lib/yaqb/query_builders/paginate.rb
108
95
  - lib/yaqb/query_builders/query_orchestrator.rb
109
96
  - lib/yaqb/query_builders/sort.rb
110
- - lib/yaqb/railtie.rb
111
97
  - lib/yaqb/version.rb
112
98
  - yaqb.gemspec
113
99
  homepage: https://github.com/ronaldchacon/yaqb
data/lib/yaqb/railtie.rb DELETED
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rails/railtie'
4
-
5
- module Yaqb
6
- class Railtie < ::Rails::Railtie
7
- config.after_initialize do
8
- require 'yaqb/hooks'
9
- end
10
- end
11
- end