glue_gun_dsl 0.1.10 → 0.1.11

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: d6e4ef257ecdb7017d0c554a6df1e4c24fcee152a0888973cd52fab9d9b4b21a
4
- data.tar.gz: bd019c542b46e12188b759d8c7322bea99bcb016c0940ac2a67124a33fca31d8
3
+ metadata.gz: edbf3090421208672fdc17def682401b63dab26703932337106fc21e54e3a589
4
+ data.tar.gz: 5f7948854600c6472a35119724d5bcdff04e0ae333bc11278559e05432cac849
5
5
  SHA512:
6
- metadata.gz: 3f3522c171606ed23822d792e5ebc1895ac03280a9fa4bde7c9bf79daed22496c14b5d0b9a03d5063105d1611b2f11161c3c5ed74919b9c134e2f32d35b03a9a
7
- data.tar.gz: a170db2ee61ba4c208148bcc8fb46e428bf1b04b8142ffa110f857418d7a762e759b6d13fe51333fcd829c3876d98128b0ad86d48dd9db4cf24ed027a47ba2bf
6
+ metadata.gz: 5d20c2554f8908224286358e4f16f36ce52839db20103ccc3368554088c63fc6af82ae7de6a6d2ebbdf4a3974d7db66502cc7b809f70a9c3cca6f3cb495e0a0f
7
+ data.tar.gz: c01c8d848e36cd7632daddbac3b0f6e3d3f552a59649ce25fafc9aa1437d0d21fcbaa886e72cae1962bc1a3a8bc95ea8c839b00944793ea4f2e7193361ff4981
data/lib/glue_gun/dsl.rb CHANGED
@@ -3,11 +3,14 @@ module GlueGun
3
3
  extend ActiveSupport::Concern
4
4
 
5
5
  included do
6
- include ActiveModel::Model
7
- include ActiveModel::Attributes
8
- include ActiveModel::Validations
9
- include ActiveModel::AttributeAssignment
10
- include ActiveModel::Dirty
6
+ unless ancestors.include?(ActiveRecord::Base)
7
+ include ActiveModel::Model
8
+ include ActiveModel::Attributes
9
+ include ActiveModel::Validations
10
+ include ActiveModel::AttributeAssignment
11
+ include ActiveModel::Dirty
12
+ include ActiveRecord::Callbacks
13
+ end
11
14
 
12
15
  class_attribute :attribute_definitions, instance_writer: false, default: {}
13
16
  class_attribute :dependency_definitions, instance_writer: false, default: {}
@@ -18,7 +21,6 @@ module GlueGun
18
21
  const_set(:AttributeMethods, attribute_methods_module)
19
22
  prepend attribute_methods_module
20
23
 
21
- # Prepend Initialization module to override initialize
22
24
  prepend Initialization
23
25
 
24
26
  # Prepend ClassMethods into the singleton class of the including class
@@ -31,10 +33,21 @@ module GlueGun
31
33
  super(new_attributes)
32
34
  propagate_changes if initialized?
33
35
  end
36
+
37
+ if ancestors.include?(ActiveRecord::Base)
38
+ columns.each do |column|
39
+ # Skip if already defined via GlueGun::DSL's attribute method
40
+ next if attribute_definitions.key?(column.name.to_sym)
41
+
42
+ # Define a ConfigAttr for each ActiveRecord column
43
+ attribute(column.name.to_sym, column.type)
44
+ end
45
+ end
34
46
  end
35
47
 
36
48
  module Initialization
37
49
  def initialize(attrs = {})
50
+ attrs ||= {}
38
51
  attrs = attrs.symbolize_keys
39
52
  # Separate dependency configurations from normal attributes
40
53
  dependency_attributes = {}
@@ -56,9 +69,6 @@ module GlueGun
56
69
  # Initialize dependencies after attributes have been set
57
70
  initialize_dependencies(dependency_attributes)
58
71
 
59
- # Validate the main object's attributes
60
- validate!
61
-
62
72
  @initialized = true
63
73
  end
64
74
  end
@@ -75,7 +85,7 @@ module GlueGun
75
85
  attribute_definitions[name.to_sym] = { type: type, options: options }
76
86
 
77
87
  # Define dirty tracking for the attribute
78
- define_attribute_methods name
88
+ define_attribute_methods name unless ancestors.include?(ActiveRecord::Base)
79
89
 
80
90
  attribute_methods_module = const_get(:AttributeMethods)
81
91
 
@@ -106,6 +116,14 @@ module GlueGun
106
116
  instance_variable_get("@#{component_type}") ||
