trailblazer-finder 0.200.0 → 0.201.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: 90dc16422aad1120e71229592d5754f1cddda1c4b100e5fd204d9489dbc380ff
4
- data.tar.gz: f2ded79c05e8bf26bd3607e16bec67622209e667e3e446aec3b5c5987b9217ae
3
+ metadata.gz: 14052b387273c482eb52d61060c8ea6cc1aac1470c780ffb1f44bdf30a6e8d6a
4
+ data.tar.gz: 07c618c3ce7d7f4c88011704cfb435f53e0e3414601a8203a3ccb58ef3415b41
5
5
  SHA512:
6
- metadata.gz: 60b6c26e8b09c3c9a5f833fcd46d84335961a0f633bd4d93743fe9bd69b3fedf2a7e861b2ae2e7f3ceea1d54b4cf4e1f3cab32b0159afcd794069db275a3d41a
7
- data.tar.gz: 5af282dd278f41bf9ca9f89d34985989de777e8caa93da8a00107bd49700691e76babe4c665e70f57e1ef59897dc7cb6bbedbe9387f81da3a192a6817ac9d854
6
+ metadata.gz: 1c9aac700e20cab50ae9ec2ef60ae7fc462e9934122cb1969e93bc5cb72a38a24d7eba7525a1f5eec7f9d620447b40041d08530099a754c466843509aece13df
7
+ data.tar.gz: 4063ec97d8e558ef48b86776db53ed7ac87524b353663d81db8ead4c988549b993df66ae191c4bcab9738cc4c0b226205eef0a81701fb560e467f577593395ed
@@ -13,7 +13,7 @@ module Trailblazer
13
13
  end
14
14
 
15
15
  def invalid?(_e, (ctx, _flow_options), **_circuit_options)
16
- (ctx[:errors] ||= []) << {adapter: "The specified adapter are invalid"}
16
+ (ctx[:errors] ||= []) << {adapter: "The specified adapter is invalid"}
17
17
  end
18
18
 
19
19
  step :set_adapter
@@ -1,27 +1,81 @@
1
1
  module Trailblazer
2
2
  class Finder
3
3
  class Configuration
4
- attr_accessor :entity, :paging, :properties, :sorting,
5
- :filters, :adapter, :paginator
4
+ attr_reader :state
6
5
 
7
6
  def initialize
8
- @paging = {}
9
- @properties = {}
10
- @sorting = {}
11
- @filters = {}
12
- @paginator = nil
13
- @adapter = "Basic"
7
+ @state = Trailblazer::Declarative::State(
8
+ entity: [nil, {}],
9
+ paging: [{}, {}],
10
+ properties: [{}, {}],
11
+ sorting: [{}, {}],
12
+ filters: [{}, {}],
13
+ adapter: ["Basic", {}],
14
+ paginator: [nil, {}]
15
+ )
14
16
  end
15
17
 
18
+ # Accessors that delegate to the state
19
+ def entity
20
+ state.get(:entity)
21
+ end
22
+
23
+ def entity=(value)
24
+ state.set!(:entity, value)
25
+ end
26
+
27
+ def paging
28
+ state.get(:paging)
29
+ end
30
+
31
+ def paging=(value)
32
+ state.set!(:paging, value)
33
+ end
34
+
35
+ def properties
36
+ state.get(:properties)
37
+ end
38
+
39
+ def properties=(value)
40
+ state.set!(:properties, value)
41
+ end
42
+
43
+ def sorting
44
+ state.get(:sorting)
45
+ end
46
+
47
+ def sorting=(value)
48
+ state.set!(:sorting, value)
49
+ end
50
+
51
+ def filters
52
+ state.get(:filters)
53
+ end
54
+
55
+ def filters=(value)
56
+ state.set!(:filters, value)
57
+ end
58
+
59
+ def adapter
60
+ state.get(:adapter)
61
+ end
62
+
63
+ def adapter=(value)
64
+ state.set!(:adapter, value)
65
+ end
66
+
67
+ def paginator
68
+ state.get(:paginator)
69
+ end
70
+
71
+ def paginator=(value)
72
+ state.set!(:paginator, value)
73
+ end
74
+
75
+ # Clone the configuration by copying the state
16
76
  def clone
17
77
  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
78
+ new_config.instance_variable_set(:@state, @state.copy)
25
79
  new_config
26
80
  end
27
81
  end
@@ -31,9 +85,8 @@ module Trailblazer
31
85
  @config ||= Configuration.new
32
86
  end
33
87
 
34
-
35
88
  def inherited(base)
36
- ## We don't want to inherit the config from Trailblazer::Finder
89
+ # Skip inheritance for the base Trailblazer::Finder class
37
90
  return if name == 'Trailblazer::Finder'
38
91
 
39
92
  base.config = config.clone
@@ -44,23 +97,21 @@ module Trailblazer
44
97
  end
45
98
 
46
99
  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
100
+ config.state.update!(:paging) do |paging|
101
+ paging.merge(per_page: per_page, min_per_page: min_per_page, max_per_page: max_per_page)
102
+ end
50
103
  end
51
104
 
52
105
  def property(name, options = {})
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]
106
+ config.state.update!(:properties) { |props| props.merge(name => options.merge(type: options[:type] || Types::String)) }
107
+ config.state.update!(:sorting) { |sort| sort.merge(name => (options[:sort_direction] || :desc)) } if options[:sortable]
56
108
  end
57
109
 
58
110
  def filter_by(name, options = {}, &block)
59
111
  filter_name = name.to_sym
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
112
+ config.state.update!(:filters) do |filters|
113
+ filters.merge(filter_name => { name: name, with: options[:with], block: block }.compact)
114
+ end
64
115
  end
65
116
 
66
117
  def adapter(adapter_name)
@@ -16,7 +16,6 @@ module Trailblazer
16
16
 
17
17
  def process_filters(ctx)
18
18
  @params.reduce(@entity) do |entity, (name, value)|
19
- value = Utils::String.to_date(value) if Utils::String.date?(value)
20
19
  filter = @filters[name.to_sym] || @filters[name]
21
20
  new_entity = ctx.instance_exec entity, filter[:name], value, &filter[:handler]
22
21
  new_entity || entity
@@ -30,21 +30,6 @@ module Trailblazer
30
30
  .tr(" ", "_")
31
31
  .downcase
32
32
  end
33
-
34
- def self.to_date(value)
35
- Date.parse(value).strftime("%Y-%m-%d") if date?(value)
36
- end
37
-
38
- def self.date?(date)
39
- return false unless
40
- date.is_a?(::DateTime) ||
41
- date.is_a?(::Date) ||
42
- date.is_a?(::String)
43
- return false if date.is_a?(::String) && date.size == 36 # Ignore uuids that could get casted to dates
44
-
45
- date_hash = ::Date._parse(date.to_s)
46
- Date.valid_date?(date_hash[:year].to_i, date_hash[:mon].to_i, date_hash[:mday].to_i)
47
- end
48
33
  end
49
34
  end
50
35
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Trailblazer
4
4
  class Finder
5
- VERSION = "0.200.0"
5
+ VERSION = "0.201.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.200.0
4
+ version: 0.201.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: 2024-09-30 00:00:00.000000000 Z
13
+ date: 2025-03-26 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: dry-types
@@ -319,7 +319,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
319
319
  - !ruby/object:Gem::Version
320
320
  version: '0'
321
321
  requirements: []
322
- rubygems_version: 3.5.11
322
+ rubygems_version: 3.5.22
323
323
  signing_key:
324
324
  specification_version: 4
325
325
  summary: Trailblazer based finder objects. It is designed to be used on its own as