params_ready 0.0.2 → 0.0.8

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/lib/params_ready/builder.rb +21 -0
  3. data/lib/params_ready/extensions/delegation.rb +1 -0
  4. data/lib/params_ready/extensions/freezer.rb +2 -0
  5. data/lib/params_ready/extensions/undefined.rb +8 -0
  6. data/lib/params_ready/format.rb +4 -2
  7. data/lib/params_ready/helpers/arel_builder.rb +96 -35
  8. data/lib/params_ready/helpers/callable.rb +14 -0
  9. data/lib/params_ready/helpers/interface_definer.rb +48 -0
  10. data/lib/params_ready/helpers/memo.rb +0 -1
  11. data/lib/params_ready/helpers/options.rb +77 -9
  12. data/lib/params_ready/helpers/parameter_storage_class_methods.rb +27 -0
  13. data/lib/params_ready/helpers/parameter_user_class_methods.rb +18 -14
  14. data/lib/params_ready/helpers/rule.rb +30 -11
  15. data/lib/params_ready/helpers/usage_rule.rb +21 -3
  16. data/lib/params_ready/marshaller/array_marshallers.rb +4 -3
  17. data/lib/params_ready/marshaller/{hash_set_marshallers.rb → enum_set_marshallers.rb} +5 -5
  18. data/lib/params_ready/marshaller/polymorph_marshallers.rb +2 -2
  19. data/lib/params_ready/marshaller/{hash_marshallers.rb → struct_marshallers.rb} +5 -5
  20. data/lib/params_ready/marshaller/tuple_marshallers.rb +2 -2
  21. data/lib/params_ready/ordering/column.rb +1 -1
  22. data/lib/params_ready/output_parameters.rb +13 -2
  23. data/lib/params_ready/pagination/keyset_pagination.rb +5 -5
  24. data/lib/params_ready/parameter/{abstract_hash_parameter.rb → abstract_struct_parameter.rb} +6 -6
  25. data/lib/params_ready/parameter/array_parameter.rb +2 -2
  26. data/lib/params_ready/parameter/definition.rb +48 -40
  27. data/lib/params_ready/parameter/{hash_set_parameter.rb → enum_set_parameter.rb} +11 -10
  28. data/lib/params_ready/parameter/parameter.rb +48 -29
  29. data/lib/params_ready/parameter/state.rb +4 -4
  30. data/lib/params_ready/parameter/{hash_parameter.rb → struct_parameter.rb} +11 -10
  31. data/lib/params_ready/parameter/tuple_parameter.rb +1 -1
  32. data/lib/params_ready/parameter/value_parameter.rb +14 -10
  33. data/lib/params_ready/parameter_user.rb +7 -15
  34. data/lib/params_ready/query/array_grouping.rb +4 -4
  35. data/lib/params_ready/query/exists_predicate.rb +3 -3
  36. data/lib/params_ready/query/grouping.rb +8 -2
  37. data/lib/params_ready/query/join_clause.rb +91 -28
  38. data/lib/params_ready/query/predicate.rb +3 -3
  39. data/lib/params_ready/query/relation.rb +29 -14
  40. data/lib/params_ready/query/structured_grouping.rb +4 -4
  41. data/lib/params_ready/query/variable_operator_predicate.rb +12 -12
  42. data/lib/params_ready/value/coder.rb +36 -8
  43. data/lib/params_ready/version.rb +7 -0
  44. data/lib/params_ready.rb +3 -11
  45. metadata +56 -10
@@ -1,22 +1,23 @@
1
1
  require_relative 'parameter'
2
2
  require_relative '../builder'
3
- require_relative 'abstract_hash_parameter'
3
+ require_relative 'abstract_struct_parameter'
4
4
  require_relative '../marshaller/parameter_module'
5
5
 
6
6
 
7
7
  module ParamsReady
8
8
  module Parameter
9
- class HashParameter < AbstractHashParameter
9
+ class StructParameter < AbstractStructParameter
10
10
  include Marshaller::ParameterModule
11
11
  end
12
12
 
13
- class HashParameterBuilder < Builder
14
- include AbstractHashParameterBuilder::HashLike
13
+ class StructParameterBuilder < Builder
14
+ include AbstractStructParameterBuilder::StructLike
15
15
  include Marshaller::BuilderModule
