trailblazer-finder 0.3.0 → 0.10.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.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.travis.yml +1 -4
  4. data/CHANGES.md +3 -0
  5. data/LICENSE.txt +1 -1
  6. data/README.md +0 -7
  7. data/lib/trailblazer/finder.rb +9 -18
  8. data/lib/trailblazer/finder/activity/find.rb +26 -28
  9. data/lib/trailblazer/finder/activity/prepare.rb +17 -14
  10. data/lib/trailblazer/finder/activity/prepare_adapters.rb +52 -0
  11. data/lib/trailblazer/finder/activity/prepare_entity.rb +25 -0
  12. data/lib/trailblazer/finder/activity/prepare_filters.rb +29 -0
  13. data/lib/trailblazer/finder/activity/prepare_paging.rb +42 -0
  14. data/lib/trailblazer/finder/activity/prepare_params.rb +27 -0
  15. data/lib/trailblazer/finder/activity/prepare_properties.rb +44 -0
  16. data/lib/trailblazer/finder/activity/prepare_sorting.rb +52 -0
  17. data/lib/trailblazer/finder/activity/process.rb +12 -8
  18. data/lib/trailblazer/finder/activity/process_adapters.rb +40 -0
  19. data/lib/trailblazer/finder/activity/process_filters.rb +21 -0
  20. data/lib/trailblazer/finder/activity/process_paging.rb +19 -0
  21. data/lib/trailblazer/finder/activity/process_predicates.rb +23 -0
  22. data/lib/trailblazer/finder/activity/process_sorting.rb +19 -0
  23. data/lib/trailblazer/finder/version.rb +1 -1
  24. data/lib/trailblazer/operation/finder.rb +42 -49
  25. data/spec/spec_helper.rb +4 -0
  26. data/trailblazer-finder.gemspec +6 -7
  27. metadata +32 -57
  28. data/.rubocop-https---raw-githubusercontent-com-trailblazer-meta-master-rubocop-yml +0 -101
  29. data/lib/trailblazer/finder/activity/prepare/adapters.rb +0 -66
  30. data/lib/trailblazer/finder/activity/prepare/entity.rb +0 -32
  31. data/lib/trailblazer/finder/activity/prepare/filters.rb +0 -36
  32. data/lib/trailblazer/finder/activity/prepare/paging.rb +0 -49
  33. data/lib/trailblazer/finder/activity/prepare/params.rb +0 -33
  34. data/lib/trailblazer/finder/activity/prepare/properties.rb +0 -47
  35. data/lib/trailblazer/finder/activity/prepare/sorting.rb +0 -57
  36. data/lib/trailblazer/finder/activity/process/adapters.rb +0 -48
  37. data/lib/trailblazer/finder/activity/process/filters.rb +0 -28
  38. data/lib/trailblazer/finder/activity/process/paging.rb +0 -26
  39. data/lib/trailblazer/finder/activity/process/predicates.rb +0 -30
  40. data/lib/trailblazer/finder/activity/process/sorting.rb +0 -26
