trailblazer-finder 0.10.1 → 0.70.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 +4 -4
- data/.github/workflows/ci.yml +16 -0
- data/.rubocop.yml +7 -1
- data/CHANGES.md +15 -0
- data/Gemfile +3 -1
- data/README.md +4 -4
- data/Rakefile +0 -6
- data/lib/trailblazer/finder/activities/find.rb +20 -21
- data/lib/trailblazer/finder/activities/prepare.rb +2 -3
- data/lib/trailblazer/finder/activities/prepare_adapter.rb +25 -0
- data/lib/trailblazer/finder/activities/prepare_entity.rb +5 -5
- data/lib/trailblazer/finder/activities/prepare_paging.rb +5 -11
- data/lib/trailblazer/finder/activities/prepare_params.rb +3 -3
- data/lib/trailblazer/finder/activities/prepare_properties.rb +1 -5
- data/lib/trailblazer/finder/activities/prepare_sorting.rb +3 -8
- data/lib/trailblazer/finder/activities/process.rb +0 -1
- data/lib/trailblazer/finder/activities/process_adapters.rb +25 -23
- data/lib/trailblazer/finder/adapters/active_record/paging.rb +1 -1
- data/lib/trailblazer/finder/adapters/active_record/predicates.rb +14 -14
- data/lib/trailblazer/finder/adapters/active_record/sorting.rb +1 -1
- data/lib/trailblazer/finder/adapters/basic/paging.rb +1 -1
- data/lib/trailblazer/finder/adapters/basic/predicates.rb +14 -14
- data/lib/trailblazer/finder/adapters/basic/sorting.rb +1 -1
- data/lib/trailblazer/finder/adapters/kaminari/paging.rb +2 -3
- data/lib/trailblazer/finder/adapters/sequel/paging.rb +1 -1
- data/lib/trailblazer/finder/adapters/sequel/predicates.rb +14 -14
- data/lib/trailblazer/finder/adapters/sequel/sorting.rb +1 -1
- data/lib/trailblazer/finder/adapters/will_paginate/paging.rb +2 -3
- data/lib/trailblazer/finder/dsl.rb +12 -9
- data/lib/trailblazer/finder/find.rb +4 -2
- data/lib/trailblazer/finder/helpers/sorting.rb +4 -1
- data/lib/trailblazer/finder/version.rb +1 -1
- data/lib/trailblazer/finder.rb +1 -7
- data/lib/trailblazer/operation/finder.rb +3 -3
- data/spec/spec_helper.rb +0 -1
- data/spec/trailblazer/finder/adapters/active_record_spec.rb +5 -5
- data/spec/trailblazer/finder/adapters/basic_spec.rb +12 -3
- data/spec/trailblazer/finder/adapters/kaminari_spec.rb +13 -8
- data/spec/trailblazer/finder/adapters/sequel_spec.rb +5 -5
- data/spec/trailblazer/finder/adapters/will_paginate_spec.rb +12 -7
- data/spec/trailblazer/finder/dsl_spec.rb +4 -13
- data/spec/trailblazer/operation/finder_spec.rb +18 -3
- data/trailblazer-finder.gemspec +4 -5
- metadata +21 -36
- data/.rubocop_todo.yml +0 -78
- data/.travis.yml +0 -7
- data/lib/trailblazer/finder/activities/prepare_adapters.rb +0 -52
@@ -10,7 +10,7 @@ module Trailblazer
|
|
10
10
|
module_function
|
11
11
|
|
12
12
|
def set_eq_handler
|
13
|
-
|
13
|
+
->(entity, attribute, value) do
|
14
14
|
return if Utils::String.blank?(value.to_s) || Utils::String.blank?(attribute.to_s)
|
15
15
|
|
16
16
|
Utils::Hash.deep_locate ->(k, v, _) { k == attribute.to_sym && v.to_s == value.to_s && !v.nil? }, entity
|
@@ -18,7 +18,7 @@ module Trailblazer
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def set_not_eq_handler
|
21
|
-
|
21
|
+
->(entity, attribute, value) do
|
22
22
|
return if Utils::String.blank?(value.to_s)
|
23
23
|
|
24
24
|
Utils::Hash.deep_locate ->(k, v, _) { k == attribute.to_sym && v.to_s != value.to_s && !v.nil? }, entity
|
@@ -26,43 +26,43 @@ module Trailblazer
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def set_blank_handler
|
29
|
-
|
29
|
+
->(entity, attribute, _value) do
|
30
30
|
Utils::Hash.deep_locate ->(k, v, _) { k == attribute.to_sym && Utils::String.blank?(v.to_s) }, entity
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
def set_not_blank_handler
|
35
|
-
|
35
|
+
->(entity, attribute, _value) do
|
36
36
|
Utils::Hash.deep_locate ->(k, v, _) { k == attribute.to_sym && !Utils::String.blank?(v.to_s) }, entity
|
37
37
|
end
|
38
38
|
end
|
39
39
|
|
40
40
|
def set_gt_handler
|
41
|
-
|
41
|
+
->(entity, attribute, value) do
|
42
42
|
Utils::Hash.deep_locate ->(k, v, _) { k == attribute.to_sym && v.to_f > value.to_f }, entity
|
43
43
|
end
|
44
44
|
end
|
45
45
|
|
46
46
|
def set_gte_handler
|
47
|
-
|
47
|
+
->(entity, attribute, value) do
|
48
48
|
Utils::Hash.deep_locate ->(k, v, _) { k == attribute.to_sym && v.to_f >= value.to_f }, entity
|
49
49
|
end
|
50
50
|
end
|
51
51
|
|
52
52
|
def set_lt_handler
|
53
|
-
|
53
|
+
->(entity, attribute, value) do
|
54
54
|
Utils::Hash.deep_locate ->(k, v, _) { k == attribute.to_sym && v.to_f < value.to_f }, entity
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
def set_lte_handler
|
59
|
-
|
59
|
+
->(entity, attribute, value) do
|
60
60
|
Utils::Hash.deep_locate ->(k, v, _) { k == attribute.to_sym && v.to_i <= value.to_f }, entity
|
61
61
|
end
|
62
62
|
end
|
63
63
|
|
64
64
|
def set_cont_handler
|
65
|
-
|
65
|
+
->(entity, attribute, value) do
|
66
66
|
return if Utils::String.blank?(value.to_s) || Utils::String.blank?(attribute.to_s)
|
67
67
|
|
68
68
|
Utils::Hash.deep_locate ->(k, v, _) { k == attribute.to_sym && v.to_s.include?(value.to_s) && !v.nil? }, entity
|
@@ -70,7 +70,7 @@ module Trailblazer
|
|
70
70
|
end
|
71
71
|
|
72
72
|
def set_not_cont_handler
|
73
|
-
|
73
|
+
->(entity, attribute, value) do
|
74
74
|
return if Utils::String.blank?(value.to_s) || Utils::String.blank?(attribute.to_s)
|
75
75
|
|
76
76
|
Utils::Hash.deep_locate ->(k, v, _) { k == attribute.to_sym && !v.to_s.include?(value.to_s) && !v.nil? }, entity
|
@@ -78,7 +78,7 @@ module Trailblazer
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def set_sw_handler
|
81
|
-
|
81
|
+
->(entity, attribute, value) do
|
82
82
|
return if Utils::String.blank?(value.to_s) || Utils::String.blank?(attribute.to_s)
|
83
83
|
|
84
84
|
Utils::Hash.deep_locate ->(k, v, _) { k == attribute.to_sym && v.to_s.start_with?(value.to_s) && !v.nil? }, entity
|
@@ -86,7 +86,7 @@ module Trailblazer
|
|
86
86
|
end
|
87
87
|
|
88
88
|
def set_not_sw_handler
|
89
|
-
|
89
|
+
->(entity, attribute, value) do
|
90
90
|
return if Utils::String.blank?(value.to_s) || Utils::String.blank?(attribute.to_s)
|
91
91
|
|
92
92
|
Utils::Hash.deep_locate ->(k, v, _) { k == attribute.to_sym && !v.to_s.start_with?(value.to_s) && !v.nil? }, entity
|
@@ -94,7 +94,7 @@ module Trailblazer
|
|
94
94
|
end
|
95
95
|
|
96
96
|
def set_ew_handler
|
97
|
-
|
97
|
+
->(entity, attribute, value) do
|
98
98
|
return if Utils::String.blank?(value.to_s) || Utils::String.blank?(attribute.to_s)
|
99
99
|
|
100
100
|
Utils::Hash.deep_locate ->(k, v, _) { k == attribute.to_sym && v.to_s.end_with?(value.to_s) && !v.nil? }, entity
|
@@ -102,7 +102,7 @@ module Trailblazer
|
|
102
102
|
end
|
103
103
|
|
104
104
|
def set_not_ew_handler
|
105
|
-
|
105
|
+
->(entity, attribute, value) do
|
106
106
|
return if Utils::String.blank?(value.to_s) || Utils::String.blank?(attribute.to_s)
|
107
107
|
|
108
108
|
Utils::Hash.deep_locate ->(k, v, _) { k == attribute.to_sym && !v.to_s.end_with?(value.to_s) && !v.nil? }, entity
|
@@ -3,14 +3,13 @@
|
|
3
3
|
module Trailblazer
|
4
4
|
class Finder
|
5
5
|
module Adapters
|
6
|
-
# ActiveRecord Adapter
|
7
6
|
module Kaminari
|
8
|
-
# Kaminari
|
7
|
+
# Kaminari Paginator
|
9
8
|
module Paging
|
10
9
|
module_function
|
11
10
|
|
12
11
|
def set_paging_handler
|
13
|
-
|
12
|
+
->(current_page, per_page, entity) do
|
14
13
|
entity.page(current_page).per(per_page)
|
15
14
|
end
|
16
15
|
end
|
@@ -10,7 +10,7 @@ module Trailblazer
|
|
10
10
|
module_function
|
11
11
|
|
12
12
|
def set_eq_handler
|
13
|
-
|
13
|
+
->(entity, attribute, value) do
|
14
14
|
return if Utils::String.blank?(value.to_s)
|
15
15
|
|
16
16
|
entity.where { ::Sequel[attribute.to_sym] =~ value }
|
@@ -18,7 +18,7 @@ module Trailblazer
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def set_not_eq_handler
|
21
|
-
|
21
|
+
->(entity, attribute, value) do
|
22
22
|
return if Utils::String.blank?(value.to_s)
|
23
23
|
|
24
24
|
entity.where { ::Sequel[attribute.to_sym] !~ value }
|
@@ -26,74 +26,74 @@ module Trailblazer
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def set_blank_handler
|
29
|
-
|
29
|
+
->(entity, attribute, _value) do
|
30
30
|
entity.where { ::Sequel.|({::Sequel[attribute.to_sym] => nil}, {::Sequel[attribute.to_sym] => ""}) }
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
def set_not_blank_handler
|
35
|
-
|
35
|
+
->(entity, attribute, _value) do
|
36
36
|
entity.exclude(::Sequel[attribute.to_sym] => nil, ::Sequel[attribute.to_sym] => "")
|
37
37
|
# entity.exclude(attribute.to_sym => nil).exclude(attribute.to_sym => "")
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
41
|
def set_gt_handler
|
42
|
-
|
42
|
+
->(entity, attribute, value) do
|
43
43
|
entity.where { ::Sequel[attribute.to_sym] > value.to_f }
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
47
|
def set_gte_handler
|
48
|
-
|
48
|
+
->(entity, attribute, value) do
|
49
49
|
entity.where { ::Sequel[attribute.to_sym] >= value.to_f }
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
53
53
|
def set_lt_handler
|
54
|
-
|
54
|
+
->(entity, attribute, value) do
|
55
55
|
entity.where { ::Sequel[attribute.to_sym] < value.to_f }
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
59
59
|
def set_lte_handler
|
60
|
-
|
60
|
+
->(entity, attribute, value) do
|
61
61
|
entity.where { ::Sequel[attribute.to_sym] <= value.to_f }
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
65
|
def set_cont_handler
|
66
|
-
|
66
|
+
->(entity, attribute, value) do
|
67
67
|
entity.where(::Sequel.like(attribute.to_sym, "%#{value}%"))
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
71
|
def set_not_cont_handler
|
72
|
-
|
72
|
+
->(entity, attribute, value) do
|
73
73
|
entity.where(~::Sequel.like(attribute.to_sym, "%#{value}%"))
|
74
74
|
end
|
75
75
|
end
|
76
76
|
|
77
77
|
def set_sw_handler
|
78
|
-
|
78
|
+
->(entity, attribute, value) do
|
79
79
|
entity.where(::Sequel.like(attribute.to_sym, "#{value}%"))
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
83
|
def set_not_sw_handler
|
84
|
-
|
84
|
+
->(entity, attribute, value) do
|
85
85
|
entity.where(~::Sequel.like(attribute.to_sym, "#{value}%"))
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
89
89
|
def set_ew_handler
|
90
|
-
|
90
|
+
->(entity, attribute, value) do
|
91
91
|
entity.where(::Sequel.like(attribute.to_sym, "%#{value}"))
|
92
92
|
end
|
93
93
|
end
|
94
94
|
|
95
95
|
def set_not_ew_handler
|
96
|
-
|
96
|
+
->(entity, attribute, value) do
|
97
97
|
entity.where(~::Sequel.like(attribute.to_sym, "%#{value}"))
|
98
98
|
end
|
99
99
|
end
|
@@ -3,14 +3,13 @@
|
|
3
3
|
module Trailblazer
|
4
4
|
class Finder
|
5
5
|
module Adapters
|
6
|
-
# ActiveRecord Adapter
|
7
6
|
module WillPaginate
|
8
|
-
# Kaminari
|
7
|
+
# Kaminari Paginator
|
9
8
|
module Paging
|
10
9
|
module_function
|
11
10
|
|
12
11
|
def set_paging_handler
|
13
|
-
|
12
|
+
->(current_page, per_page, entity) do
|
14
13
|
entity.paginate per_page: per_page, page: current_page.zero? ? nil : current_page
|
15
14
|
end
|
16
15
|
end
|
@@ -13,7 +13,7 @@ module Trailblazer
|
|
13
13
|
config[:entity] = block
|
14
14
|
end
|
15
15
|
|
16
|
-
def paging(options
|
16
|
+
def paging(**options)
|
17
17
|
config[:paging][:per_page] = options[:per_page] || 25
|
18
18
|
config[:paging][:min_per_page] = options[:min_per_page] || 10
|
19
19
|
config[:paging][:max_per_page] = options[:max_per_page] || 100
|
@@ -26,16 +26,19 @@ module Trailblazer
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def filter_by(name, options = {}, &block)
|
29
|
-
|
30
|
-
config[:filters][
|
31
|
-
config[:filters][
|
32
|
-
config[:filters][
|
29
|
+
filter_name = name.to_sym
|
30
|
+
config[:filters][filter_name] = {}
|
31
|
+
config[:filters][filter_name][:name] = name
|
32
|
+
config[:filters][filter_name][:with] = options[:with] if options.include?(:with)
|
33
|
+
config[:filters][filter_name][:block] = block || nil
|
33
34
|
end
|
34
35
|
|
35
|
-
def
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
def adapter(adapter)
|
37
|
+
config[:adapter] = adapter.to_s
|
38
|
+
end
|
39
|
+
|
40
|
+
def paginator(paginator)
|
41
|
+
config[:paginator] = paginator.to_s
|
39
42
|
end
|
40
43
|
|
41
44
|
def apply_config(options, **)
|
@@ -17,13 +17,15 @@ module Trailblazer
|
|
17
17
|
def process_filters(ctx)
|
18
18
|
@params.reduce(@entity) do |entity, (name, value)|
|
19
19
|
value = Utils::String.to_date(value) if Utils::String.date?(value)
|
20
|
-
|
20
|
+
filter = @filters[name.to_sym] || @filters[name]
|
21
|
+
new_entity = ctx.instance_exec entity, filter[:name], value, &filter[:handler]
|
21
22
|
new_entity || entity
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
25
26
|
def process_paging(ctx)
|
26
|
-
ctx.instance_exec @paging[:current_page], @paging[:per_page],
|
27
|
+
ctx.instance_exec @paging[:current_page], @paging[:per_page],
|
28
|
+
(@sorting.empty? ? (process_filters ctx) : (process_sorting ctx)), &@paging[:handler]
|
27
29
|
end
|
28
30
|
|
29
31
|
def process_sorting(ctx)
|
@@ -31,7 +31,10 @@ module Trailblazer
|
|
31
31
|
if sorting.nil?
|
32
32
|
params.merge! sort: "#{attribute} #{sort_direction_for(attribute)}"
|
33
33
|
elsif sorting.include?(attribute.to_s)
|
34
|
-
params.merge! sort: sorting.gsub(
|
34
|
+
params.merge! sort: sorting.gsub(
|
35
|
+
/#{attribute} #{sort_direction_for(attribute)}/,
|
36
|
+
"#{attribute} #{reverse_sort_direction_for(attribute)}"
|
37
|
+
)
|
35
38
|
else
|
36
39
|
params.merge! sort: "#{sorting}, #{attribute} #{sort_direction_for(attribute)}"
|
37
40
|
end
|
data/lib/trailblazer/finder.rb
CHANGED
@@ -33,14 +33,8 @@ require "trailblazer/operation/finder"
|
|
33
33
|
|
34
34
|
module Trailblazer
|
35
35
|
class Finder
|
36
|
-
DRY_TYPES_VERSION = Gem::Version.new(Dry::Types::VERSION)
|
37
|
-
LEGACY_DRY_TYPES = DRY_TYPES_VERSION <= Gem::Version.new('1')
|
38
36
|
module Types
|
39
|
-
|
40
|
-
include Dry::Types.module
|
41
|
-
else
|
42
|
-
include Dry.Types(default: :nominal)
|
43
|
-
end
|
37
|
+
include Dry.Types(default: :nominal)
|
44
38
|
end
|
45
39
|
|
46
40
|
include Base
|
@@ -12,13 +12,12 @@ Trailblazer::Operation.instance_eval do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
class Finder
|
15
|
-
def call(ctx, options
|
15
|
+
def call(ctx, **options)
|
16
16
|
builder = Finder::Builder.new
|
17
17
|
ctx[:finder] = finder = builder.call(options, options[:params])
|
18
18
|
ctx[:model] = finder # Don't like it, but somehow it's needed if contracts are loaded
|
19
19
|
ctx[:"result.finder"] = Trailblazer::Operation::Result.new(!finder.nil?, {})
|
20
20
|
|
21
|
-
|
22
21
|
ctx[:"result.finder"].success?
|
23
22
|
end
|
24
23
|
|
@@ -49,7 +48,8 @@ Trailblazer::Operation.instance_eval do
|
|
49
48
|
|
50
49
|
def apply_id(params)
|
51
50
|
return if params[:id].nil?
|
52
|
-
|
51
|
+
|
52
|
+
params[:id_eq] = params[:id]
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -13,7 +13,7 @@ module Trailblazer
|
|
13
13
|
|
14
14
|
def define_finder_class(&block)
|
15
15
|
Class.new(Trailblazer::Finder) do
|
16
|
-
|
16
|
+
adapter "ActiveRecord"
|
17
17
|
entity { Product }
|
18
18
|
|
19
19
|
class_eval(&block)
|
@@ -132,7 +132,7 @@ module Trailblazer
|
|
132
132
|
|
133
133
|
it "sets the property and works with sw predicate" do
|
134
134
|
5.times { |i| Product.create name: "product_#{i}" }
|
135
|
-
|
135
|
+
Product.create name: "predicate_0"
|
136
136
|
4.times { |i| Product.create name: "none_#{i}" }
|
137
137
|
finder = new_finder name_sw: "pr" do
|
138
138
|
property :name, type: Types::String
|
@@ -144,7 +144,7 @@ module Trailblazer
|
|
144
144
|
|
145
145
|
it "sets the property and works with not_sw predicate" do
|
146
146
|
5.times { |i| Product.create name: "product_#{i}" }
|
147
|
-
|
147
|
+
Product.create name: "predicate_0"
|
148
148
|
4.times { |i| Product.create name: "none_#{i}" }
|
149
149
|
finder = new_finder name_not_sw: "pr" do
|
150
150
|
property :name, type: Types::String
|
@@ -156,7 +156,7 @@ module Trailblazer
|
|
156
156
|
|
157
157
|
it "sets the property and works with ew predicate" do
|
158
158
|
5.times { |i| Product.create name: "product_#{i}_end" }
|
159
|
-
|
159
|
+
Product.create name: "predicate_0_endwow"
|
160
160
|
4.times { |i| Product.create name: "none_#{i}" }
|
161
161
|
finder = new_finder name_ew: "end" do
|
162
162
|
property :name, type: Types::String
|
@@ -168,7 +168,7 @@ module Trailblazer
|
|
168
168
|
|
169
169
|
it "sets the property and works with not_ew predicate" do
|
170
170
|
5.times { |i| Product.create name: "product_#{i}_end" }
|
171
|
-
|
171
|
+
Product.create name: "predicate_0_endwow"
|
172
172
|
4.times { |i| Product.create name: "none_#{i}" }
|
173
173
|
finder = new_finder name_not_ew: "end" do
|
174
174
|
property :name, type: Types::String
|
@@ -173,7 +173,10 @@ module Trailblazer
|
|
173
173
|
end
|
174
174
|
|
175
175
|
it "accepts per_page as a parameter" do
|
176
|
-
entity = [
|
176
|
+
entity = [
|
177
|
+
{id: 1, value: "Test 1"}, {id: 2, value: "Test 2"}, {id: 3, value: "Test 3"}, {id: 4, value: "Test 4"},
|
178
|
+
{id: 5, value: "Test 5"}, {id: 6, value: "Test 6"}, {id: 7, value: "Test 7"}, {id: 8, value: "Test 8"}, {id: 9, value: "Test 9"}, {id: 10, value: "Test 10"}
|
179
|
+
]
|
177
180
|
finder = new_finder entity, page: 2, per_page: 4 do
|
178
181
|
paging per_page: 5, min_per_page: 2, max_per_page: 8
|
179
182
|
end
|
@@ -183,7 +186,10 @@ module Trailblazer
|
|
183
186
|
end
|
184
187
|
|
185
188
|
it "uses max_per_page in finder as maximum per_page" do
|
186
|
-
entity = [
|
189
|
+
entity = [
|
190
|
+
{id: 1, value: "Test 1"}, {id: 2, value: "Test 2"}, {id: 3, value: "Test 3"}, {id: 4, value: "Test 4"},
|
191
|
+
{id: 5, value: "Test 5"}, {id: 6, value: "Test 6"}, {id: 7, value: "Test 7"}, {id: 8, value: "Test 8"}, {id: 9, value: "Test 9"}, {id: 10, value: "Test 10"}
|
192
|
+
]
|
187
193
|
finder = new_finder entity, page: 2, per_page: 9 do
|
188
194
|
paging per_page: 5, min_per_page: 2, max_per_page: 8
|
189
195
|
end
|
@@ -193,7 +199,10 @@ module Trailblazer
|
|
193
199
|
end
|
194
200
|
|
195
201
|
it "uses min_per_page in finder as minimum per_page" do
|
196
|
-
entity = [
|
202
|
+
entity = [
|
203
|
+
{id: 1, value: "Test 1"}, {id: 2, value: "Test 2"}, {id: 3, value: "Test 3"}, {id: 4, value: "Test 4"},
|
204
|
+
{id: 5, value: "Test 5"}, {id: 6, value: "Test 6"}, {id: 7, value: "Test 7"}, {id: 8, value: "Test 8"}, {id: 9, value: "Test 9"}, {id: 10, value: "Test 10"}
|
205
|
+
]
|
197
206
|
finder = new_finder entity, page: 2, per_page: 1 do
|
198
207
|
paging per_page: 5, min_per_page: 2, max_per_page: 8
|
199
208
|
end
|
@@ -32,15 +32,15 @@ module Trailblazer
|
|
32
32
|
finder_class(&block).new params: filter
|
33
33
|
end
|
34
34
|
|
35
|
-
describe "#
|
35
|
+
describe "#adapter" do
|
36
36
|
it "cannot use kaminari without an actual orm" do
|
37
37
|
10.times { |i| Product.create name: "product_#{i}" }
|
38
38
|
finder = new_finder do
|
39
|
-
|
39
|
+
paginator :Kaminari
|
40
40
|
paging per_page: 2, min_per_page: 1, max_per_page: 5
|
41
41
|
end
|
42
42
|
|
43
|
-
expect(finder.errors).to eq [{
|
43
|
+
expect(finder.errors).to eq [{paginator: "Can't use paginator Kaminari without using an ORM like ActiveRecord or Sequel"}]
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -48,7 +48,8 @@ module Trailblazer
|
|
48
48
|
it "sets the paging values and shows only the first page results" do
|
49
49
|
10.times { |i| Product.create name: "product_#{i}" }
|
50
50
|
finder = new_finder do
|
51
|
-
|
51
|
+
adapter :ActiveRecord
|
52
|
+
paginator "Kaminari"
|
52
53
|
paging per_page: 2, min_per_page: 1, max_per_page: 5
|
53
54
|
end
|
54
55
|
|
@@ -58,7 +59,8 @@ module Trailblazer
|
|
58
59
|
it "accepts per_page as a parameter" do
|
59
60
|
10.times { |i| Product.create name: "product_#{i}" }
|
60
61
|
finder = new_finder page: 2, per_page: 4 do
|
61
|
-
|
62
|
+
adapter "ActiveRecord"
|
63
|
+
paginator "Kaminari"
|
62
64
|
paging per_page: 5, min_per_page: 2, max_per_page: 8
|
63
65
|
end
|
64
66
|
|
@@ -69,7 +71,8 @@ module Trailblazer
|
|
69
71
|
it "uses max_per_page in finder as maximum per_page" do
|
70
72
|
10.times { |i| Product.create name: "product_#{i}" }
|
71
73
|
finder = new_finder page: 2, per_page: 9 do
|
72
|
-
|
74
|
+
adapter "ActiveRecord"
|
75
|
+
paginator "Kaminari"
|
73
76
|
paging per_page: 5, min_per_page: 2, max_per_page: 8
|
74
77
|
end
|
75
78
|
|
@@ -80,7 +83,8 @@ module Trailblazer
|
|
80
83
|
it "uses min_per_page in finder as minimum per_page" do
|
81
84
|
10.times { |i| Product.create name: "product_#{i}" }
|
82
85
|
finder = new_finder page: 2, per_page: 1 do
|
83
|
-
|
86
|
+
adapter "ActiveRecord"
|
87
|
+
paginator "Kaminari"
|
84
88
|
paging per_page: 5, min_per_page: 2, max_per_page: 8
|
85
89
|
end
|
86
90
|
|
@@ -94,7 +98,8 @@ module Trailblazer
|
|
94
98
|
5.times { |i| Product.create name: "product_#{i}" }
|
95
99
|
5.times { |_i| Product.create name: "product" }
|
96
100
|
finder = new_finder name_eq: "product", sort: "id desc", page: 2 do
|
97
|
-
|
101
|
+
adapter "ActiveRecord"
|
102
|
+
paginator "Kaminari"
|
98
103
|
paging per_page: 2, min_per_page: 1, max_per_page: 5
|
99
104
|
property :name, type: Types::String
|
100
105
|
property :id, type: Types::Integer, sortable: true
|
@@ -13,7 +13,7 @@ module Trailblazer
|
|
13
13
|
|
14
14
|
def define_finder_class(&block)
|
15
15
|
Class.new(Trailblazer::Finder) do
|
16
|
-
|
16
|
+
adapter "Sequel"
|
17
17
|
entity { SProduct }
|
18
18
|
|
19
19
|
class_eval(&block)
|
@@ -132,7 +132,7 @@ module Trailblazer
|
|
132
132
|
|
133
133
|
it "sets the property and works with sw predicate" do
|
134
134
|
5.times { |i| SProduct.create name: "product_#{i}" }
|
135
|
-
|
135
|
+
SProduct.create name: "predicate_0"
|
136
136
|
4.times { |i| SProduct.create name: "none_#{i}" }
|
137
137
|
finder = new_finder name_sw: "pr" do
|
138
138
|
property :name, type: Types::String
|
@@ -144,7 +144,7 @@ module Trailblazer
|
|
144
144
|
|
145
145
|
it "sets the property and works with not_sw predicate" do
|
146
146
|
5.times { |i| SProduct.create name: "product_#{i}" }
|
147
|
-
|
147
|
+
SProduct.create name: "predicate_0"
|
148
148
|
4.times { |i| SProduct.create name: "none_#{i}" }
|
149
149
|
finder = new_finder name_not_sw: "pr" do
|
150
150
|
property :name, type: Types::String
|
@@ -156,7 +156,7 @@ module Trailblazer
|
|
156
156
|
|
157
157
|
it "sets the property and works with ew predicate" do
|
158
158
|
5.times { |i| SProduct.create name: "product_#{i}_end" }
|
159
|
-
|
159
|
+
SProduct.create name: "predicate_0_endwow"
|
160
160
|
4.times { |i| SProduct.create name: "none_#{i}" }
|
161
161
|
finder = new_finder name_ew: "end" do
|
162
162
|
property :name, type: Types::String
|
@@ -168,7 +168,7 @@ module Trailblazer
|
|
168
168
|
|
169
169
|
it "sets the property and works with not_ew predicate" do
|
170
170
|
5.times { |i| SProduct.create name: "product_#{i}_end" }
|
171
|
-
|
171
|
+
SProduct.create name: "predicate_0_endwow"
|
172
172
|
4.times { |i| SProduct.create name: "none_#{i}" }
|
173
173
|
finder = new_finder name_not_ew: "end" do
|
174
174
|
property :name, type: Types::String
|