foobara 0.0.49 → 0.0.50

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: c906fa3ff55b19d33976a861a7d249aaf8b869507ba845cd8743459653fc117f
4
- data.tar.gz: 86da929e2ed3d0b478067f27e7605060941a593eb8c5c95298304d3cf048fc45
3
+ metadata.gz: 046fdc3bab52559499e744edbde0ef847e26c4e6107423779351a26acc654619
4
+ data.tar.gz: 56174a565dafcdf3cd03a66e791be3d5a6074bd426c203371b6d7f41fa3a7e12
5
5
  SHA512:
6
- metadata.gz: 04424105e5a0d9788839c40c3689ae34d8f1c39192128cf6e30a8c85e326fb3f5aa0b02a11cec7ac374ae62862cd941bb774db423d01e6e912b4a1a21977b3c2
7
- data.tar.gz: 4030da0e998f344b19a453a624481189dbf432654c8af7a63a5197eeeb281d7a64df683c4babfcb59abad342a5b436036d61eda8bb760a0d011aa30cac1b780b
6
+ metadata.gz: ca08c711d53d11eb7ee073d040163df8bfe23c69b4b8e4c4f9647c6d216578755388b009b6d67e2cf988cc4e043413bfbe8f4f78ecb7690f713191cf00474255
7
+ data.tar.gz: a3b1e726a7295d1a0e4d22ef8f7a8130b39d57a1576f07f3f36bb20347ffce4bde07d6205c9c2853b392f47542ef7c696de57ab02c7c11d463484e3f5eebc779
data/CHANGELOG.md CHANGED
@@ -1,4 +1,4 @@
1
- ## [0.0.49] - 2025-01-21
1
+ ## [0.0.50] - 2025-01-22
2
2
 
3
3
  - Fill out more foobara_ model attribute helper methods to further support the ActiveRecordType gem
4
4
 
@@ -25,7 +25,11 @@ module Foobara
25
25
  end
26
26
  end
27
27
 
28
- rawish_type_declaration[:defaults] = defaults unless defaults.empty?
28
+ if defaults.empty?
29
+ rawish_type_declaration.delete(:defaults)
30
+ else
31
+ rawish_type_declaration[:defaults] = defaults
32
+ end
29
33
 
30
34
  rawish_type_declaration
31
35
  end
@@ -40,7 +40,11 @@ module Foobara
40
40
  end
41
41
  end
42
42
 
43
- rawish_type_declaration[:required] = required_attributes unless required_attributes.empty?
43
+ if required_attributes.empty?
44
+ rawish_type_declaration.delete(:required)
45
+ else
46
+ rawish_type_declaration[:required] = required_attributes
47
+ end
44
48
 
45
49
  rawish_type_declaration
46
50
  end
@@ -25,6 +25,16 @@ module Foobara
25
25
  @inputs_type
26
26
  end
27
27
 
28
+ def add_inputs(...)
29
+ new_type = type_for_declaration(...)
30
+ new_declaration = TypeDeclarations::Attributes.merge(
31
+ inputs_type.declaration_data,
32
+ new_type.declaration_data
33
+ )
34
+
35
+ inputs new_declaration
36
+ end
37
+
28
38
  def inputs_type
29
39
  return @inputs_type if defined?(@inputs_type)
30
40
 
@@ -25,8 +25,8 @@ module Foobara
25
25
  respond_to?(:foobara_primary_key_attribute)
26
26
  end
27
27
 
28
- def foobara_attributes_for_update
29
- foobara_attributes_for_aggregate_update
28
+ def foobara_attributes_for_update(require_primary_key: false)
29
+ foobara_attributes_for_aggregate_update(require_primary_key:)
30
30
  end
31
31
 
32
32
  # TODO: we should have metadata on the entity about whether it required a primary key
@@ -35,39 +35,24 @@ module Foobara
35
35
  return foobara_attributes_type if includes_primary_key
36
36
  return foobara_attributes_type unless foobara_has_primary_key?
37
37
 
38
- primary_key_attribute = foobara_primary_key_attribute
39
-
40
- declaration = attributes_type.declaration_data
41
- # TODO: just slice out the element type declarations
42
- declaration = Util.deep_dup(declaration)
43
-
44
- declaration[:element_type_declarations].delete(primary_key_attribute)
45
-
46
- if declaration.key?(:required)
47
- declaration[:required].delete(primary_key_attribute)
48
- end
49
-
50
- if declaration.key?(:defaults)
51
- declaration[:defaults].delete(primary_key_attribute)
52
- end
53
-
54
- handler = Domain.global.foobara_type_builder.handler_for_class(
55
- TypeDeclarations::Handlers::ExtendAttributesTypeDeclaration
56
- )
38
+ declaration = foobara_attributes_type.declaration_data
57
39
 
58
- handler.desugarize(declaration)
40
+ Foobara::TypeDeclarations::Attributes.reject(declaration, foobara_primary_key_attribute)
59
41
  end
60
42
 
61
- def foobara_attributes_for_aggregate_update(initial = true)
43
+ def foobara_attributes_for_aggregate_update(require_primary_key: false, initial: true)
62
44
  declaration = foobara_attributes_type.declaration_data