16
- register :hash
16
+ register :struct
17
+ register_deprecated :hash, use: :struct
17
18
 
18
19
  def self.instance(name, altn: nil)
19
- new HashParameterDefinition.new(name, altn: altn)
20
+ new StructParameterDefinition.new(name, altn: altn)
20
21
  end
21
22
 
22
23
  def map(hash)
@@ -24,11 +25,11 @@ module ParamsReady
24
25
  end
25
26
  end
26
27
 
27
- class HashParameterDefinition < AbstractHashParameterDefinition
28
- include Marshaller::DefinitionModule[Marshaller::HashMarshallers.collection]
28
+ class StructParameterDefinition < AbstractStructParameterDefinition
29
+ include Marshaller::DefinitionModule[Marshaller::StructMarshallers.collection]
29
30
 
30
- name_for_formatter :hash
31
- parameter_class HashParameter
31
+ name_for_formatter :struct
32
+ parameter_class StructParameter
32
33
  freeze_variables :key_map
33
34
 
34
35
  def ensure_canonical(hash)
@@ -98,7 +98,7 @@ module ParamsReady
98
98
  end
99
99
  end
100
100
 
101
- class HashMarshaller
101
+ class StructMarshaller
102
102
  def marshal(fields, _format)
103
103
  fields.each_with_index.map do |field, index|
104
104
  [index.to_s, field]
@@ -70,28 +70,32 @@ module ParamsReady
70
70
  builder_class.register name
71
71
  end
72
72
 
73
- def self.instance(name, coder_or_name = nil, altn: nil)
73
+ def self.instance(name, coder_or_name = nil, altn: nil, **opts)
74
74
  coder = if coder_or_name.is_a? Symbol
75
- self.coder(coder_or_name)
76
- elsif coder_or_name.nil?
77
- Value::GenericCoder.new(name)
75
+ coder_class = self.coder(coder_or_name)
76
+ coder_class.instance(**opts)
78
77
  else
79
- coder_or_name
78
+ raise ParamsReadyError, 'Expected option hash to be empty' unless opts.empty?
79
+ if coder_or_name.nil?
80
+ Value::GenericCoder.new(name)
81
+ else
82
+ coder_or_name
83
+ end
80
84
  end
81
85
  new ValueParameterDefinition.new(name, coder, altn: altn)
82
86
  end
83
87
 
84
- def self.[](type)
88
+ def self.[](coder_name)
85
89
  builder = Class.new(self)
86
- capitalized = type.to_s.split('_').map(&:capitalize).join
90
+ capitalized = coder_name.to_s.split('_').map(&:capitalize).join
87
91
  qualified = "#{self.name}::#{capitalized}Builder".freeze
88
92
 
89
93
  builder.define_singleton_method :name do
90
94
  qualified
91
95
  end
92
96
 
93
- builder.define_singleton_method :instance do |name, altn: nil|
94
- superclass.instance(name, type, altn: altn)
97
+ builder.define_singleton_method :instance do |name, altn: nil, **opts|
98
+ superclass.instance(name, coder_name, altn: altn, **opts)
95
99
  end
96
100
 
97
101
  builder
@@ -161,7 +165,7 @@ module ParamsReady
161
165
  def ensure_canonical(value)
162
166
  coerced = coder.try_coerce value, Format.instance(:backend)
163
167
  if coder.strict_default? && value != coerced
164
- raise ParamsReadyError, "input '#{value}' (#{value.class.name}) coerced to '#{coerced}' (#{coerced.class.name})"
168
+ raise ParamsReadyError, "input '#{value}'/#{value.class.name} (expected '#{coerced}'/#{coerced.class.name})"
165
169
  end
166
170
  validate coerced
167
171
  coerced
@@ -15,29 +15,21 @@ module ParamsReady
15
15
  protected
16
16
 
17
17
  def parameter_definition(key)
18
- self.class.parameter_definition key
18
+ self.class.parameter_definition key
19
19
  end
20
20
 
21
21
  def relation_definition(key)
22
- self.class.relation_definition key
22
+ self.class.relation_definition key
23
23
  end
24
24
 
