glue_gun_dsl 0.1.5 → 0.1.7

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: b1f17db06be196fb63b2941e0ba636af749f6ccbff64bf4032311b05db781739
4
- data.tar.gz: e240a34a00b9417f5051a100daa614d14df500c15ccd805e60be0c4410d6aca2
3
+ metadata.gz: fd26c5b4ba6c9831e91835a2d771d9cec019b94d25124e68ed006ba40aa545e8
4
+ data.tar.gz: 7d5572e0ff530ef4ed03b2ae8b8cde2261b7215fed9cec34f81722a0238287b6
5
5
  SHA512:
6
- metadata.gz: 74168264b965a8bc8174d638a9151d87669cdb004d548c08261b231dc67e0101e4a67f6a85d7025e82f5c47c04a8b9dc7fa6bf7a71f6857a2a96e3d0455ff1bd
7
- data.tar.gz: fd61db3f0571df81e06c019a2da1f811145c3238201c0e0d4f3b6130d7faa11402322ba611f7cb0d2c4543ed84ea11bd402b8b0fd3789a859d24e39dd677d440
6
+ metadata.gz: 5847c254dfe071b87b731d835a50b62be82f9c7638b281174e3aacd60cc29621c8c7027abcb09597e426b2275b7183b2ba8b6dd6f1fc192e0d50f7c4bc65b954
7
+ data.tar.gz: ebcea322a43228b6912176dfd7bb3a66df37da5ea5ce82c1415d1fe93ab1961b1ce7a244da3590a627488d0d6c62a24f9fe3a70d055679d347077276b127d011
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
@@ -57,12 +64,19 @@ module GlueGun
57
64
  end
58
65
 
59
66
  module ClassMethods
67
+ DEFAULT_TYPE = if ActiveModel.version >= Gem::Version.new("7")
68
+ nil
69
+ elsif ActiveModel.version >= Gem::Version.new("5")
70
+ ActiveModel::Type::Value.new
71
+ end
60
72
  # Override the attribute method to define custom setters
61
- def attribute(name, type = :string, **options)
62
- # Call the original attribute method from ActiveModel::Attributes
73
+ def attribute(name, type = DEFAULT_TYPE, **options)
63
74
  super(name, type, **options)
64
75
  attribute_definitions[name.to_sym] = { type: type, options: options }
65
76
 
77
+ # Define dirty tracking for the attribute
78
+ define_attribute_methods name
79
+
66
80
  attribute_methods_module = const_get(:AttributeMethods)
67
81
 
68
82
  attribute_methods_module.class_eval do
@@ -234,6 +248,16 @@ module GlueGun
234
248
  dependency_instance
235
249
  end
236
250
 
251
+ def propagate_changes
252
+ changed_attributes.each do |attr_name, _old_value|
253
+ new_value = read_attribute(attr_name)
254
+ propagate_attribute_change(attr_name, new_value)
255
+ end
256
+
257
+ # Clear the changes after propagation
258
+ changes_applied
259
+ end
260
+
237
261
  def propagate_attribute_change(attr_name, value)
238
262
  self.class.dependency_definitions.each do |component_type, _dependency_builder|
239
263
  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.7"
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.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brett Shollenberger
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.2'
19
+ version: '6'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '8'
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '5.2'
29
+ version: '6'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '8'
@@ -36,7 +36,7 @@ dependencies:
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '5.2'
39
+ version: '6'
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
42
  version: '8'
@@ -46,10 +46,24 @@ dependencies:
46
46
  requirements:
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: '5.2'
49
+ version: '6'
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '8'
53
+ - !ruby/object:Gem::Dependency
54
+ name: appraisal
55
+ requirement: !ruby/object:Gem::Requirement
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: '0'
60
+ type: :development
61
+ prerelease: false
62
+ version_requirements: !ruby/object:Gem::Requirement
63
+ requirements:
64
+ - - ">="
65
+ - !ruby/object:Gem::Version
66
+ version: '0'
53
67
  - !ruby/object:Gem::Dependency
54
68
  name: guard
55
69
  requirement: !ruby/object:Gem::Requirement