107
117
  instance_variable_set("@#{component_type}", initialize_dependency(component_type))
108
118
  end
119
+
120
+ attribute_methods_module = const_get(:AttributeMethods)
121
+ attribute_methods_module.class_eval do
122
+ define_method "#{component_type}=" do |init_args|
123
+ instance_variable_set("@#{component_type}", initialize_dependency(component_type, init_args))
124
+ # propagate_attribute_change(component_type, value) if initialized?
125
+ end
126
+ end
109
127
  end
110
128
 
111
129
  def inherited(subclass)
@@ -194,11 +212,6 @@ module GlueGun
194
212
  value = attr_config.process_value(value, self) if attr_config.respond_to?(:process_value)
195
213
  dep_attributes[attr_name] = value
196
214
  end
197
-
198
- # After getting the value, check if it's required and nil
199
- if value.nil? && attr_config.required
200
- raise ArgumentError, "Missing required attribute '#{attr_name}' for #{option_config.class_name}"
201
- end
202
215
  end
203
216
 
204
217
  dep_attributes
@@ -242,7 +255,7 @@ module GlueGun
242
255
  def instantiate_dependency(option_config, dep_attributes)
243
256
  dependency_class = option_config.class_name
244
257
  dependency_instance = dependency_class.new(dep_attributes)
245
- dependency_instance.validate! if dependency_instance.respond_to?(:validate!)
258
+ dependency_instance.validate! if false # dependency_instance.respond_to?(:validate!)
246
259
  dependency_instance
247
260
  end
248
261
 
@@ -288,6 +301,25 @@ module GlueGun
288
301
  @dependencies ||= {}
289
302
  end
290
303
 
304
+ def validate_dependencies
305
+ errors.clear
306
+ self.class.dependency_definitions.keys.each do |component_type|
307
+ dependency = send(component_type)
308
+
309
+ # Only validate if the dependency responds to `valid?`
310
+ next unless dependency.respond_to?(:valid?) && !dependency.valid?
311
+
312
+ dependency.errors.each do |error|
313
+ if error.is_a?(ActiveModel::Error)
314
+ attribute = error.attribute
315
+ message = error.message
316
+ end
317
+ errors.add("#{component_type}.#{attribute}", message)
318
+ end
319
+ end
320
+ errors.none?
321
+ end
322
+
291
323
  class ConfigAttr
292
324
  attr_reader :name, :default, :required, :source, :block
293
325
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GlueGun
4
- VERSION = "0.1.10"
4
+ VERSION = "0.1.11"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glue_gun_dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.10
4
+ version: 0.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Shollenberger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-05 00:00:00.000000000 Z
11
+ date: 2024-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -30,6 +30,26 @@ dependencies:
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '8'
33
+ - !ruby/object:Gem::Dependency
34
+ name: activerecord
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '6'
40
+ - - "<"
41
+ - !ruby/object:Gem::Version
42
+ version: '8'
43
+ type: :runtime
44
+ prerelease: false
45
+ version_requirements: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: '6'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '8'
33
53
  - !ruby/object:Gem::Dependency
34
54
  name: activesupport
35
55
  requirement: !ruby/object:Gem::Requirement
@@ -64,6 +84,20 @@ dependencies:
64
84
  - - ">="
65
85
  - !ruby/object:Gem::Version
66
86
  version: '0'
87
+ - !ruby/object:Gem::Dependency
88
+ name: combustion
89
+ requirement: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - "~>"
92
+ - !ruby/object:Gem::Version
93
+ version: '1.3'
94
+ type: :development
95
+ prerelease: false
96
+ version_requirements: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - "~>"
99
+ - !ruby/object:Gem::Version
100
+ version: '1.3'
67
101
  - !ruby/object:Gem::Dependency
68
102
  name: guard
69
103
  requirement: !ruby/object:Gem::Requirement
@@ -134,6 +168,20 @@ dependencies:
134
168
  - - "~>"
135
169
  - !ruby/object:Gem::Version
136
170
  version: '3.0'
171
+ - !ruby/object:Gem::Dependency
172
+ name: sqlite3
173
+ requirement: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - "~>"
176
+ - !ruby/object:Gem::Version
177
+ version: '1.4'
178
+ type: :development
179
+ prerelease: false
180
+ version_requirements: !ruby/object:Gem::Requirement
181
+ requirements:
182
+ - - "~>"
183
+ - !ruby/object:Gem::Version
184
+ version: '1.4'
137
185
  description: GlueGun makes dependency injection and hydration a first-order concern
138
186
  email:
139
187
  - brett.shollenberger@gmail.com