25
- def populate_state_for(method, params, context = Format.instance(:frontend), validator = nil)
26
- definition = create_state_for method
25
+ def populate_state_for(key, params, context = Format.instance(:frontend), validator = nil)
26
+ definition = create_state_for key
27
27
  result, state = definition.from_input(params || {}, context: context, validator: validator || Result.new(:params_ready))
28
28
  [result, state]
29
29
  end
30
30
 
31
- def create_state_for(method)
32
- builder = Parameter::StateBuilder.instance
33
- options = self.class.params_ready_storage
34
- options.parameter_rules do |rule|
35
- builder.add rule.parameter_definition if rule.valid_for(method)
36
- end
37
- options.relation_rules do |rule|
38
- builder.relation rule.parameter_definition if rule.valid_for(method)
39
- end
40
- builder.build
31
+ def create_state_for(key)
32
+ self.class.params_ready_option.create_state_for(key)
41
33
  end
42
34
  end
43
- end
35
+ end
@@ -1,11 +1,11 @@
1
- require_relative '../parameter/hash_parameter'
1
+ require_relative '../parameter/struct_parameter'
2
2
  require_relative '../parameter/array_parameter'
3
3
  require_relative 'grouping'
4
4
  require_relative 'predicate'
5
5
 
6
6
  module ParamsReady
7
7
  module Query
8
- class ArrayGrouping < Parameter::HashParameter
8
+ class ArrayGrouping < Parameter::StructParameter
9
9
  include Parameter::GroupingLike
10
10
 
11
11
  def predicates
@@ -29,7 +29,7 @@ module ParamsReady
29
29
  end
30
30
 
31
31
  class ArrayGroupingBuilder < Builder
32
- include Parameter::AbstractHashParameterBuilder::HashLike
32
+ include Parameter::AbstractStructParameterBuilder::StructLike
33
33
  PredicateRegistry.register_predicate :array_grouping_predicate, self
34
34
 
35
35
  def prototype(type_name, name = :proto, *arr, **opts, &block)
@@ -48,7 +48,7 @@ module ParamsReady
48
48
  end
49
49
  end
50
50
 
51
- class ArrayGroupingDefinition < Parameter::HashParameterDefinition
51
+ class ArrayGroupingDefinition < Parameter::StructParameterDefinition
52
52
  def initialize(*args, **opts)
53
53
  super
54
54
  end
@@ -58,7 +58,7 @@ module ParamsReady
58
58
  PredicateRegistry.register_predicate :exists_predicate, self
59
59
 
60
60
  include GroupingLike
61
- include Parameter::AbstractHashParameterBuilder::HashLike
61
+ include Parameter::AbstractStructParameterBuilder::StructLike
62
62
  include HavingArelTable
63
63
 
64
64
  def self.instance(name, altn: nil, coll: nil)
@@ -66,8 +66,8 @@ module ParamsReady
66
66
  end
67
67
 
68
68
  def related(on: nil, eq: nil, &block)
69
- join_statement = JoinStatement.new(on: on, eq: eq, &block)
70
- @definition.set_related(join_statement)
69
+ join_statement = JoinStatement::Builder.new(on: on, eq: eq, &block)
70
+ @definition.set_related(join_statement.build)
71
71
  end
72
72
 
73
73
  def outer_table(arel_table)
@@ -48,6 +48,10 @@ module ParamsReady
48
48
  definition = Builder.define_grouping_operator(:operator, altn: :op, &block)
49
49
  add definition
50
50
  end
51
+
52
+ def to_query?(&block)
53
+ helper :to_query?, &block
54
+ end
51
55
  end
52
56
  end
53
57
 
@@ -67,10 +71,12 @@ module ParamsReady
67
71
  arel_table.grouping(subqueries)
68
72
  end
69
73
 
70
- def eligible_for_query?(_table, context)
74
+ def eligible_for_query?(table, context)
71
75
  return false unless context.permitted? self
76
+ return false unless is_definite?
77
+ return true unless respond_to?(:to_query?)
72
78
 
73
- is_definite?
79
+ to_query?(table, context)
74
80
  end
75
81
 
76
82
  def to_query_if_eligible(arel_table, context:)
@@ -1,14 +1,45 @@
1
1
  require_relative '../helpers/arel_builder'
