trailblazer-finder 0.91.0 → 0.92.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 299e4ce460407b5ae703246c2c0cd3a9306560a3d540be1ded926a1cc892456e
4
- data.tar.gz: 470abe97adffcaa66406a2013bae3990ad6a2d82e89132f7cb0ca157b038458e
3
+ metadata.gz: d5aa468a471c2d9bb6f7f0196e46a14905a557956a18da87723eb74a3f897b10
4
+ data.tar.gz: 6d236f533affcf4eb828704e438b2ec9f30270d61626be709aa29d64c5489d5d
5
5
  SHA512:
6
- metadata.gz: 4585a52d42fc8e86dd0570c2e30e290a1af08ffce6ab965e4ed674011e909006a9bd3c7ec45408a7485536e080b150d90a731e6f37c2e31d2483e6f8be5bf049
7
- data.tar.gz: 75a02a268b5ce8d2fa02a47cf3b9f2c5fc90b08f94920c03136c5ec6070b822ce58a1716ea92a99f375b56916433577bc778d9d0e87a2f1049f96c2969223af0
6
+ metadata.gz: 8067cad54995bf7b42b522dc10fc3574dcb7a0a62ad3548e207785c647737192059c0193dd80420891d7e9ab0e96ae13f66c18f0edee94bd29b211139c6457b6
7
+ data.tar.gz: 9da38615d6276c0c886ab89396da5e0dcf776eefe8ed8e369d439ce38af3113d477c39dee6482c28d6110a9f4e880aa0c3f4b0a704140ed419ea66a83f06b410
@@ -5,7 +5,7 @@ module Trailblazer
5
5
  module Activities
6
6
  class PrepareAdapter < Trailblazer::Activity::Railway
7
7
  def set_adapter(ctx, **)
8
- ctx[:adapter] = ctx.dig(:config, :adapter) || "Basic"
8
+ ctx[:adapter] = ctx[:config].adapter
9
9
  end
10
10
 
11
11
  def validate_adapter(_ctx, adapter:, **)
@@ -4,16 +4,16 @@ module Trailblazer
4
4
  class Finder
5
5
  module Activities
6
6
  class PrepareEntity < Trailblazer::Activity::Railway
7
- def validate_entity(ctx, **)
8
- ctx.dig(:options, :entity) || ctx.dig(:config, :entity)
7
+ def validate_entity(ctx, config:, **)
8
+ ctx.dig(:options, :entity) || config.entity
9
9
  end
10
10
 
11
11
  def invalid_entity_error(ctx, **)
12
12
  (ctx[:errors] ||= []) << {entity: "Invalid entity specified"}
13
13
  end
14
14
 
15
- def set_entity(ctx, **)
16
- ctx[:entity] = ctx.dig(:options, :entity) || instance_eval(&ctx[:config][:entity])
15
+ def set_entity(ctx, config:, **)
16
+ ctx[:entity] = ctx.dig(:options, :entity) || instance_eval(&config.entity)
17
17
  end
18
18
 
19
19
  step :validate_entity
@@ -4,8 +4,8 @@ module Trailblazer
4
4
  class Finder
5
5
  module Activities
6
6
  class PrepareFilters < Trailblazer::Activity::Railway
7
- def validate_filters(ctx, **)
8
- filters = ctx.dig(:config, :filters)
7
+ def validate_filters(_ctx, config:, **)
8
+ filters = config.filters
9
9
  filters.each do |key, _value|
10
10
  return false if !filters[key][:with].nil? && !filters[key][:with].is_a?(Symbol)
11
11
  end
@@ -16,8 +16,8 @@ module Trailblazer
16
16
  (ctx[:errors] ||= []) << {filters: "One or more filters are missing a with method definition"}
17
17
  end
18
18
 
19
- def set_filters(ctx, **)
20
- ctx[:filters] = ctx[:config][:filters]
19
+ def set_filters(ctx, config:, **)
20
+ ctx[:filters] = config.filters
21
21
  end
22
22
 
23
23
  step :validate_filters
@@ -4,15 +4,15 @@ module Trailblazer
4
4
  class Finder
5
5
  module Activities
6
6
  class PreparePaging < Trailblazer::Activity::Railway
