wallaby-active_record 0.2.2 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|