2
+ require_relative '../error'
2
3
 
3
4
  module ParamsReady
4
5
  module Query
5
6
  class Join
7
+ class Builder
8
+ def initialize(&block)
9
+ @block = block
10
+ @statement_builder = nil
11
+ @only_if = nil
12
+ end
13
+
14
+ def build
15
+ instance_eval(&@block)
16
+ @block = nil
17
+ raise ParamsReadyError, 'Join statement must be present' if @statement_builder.nil?
18
+ [@statement_builder.build, @only_if]
19
+ end
20
+
21
+ def on(expression, arel_table: nil)
22
+ @statement_builder ||= JoinStatement::Builder.new
23
+ @statement_builder.on(expression, arel_table: arel_table)
24
+ end
25
+
26
+ def only_if(&block)
27
+ @only_if = block
28
+ nil
29
+ end
30
+ end
31
+
6
32
  attr_reader :arel_table, :statement, :type
7
33
 
8
- def initialize(table, type, &block)
9
- @arel_table = table
34
+ def initialize(table, type, table_alias: nil, &block)
35
+ @arel_table = Helpers::ArelBuilder::Table.instance(table, table_alias: table_alias)
10
36
  @type = arel_type(type)
11
- @statement = JoinStatement.new(&block)
37
+ @statement, @only_if = Builder.new(&block).build
38
+ freeze
39
+ end
40
+
41
+ def arel_table(context, parameter)
42
+ @arel_table.to_arel(context, parameter)
12
43
  end
13
44
 
14
45
  def arel_type(type)
@@ -19,32 +50,51 @@ module ParamsReady
19
50
  end
20
51
  end
21
52
 
22
- def to_arel(base_table, context, parameter)
23
- join_statement = @statement.to_arel(base_table, @arel_table, context, parameter)
24
- base_table.join(@arel_table, @type).on(join_statement)
53
+ def to_arel(joined_table, base_table, context, parameter)
54
+ return joined_table unless eligible?(context, parameter)
55
+
56
+ arel_table = arel_table(context, parameter)
57
+ join_statement = @statement.to_arel(base_table, arel_table, context, parameter)
58
+ joined_table.join(arel_table, @type).on(join_statement)
59
+ end
60
+
61
+ def eligible?(context, parameter)
62
+ return true if @only_if.nil?
63
+
64
+ @only_if.call(context, parameter)
25
65
  end
26
66
  end
27
67
 
28
68
  class JoinStatement
29
- def initialize(on: nil, eq: nil, &block)
30
- @conditions = []
31
- if on
32
- condition = on(on)
33
- if eq
34
- condition.eq(eq)
69
+ class Builder
70
+ def initialize(on: nil, eq: nil, &block)
71
+ @condition_builders = []
72
+ if on.nil?
73
+ raise ParamsReadyError, 'Parameter :eq unexpected' unless eq.nil?
74
+ else
75
+ condition = on(on)
76
+ condition.eq(eq) unless eq.nil?
35
77
  end
36
- else
37
- raise ParamsReadyError('Parameter :eq unexpected') unless eq.nil?
78
+ @block = block
38
79
  end
39
80
 
40
- instance_eval(&block) unless block.nil?
41
- raise ParamsReadyError, "Join clause is empty" if @conditions.empty?
81
+ def on(expression, arel_table: nil)
82
+ condition = JoinCondition::Builder.new(expression, arel_table: arel_table)
83
+ @condition_builders << condition
84
+ condition
85
+ end
86
+
87
+ def build
88
+ instance_eval(&@block) unless @block.nil?
89
+ JoinStatement.new(@condition_builders.map(&:build))
90
+ end
42
91
  end
43
92
 
44
- def on(expression, arel_table: nil)
45
- condition = JoinCondition.new(expression, arel_table: arel_table)
46
- @conditions << condition
47
- condition
93
+ def initialize(conditions)
94
+ @conditions = conditions.freeze
95
+ raise ParamsReadyError, "Join clause is empty" if @conditions.empty?
96
+
97
+ freeze
48
98
  end
49
99
 
50
100
  def to_arel(base_table, join_table, context, parameter)
@@ -58,16 +108,29 @@ module ParamsReady
58
108
  end
59
109
 
