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 +4 -4
- data/lib/trailblazer/finder/activities/prepare_adapter.rb +1 -1
- data/lib/trailblazer/finder/activities/prepare_entity.rb +4 -4
- data/lib/trailblazer/finder/activities/prepare_filters.rb +4 -4
- data/lib/trailblazer/finder/activities/prepare_paging.rb +5 -5
- data/lib/trailblazer/finder/activities/prepare_properties.rb +6 -6
- data/lib/trailblazer/finder/activities/prepare_sorting.rb +6 -6
- data/lib/trailblazer/finder/activities/process_adapters.rb +2 -5
- data/lib/trailblazer/finder/dsl.rb +67 -31
- data/lib/trailblazer/finder/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d5aa468a471c2d9bb6f7f0196e46a14905a557956a18da87723eb74a3f897b10
|
4
|
+
data.tar.gz: 6d236f533affcf4eb828704e438b2ec9f30270d61626be709aa29d64c5489d5d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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) ||
|
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)
|
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(
|
8
|
-
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] =
|
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(
|
8
|
-
paging =
|
9
|
-
return false if
|
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] =
|
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(
|
8
|
-
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(
|
17
|
-
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] =
|
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(
|
8
|
-
sorting =
|
9
|
-
return true unless
|
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
|
-
|
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(
|
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
|
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.
|
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
|
-
|
30
|
+
def config
|
31
|
+
@config ||= Configuration.new
|
32
|
+
end
|
33
|
+
|
7
34
|
|
8
35
|
def inherited(base)
|
9
|
-
|
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
|
43
|
+
config.entity = block
|
14
44
|
end
|
15
45
|
|
16
|
-
def paging(
|
17
|
-
config
|
18
|
-
config
|
19
|
-
config
|
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
|
24
|
-
config
|
25
|
-
config
|
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
|
31
|
-
config
|
32
|
-
config
|
33
|
-
config
|
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
|
37
|
-
config
|
74
|
+
def current_adapter
|
75
|
+
config.adapter
|
38
76
|
end
|
39
77
|
|
40
|
-
def
|
41
|
-
config
|
78
|
+
def current_paginator
|
79
|
+
config.paginator
|
42
80
|
end
|
43
81
|
|
44
|
-
def
|
45
|
-
|
82
|
+
def filters_count
|
83
|
+
config.filters.count
|
84
|
+
end
|
46
85
|
|
47
|
-
|
48
|
-
|
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
|