glue_gun_dsl 0.1.5 → 0.1.6

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: b1f17db06be196fb63b2941e0ba636af749f6ccbff64bf4032311b05db781739
4
- data.tar.gz: e240a34a00b9417f5051a100daa614d14df500c15ccd805e60be0c4410d6aca2
3
+ metadata.gz: 1a2fbc67d781829a58d7b42eb3ef5e53a2b278460386c450241f9a39a3cf0886
4
+ data.tar.gz: aa40b26fd78038cd82d99dfe511ee87609d118e719cd23849f8bc9f190e13d44
5
5
  SHA512:
6
- metadata.gz: 74168264b965a8bc8174d638a9151d87669cdb004d548c08261b231dc67e0101e4a67f6a85d7025e82f5c47c04a8b9dc7fa6bf7a71f6857a2a96e3d0455ff1bd
7
- data.tar.gz: fd61db3f0571df81e06c019a2da1f811145c3238201c0e0d4f3b6130d7faa11402322ba611f7cb0d2c4543ed84ea11bd402b8b0fd3789a859d24e39dd677d440
6
+ metadata.gz: abc26b337ee2eebd874892406532936634cb78f366dd2f91f972eef3de010b69b79c8c616021c1a52d871349fbcdb8b372fe78008b4cc4d1440fe732d432cc73
7
+ data.tar.gz: 3685c64f5fad1a4b19dab651762e47401a95d628548e5095910315d2a77a60b22354144100a838a01bae7cee6cd0d1850410e761e10f285e2f4be1c80ce5194e
data/lib/glue_gun/dsl.rb CHANGED
@@ -7,6 +7,7 @@ module GlueGun
7
7
  include ActiveModel::Attributes
8
8
  include ActiveModel::Validations
9
9
  include ActiveModel::AttributeAssignment
10
+ include ActiveModel::Dirty
10
11
 
11
12
  class_attribute :attribute_definitions, instance_writer: false, default: {}
12
13
  class_attribute :dependency_definitions, instance_writer: false, default: {}
@@ -24,16 +25,22 @@ module GlueGun
24
25
  class << self
25
26
  prepend ClassMethods
26
27
  end
28
+
29
+ # Overriding ActiveModel.assign_attributes to ensure change propagation to dependenices
30
+ def assign_attributes(new_attributes)
31
+ super(new_attributes)
32
+ propagate_changes if initialized?
33
+ end
27
34
  end
28
35
 
29
36
  module Initialization
30
- def initialize(attributes = {})
31
- attributes = attributes.symbolize_keys
37
+ def initialize(attrs = {})
38
+ attrs = attrs.symbolize_keys
32
39
  # Separate dependency configurations from normal attributes
33
40
  dependency_attributes = {}
34
41
  normal_attributes = {}
35
42
 
36
- attributes.each do |key, value|
43
+ attrs.each do |key, value|
37
44
  if self.class.dependency_definitions.key?(key)
38
45
  dependency_attributes[key] = value
39
46
  else
@@ -58,11 +65,13 @@ module GlueGun
58
65
 
59
66
  module ClassMethods
60
67
  # Override the attribute method to define custom setters
61
- def attribute(name, type = :string, **options)
62
- # Call the original attribute method from ActiveModel::Attributes
68
+ def attribute(name, type = nil, **options)
63
69
  super(name, type, **options)
64
70
  attribute_definitions[name.to_sym] = { type: type, options: options }
65
71
 
72
+ # Define dirty tracking for the attribute
73
+ define_attribute_methods name
74
+
66
75
  attribute_methods_module = const_get(:AttributeMethods)
67
76
 
68
77
  attribute_methods_module.class_eval do
@@ -234,6 +243,16 @@ module GlueGun
234
243
  dependency_instance
235
244
  end
236
245
 
246
+ def propagate_changes
247
+ changed_attributes.each do |attr_name, _old_value|
248
+ new_value = read_attribute(attr_name)
249
+ propagate_attribute_change(attr_name, new_value)
250
+ end
251
+
252
+ # Clear the changes after propagation
253
+ changes_applied
254
+ end
255
+
237
256
  def propagate_attribute_change(attr_name, value)
238
257
  self.class.dependency_definitions.each do |component_type, _dependency_builder|
239
258
  dependency_instance = send(component_type)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GlueGun
4
- VERSION = "0.1.5"
4
+ VERSION = "0.1.6"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glue_gun_dsl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Shollenberger