Skip to content

Commit b6ba364

Browse files
tomerothblelump
authored andcommitted
Add pipeline parameter builder
1 parent e2f06c3 commit b6ba364

12 files changed

Lines changed: 237 additions & 39 deletions

File tree

examples/interpreter/to_sql.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ def visit_root(_value, left, _right)
2929

3030
# @api private
3131
def visit_statement(value, left, right)
32+
return visit(left) if right.nil?
3233
case value
3334
when :and
3435
"#{visit(left)} AND #{visit(right)}"

lib/filterly.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
require 'filterly/parser'
44
require 'filterly/tree'
55
require 'filterly/node_builder'
6+
require 'filterly/pipeline/param_builder'
67

78
module Filterly
89
# Your code goes here...

lib/filterly/node_builder.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,18 +79,21 @@ def self.build_custom_node(type:, args:)
7979

8080
# @api private
8181
def self.attr_array(array_of_values)
82-
Filterly::Node.new(:attr_array, [nil, ast_array(array_of_values), nil])
82+
Filterly::Node.new(
83+
:attr_array,
84+
attr_array_params(array_of_values)
85+
)
8386
end
8487

8588
# @api private
8689
def self.ast_array(params)
8790
return if params.nil?
88-
return Filterly::Node.new(:attr_value, [params, nil, nil]) unless
91+
return Filterly::Node.new(:attr_array, [params, nil, nil]) unless
8992
params.is_a?(Array)
9093

9194
return if params.empty?
9295

93-
Filterly::Node.new(:attr_value, attr_array_params(params))
96+
Filterly::Node.new(:attr_array, attr_array_params(params))
9497
end
9598

9699
# @api private
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
# frozen_string_literal: true
2+
3+
module Filterly
4+
module Pipeline
5+
class ParamBuilder
6+
attr_reader :filters, :from, :order, :params
7+
8+
def initialize(filters:, from:, order:, params:)
9+
@filters = filters
10+
@from = from
11+
@order = order
12+
@params = params
13+
end
14+
15+
def limit
16+
params[:limit]
17+
end
18+
19+
def offset
20+
params[:offset]
21+
end
22+
23+
def search_query
24+
params[:search_query]
25+
end
26+
27+
def self.new
28+
super(
29+
filters: Filterly::Tree.initialize_with_filters,
30+
from: Set.new,
31+
order: Set.new,
32+
params: { limit: 10, offset: 0, search_query: nil }
33+
)
34+
end
35+
36+
def append(deps)
37+
deps.each do |k, v|
38+
case k
39+
when :filters
40+
@filters.prepend_ast(Filterly::Parser.new(v).to_ast, :and)
41+
when :from
42+
@from << v
43+
when :order
44+
@order << v
45+
when :params
46+
@params = @params.merge(v)
47+
end
48+
end
49+
end
50+
51+
alias << append
52+
end
53+
end
54+
end

lib/filterly/tree.rb

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,10 @@
44

55
module Filterly
66
class Tree
7-
attr_reader :root_node, :tree_traverser
7+
attr_reader :root_node
88

99
def initialize(root_node)
1010
@root_node = root_node
11-
@tree_traverser = TreeTraverser.new(root_node)
1211
end
1312

1413
def self.new(root_node)
@@ -18,12 +17,23 @@ def self.new(root_node)
1817
super(root_node)
1918
end
2019

20+
def self.initialize_with_filters
21+
new(
22+
Filterly::NodeBuilder.build_custom_node(
23+
type: :root,
24+
args: [:filters, nil, nil]
25+
)
26+
)
27+
end
28+
2129
def extend_ast(node_attr_name, new_node, stmt_type)
22-
@root_node = tree_traverser.extend_ast(node_attr_name, new_node, stmt_type)
30+
@root_node = TreeTraverser
31+
.new(@root_node)
32+
.extend_ast(node_attr_name, new_node, stmt_type)
2333
end
2434

2535
def prepend_ast(new_node, stmt_type)
26-
@root_node = tree_traverser.prepend_ast(new_node, stmt_type)
36+
@root_node = TreeTraverser.new(@root_node).prepend_ast(new_node, stmt_type)
2737
end
2838

2939
def to_ast
@@ -73,13 +83,13 @@ def recreate_node(node_attr_name, new_node, stmt_type)
7383
[
7484
ast_node.value,
7585
self
76-
.class
77-
.new(ast_node.left)
78-
.extend_ast(node_attr_name, new_node, stmt_type),
86+
.class
87+
.new(ast_node.left)
88+
.extend_ast(node_attr_name, new_node, stmt_type),
7989
self
80-
.class
81-
.new(ast_node.right)
82-
.extend_ast(node_attr_name, new_node, stmt_type)
90+
.class
91+
.new(ast_node.right)
92+
.extend_ast(node_attr_name, new_node, stmt_type)
8393
]
8494
)
8595
end

spec/examples/interpreter_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
require 'spec_helper'
44
require 'filterly/node'
5-
require File.join Examples.root, 'interpreter'
5+
require 'examples/interpreter'
66

77
RSpec.describe Interpreter do
88
subject do

spec/examples/to_sql/expression_factory_spec.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
require 'spec_helper'
44
require 'filterly/node'
5-
require File.join Examples.root, 'interpreter/to_sql/expression_factory'
5+
require 'examples/interpreter/to_sql/expression_factory'
66

77
RSpec.describe Interpreter::ToSql::ExpressionFactory do
88
subject do

spec/spec_helper.rb

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# frozen_string_literal: true
2+
3+
$LOAD_PATH.unshift('.')
4+
15
require "bundler/setup"
26
require "filterly"
37

@@ -12,9 +16,3 @@
1216
c.syntax = :expect
1317
end
1418
end
15-
16-
class Examples
17-
def self.root
18-
File.join (File.dirname __dir__), 'examples'
19-
end
20-
end

spec/unit/node_builder_spec.rb

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -102,21 +102,22 @@
102102
[:attr_name, ['course_id', [], []]],
103103
[
104104
:attr_array, [
105-
nil,
105+
12,
106106
[
107-
:attr_value, [
108-
12,
109-
[:attr_value, [1, [], []]],
110-
[
111-
:attr_value, [
112-
3,
113-
[:attr_value, [4, [], []]],
114-
[]
115-
]
116-
]
107+
:attr_array, [
108+
1,
109+
[],
110+
[]
117111
]
118112
],
119-
[]
113+
[
114+
:attr_array,
115+
[
116+
3,
117+
[:attr_array, [4, [], []]],
118+
[]
119+
]
120+
]
120121
]
121122
]
122123
]

spec/unit/parser_spec.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,16 +37,16 @@
3737
[
3838
:attr_array,
3939
[
40-
nil,
40+
12,
4141
[
42-
:attr_value,
42+
:attr_array,
4343
[
44-
12,
45-
[:attr_value, [34, [], []]],
46-
[:attr_value, [54, [], []]]
44+
34,
45+
[],
46+
[]
4747
]
4848
],
49-
[]
49+
[:attr_array, [54, [], []]]
5050
]
5151
]
5252
]

0 commit comments

Comments
 (0)