trailblazer-finder 0.10.3 → 0.50.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1878b1acf62f66eb1c410b476037ab0c0aa45b761805f151fe987f6d81b24ecc
4
- data.tar.gz: 27e69700c5507481a8c06828889d451c98976c92a1b8542602565ecf438461e0
3
+ metadata.gz: cfcac8d017065a8faea558faebaa1bd9e742b7ceb9444a50eafd79d2c759bbfc
4
+ data.tar.gz: fdfafe463cba185afb34934f981b3428bb357a4031f941e22cb44e1c45608e11
5
5
  SHA512:
6
- metadata.gz: fe66baf784a25237ee917eee6c261af6dba12e4f5e63df164a1cc37d268fad4b893c315594c2aea9d4083fc20ab3fedab50baf52a447dc198ea19ae0b260cc38
7
- data.tar.gz: 50051b6a1e6a8413c1d4d70d455310fa2f4114e598737c0334fe1f1a0124906227c77f42d01e4722e76b352fc6ca55af1beef90f50309bf2d8ffd8690e034f4a
6
+ metadata.gz: 89c313cc891e5ef6b1d6e07145e23541d74698b543e47f4213d621e21925ec18c60d01d66cdbc2c6fe9d2ddbbfc4d5ef201f1bb80a1264ffe70c01f3e37772e0
7
+ data.tar.gz: 2a00366ecc9c10ae045ce1d1c69f455cc7a8b101be8bb360228cf8cb148833502ea6039ce30740781bd93f97c8cabf878a6129beeb072c9e4e6e0b13b5c3128f
data/CHANGES.md CHANGED
@@ -1,3 +1,6 @@
1
+ # 0.50.0
2
+ * Breaking change: Use adapter and paginator configs instead of mixing them in adapters config.
3
+
1
4
  # 0.10.3
2
5
  * Add support for strings in filters keys.
3
6
 
data/README.md CHANGED
@@ -78,7 +78,7 @@ Basically for most use cases, Entity is the entity/model/array of hashes you wis
78
78
  ```ruby
79
79
  class Post::Finder < Trailblazer::Finder
80
80
  # Without defining an ORM everything defaults to dealing with hash objects
81
- adapters :ActiveRecord
81
+ adapter :ActiveRecord
82
82
 
83
83
  # Optional if you use it as option in the caller, Model/Entity or Array with Hashes
84
84
  entity { Post }
@@ -364,7 +364,7 @@ You can specify the adapters you wish to use inside your enherited Finder class.
364
364
  ### Adapters Example
365
365
  ```ruby
366
366
  class Post::Finder < Trailblazer::Finder
367
- adapters :ActiveRecord
367
+ adapter "ActiveRecord"
368
368
  end
369
369
  ```
370
370
 
@@ -374,7 +374,7 @@ The only thing the [ActiveRecord](https://github.com/rails/rails/tree/master/act
374
374
  #### Active Record Example
375
375
  ```ruby
376
376
  class Post::Finder < Trailblazer::Finder
377
- adapters :ActiveRecord
377
+ adapter "ActiveRecord"
378
378
  end
379
379
  ```
380
380
 
@@ -384,7 +384,7 @@ The only thing the [Sequel](https://github.com/jeremyevans/sequel) adapter does,
384
384
  #### Sequel Example
385
385
  ```ruby
386
386
  class Post::Finder < Trailblazer::Finder
387
- adapters :Sequel
387
+ adapter "Sequel"
388
388
  end