60
110
  class JoinCondition
61
- def initialize(expression, arel_table: nil)
62
- @on = Helpers::ArelBuilder.instance(expression, arel_table: arel_table)
63
- @to = nil
64
- @op = nil
111
+ class Builder
112
+ def initialize(expression, arel_table: nil)
113
+ @on = Helpers::ArelBuilder::Attribute.instance(expression, arel_table: arel_table)
114
+ @op = nil
115
+ @to = nil
116
+ end
117
+
118
+ def eq(expression, arel_table: nil)
119
+ raise ParamsReadyError, "Operator already set" unless @op.nil?
120
+ @op = :eq
121
+ @to = Helpers::ArelBuilder::Attribute.instance(expression, arel_table: arel_table)
122
+ end
123
+
124
+ def build
125
+ JoinCondition.new(@on, @op, @to)
126
+ end
65
127
  end
66
128
 
67
- def eq(expression, arel_table: nil)
68
- raise ParamsReadyError, "Operator already set" unless @op.nil?
69
- @op = :eq
70
- @to = Helpers::ArelBuilder.instance(expression, arel_table: arel_table)
129
+ def initialize(on, op, to)
130
+ @on = on
131
+ @op = op
132
+ @to = to
133
+ freeze
71
134
  end
72
135
 
73
136
  def to_arel(base_table, join_table, context, parameter)
@@ -1,6 +1,6 @@
1
1
  require_relative '../extensions/registry'
2
2
  require_relative '../parameter/array_parameter'
3
- require_relative '../parameter/hash_set_parameter'
3
+ require_relative '../parameter/enum_set_parameter'
4
4
  require_relative '../helpers/arel_builder'
5
5
 
6
6
  module ParamsReady
@@ -45,7 +45,7 @@ module ParamsReady
45
45
  registry :types, as: :type, getter: true
46
46
  register_type :value, Parameter::ValueParameterBuilder
47
47
  register_type :array, Parameter::ArrayParameterBuilder
48
- register_type :hash_set, Parameter::HashSetParameterBuilder
48
+ register_type :enum_set, Parameter::EnumSetParameterBuilder
49
49
  end
50
50
 
51
51
  class AbstractPredicateDefinition < Parameter::AbstractDefinition
@@ -70,7 +70,7 @@ module ParamsReady
70
70
  end
71
71
 
72
72
  def build_select_expression(arel_table, context)
73
- arel_builder = Helpers::ArelBuilder.instance(select_expression, arel_table: @arel_table)
73
+ arel_builder = Helpers::ArelBuilder::Attribute.instance(select_expression, arel_table: @arel_table)
74
74
  arel = arel_builder.to_arel(arel_table, context, self)
75
75
 
76
76
  arel
@@ -136,7 +136,7 @@ module ParamsReady
136
136
 
137
137
  def perform_count(scope: nil, context: Restriction.blanket_permission)
138
138
  scope ||= definition.model_class if definition.model_class_defined?
139
- group = predicate_group(scope.arel_table, context: context)
139
+ group = to_query_if_eligible(scope.arel_table, context: context)
140
140
  relation = scope.where(group)
141
141
  relation = perform_joins(relation, context)
142
142
  relation.count
@@ -144,7 +144,7 @@ module ParamsReady
144
144
 
145
145
  def keysets(limit, direction, keyset, scope: nil, context: Restriction.blanket_permission, &block)
146
146
  model_class = scope || definition.model_class
147
- group = predicate_group(model_class.arel_table, context: context)
147
+ group = to_query_if_eligible(model_class.arel_table, context: context)
148
148
  relation = model_class.where(group)
149
149
  relation = perform_joins(relation, context)
150
150
 
@@ -156,7 +156,7 @@ module ParamsReady
156
156
 
157
157
  def build_relation(scope: nil, include: [], context: Restriction.blanket_permission, paginate: true)
158
158
  model_class = scope || definition.model_class
159
- group = predicate_group(model_class.arel_table, context: context)
159
+ group = to_query_if_eligible(model_class.arel_table, context: context)
160
160
  relation = model_class.where(group)
161
161
  relation = relation.includes(*include) unless include.empty?
162
162
  relation = perform_joins(relation, context)