7
- def check_paging(ctx, **)
8
- paging = ctx[:config][:paging] || nil
9
- return false if ctx[:config][:paging].empty? || paging.nil?
7
+ def check_paging(_ctx, config:, **)
8
+ paging = config.paging
9
+ return false if config.paging.empty? || paging.nil?
10
10
 
11
11
  true
12
12
  end
13
13
 
14
- def set_paging(ctx, **)
15
- ctx[:paging] = ctx.dig(:config, :paging) || {}
14
+ def set_paging(ctx, config:, **)
15
+ ctx[:paging] = config.paging
16
16
  ctx[:paging][:current_page] = ctx.dig(:params, :page) || 1
17
17
  return true unless ctx[:params][:per_page]
18
18
 
@@ -4,8 +4,8 @@ module Trailblazer
4
4
  class Finder
5
5
  module Activities
6
6
  class PrepareProperties < Trailblazer::Activity::Railway
7
- def check_property_types(ctx, **)
8
- properties = ctx[:config][:properties] || {}
7
+ def check_property_types(_ctx, config:, **)
8
+ properties = config.properties
9
9
  return true if properties.empty?
10
10
 
11
11
  properties.each do |key, _value|
@@ -13,8 +13,8 @@ module Trailblazer
13
13
  end
14
14
  end
15
15
 
16
- def validate_property_types(ctx, **)
17
- properties = ctx[:config][:properties] || {}
16
+ def validate_property_types(_ctx, config:, **)
17
+ properties = config.properties
18
18
  return true if properties.empty?
19
19
 
20
20
  properties.each do |key, _value|
@@ -26,8 +26,8 @@ module Trailblazer
26
26
  (ctx[:errors] ||= []) << {properties: "One or more properties are missing a valid type"}
27
27
  end
28
28
 
29
- def set_properties(ctx, **)
30
- ctx[:properties] = ctx[:config][:properties]
29
+ def set_properties(ctx, config:, **)
30
+ ctx[:properties] = config.properties
31
31
  end
32
32
 
33
33
  step :check_property_types
@@ -4,20 +4,20 @@ module Trailblazer
4
4
  class Finder
5
5
  module Activities
6
6
  class PrepareSorting < Trailblazer::Activity::Railway
7
- def check_sorting(ctx, **)
8
- sorting = ctx[:config][:sorting] || nil
9
- return true unless ctx[:config][:sorting].empty? || sorting.nil?
7
+ def check_sorting(_ctx, config:, **)
8
+ sorting = config.sorting
9
+ return true unless sorting.empty? || sorting.nil?
10
10
  end
11
11
 
12
- def set_sorting(ctx, **)
12
+ def set_sorting(ctx, config:, **)
13
13
  return true if ctx[:params][:sort].nil?
14
14
 
15
15
  sorting = ctx[:params][:sort]
16
- config = ctx[:config][:sorting]
16
+ sorting_config = config.sorting
17
17
  ctx[:sorting] = ctx[:sorting] || {}
18
18
  sorting.split(",").each do |sorter|
19
19
  spt = sorter.split
20
- ctx[:sorting][spt[0]] = fetch_sort_direction(config[spt[0].to_sym], spt[1]) if config.include?(spt[0].to_sym)
20
+ ctx[:sorting][spt[0]] = fetch_sort_direction(sorting_config[spt[0].to_sym], spt[1]) if sorting_config.include?(spt[0].to_sym)
21
21
  end
22
22
  end
23
23
 
@@ -15,7 +15,7 @@ module Trailblazer
15
15
  end
16
16
 
17
17
  def set_paginator(ctx, **)
18
- paginator = ctx.dig(:config, :paginator)
18
+ paginator = ctx[:config].paginator
19
19
  return true unless paginator
20
20
  return false unless EXT_ORM_ADAPTERS.(ctx[:orm][:adapter])
21
21
  return false unless PAGING_ADAPTERS.(paginator)
@@ -26,10 +26,7 @@ module Trailblazer
26
26
 
27
27
  def invalid_paginator_error(ctx, **)
28
28
  (ctx[:errors] ||= []) << {
29
- paginator: "Can't use paginator #{ctx.dig(
30
- :config,
31
- :paginator
32
- )} without using an ORM like ActiveRecord or Sequel"
29
+ paginator: "Can't use paginator #{ctx[:config].paginator} without using an ORM like ActiveRecord or Sequel"
33
30
  }
