wallaby-active_record 0.2.2 → 0.2.4
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/lib/adapters/wallaby/active_record/logger.rb +21 -0
- data/lib/adapters/wallaby/active_record/model_pagination_provider.rb +1 -1
- data/lib/adapters/wallaby/active_record/model_service_provider/querier/transformer.rb +45 -13
- data/lib/adapters/wallaby/active_record/model_service_provider/querier/wrapper.rb +5 -6
- data/lib/adapters/wallaby/active_record/model_service_provider/querier.rb +2 -2
- data/lib/adapters/wallaby/active_record/pundit_provider.rb +1 -1
- data/lib/wallaby/active_record/version.rb +1 -1
- data/lib/wallaby/active_record.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 77775377884b090f9d0c0679a0eda24caccaece57e0429f8307457d91ebce2a5
|
|
4
|
+
data.tar.gz: 23bdf49c685c9b938cfea121ab3bf44fad2f2bffeba964a4bfcfacd3595368f8
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 35d9dcf0387cae97199ad0aa47628bbc4719c1f3b48cccd0e04450b87c5b54c5358e8fe5ab3a9fc960e5fa410990438a4b5d00bb7431ab0d8ade6ea7f2aa26af
|
|
7
|
+
data.tar.gz: 07c885247c19f20b71db0f4f85b07e7cb955e68d4cbdec727057dc55938ecac103e4e42f813584869df932638dd7559f2544372aead0903beb86089f75d18c04
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Wallaby
|
|
4
|
+
class ActiveRecord
|
|
5
|
+
# move this to wallaby-core later
|
|
6
|
+
class Logger
|
|
7
|
+
class << self
|
|
8
|
+
%w(debug warn info).each do |method_id|
|
|
9
|
+
define_method method_id do |message, replacements = {}|
|
|
10
|
+
source = caller(replacements.delete(:sourcing).try(:to_i) || 1, 1).first
|
|
11
|
+
Rails.logger.public_send(
|
|
12
|
+
method_id,
|
|
13
|
+
"#{method_id.upcase}: #{format message, replacements}\nfrom #{source}"
|
|
14
|
+
)
|
|
15
|
+
nil
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -12,7 +12,7 @@ module Wallaby
|
|
|
12
12
|
# kaminari
|
|
13
13
|
@collection.respond_to?(:total_count) || \
|
|
14
14
|
@collection.respond_to?(:total_entries) # will_paginate
|
|
15
|
-
|
|
15
|
+
Logger.warn "#{@collection.inspect} is not paginatable." unless paginatable
|
|
16
16
|
|
|
17
17
|
paginatable
|
|
18
18
|
end
|
|
@@ -34,9 +34,21 @@ module Wallaby
|
|
|
34
34
|
':!()' => :not_between
|
|
35
35
|
}.freeze
|
|
36
36
|
|
|
37
|
+
SEQUENCE_JOIN_OPERATORS = { # :nodoc:
|
|
38
|
+
':' => :or,
|
|
39
|
+
':=' => :or,
|
|
40
|
+
':!' => :and,
|
|
41
|
+
':!=' => :and,
|
|
42
|
+
':<>' => :and
|
|
43
|
+
}.freeze
|
|
44
|
+
|
|
45
|
+
BETWEEN_OPERATORS = { # :nodoc:
|
|
46
|
+
':()' => true,
|
|
47
|
+
':!()' => true
|
|
48
|
+
}.freeze
|
|
49
|
+
|
|
37
50
|
# For single null
|
|
38
51
|
rule null: simple(:value)
|
|
39
|
-
rule null: sequence(:value)
|
|
40
52
|
|
|
41
53
|
# For single boolean
|
|
42
54
|
rule(boolean: simple(:value)) { /true/i.match? value }
|
|
@@ -51,8 +63,7 @@ module Wallaby
|
|
|
51
63
|
rule left: simple(:left), op: simple(:op), right: simple(:right) do
|
|
52
64
|
oped = op.try :to_str
|
|
53
65
|
operator = SIMPLE_OPERATORS[oped]
|
|
54
|
-
#
|
|
55
|
-
next unless operator
|
|
66
|
+
next Transformer.warn "Unknown operator #{oped} for %<exp>s", instance_values unless operator
|
|
56
67
|
|
|
57
68
|
lefted = left.try :to_str
|
|
58
69
|
convert =
|
|
@@ -68,24 +79,45 @@ module Wallaby
|
|
|
68
79
|
rule left: simple(:left), op: simple(:op), right: sequence(:right) do
|
|
69
80
|
oped = op.try :to_str
|
|
70
81
|
operator = SEQUENCE_OPERATORS[oped]
|
|
71
|
-
next unless operator
|
|
82
|
+
next Transformer.warn "Unknown operator #{oped} for %<exp>s", instance_values unless operator
|
|
72
83
|
|
|
73
84
|
exps = Wrapper.new
|
|
74
85
|
lefted = left.try :to_str
|
|
75
|
-
if
|
|
76
|
-
|
|
77
|
-
next unless nil_operator
|
|
86
|
+
if BETWEEN_OPERATORS[oped] # BETWEEN related operators
|
|
87
|
+
next Transformer.warn 'Invalid values for %<exp>s', instance_values unless right.first && right.second
|
|
78
88
|
|
|
79
|
-
|
|
89
|
+
convert = Range.new right.first, right.second
|
|
90
|
+
exps.push left: lefted, op: operator, right: convert
|
|
91
|
+
else
|
|
92
|
+
join = SEQUENCE_JOIN_OPERATORS[oped]
|
|
93
|
+
if right.include? nil
|
|
94
|
+
exps.push left: lefted, op: SIMPLE_OPERATORS[oped], right: right.delete(nil), join: join
|
|
95
|
+
end
|
|
96
|
+
exps.push left: lefted, op: operator, right: right, join: join
|
|
80
97
|
end
|
|
81
|
-
convert = Range.new right.try(:first), right.try(:second) if %w(:() :!()).include?(oped)
|
|
82
|
-
exps.push left: lefted, op: operator, right: convert || right
|
|
83
98
|
exps
|
|
84
99
|
end
|
|
85
100
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
101
|
+
class << self
|
|
102
|
+
# @param query_string [String]
|
|
103
|
+
# @return [Array]
|
|
104
|
+
def execute(query_string)
|
|
105
|
+
result = new.apply Parser.new.parse(query_string || EMPTY_STRING)
|
|
106
|
+
result.is_a?(Array) ? result : [result]
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
# @param message [String]
|
|
110
|
+
# @param exp [Hash,nil] transformed expression
|
|
111
|
+
# @return [nil]
|
|
112
|
+
def warn(message, exp = nil)
|
|
113
|
+
Logger.warn message, exp: to_origin(exp), sourcing: 2
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
# @param exp [Hash,nil] transformed expression
|
|
117
|
+
# @return [String] origin expression
|
|
118
|
+
def to_origin(exp)
|
|
119
|
+
"'#{exp['left']}#{exp['op']}#{exp['right']}'"
|
|
120
|
+
end
|
|
89
121
|
end
|
|
90
122
|
end
|
|
91
123
|
end
|
|
@@ -4,18 +4,17 @@ module Wallaby
|
|
|
4
4
|
class ActiveRecord
|
|
5
5
|
class ModelServiceProvider
|
|
6
6
|
class Querier
|
|
7
|
-
#
|
|
7
|
+
# Wrapper for the transform result
|
|
8
8
|
class Wrapper
|
|
9
9
|
attr_reader :list
|
|
10
|
-
delegate :push,
|
|
10
|
+
delegate :push, to: :list
|
|
11
|
+
delegate :each, to: :list
|
|
12
|
+
delegate :last, to: :list
|
|
13
|
+
delegate :[], to: :last
|
|
11
14
|
|
|
12
15
|
def initialize(list = [])
|
|
13
16
|
@list = list
|
|
14
17
|
end
|
|
15
|
-
|
|
16
|
-
def [](key)
|
|
17
|
-
list.last[key]
|
|
18
|
-
end
|
|
19
18
|
end
|
|
20
19
|
end
|
|
21
20
|
end
|
|
@@ -36,7 +36,7 @@ module Wallaby
|
|
|
36
36
|
# @param params [ActionController::Parameters]
|
|
37
37
|
# @return [Array<String, Array, Array>] filter_name, keywords, field_queries
|
|
38
38
|
def extract(params)
|
|
39
|
-
expressions = Transformer.
|
|
39
|
+
expressions = Transformer.execute params[:q]
|
|
40
40
|
keywords = expressions.select { |v| v.is_a? String }
|
|
41
41
|
field_queries = expressions.select { |v| v.is_a? Wrapper }
|
|
42
42
|
filter_name = params[:filter]
|
|
@@ -149,7 +149,7 @@ module Wallaby
|
|
|
149
149
|
query = nil
|
|
150
150
|
exps.each do |exp|
|
|
151
151
|
sub = table[exp[:left]].try(exp[:op], exp[:right])
|
|
152
|
-
query = query.try(:
|
|
152
|
+
query = query.try(exp[:join], sub) || sub
|
|
153
153
|
end
|
|
154
154
|
query
|
|
155
155
|
end
|
|
@@ -11,7 +11,7 @@ module Wallaby
|
|
|
11
11
|
def accessible_for(_action, scope)
|
|
12
12
|
Pundit.policy_scope! user, scope
|
|
13
13
|
rescue Pundit::NotDefinedError
|
|
14
|
-
|
|
14
|
+
Logger.warn "Cannot find scope policy for #{scope.inspect}."
|
|
15
15
|
scope
|
|
16
16
|
end
|
|
17
17
|
end
|
|
@@ -6,6 +6,7 @@ require 'wallaby/active_record/version'
|
|
|
6
6
|
|
|
7
7
|
# All files required for ActiveRecord ORM
|
|
8
8
|
require 'adapters/wallaby/active_record'
|
|
9
|
+
require 'adapters/wallaby/active_record/logger'
|
|
9
10
|
require 'adapters/wallaby/active_record/model_finder'
|
|
10
11
|
|
|
11
12
|
# ModelPaginationProvider: begin
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: wallaby-active_record
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tian Chen
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-03-
|
|
11
|
+
date: 2020-03-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activerecord
|
|
@@ -106,6 +106,7 @@ files:
|
|
|
106
106
|
- lib/adapters/wallaby/active_record.rb
|
|
107
107
|
- lib/adapters/wallaby/active_record/cancancan_provider.rb
|
|
108
108
|
- lib/adapters/wallaby/active_record/default_provider.rb
|
|
109
|
+
- lib/adapters/wallaby/active_record/logger.rb
|
|
109
110
|
- lib/adapters/wallaby/active_record/model_decorator.rb
|
|
110
111
|
- lib/adapters/wallaby/active_record/model_decorator/fields_builder.rb
|
|
111
112
|
- lib/adapters/wallaby/active_record/model_decorator/fields_builder/association_builder.rb
|