@@ -165,9 +165,12 @@ module ParamsReady
165
165
  end
166
166
 
167
167
  def perform_joins(relation, context)
168
- return relation if definition.joins.empty?
168
+ eligible_joins = definition.joins.select do |join|
169
+ join.eligible?(context, self)
170
+ end
171
+ return relation if eligible_joins.empty?
169
172
 
170
- sql = joined_tables(relation.arel_table, context).join_sources.map(&:to_sql).join(' ')
173
+ sql = join_tables(eligible_joins, relation.arel_table, context).join_sources.map(&:to_sql).join(' ')
171
174
  relation.joins(sql)
172
175
  end
173
176
 
@@ -176,7 +179,7 @@ module ParamsReady
176
179
 
177
180
  arel_table = joined_tables(model_class.arel_table, context)
178
181
 
179
- group = self.predicate_group(model_class.arel_table, context: context)
182
+ group = to_query_if_eligible(model_class.arel_table, context: context)
180
183
 
181
184
  query = if group.nil?
182
185
  arel_table
@@ -200,7 +203,7 @@ module ParamsReady
200
203
  def build_query(model_class, context)
201
204
  arel_table = arel_table(model_class)
202
205
 
203
- group = self.predicate_group(arel_table, context: context)
206
+ group = to_query_if_eligible(arel_table, context: context)
204
207
  joined = joined_tables(arel_table, context)
205
208
 
206
209
  query = if group.nil?
@@ -212,6 +215,12 @@ module ParamsReady
212
215
  [arel_table, query]
213
216
  end
214
217
 
218
+ def to_query_if_eligible(arel_table, context:)
219
+ return if respond_to?(:to_query?) && !to_query?(arel_table, context)
220
+
221
+ predicate_group(arel_table, context: context)
222
+ end
223
+
215
224
  def order_if_applicable(arel_table, context)
216
225
  if child_is_definite?(:ordering) && (context.permitted?(ordering) || ordering.required?)
217
226
  ordering = self.ordering.to_arel(arel_table, context: context)
@@ -248,16 +257,23 @@ module ParamsReady
248
257
  query
249
258
  end
250
259
 
251
- def joined_tables(proper_table, context)
252
- definition.joins.reduce(proper_table) do |table, join|
253
- join.to_arel(table, context, self)
260
+ def joined_tables(base_table, context)
261
+ join_tables(definition.joins, base_table, context)
262
+ end
263
+
264
+ def join_tables(joins, base_table, context)
265
+ joins.reduce(base_table) do |joined_table, join|
266
+ join = join.to_arel(joined_table, base_table, context, self)
267
+ next joined_table if join.nil?
268
+
269
+ join
254
270
  end
255
271
  end
256
272
  end
257
273
 
258
274
  class RelationParameterBuilder < Builder
259
275
  include GroupingLike
260
- include Parameter::AbstractHashParameterBuilder::HashLike
276
+ include Parameter::AbstractStructParameterBuilder::StructLike
261
277
  include HavingModel
262
278
 
263
279
  def self.instance(name, altn: nil)
@@ -288,9 +304,8 @@ module ParamsReady
288
304
  add ordering
289
305
  end
290
306
 
291
- def join_table(arel_table, type, &block)
292
- join = Join.new arel_table, type, &block
293
- join.freeze
307
+ def join_table(arel_table, type, table_alias: nil, &block)
308
+ join = Join.new arel_table, type, table_alias: nil, &block
294
309
  @definition.add_join(join)
295
310
  end
296
311
  end
@@ -1,4 +1,4 @@
1
- require_relative '../parameter/hash_parameter'
1
+ require_relative '../parameter/struct_parameter'
2
2
  require_relative '../parameter/value_parameter'
3
3
  require_relative 'fixed_operator_predicate'
4
4
  require_relative 'nullness_predicate'
@@ -6,7 +6,7 @@ require_relative 'grouping'
6
6
 
7
7
  module ParamsReady
8
8
  module Query
9
- class StructuredGrouping < Parameter::HashParameter
9
+ class StructuredGrouping < Parameter::StructParameter
10
10
  include Parameter::GroupingLike
11
11
  def predicates
12
12
  return [] if is_nil?
@@ -29,7 +29,7 @@ module ParamsReady
29
29
 