389
389
  ```
390
390
 
@@ -3,7 +3,6 @@
3
3
  module Trailblazer
4
4
  class Finder
5
5
  module Activities
6
- # Find Activity
7
6
  class Find < Trailblazer::Activity::Railway
8
7
  PREDICATES = %w[eq not_eq blank not_blank lt lte gt gte sw not_sw ew not_ew cont not_cont].freeze
9
8
 
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "prepare_adapters"
3
+ require_relative "prepare_adapter"
4
4
  require_relative "prepare_entity"
5
5
  require_relative "prepare_properties"
6
6
  require_relative "prepare_filters"
@@ -11,14 +11,13 @@ require_relative "prepare_sorting"
11
11
  module Trailblazer
12
12
  class Finder
13
13
  module Activities
14
- # Prepare Activity
15
14
  class Prepare < Trailblazer::Activity::Railway
16
15
  def clean_ctx((ctx, flow_options), **)
17
16
  ctx.delete(:options)
18
17
  [Activity::Right, [ctx, flow_options]]
19
18
  end
20
19
 
21
- step Subprocess(PrepareAdapters)
20
+ step Subprocess(PrepareAdapter)
22
21
  step Subprocess(PrepareEntity)
23
22
  step Subprocess(PrepareProperties)
24
23
  step Subprocess(PrepareFilters)
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Trailblazer
4
+ class Finder
5
+ module Activities
6
+ class PrepareAdapter < Trailblazer::Activity::Railway
7
+
8
+ def set_adapter(ctx, **)
9
+ ctx[:adapter] = ctx.dig(:config, :adapter) || "Basic"
10
+ end
11
+
12
+ def validate_adapter(_ctx, adapter:, **)
13
+ (ORM_ADAPTERS + ["Basic"]).include? adapter.to_s
14
+ end
15
+
16
+ def is_invalid?((ctx, _flow_options), **_circuit_options)
17
+ (ctx[:errors] ||= []) << {adapter: "The specified adapter are invalid"}
18
+ end
19
+
20
+ step :set_adapter
21
+ step :validate_adapter
22
+ fail :is_invalid?
23
+ end
24
+ end
25
+ end
26
+ end
@@ -9,7 +9,6 @@ require_relative "process_filters"
9
9
  module Trailblazer
10
10
  class Finder
11
11
  module Activities
12
- # Process Activity
13
12
  class Process < Trailblazer::Activity::Railway
14
13
  step Subprocess(ProcessAdapters)
15
14
  step Subprocess(ProcessPredicates)
@@ -4,36 +4,32 @@ module Trailblazer
4
4
  class Finder
5
5
  module Activities
6
6
  class ProcessAdapters < Trailblazer::Activity::Railway
7
- def set_orm_adapters(ctx, **)
8
- ctx[:adapters].each do |adapter|
9
- next unless (ORM_ADAPTERS + ["Basic"]).include?(adapter)
10
-
11
- ctx[:orm] = {}
12
- ctx[:orm][:adapter] = adapter
13
- ctx[:orm][:predicates] = "Trailblazer::Finder::Adapters::#{adapter}::Predicates"
14
- ctx[:orm][:paging] = "Trailblazer::Finder::Adapters::#{adapter}::Paging"
15
- ctx[:orm][:sorting] = "Trailblazer::Finder::Adapters::#{adapter}::Sorting"
16
- return true
17
- end
7
+ def set_adapter((ctx, flow_options), **)
8
+ adapter = ctx[:adapter]
9
+ ctx[:orm] = {}
10
+ ctx[:orm][:adapter] = adapter
11
+ ctx[:orm][:predicates] = "Trailblazer::Finder::Adapters::#{adapter}::Predicates"
12
+ ctx[:orm][:paging] = "Trailblazer::Finder::Adapters::#{adapter}::Paging"
13
+ ctx[:orm][:sorting] = "Trailblazer::Finder::Adapters::#{adapter}::Sorting"
14
+ true
18
15
  end
19
16
 
20
- def set_paging_adapters(ctx, **)
21
- ctx[:adapters].each do |adapter|
22
- next unless PAGING_ADAPTERS.include?(adapter)
23
- return false if ctx[:adapters].include?("Basic")
24
- ctx[:orm][:paging] = "Trailblazer::Finder::Adapters::#{adapter}::Paging"
25
- return true
26
- end
17
+ def set_paginator(ctx, **)
18
+ paginator = ctx.dig(:config, :paginator)
19
+ return true unless paginator
20
+ return false unless ORM_ADAPTERS.include?(ctx[:orm][:adapter])
21
+ return false unless PAGING_ADAPTERS.include?(paginator)
22
+ ctx[:orm][:paging] = "Trailblazer::Finder::Adapters::#{paginator}::Paging"
27
23
  true
28
24
  end
29
25
 
30
- def invalid_paging_adapter_error(ctx, **)
31
- (ctx[:errors] ||= []) << {adapters: "Can't use paging adapters like Kaminari without using an ORM like ActiveRecord or Sequel"}
26
+ def invalid_paginator_error(ctx, **)
27
+ (ctx[:errors] ||= []) << {paginator: "Can't use paginator #{ctx.dig(:config, :paginator)} without using an ORM like ActiveRecord or Sequel"}
32
28
  end
33
29
 
34
- step :set_orm_adapters
35
- step :set_paging_adapters
36
- fail :invalid_paging_adapter_error
30
+ step :set_adapter, fast_track: true
31
+ step :set_paginator
32
+ fail :invalid_paginator_error
37
33
  end
38
34
  end
39
35
  end
@@ -3,9 +3,8 @@
3
3
  module Trailblazer
4
4
  class Finder
5
5
  module Adapters
6
- # ActiveRecord Adapter
7
6
  module Kaminari
8
- # Kaminari Paging Adapter
7
+ # Kaminari Paginator
9
8
  module Paging
10
9
  module_function
11
10
 
@@ -3,9 +3,8 @@
3
3
  module Trailblazer
4
4
  class Finder
5
5
  module Adapters
6
- # ActiveRecord Adapter
7
6
  module WillPaginate
8
- # Kaminari Paging Adapter
7
+ # Kaminari Paginator
9
8
  module Paging
10
9
  module_function
11
10
 
@@ -33,10 +33,12 @@ module Trailblazer
33
33
  config[:filters][filter_name][:block] = block || nil
34
34
  end
35
35
 
36
- def adapters(*adapters)
37
- adapters.each do |adapter|
38
- config[:adapters].push adapter.to_s.split("::").last.gsub("}>", "") if config[:adapters]
39
- end
36
+ def adapter(adapter)
37
+ config[:adapter] = adapter.to_s
38
+ end
39
+
40
+ def paginator(paginator)
41
+ config[:paginator] = paginator.to_s
40
42
  end
41
43
 
42
44
  def apply_config(options, **)
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Trailblazer
4
4
  class Finder
5
- VERSION = "0.10.3".freeze
5
+ VERSION = "0.50.0".freeze
6
6
  end
7
7
  end
@@ -13,7 +13,7 @@ module Trailblazer
13
13
 
14
14
  def define_finder_class(&block)
15
15
  Class.new(Trailblazer::Finder) do
16
- adapters ActiveRecord
16
+ adapter "ActiveRecord"
17
17
  entity { Product }
18
18
 
19
19
  class_eval(&block)
@@ -32,15 +32,15 @@ module Trailblazer
32
32
  finder_class(&block).new params: filter
33
33
  end
34
34
 
35
- describe "#adapters" do
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
- adapters Kaminari
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 [{adapters: "Can't use paging adapters like Kaminari without using an ORM like ActiveRecord or Sequel"}]
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
- adapters ActiveRecord, Kaminari
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
- adapters ActiveRecord, Kaminari
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
- adapters ActiveRecord, Kaminari
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
- adapters ActiveRecord, Kaminari
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
- adapters ActiveRecord, Kaminari
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
- adapters Sequel
16
+ adapter "Sequel"
17
17
  entity { SProduct }
18
18
 
19
19
  class_eval(&block)
@@ -38,11 +38,11 @@ module Trailblazer
38
38
  it "cannot use kaminari without an actual orm" do
39
39
  10.times { |i| Product.create name: "product_#{i}" }
40
40
  finder = new_finder do
41
- adapters WillPaginate
41
+ paginator "WillPaginate"
42
42
  paging per_page: 2, min_per_page: 1, max_per_page: 5
43
43
  end
44
44
 
45
- expect(finder.errors).to eq [{adapters: "Can't use paging adapters like Kaminari without using an ORM like ActiveRecord or Sequel"}]
45
+ expect(finder.errors).to eq [{paginator: "Can't use paginator WillPaginate without using an ORM like ActiveRecord or Sequel"}]
46
46
  end
47
47
  end
48
48
 
@@ -50,7 +50,8 @@ module Trailblazer
50
50
  it "sets the paging values and shows only the first page results" do
51
51
  10.times { |i| Product.create name: "product_#{i}" }
52
52
  finder = new_finder do
53
- adapters ActiveRecord, WillPaginate
53
+ adapter "ActiveRecord"
54
+ paginator "WillPaginate"
54
55
  paging per_page: 2, min_per_page: 1, max_per_page: 5
55
56
  end
56
57
 
@@ -60,7 +61,8 @@ module Trailblazer
60
61
  it "accepts per_page as a parameter" do
61
62
  10.times { |i| Product.create name: "product_#{i}" }
62
63
  finder = new_finder page: 2, per_page: 4 do
63
- adapters ActiveRecord, WillPaginate
64
+ adapter "ActiveRecord"
65
+ paginator "WillPaginate"
64
66
  paging per_page: 5, min_per_page: 2, max_per_page: 8
65
67
  end
66
68
 
@@ -71,7 +73,8 @@ module Trailblazer
71
73
  it "uses max_per_page in finder as maximum per_page" do
72
74
  10.times { |i| Product.create name: "product_#{i}" }
73
75
  finder = new_finder page: 2, per_page: 9 do
74
- adapters ActiveRecord, WillPaginate
76
+ adapter "ActiveRecord"
77
+ paginator "WillPaginate"
75
78
  paging per_page: 5, min_per_page: 2, max_per_page: 8
76
79
  end
77
80
 
@@ -82,7 +85,8 @@ module Trailblazer
82
85
  it "uses min_per_page in finder as minimum per_page" do
83
86
  10.times { |i| Product.create name: "product_#{i}" }
84
87
  finder = new_finder page: 2, per_page: 1 do
85
- adapters ActiveRecord, WillPaginate
88
+ adapter "ActiveRecord"
89
+ paginator "WillPaginate"
86
90
  paging per_page: 5, min_per_page: 2, max_per_page: 8
87
91
  end
88
92
 
@@ -96,7 +100,8 @@ module Trailblazer
96
100
  5.times { |i| Product.create name: "product_#{i}" }
97
101
  5.times { |_i| Product.create name: "product" }
98
102
  finder = new_finder name_eq: "product", sort: "id desc", page: 2 do
99
- adapters ActiveRecord, WillPaginate
103
+ adapter "ActiveRecord"
104
+ paginator "WillPaginate"
100
105
  paging per_page: 2, min_per_page: 1, max_per_page: 5
101
106
  property :name, type: Types::String
102
107
  property :id, type: Types::Integer, sortable: true
@@ -60,29 +60,20 @@ module Trailblazer
60
60
  it "checks for a valid adapter and returns an error" do
61
61
  entity = [{id: 1, value: "Test 1"}, {id: 2, value: "Test 2"}, {id: 3, value: "Test 3"}]
62
62
  finder = new_finder entity, value_eq: "Test 1" do
63
- adapters :NonExisting
63
+ adapter :NonExisting
64
64
  end
65
65
 
66
- expect(finder.errors).to eq [{adapters: "One or more of the specified adapters are invalid"}]
67
- end
68
-
69
- it "checks if multiple orm adapters are requested and returns an error" do
70
- entity = [{id: 1, value: "Test 1"}, {id: 2, value: "Test 2"}, {id: 3, value: "Test 3"}]
71
- finder = new_finder entity, value_eq: "Test 1" do
72
- adapters :ActiveRecord, :Sequel
73
- end
74
-
75
- expect(finder.errors).to eq [{adapters: "More then one ORM adapter specified"}]
66
+ expect(finder.errors).to eq [{adapter: "The specified adapter are invalid"}]
76
67
  end
77
68
 
78
69
  it "sets the adapter in the config" do
79
70
  entity = [{id: 1, value: "Test 1"}, {id: 2, value: "Test 2"}, {id: 3, value: "Test 3"}]
80
71
  finder = new_finder entity, value_eq: "Test 1" do
81
- adapters ActiveRecord
72
+ adapter "ActiveRecord"
82
73
  property :value, type: Base
83
74
  end
84
75
 
85
- expect(finder.class.config[:adapters]).to eq ["ActiveRecord"]
76
+ expect(finder.class.config[:adapter]).to eq "ActiveRecord"
86
77
  end
87
78
  end
88
79
 
@@ -5,7 +5,7 @@ require "trailblazer"
5
5
  require "spec_helper_active_record"
6
6
 
7
7
  class Product::FinderNoEntity < Trailblazer::Finder
8
- adapters ActiveRecord
8
+ adapter "ActiveRecord"
9
9
 
10
10
  property :id, type: Types::Integer
11
11
  property :name, type: Types::String, sortable: true
@@ -19,7 +19,7 @@ class Product::FinderNoEntity < Trailblazer::Finder
19
19
  end
20
20
 
21
21
  class Product::FinderWithEntity < Trailblazer::Finder
22
- adapters ActiveRecord
22
+ adapter "ActiveRecord"
23
23
 
24
24
  entity { Product }
25
25
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: trailblazer-finder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.3
4
+ version: 0.50.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-03-09 00:00:00.000000000 Z
13
+ date: 2020-03-23 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: dry-types
@@ -275,7 +275,6 @@ extra_rdoc_files: []
275
275
  files:
276
276
  - ".gitignore"
277
277
  - ".rubocop.yml"
278
- - ".rubocop_todo.yml"
279
278
  - ".travis.yml"
280
279
  - CHANGES.md
281
280
  - Gemfile
@@ -285,7 +284,7 @@ files:
285
284
  - lib/trailblazer/finder.rb
286
285
  - lib/trailblazer/finder/activities/find.rb
287
286
  - lib/trailblazer/finder/activities/prepare.rb
288
- - lib/trailblazer/finder/activities/prepare_adapters.rb
287
+ - lib/trailblazer/finder/activities/prepare_adapter.rb
289
288
  - lib/trailblazer/finder/activities/prepare_entity.rb
290
289
  - lib/trailblazer/finder/activities/prepare_filters.rb
291
290
  - lib/trailblazer/finder/activities/prepare_paging.rb
@@ -1,78 +0,0 @@
1
- # This configuration was generated by
2
- # `rubocop --auto-gen-config`
3
- # on 2018-08-23 00:10:15 +0200 using RuboCop version 0.58.2.
4
- # The point is for the user to remove these configuration records
5
- # one by one as the offenses are removed from the code base.
6
- # Note that changes in the inspected code, or installation of new
7
- # versions of RuboCop, may require this file to be generated again.
8
-
9
- # Offense count: 1
10
- Metrics/AbcSize:
11
- Max: 31
12
-
13
- # Offense count: 2
14
- Metrics/CyclomaticComplexity:
15
- Max: 7
16
-
17
- # Offense count: 13
18
- # Configuration parameters: AllowHeredoc, AllowURI, URISchemes, IgnoreCopDirectives, IgnoredPatterns.
19
- # URISchemes: http, https
20
- Metrics/LineLength:
21
- Max: 283
22
-
23
- # Offense count: 1
24
- # Configuration parameters: CountKeywordArgs.
25
- Metrics/ParameterLists:
26
- Max: 6
27
-
28
- # Offense count: 1
29
- RSpec/DescribeClass:
30
- Exclude:
31
- - 'spec/trailblazer/operation/finder_spec.rb'
32
-
33
- # Offense count: 78
34
- # Configuration parameters: Max.
35
- RSpec/ExampleLength:
36
- Exclude:
37
- - 'spec/trailblazer/finder/adapters/active_record_spec.rb'
38
- - 'spec/trailblazer/finder/adapters/basic_spec.rb'
39
- - 'spec/trailblazer/finder/adapters/kaminari_spec.rb'
40
- - 'spec/trailblazer/finder/adapters/sequel_spec.rb'
41
- - 'spec/trailblazer/finder/adapters/will_paginate_spec.rb'
42
- - 'spec/trailblazer/finder/base_spec.rb'
43
- - 'spec/trailblazer/finder/dsl_spec.rb'
44
- - 'spec/trailblazer/finder/utils/string_spec.rb'
45
-
46
- # Offense count: 62
47
- # Configuration parameters: AggregateFailuresByDefault.
48
- RSpec/MultipleExpectations:
49
- Max: 7
50
-
51
- # Offense count: 2
52
- RSpec/RepeatedDescription:
53
- Exclude:
54
- - 'spec/trailblazer/finder/adapters/basic_spec.rb'
55
-
56
- # Offense count: 6
57
- # Cop supports --auto-correct.
58
- # Configuration parameters: AutoCorrect, EnforcedStyle.
59
- # SupportedStyles: nested, compact
60
- Style/ClassAndModuleChildren:
61
- Exclude:
62
- - 'spec/trailblazer/operation/finder_spec.rb'
63
-
64
- # Offense count: 1
65
- # Configuration parameters: SuspiciousParamNames.
66
- # SuspiciousParamNames: options, opts, args, params, parameters
67
- Style/OptionHash:
68
- Exclude:
69
- - 'lib/trailblazer/finder/dsl.rb'
70
-
71
- # Offense count: 3
72
- Style/Send:
73
- Exclude:
74
- - 'lib/trailblazer/finder/adapters/sequel/sorting.rb'
75
- - 'lib/trailblazer/operation/finder.rb'
76
-
77
- RSpec/DescribedClass:
78
- SkipBlocks: true
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Trailblazer
4
- class Finder
5
- module Activities
6
- # Adapters Activity
7
- class PrepareAdapters < Trailblazer::Activity::Railway
8
- def check_for_adapters(ctx, **)
9
- adapters = ctx.dig(:config, :adapters)
10
- return true if adapters.empty?
11
-
12
- adapters.each do |adapter|
13
- return true if Finder::Adapters.constants.include?(adapter.to_sym)
14
- end
15
- false
16
- end
17
-
18
- ## Only one ORM can be accepted
19
- def validate_adapters(ctx, **)
20
- adapters = ctx.dig(:config, :adapters)
21
- return true if adapters.empty?
22
-
23
- adapters.each do |adapter|
24
- if ORM_ADAPTERS.include?(adapter)
25
- return false if (adapters & (ORM_ADAPTERS - [adapter])).any?
26
- end
27
- end
28
- true
29
- end
30
-
31
- def invalid_adapters_error((ctx, flow_options), **_circuit_options)
32
- (ctx[:errors] ||= []) << {adapters: "One or more of the specified adapters are invalid"}
33
- end
34
-
35
- def multiple_orm_error((ctx, flow_options), **_circuit_options)
36
- (ctx[:errors] ||= []) << {adapters: "More then one ORM adapter specified"}
37
- end
38
-
39
- def set_adapters(ctx, **)
40
- adapters = ctx.dig(:config, :adapters)
41
- ctx[:adapters] = (ORM_ADAPTERS & adapters).any? ? adapters : ["Basic"] + adapters
42
- end
43
-
44
- step :check_for_adapters
45
- fail :invalid_adapters_error, Output(:success) => End(:failure)
46
- step :validate_adapters
47
- fail :multiple_orm_error
48
- step :set_adapters
49
- end
50
- end
51
- end
52
- end