63
- # TODO: just slice out the element type declarations
64
45
  declaration = Util.deep_dup(declaration)
65
46
 
66
47
  declaration.delete(:defaults)
67
48
  declaration.delete(:required)
68
49
 
69
50
  if initial && foobara_has_primary_key?
70
- declaration[:required] = [foobara_primary_key_attribute]
51
+ if require_primary_key
52
+ declaration[:required] = [foobara_primary_key_attribute]
53
+ else
54
+ TypeDeclarations::Attributes.reject(declaration, foobara_primary_key_attribute)
55
+ end
71
56
  end
72
57
 
73
58
  foobara_associations.each_pair do |data_path, type|
@@ -76,21 +61,25 @@ module Foobara
76
61
 
77
62
  entry = foobara_type_declaration_value_at(declaration, DataPath.new(data_path).path)
78
63
  entry.clear
79
- entry.merge!(target_class.foobara_attributes_for_aggregate_update(false))
64
+ entry.merge!(target_class.foobara_attributes_for_aggregate_update(initial: false))
80
65
  end
81
66
  end
82
67
 
83
68
  declaration
84
69
  end
85
70
 
86
- def foobara_attributes_for_atom_update
71
+ def foobara_attributes_for_atom_update(require_primary_key: false)
87
72
  declaration = foobara_attributes_type.declaration_data
88
- # TODO: just slice out the element type declarations
89
73
  declaration = Util.deep_dup(declaration)
90
74
 
91
75
  declaration.delete(:defaults)
76
+
92
77
  if foobara_has_primary_key?
93
- declaration[:required] = [foobara_primary_key_attribute]
78
+ if require_primary_key
79
+ declaration[:required] = [foobara_primary_key_attribute]
80
+ else
81
+ declaration = TypeDeclarations::Attributes.reject(declaration, foobara_primary_key_attribute)
82
+ end
94
83
  end
95
84
 
96
85
  # expect all associations to be expressed as primary key values
@@ -21,12 +21,55 @@ module Foobara
21
21
  end
22
22
  end
23
23
 
24
- {
24
+ handler = Domain.global.foobara_type_builder.handler_for_class(
25
+ TypeDeclarations::Handlers::ExtendAttributesTypeDeclaration
26
+ )
27
+
28
+ handler.desugarize(
25
29
  type: "::attributes",
26
30
  element_type_declarations:,
27
31
  required:,
28
32
  defaults:
29
- }
33
+ )
34
+ end
35
+
36
+ def reject(declaration, *keys)
37
+ declaration = Util.deep_dup(declaration)
38
+
39
+ element_type_declarations = declaration[:element_type_declarations]
40
+ required = declaration[:required]
41
+ defaults = declaration[:defaults]
42
+
43
+ changed = false
44
+
45
+ keys.flatten.each do |key|
46
+ key = key.to_sym
47
+
48
+ if element_type_declarations.key?(key)
49
+ changed = true
50
+ element_type_declarations.delete(key)
51
+ end
52
+
53
+ if required&.include?(key)
54
+ changed = true
55
+ required.delete(key)
56
+ end
57
+
58
+ if defaults&.key?(key)
59
+ changed = true
60
+ defaults.delete(key)
61
+ end
62
+ end
63
+
64
+ if changed
65
+ handler = Domain.global.foobara_type_builder.handler_for_class(
66
+ TypeDeclarations::Handlers::ExtendAttributesTypeDeclaration
67
+ )
68
+
69
+ handler.desugarize(declaration)
70
+ else
71
+ declaration
72
+ end
30
73
  end
31
74
  end
32
75
  end
@@ -47,7 +47,6 @@ module Foobara
47
47
 
48
48
  def _to_declaration(&)
49
49
  instance_eval(&)
50
- _prune_type_declaration
51
50
  _type_declaration
52
51
  end
53
52
 
@@ -163,30 +162,20 @@ module Foobara
163
162
  end
164
163
 
165
164
  def _add_to_required(attribute_name)
165
+ _type_declaration[:required] ||= []
166
166
  _type_declaration[:required] << attribute_name.to_sym
167
167
  end
168
168
 
169
169
  def _add_to_defaults(attribute_name, value)
170
+ _type_declaration[:defaults] ||= {}
170
171
  _type_declaration[:defaults][attribute_name.to_sym] = value
171
172
  end
172
173
 
173
- def _prune_type_declaration
174
- if _type_declaration[:required].empty?
175
- _type_declaration.delete(:required)
176
- end
177
-
178
- if _type_declaration[:defaults].empty?
179
- _type_declaration.delete(:defaults)
180
- end
181
- end
182
-
183
174
  def _type_declaration
184
175
  @_type_declaration ||= begin
185
176
  sugar = {
186
177
  type: "::attributes",
187
- element_type_declarations: {},
188
- required: [],
189
- defaults: {}
178
+ element_type_declarations: {}
190
179
  }
191
180
 
192
181
  handler = Domain.current.foobara_type_builder.handler_for_class(Handlers::ExtendAttributesTypeDeclaration)
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foobara
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.49
4
+ version: 0.0.50
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miles Georgi
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-01-21 00:00:00.000000000 Z
10
+ date: 2025-01-22 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: bigdecimal