30
30
  class StructuredGroupingBuilder < Builder
31
31
  include GroupingLike
32
- include Parameter::AbstractHashParameterBuilder::HashLike
32
+ include Parameter::AbstractStructParameterBuilder::StructLike
33
33
  PredicateRegistry.register_predicate :structured_grouping_predicate, self
34
34
 
35
35
  def self.instance(name, altn: nil)
@@ -37,7 +37,7 @@ module ParamsReady
37
37
  end
38
38
  end
39
39
 
40
- class StructuredGroupingDefinition < Parameter::HashParameterDefinition
40
+ class StructuredGroupingDefinition < Parameter::StructParameterDefinition
41
41
  attr_reader :arel_table, :predicates
42
42
 
43
43
  def initialize(*args, **opts)
@@ -1,5 +1,5 @@
1
1
  require_relative 'predicate'
2
- require_relative '../parameter/hash_parameter'
2
+ require_relative '../parameter/struct_parameter'
3
3
  require_relative '../parameter/value_parameter'
4
4
  require_relative '../value/validator'
5
5
  require_relative 'predicate_operator'
@@ -12,7 +12,7 @@ module ParamsReady
12
12
 
13
13
  def initialize(definition)
14
14
  super definition
15
- @data = definition.hash_parameter.create
15
+ @data = definition.struct_parameter.create
16
16
  end
17
17
 
18
18
  def build_query(select_expression, context: nil)
@@ -33,8 +33,8 @@ module ParamsReady
33
33
 
34
34
  def inspect_content
35
35
  op, val = if is_definite?
36
- op = @data[:operator].unwrap_or(nil)&.name || '?'
37
- val = @data[:value].unwrap_or('?')
36
+ @data[:operator].unwrap_or(nil)&.name || '?'
37
+ @data[:value].unwrap_or('?')
38
38
  else
39
39
  %w[? ?]
40
40
  end
@@ -64,7 +64,7 @@ module ParamsReady
64
64
  PredicateRegistry.register_predicate :variable_operator_predicate, self
65
65
  include HavingType
66
66
  include HavingAttribute
67
- include DelegatingBuilder[:hash_parameter_builder]
67
+ include DelegatingBuilder[:struct_parameter_builder]
68
68
 
69
69
  def self.instance(name, altn: nil, attr: nil)
70
70
  new VariableOperatorPredicateDefinition.new name, altn: altn, attribute_name: attr
@@ -82,19 +82,19 @@ module ParamsReady
82
82
  class VariableOperatorPredicateDefinition < AbstractPredicateDefinition
83
83
  include HavingAttribute
84
84
 
85
- attr_reader :hash_parameter_builder
86
- attr_reader :hash_parameter
85
+ attr_reader :struct_parameter_builder
86
+ attr_reader :struct_parameter
87
87
 
88
88
  def initialize(*args, attribute_name: nil, **opts)
89
89
  super *args, **opts
90
90
  @attribute_name = attribute_name
91
- @hash_parameter_builder = Builder.builder(:hash).instance(name, altn: altn)
91
+ @struct_parameter_builder = Builder.builder(:struct).instance(name, altn: altn)
92
92
  @operator_parameter_builder = Builder.builder(:predicate_operator).instance(:operator, altn: :op)
93
93
  end
94
94
 
95
95
  def set_type(type)
96
96
  @type = type
97
- @hash_parameter_builder.add @type.finish
97
+ @struct_parameter_builder.add @type.finish
98
98
  end
99
99
 
100
100
  def set_operators(array, &block)
@@ -107,12 +107,12 @@ module ParamsReady
107
107
  constrain :enum, operators
108
108
  end
109
109
  @operator_parameter_builder.include(&block) unless block.nil?
110
- @hash_parameter_builder.add @operator_parameter_builder.build
110
+ @struct_parameter_builder.add @operator_parameter_builder.build
111
111
  end
112
112
 
113
113
  def finish
114
- @hash_parameter = @hash_parameter_builder.build
115
- @hash_parameter_builder = nil
114
+ @struct_parameter = @struct_parameter_builder.build
115
+ @struct_parameter_builder = nil
116
116
  @operator_parameter_builder = nil
117
117
  @type = nil
118
118