trailblazer-finder 0.50.0 → 0.90.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/lib/trailblazer/finder/activities/find.rb +16 -16
  3. data/lib/trailblazer/finder/activities/prepare_adapter.rb +2 -3
  4. data/lib/trailblazer/finder/activities/prepare_entity.rb +2 -2
  5. data/lib/trailblazer/finder/activities/prepare_paging.rb +2 -2
  6. data/lib/trailblazer/finder/activities/prepare_properties.rb +1 -5
  7. data/lib/trailblazer/finder/activities/process_adapters.rb +8 -2
  8. data/lib/trailblazer/finder/adapters/active_record/paging.rb +1 -1
  9. data/lib/trailblazer/finder/adapters/active_record/predicates.rb +14 -14
  10. data/lib/trailblazer/finder/adapters/active_record/sorting.rb +1 -1
  11. data/lib/trailblazer/finder/adapters/basic/paging.rb +1 -1
  12. data/lib/trailblazer/finder/adapters/basic/predicates.rb +14 -14
  13. data/lib/trailblazer/finder/adapters/basic/sorting.rb +1 -1
  14. data/lib/trailblazer/finder/adapters/kaminari/paging.rb +1 -1
  15. data/lib/trailblazer/finder/adapters/sequel/paging.rb +1 -1
  16. data/lib/trailblazer/finder/adapters/sequel/predicates.rb +14 -14
  17. data/lib/trailblazer/finder/adapters/sequel/sorting.rb +1 -1
  18. data/lib/trailblazer/finder/adapters/will_paginate/paging.rb +1 -1
  19. data/lib/trailblazer/finder/dsl.rb +1 -1
  20. data/lib/trailblazer/finder/find.rb +2 -1
  21. data/lib/trailblazer/finder/helpers/sorting.rb +4 -1
  22. data/lib/trailblazer/finder/version.rb +1 -1
  23. data/lib/trailblazer/finder.rb +1 -7
  24. data/lib/trailblazer/operation/finder.rb +45 -43
  25. data/trailblazer-finder.gemspec +8 -8
  26. metadata +22 -59
  27. data/.gitignore +0 -24
  28. data/.rubocop.yml +0 -5
  29. data/.travis.yml +0 -7
  30. data/CHANGES.md +0 -40
  31. data/Gemfile +0 -14
  32. data/LICENSE.txt +0 -9
  33. data/README.md +0 -451
  34. data/Rakefile +0 -31
  35. data/spec/spec_helper.rb +0 -14
  36. data/spec/spec_helper_active_record.rb +0 -48
  37. data/spec/spec_helper_sequel.rb +0 -33
  38. data/spec/spec_helper_will_paginate.rb +0 -13
  39. data/spec/trailblazer/finder/adapters/active_record_spec.rb +0 -267
  40. data/spec/trailblazer/finder/adapters/basic_spec.rb +0 -251
  41. data/spec/trailblazer/finder/adapters/kaminari_spec.rb +0 -115
  42. data/spec/trailblazer/finder/adapters/sequel_spec.rb +0 -267
  43. data/spec/trailblazer/finder/adapters/will_paginate_spec.rb +0 -117
  44. data/spec/trailblazer/finder/base_spec.rb +0 -417
  45. data/spec/trailblazer/finder/dsl_spec.rb +0 -204
  46. data/spec/trailblazer/finder/utils/hash_spec.rb +0 -26
  47. data/spec/trailblazer/finder/utils/splitter_spec.rb +0 -39
  48. data/spec/trailblazer/finder/utils/string_spec.rb +0 -69
  49. data/spec/trailblazer/operation/finder_spec.rb +0 -122