34
31
  end
35
32
 
@@ -1,59 +1,95 @@
1
- # frozen_string_literal: true
2
-
3
1
  module Trailblazer
4
2
  class Finder
3
+ class Configuration
4
+ attr_accessor :entity, :paging, :properties, :sorting,
5
+ :filters, :adapter, :paginator
6
+
7
+ def initialize
8
+ @paging = {}
9
+ @properties = {}
10
+ @sorting = {}
11
+ @filters = {}
12
+ @paginator = nil
13
+ @adapter = "Basic"
14
+ end
15
+
16
+ def clone
17
+ new_config = Configuration.new
18
+ new_config.entity = entity
19
+ new_config.paging = paging.clone
20
+ new_config.properties = properties.clone
21
+ new_config.sorting = sorting.clone
22
+ new_config.filters = filters.clone
23
+ new_config.adapter = adapter
24
+ new_config.paginator = paginator
25
+ new_config
26
+ end
27
+ end
28
+
5
29
  module Dsl
6
- attr_reader :config
30
+ def config
31
+ @config ||= Configuration.new
32
+ end
33
+
7
34
 
8
35
  def inherited(base)
9
- base.instance_variable_set "@config", apply_config({})
36
+ ## We don't want to inherit the config from Trailblazer::Finder
37
+ return if name == 'Trailblazer::Finder'
38
+
39
+ base.config = config.clone
10
40
  end
11
41
 
12
42
  def entity(&block)
13
- config[:entity] = block
43
+ config.entity = block
14
44
  end
15
45
 
16
- def paging(**options)
17
- config[:paging][:per_page] = options[:per_page] || 25
18
- config[:paging][:min_per_page] = options[:min_per_page] || 10
19
- config[:paging][:max_per_page] = options[:max_per_page] || 100
46
+ def paging(per_page: 25, min_per_page: 10, max_per_page: 100)
47
+ config.paging[:per_page] = per_page
48
+ config.paging[:min_per_page] = min_per_page
49
+ config.paging[:max_per_page] = max_per_page
20
50
  end
21
51
 
22
52
  def property(name, options = {})
23
- config[:properties][name] = options
24
- config[:properties][name][:type] = options[:type] || Types::String
25
- config[:sorting][name] = options[:sort_direction] || :desc if options[:sortable]
53
+ config.properties[name] = options
54
+ config.properties[name][:type] = options[:type] || Types::String
55
+ config.sorting[name] = options[:sort_direction] || :desc if options[:sortable]
26
56
  end
27
57
 
28
58
  def filter_by(name, options = {}, &block)
29
59
  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
60
+ config.filters[filter_name] = {}
61
+ config.filters[filter_name][:name] = name
62
+ config.filters[filter_name][:with] = options[:with] if options.include?(:with)
63
+ config.filters[filter_name][:block] = block || nil
64
+ end
65
+
66
+ def adapter(adapter_name)
67
+ config.adapter = adapter_name.to_s
68
+ end
69
+
70
+ def paginator(paginator_name)
71
+ config.paginator = paginator_name.to_s
34
72
  end
35
73
 
36
- def adapter(adapter)
37
- config[:adapter] = adapter.to_s
74
+ def current_adapter
75
+ config.adapter
38
76
  end
39
77
 
40
- def paginator(paginator)
41
- config[:paginator] = paginator.to_s
78
+ def current_paginator
79
+ config.paginator
42
80
  end
43
81
 
44
- def apply_config(options, **)
45
- return @config = options unless options.empty?
82
+ def filters_count
83
+ config.filters.count
84
+ end
46
85
 
47
- @config = {
48
- actions: {},
49
- entity: nil,
50
- properties: {},
51
- filters: {},
52
- paging: {},
53
- sorting: {},
54
- adapters: []
55
- }
86
+ def properties_count
87
+ config.properties.count
56
88
  end
89
+
90
+ protected
91
+
92
+ attr_writer :config
57
93
  end
58
94
  end
59
95
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Trailblazer
4
4
  class Finder
5
- VERSION = "0.91.0"
5
+ VERSION = "0.92.0"
6
6
  end
7
7
  end
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.91.0
4
+ version: 0.92.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Sutterer