@@ -1,101 +0,0 @@
1
- AllCops:
2
- DisplayCopNames: true
3
- Layout/CaseIndentation:
4
- IndentOneStep: true
5
- Layout/FirstArrayElementLineBreak:
6
- Enabled: true
7
- Layout/FirstHashElementLineBreak:
8
- Enabled: true
9
- Layout/FirstMethodArgumentLineBreak:
10
- Enabled: true
11
- Layout/FirstMethodParameterLineBreak:
12
- Enabled: true
13
- Layout/MultilineAssignmentLayout:
14
- Enabled: true
15
- EnforcedStyle: same_line
16
- Layout/SpaceInsideHashLiteralBraces:
17
- EnforcedStyle: no_space
18
- Metrics/LineLength:
19
- Max: 130
20
- Metrics/ParameterLists:
21
- Max: 5
22
- Naming/VariableNumber:
23
- EnforcedStyle: snake_case
24
- Style/AndOr:
25
- EnforcedStyle: conditionals
26
- Style/AutoResourceCleanup:
27
- Enabled: true
28
- Style/CollectionMethods:
29
- Enabled: true
30
- Style/Documentation:
31
- Enabled: false
32
- Style/EmptyLiteral:
33
- Enabled: false
34
- Style/EmptyMethod:
35
- EnforcedStyle: expanded
36
- Style/FormatStringToken:
37
- EnforcedStyle: template
38
- Style/ImplicitRuntimeError:
39
- Enabled: true
40
- Style/MethodCalledOnDoEndBlock:
41
- Enabled: true
42
- Style/MethodDefParentheses:
43
- EnforcedStyle: require_parentheses
44
- Style/MissingElse:
45
- Enabled: true
46
- EnforcedStyle: case
47
- Style/NumericLiterals:
48
- Enabled: false
49
- Style/OptionHash:
50
- Enabled: true
51
- Style/PercentLiteralDelimiters:
52
- PreferredDelimiters:
53
- "%w": "[]"
54
- "%W": "[]"
55
- "%i": "[]"
56
- "%I": "[]"
57
- "%r": "()"
58
- Style/ReturnNil:
59
- Enabled: true
60
- Style/SafeNavigation:
61
- Enabled: false
62
- Style/Send:
63
- Enabled: true
64
- Style/SignalException:
65
- EnforcedStyle: semantic
66
- Style/StringLiterals:
67
- EnforcedStyle: double_quotes
68
- Style/StringLiteralsInInterpolation:
69
- EnforcedStyle: double_quotes
70
- Style/StringMethods:
71
- Enabled: true
72
- Style/SymbolArray:
73
- Enabled: true
74
- # this allows in rspec to have expect { } with multiple lines
75
- Style/BlockDelimiters:
76
- EnforcedStyle: braces_for_chaining
77
- Layout/EndOfLine:
78
- Enabled: false
79
- # don't need these checks in test folders
80
- Metrics/ModuleLength:
81
- Exclude:
82
- - "spec/**/*"
83
- - "test/**/*"
84
- Metrics/BlockLength:
85
- Exclude:
86
- - "spec/**/*"
87
- - "test/**/*"
88
- - "*.gemspec" # definitely not in the gemspec
89
- Metrics/MethodLength:
90
- Max: 20
91
- Lint/UnreachableCode:
92
- Description: 'Unreachable code.'
93
- Enabled: false
94
- Lint/Void:
95
- Enabled: false
96
- Layout/HashAlignment:
97
- EnforcedLastArgumentHashStyle: ignore_implicit
98
- Metrics/AbcSize:
99
- Max: 25
100
- Style/LambdaCall:
101
- Enabled: false
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Trailblazer
4
- class Finder
5
- module Activity
6
- module Prepare
7
- # Adapters Activity
8
- module Adapters
9
- extend Trailblazer::Activity::Railway()
10
-
11
- module_function
12
-
13
- def check_for_adapters(ctx, **)
14
- adapters = ctx[:config][:adapters]
15
- return true if adapters.empty?
16
-
17
- adapters.each do |adapter|
18
- return true if Finder::Adapters.constants.include?(adapter.to_sym)
19
- end
20
- false
21
- end
22
-
23
- def validate_adapters(ctx, **)
24
- adapters = ctx[:config][:adapters]
25
- return true if adapters.empty?
26
-
27
- adapters.each do |adapter|
28
- if ORM_ADAPTERS.include?(adapter)
29
- return false if (adapters & (ORM_ADAPTERS - [adapter])).any?
30
- end
31
- end
32
- end
33
-
34
- def invalid_adapters_error(ctx, **)
35
- (ctx[:errors] ||= []) << {adapters: "One or more of the specified adapters are invalid"}
36
- end
37
-
38
- def multiple_orm_error(ctx, **)
39
- (ctx[:errors] ||= []) << {adapters: "More then one ORM adapter specified"}
40
- end
41
-
42
- def set_adapters(ctx, **)
43
- adapters = ctx[:config][:adapters]
44
- ctx[:adapters] = (ORM_ADAPTERS & adapters).any? ? adapters : ["Basic"] + adapters
45
- end
46
-
47
- step method(:check_for_adapters),
48
- Output(:success) => Track(:valid),
49
- Output(:failure) => Track(:invalid_adapters)
50
- step method(:validate_adapters), magnetic_to: [:valid],
51
- Output(:success) => Track(:valid),
52
- Output(:failure) => Track(:multiple_orm)
53
- fail method(:invalid_adapters_error), magnetic_to: [:invalid_adapters],
54
- Output(:success) => Track(:failure),
55
- Output(:failure) => Track(:failure)
56
- fail method(:multiple_orm_error), magnetic_to: [:multiple_orm],
57
- Output(:success) => Track(:failure),
58
- Output(:failure) => Track(:failure)
59
- step method(:set_adapters), magnetic_to: [:valid],
60
- Output(:success) => Track(:success),
61
- Output(:failure) => Track(:failure)
62
- end
63
- end
64
- end
65
- end
66
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Trailblazer
4
- class Finder
5
- module Activity
6
- module Prepare
7
- # Prepare Entity Activity
8
- module Entity
9
- extend Trailblazer::Activity::Railway()
10
-
11
- module_function
12
-
13
- def validate_entity(ctx, **)
14
- ctx[:options][:entity] || ctx[:config][:entity]
15
- end
16
-
17
- def invalid_entity_error(ctx, **)
18
- (ctx[:errors] ||= []) << {entity: "Invalid entity specified"}
19
- end
20
-
21
- def set_entity(ctx, **)
22
- ctx[:entity] = ctx[:options][:entity] || instance_eval(&ctx[:config][:entity])
23
- end
24
-
25
- step method(:validate_entity), id: :validate_entity
26
- fail method(:invalid_entity_error), id: :invalid_entity_error
27
- step method(:set_entity), id: :set_entity
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Trailblazer
4
- class Finder
5
- module Activity
6
- module Prepare
7
- # Filters Activity
8
- module Filters
9
- extend Trailblazer::Activity::Railway()
10
-
11
- module_function
12
-
13
- def validate_filters(ctx, **)
14
- filters = ctx[:config][:filters]
15
- filters.each do |key, _value|
16
- return false if !filters[key][:with].nil? && !filters[key][:with].is_a?(Symbol)
17
- end
18
- true
19
- end
20
-
21
- def invalid_filters_error(ctx, **)
22
- (ctx[:errors] ||= []) << {filters: "One or more filters are missing a with method definition"}
23
- end
24
-
25
- def set_filters(ctx, **)
26
- ctx[:filters] = ctx[:config][:filters]
27
- end
28
-
29
- step method(:validate_filters), id: :validate_filters
30
- fail method(:invalid_filters_error), id: :invalid_filters_error
31
- step method(:set_filters), id: :set_filters
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,49 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Trailblazer
4
- class Finder
5
- module Activity
6
- module Prepare
7
- # Paging Activity
8
- module Paging
9
- extend Trailblazer::Activity::Railway()
10
-
11
- module_function
12
-
13
- def check_paging(ctx, **)
14
- paging = ctx[:config][:paging] || nil
15
- return false if ctx[:config][:paging].empty? || paging.nil?
16
-
17
- true
18
- end
19
-
20
- def set_paging(ctx, **)
21
- ctx[:paging] = ctx[:config][:paging] || {}
22
- ctx[:paging][:current_page] = ctx[:params][:page] || 1
23
- return true unless ctx[:params][:per_page]
24
-
25
- ctx[:paging][:per_page] = ctx[:params][:per_page].to_i || ctx[:paging][:per_page]
26
- ctx[:paging][:per_page] = ctx[:paging][:max_per_page] if ctx[:paging][:per_page] > ctx[:paging][:max_per_page]
27
- ctx[:paging][:per_page] = ctx[:paging][:min_per_page] if ctx[:paging][:per_page] < ctx[:paging][:min_per_page]
28
- true
29
- end
30
-
31
- def clear_paging(ctx, **)
32
- ctx[:params].delete(:page) unless ctx[:params][:page].nil?
33
- true
34
- end
35
-
36
- step method(:check_paging), id: :check_paging,
37
- Output(:success) => Track(:paging),
38
- Output(:failure) => Track(:end_paging)
39
- step method(:set_paging), id: :set_paging, magnetic_to: [:paging],
40
- Output(:success) => Track(:end_paging),
41
- Output(:failure) => Track(:failure)
42
- step method(:clear_paging), id: :clear_paging, magnetic_to: [:end_paging],
43
- Output(:success) => Track(:success),
44
- Output(:failure) => Track(:failure)
45
- end
46
- end
47
- end
48
- end
49
- end
@@ -1,33 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Trailblazer
4
- class Finder
5
- module Activity
6
- module Prepare
7
- # Params Activity
8
- module Params
9
- extend Trailblazer::Activity::Railway()
10
-
11
- module_function
12
-
13
- def validate_params(_ctx, **)
14
- # Should probably validate some things here at some point
15
- true
16
- end
17
-
18
- def invalid_params_error(ctx, **)
19
- # (ctx[:errors] ||= []) << {params: "One or more parameters are invalid"}
20
- end
21
-
22
- def set_params(ctx, **)
23
- ctx[:params] = ctx[:options][:params] || {}
24
- end
25
-
26
- step method(:validate_params), id: :validate_params
27
- fail method(:invalid_params_error), id: :invalid_params_error
28
- step method(:set_params), id: :set_params
29
- end
30
- end
31
- end
32
- end
33
- end
@@ -1,47 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Trailblazer
4
- class Finder
5
- module Activity
6
- module Prepare
7
- # Prepare Properties Activity
8
- module Properties
9
- extend Trailblazer::Activity::Railway()
10
-
11
- module_function
12
-
13
- def check_property_types(ctx, **)
14
- properties = ctx[:config][:properties] || {}
15
- return true if properties.empty?
16
-
17
- properties.each do |key, _value|
18
- return !properties[key][:type].nil?
19
- end
20
- end
21
-
22
- def validate_property_types(ctx, **)
23
- properties = ctx[:config][:properties] || {}
24
- return true if properties.empty?
25
-
26
- properties.each do |key, _value|
27
- return properties[key][:type].class.ancestors.include?(Dry::Types::Definition)
28
- end
29
- end
30
-
31
- def invalid_properties_error(ctx, **)
32
- (ctx[:errors] ||= []) << {properties: "One or more properties are missing a valid type"}
33
- end
34
-
35
- def set_properties(ctx, **)
36
- ctx[:properties] = ctx[:config][:properties]
37
- end
38
-
39
- step method(:check_property_types), id: :check_property_types
40
- step method(:validate_property_types), id: :validate_property_types
41
- fail method(:invalid_properties_error), id: :invalid_properties_error
42
- step method(:set_properties), id: :set_properties
43
- end
44
- end
45
- end
46
- end
47
- end
@@ -1,57 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Trailblazer
4
- class Finder
5
- module Activity
6
- module Prepare
7
- # Paging Activity
8
- module Sorting
9
- extend Trailblazer::Activity::Railway()
10
-
11
- module_function
12
-
13
- def check_sorting(ctx, **)
14
- sorting = ctx[:config][:sorting] || nil
15
- return true unless ctx[:config][:sorting].empty? || sorting.nil?
16
- end
17
-
18
- def set_sorting(ctx, **)
19
- return true if ctx[:params][:sort].nil?
20
-
21
- sorting = ctx[:params][:sort]
22
- config = ctx[:config][:sorting]
23
- ctx[:sorting] = ctx[:sorting] || {}
24
- sorting.split(",").each do |sorter|
25
- spt = sorter.split
26
- ctx[:sorting][spt[0]] = fetch_sort_direction(config[spt[0].to_sym], spt[1]) if config.include?(spt[0].to_sym)
27
- end
28
- end
29
-
30
- def fetch_sort_direction(config_direction, params_direction = nil)
31
- return config_direction == :asc ? :asc : :desc if params_direction.nil?
32
-
33
- case params_direction
34
- when ":asc", :asc, "asc" then :asc
35
- else :desc
36
- end
37
- end
38
-
39
- def clear_sorting(ctx, **)
40
- ctx[:params].delete(:sort) unless ctx[:params][:sort].nil?
41
- true
42
- end
43
-
44
- step method(:check_sorting), id: :check_sorting,
45
- Output(:success) => Track(:paging),
46
- Output(:failure) => Track(:end_sorting)
47
- step method(:set_sorting), id: :set_sorting, magnetic_to: [:paging],
48
- Output(:success) => Track(:end_sorting),
49
- Output(:failure) => Track(:failure)
50
- step method(:clear_sorting), id: :clear_sorting, magnetic_to: [:end_sorting],
51
- Output(:success) => Track(:success),
52
- Output(:failure) => Track(:failure)
53
- end
54
- end
55
- end
56
- end
57
- end
@@ -1,48 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Trailblazer
4
- class Finder
5
- module Activity
6
- module Process
7
- # Process Adapters Activity
8
- module Adapters
9
- extend Trailblazer::Activity::Railway()
10
-
11
- module_function
12
-
13
- def set_orm_adapters(ctx, **)
14
- ctx[:adapters].each do |adapter|
15
- next unless (ORM_ADAPTERS + ["Basic"]).include?(adapter)
16
-
17
- ctx[:orm] = {}
18
- ctx[:orm][:adapter] = adapter
19
- ctx[:orm][:predicates] = "Trailblazer::Finder::Adapters::#{adapter}::Predicates"
20
- ctx[:orm][:paging] = "Trailblazer::Finder::Adapters::#{adapter}::Paging"
21
- ctx[:orm][:sorting] = "Trailblazer::Finder::Adapters::#{adapter}::Sorting"
22
- return true
23
- end
24
- end
25
-
26
- def set_paging_adapters(ctx, **)
27
- ctx[:adapters].each do |adapter|
28
- next unless PAGING_ADAPTERS.include?(adapter)
29
- return false if ctx[:adapters].include?("Basic")
30
-
31
- ctx[:orm][:paging] = "Trailblazer::Finder::Adapters::#{adapter}::Paging"
32
- return true
33
- end
34
- true
35
- end
36
-
37
- def invalid_paging_adapter_error(ctx, **)
38
- (ctx[:errors] ||= []) << {adapters: "Can't use paging adapters like Kaminari without using an ORM like ActiveRecord or Sequel"}
39
- end
40
-
41
- step method(:set_orm_adapters)
42
- step method(:set_paging_adapters)
43
- fail method(:invalid_paging_adapter_error)
44
- end
45
- end
46
- end
47
- end
48
- end