trailblazer-finder 0.91.0 → 0.92.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: 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