@@ -1,267 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper_sequel"
4
-
5
- module Trailblazer
6
- class Finder
7
- module Adapters
8
- describe Sequel do
9
- after do
10
- SProduct.order(:id).delete
11
- DB.run "update sqlite_sequence set seq = 0 where name = 's_products';"
12
- end
13
-
14
- def define_finder_class(&block)
15
- Class.new(Trailblazer::Finder) do
16
- adapter "Sequel"
17
- entity { SProduct }
18
-
19
- class_eval(&block)
20
- end
21
- end
22
-
23
- def finder_class(&block)
24
- define_finder_class do
25
- class_eval(&block) unless block.nil?
26
- end
27
- end
28
-
29
- def new_finder(filter = {}, &block)
30
- finder_class(&block).new params: filter
31
- end
32
-
33
- describe "#property" do
34
- it "sets the property and works with eq predicate" do
35
- 10.times { |i| SProduct.create name: "product_#{i}" }
36
- finder = new_finder name_eq: "product_2" do
37
- property :name, type: Types::String
38
- end
39
-
40
- expect(finder.result.first.id).to eq 3
41
- expect(finder.result.count).to eq 1
42
- end
43
-
44
- it "sets the property and works with not_eq predicate" do
45
- 10.times { |i| SProduct.create name: "product_#{i}" }
46
- finder = new_finder name_not_eq: "product_2" do
47
- property :name, type: Types::String
48
- end
49
-
50
- expect(finder.result.count).to eq 9
51
- end
52
-
53
- it "sets the property and works with blank predicate" do
54
- 9.times { |i| SProduct.create name: "product_#{i}" }
55
- SProduct.create name: "", slug: "Blank Test"
56
- finder = new_finder name_blank: true do
57
- property :name, type: Types::String
58
- end
59
-
60
- expect(finder.result.count).to eq 1
61
- expect(finder.result.first.slug).to eq "Blank Test"
62
- end
63
-
64
- it "sets the property and works with not blank predicate" do
65
- 9.times { |i| SProduct.create name: "product_#{i}" }
66
- SProduct.create name: "", slug: "Blank Test"
67
- finder = new_finder name_not_blank: true do
68
- property :name, type: Types::String
69
- end
70
-
71
- expect(finder.result.count).to eq 9
72
- expect(finder.result.first.name).to eq "product_0"
73
- end
74
-
75
- it "sets the property and works with gt (greater than) predicate" do
76
- 10.times { |i| SProduct.create name: "product_#{i}" }
77
- finder = new_finder id_gt: 3 do
78
- property :id, type: Types::Integer
79
- end
80
-
81
- expect(finder.result.count).to eq 7
82
- end
83
-
84
- it "sets the property and works with gte (greater than or equal to) predicate" do
85
- 10.times { |i| SProduct.create name: "product_#{i}" }
86
- finder = new_finder id_gte: 3 do
87
- property :id, type: Types::Integer
88
- end
89
-
90
- expect(finder.result.count).to eq 8
91
- end
92
-
93
- it "sets the property and works with lt (less than) predicate" do
94
- 10.times { |i| SProduct.create name: "product_#{i}" }
95
- finder = new_finder id_lt: 3 do
96
- property :id, type: Types::Integer
97
- end
98
-
99
- expect(finder.result.count).to eq 2
100
- end
101
-
102
- it "sets the property and works with lte (less than or equal to) predicate" do
103
- 10.times { |i| SProduct.create name: "product_#{i}" }
104
- finder = new_finder id_lte: 3 do
105
- property :id, type: Types::Integer
106
- end
107
-
108
- expect(finder.result.count).to eq 3
109
- end
110
-
111
- it "sets the property and works with cont predicate" do
112
- 5.times { |i| SProduct.create name: "product_#{i}" }
113
- 5.times { |i| SProduct.create name: "none_#{i}" }
114
- finder = new_finder name_cont: "product" do
115
- property :name, type: Types::String
116
- end
117
-
118
- expect(finder.result.first.id).to eq 1
119
- expect(finder.result.count).to eq 5
120
- end
121
-
122
- it "sets the property and works with not_cont predicate" do
123
- 5.times { |i| SProduct.create name: "product_#{i}" }
124
- 5.times { |i| SProduct.create name: "none_#{i}" }
125
- finder = new_finder name_not_cont: "product" do
126
- property :name, type: Types::String
127
- end
128
-
129
- expect(finder.result.first.id).to eq 6
130
- expect(finder.result.count).to eq 5
131
- end
132
-
133
- it "sets the property and works with sw predicate" do
134
- 5.times { |i| SProduct.create name: "product_#{i}" }
135
- 1.times { |i| SProduct.create name: "predicate_#{i}" }
136
- 4.times { |i| SProduct.create name: "none_#{i}" }
137
- finder = new_finder name_sw: "pr" do
138
- property :name, type: Types::String
139
- end
140
-
141
- expect(finder.result.first.id).to eq 1
142
- expect(finder.result.count).to eq 6
143
- end
144
-
145
- it "sets the property and works with not_sw predicate" do
146
- 5.times { |i| SProduct.create name: "product_#{i}" }
147
- 1.times { |i| SProduct.create name: "predicate_#{i}" }
148
- 4.times { |i| SProduct.create name: "none_#{i}" }
149
- finder = new_finder name_not_sw: "pr" do
150
- property :name, type: Types::String
151
- end
152
-
153
- expect(finder.result.first.id).to eq 7
154
- expect(finder.result.count).to eq 4
155
- end
156
-
157
- it "sets the property and works with ew predicate" do
158
- 5.times { |i| SProduct.create name: "product_#{i}_end" }
159
- 1.times { |i| SProduct.create name: "predicate_#{i}_endwow" }
160
- 4.times { |i| SProduct.create name: "none_#{i}" }
161
- finder = new_finder name_ew: "end" do
162
- property :name, type: Types::String
163
- end
164
-
165
- expect(finder.result.first.id).to eq 1
166
- expect(finder.result.count).to eq 5
167
- end
168
-
169
- it "sets the property and works with not_ew predicate" do
170
- 5.times { |i| SProduct.create name: "product_#{i}_end" }
171
- 1.times { |i| SProduct.create name: "predicate_#{i}_endwow" }
172
- 4.times { |i| SProduct.create name: "none_#{i}" }
173
- finder = new_finder name_not_ew: "end" do
174
- property :name, type: Types::String
175
- end
176
-
177
- expect(finder.result.first.id).to eq 6
178
- expect(finder.result.count).to eq 5
179
- end
180
- end
181
-
182
- describe "#paging" do
183
- it "sets the paging values and shows only the first page results" do
184
- 10.times { |i| SProduct.create name: "product_#{i}" }
185
- finder = new_finder do
186
- paging per_page: 2, min_per_page: 1, max_per_page: 5
187
- end
188
-
189
- expect(finder.result.map { |n| n[:name] }).to eq %w[product_0 product_1]
190
- end
191
-
192
- it "accepts per_page as a parameter" do
193
- 10.times { |i| SProduct.create name: "product_#{i}" }
194
- finder = new_finder page: 2, per_page: 4 do
195
- paging per_page: 5, min_per_page: 2, max_per_page: 8
196
- end
197
-
198
- expect(finder.result.first.id).to eq 5
199
- expect(finder.result.map(&:id)).to eq [5, 6, 7, 8]
200
- end
201
-
202
- it "uses max_per_page in finder as maximum per_page" do
203
- 10.times { |i| SProduct.create name: "product_#{i}" }
204
- finder = new_finder page: 2, per_page: 9 do
205
- paging per_page: 5, min_per_page: 2, max_per_page: 8
206
- end
207
-
208
- expect(finder.result.first.id).to eq 9
209
- expect(finder.result.map(&:id)).to eq [9, 10]
210
- end
211
-
212
- it "uses min_per_page in finder as minimum per_page" do
213
- 10.times { |i| SProduct.create name: "product_#{i}" }
214
- finder = new_finder page: 2, per_page: 1 do
215
- paging per_page: 5, min_per_page: 2, max_per_page: 8
216
- end
217
-
218
- expect(finder.result.first.id).to eq 3
219
- expect(finder.result.map(&:id)).to eq [3, 4]
220
- end
221
- end
222
-
223
- describe "#sorting" do
224
- it "sets the property and works with eq predicate and sorting" do
225
- 5.times { |i| SProduct.create name: "product_#{i}" }
226
- 5.times { |_i| SProduct.create name: "product" }
227
- finder = new_finder name_eq: "product", sort: "id desc" do
228
- property :name, type: Types::String
229
- property :id, type: Types::Integer, sortable: true
230
- end
231
-
232
- expect(finder.result.first.id).to eq 10
233
- expect(finder.result.count).to eq 5
234
- end
235
-
236
- it "sets the property and sorts by multiple columns" do
237
- 5.times { |i| SProduct.create name: "product_#{i}", slug: "slug #{i}" }
238
- 5.times { |i| SProduct.create name: "product", slug: "slug #{i}" }
239
- finder = new_finder sort: "name asc, slug desc" do
240
- property :name, type: Types::String, sortable: true
241
- property :slug, type: Types::String, sortable: true
242
- property :id, type: Types::Integer, sortable: true
243
- end
244
-
245
- expect(finder.result.map { |n| n[:id] }).to eq [10, 9, 8, 7, 6, 1, 2, 3, 4, 5]
246
- expect(finder.result.count).to eq 10
247
- end
248
- end
249
-
250
- describe "Predicates, Paging and Sorting together" do
251
- it "sets the property and works with eq predicate and paging" do
252
- 5.times { |i| SProduct.create name: "product_#{i}" }
253
- 5.times { |_i| SProduct.create name: "product" }
254
- finder = new_finder name_eq: "product", sort: "id desc", page: 2 do
255
- paging per_page: 2, min_per_page: 1, max_per_page: 5
256
- property :name, type: Types::String
257
- property :id, type: Types::Integer, sortable: true
258
- end
259
-
260
- expect(finder.result.first.id).to eq 8
261
- expect(finder.result.map(&:id)).to eq [8, 7]
262
- end
263
- end
264
- end
265
- end
266
- end
267
- end
@@ -1,117 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require "spec_helper_active_record"
4
-
5
- require "will_paginate"
6
- require "will_paginate/active_record"
7
-
8
- require "spec_helper_will_paginate"
9
-
10
- module Trailblazer
11
- class Finder
12
- module Adapters
13
- describe WillPaginate do
14
- after do
15
- Product.delete_all
16
- Product.reset_pk_sequence
17
- end
18
-
19
- def define_finder_class(&block)
20
- Class.new(Trailblazer::Finder) do
21
- entity { Product }
22
-
23
- class_eval(&block)
24
- end
25
- end
26
-
27
- def finder_class(&block)
28
- define_finder_class do
29
- class_eval(&block) unless block.nil?
30
- end
31
- end
32
-
33
- def new_finder(filter = {}, &block)
34
- finder_class(&block).new params: filter
35
- end
36
-
37
- describe "#adapters" do
38
- it "cannot use kaminari without an actual orm" do
39
- 10.times { |i| Product.create name: "product_#{i}" }
40
- finder = new_finder do
41
- paginator "WillPaginate"
42
- paging per_page: 2, min_per_page: 1, max_per_page: 5
43
- end
44
-
45
- expect(finder.errors).to eq [{paginator: "Can't use paginator WillPaginate without using an ORM like ActiveRecord or Sequel"}]
46
- end
47
- end
48
-
49
- describe "#paging" do
50
- it "sets the paging values and shows only the first page results" do
51
- 10.times { |i| Product.create name: "product_#{i}" }
52
- finder = new_finder do
53
- adapter "ActiveRecord"
54
- paginator "WillPaginate"
55
- paging per_page: 2, min_per_page: 1, max_per_page: 5
56
- end
57
-
58
- expect(finder.result.map { |n| n[:name] }).to eq %w[product_0 product_1]
59
- end
60
-
61
- it "accepts per_page as a parameter" do
62
- 10.times { |i| Product.create name: "product_#{i}" }
63
- finder = new_finder page: 2, per_page: 4 do
64
- adapter "ActiveRecord"
65
- paginator "WillPaginate"
66
- paging per_page: 5, min_per_page: 2, max_per_page: 8
67
- end
68
-
69
- expect(finder.result.first.id).to eq 5
70
- expect(finder.result.map(&:id)).to eq [5, 6, 7, 8]
71
- end
72
-
73
- it "uses max_per_page in finder as maximum per_page" do
74
- 10.times { |i| Product.create name: "product_#{i}" }
75
- finder = new_finder page: 2, per_page: 9 do
76
- adapter "ActiveRecord"
77
- paginator "WillPaginate"
78
- paging per_page: 5, min_per_page: 2, max_per_page: 8
79
- end
80
-
81
- expect(finder.result.first.id).to eq 9
82
- expect(finder.result.map(&:id)).to eq [9, 10]
83
- end
84
-
85
- it "uses min_per_page in finder as minimum per_page" do
86
- 10.times { |i| Product.create name: "product_#{i}" }
87
- finder = new_finder page: 2, per_page: 1 do
88
- adapter "ActiveRecord"
89
- paginator "WillPaginate"
90
- paging per_page: 5, min_per_page: 2, max_per_page: 8
91
- end
92
-
93
- expect(finder.result.first.id).to eq 3
94
- expect(finder.result.map(&:id)).to eq [3, 4]
95
- end
96
- end
97
-
98
- describe "Predicates, Paging and Sorting together" do
99
- it "sets the property and works with eq predicate and paging" do
100
- 5.times { |i| Product.create name: "product_#{i}" }
101
- 5.times { |_i| Product.create name: "product" }
102
- finder = new_finder name_eq: "product", sort: "id desc", page: 2 do
103
- adapter "ActiveRecord"
104
- paginator "WillPaginate"
105
- paging per_page: 2, min_per_page: 1, max_per_page: 5
106
- property :name, type: Types::String
107
- property :id, type: Types::Integer, sortable: true
108
- end
109
-
110
- expect(finder.result.map(&:id)).to eq [8, 7]
111
- expect(finder.count).to eq 2
112
- end
113
- end
114
- end
115
- end
116
- end
117
- end