optify-config 1.6.0-x86_64-linux → 1.7.0-x86_64-linux

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: 9aa2a098676748d51bd543c13d52e0c98f05bb52af05c83fc55abb19d65d661c
4
- data.tar.gz: 92f1dc63729b777b14f5869e572d8bd4f0e1aab828994cbf16d94854c4dd043c
3
+ metadata.gz: b9cb8ea8aaa2c426d7ff3393b9c03f4cca7312f2052c4c85d7bc58ada45b1eea
4
+ data.tar.gz: 13925c60d6493334820da187c69d5485d0fdf08006779d7dcef8b4024d781c39
5
5
  SHA512:
6
- metadata.gz: '072089ceb4f566bb720dc10b5ca312380cdda2810fd6fce968975af256d909798db35d920eeeb536958c319c5ee7c587279ccf072266ae07a9704f909a339427'
7
- data.tar.gz: f6096db9e0497644c2ce615132891c41c936941db897eeb5e2063db74c0b1c008ab7dccc26c586464e46ccfc77f8d88acb3d3515c54d29598fd0dea77702585a
6
+ metadata.gz: 7b167666c9ce98057adcaeee5408ce173cf86ad82df877d57d4a4e6cbbccc7cde088529483ceac9b38f5aee5ac3de0acba41b7519e4b588b8cb42e17e3cd50a3
7
+ data.tar.gz: e004b10a3f27030cd631200bc995a0da0c929e76f954b737355351e04aa125c1b581a8931764e9fbe0a84f9fed1eab3e635cd159627fd7d675cb6eb9a731fca6
Binary file
Binary file
@@ -8,8 +8,7 @@ module Optify
8
8
  # A base class for classes from configuration files.
9
9
  # Classes that derive from this can easily be used with `Optify::OptionsProvider.get_options`
10
10
  # because they will have an implementation of `from_hash` that works recursively.
11
- # This class is a work in progress with minimal error handling
12
- # and doesn't handle certain cases such as nilable types yet.
11
+ # This class is a work in progress with minimal error handling.
13
12
  # It may be moved to another gem in the future.
14
13
  class BaseConfig
15
14
  extend T::Sig
@@ -26,7 +25,10 @@ module Optify
26
25
  instance = new
27
26
 
28
27
  hash.each do |key, value|
29
- sig_return_type = T::Utils.signature_for_method(instance_method(key)).return_type
28
+ sig = T::Utils.signature_for_method(instance_method(key))
29
+ raise "A Sorbet signature is required for `#{name}.#{key}`." if sig.nil?
30
+
31
+ sig_return_type = sig.return_type
30
32
  value = _convert_value(value, sig_return_type)
31
33
  instance.instance_variable_set("@#{key}", value)
32
34
  end
@@ -104,8 +106,47 @@ module Optify
104
106
  return true if other.equal?(self)
105
107
  return false unless other.is_a?(self.class)
106
108
 
107
- instance_variables.all? do |var|
108
- instance_variable_get(var) == other.instance_variable_get(var)
109
+ instance_variables.all? do |name|
110
+ instance_variable_get(name) == other.instance_variable_get(name)
111
+ end
112
+ end
113
+
114
+ # Convert this object to a Hash recursively.
115
+ # This is mostly the reverse operation of `from_hash`,
116
+ # as keys will be symbols
117
+ # and `from_hash` will convert strings to symbols if that's how the attribute is declared.
118
+ # @return [Hash] The hash representation of this object.
119
+ #: () -> Hash[Symbol, untyped]
120
+ def to_h
121
+ result = Hash.new(instance_variables.size)
122
+
123
+ instance_variables.each do |var_name|
124
+ # Remove the @ prefix to get the method name
125
+ method_name = var_name.to_s[1..] #: as !nil
126
+ value = instance_variable_get(var_name)
127
+ result[method_name.to_sym] = _convert_value_to_hash(value)
128
+ end
129
+
130
+ result
131
+ end
132
+
133
+ private
134
+
135
+ #: (untyped value) -> untyped
136
+ def _convert_value_to_hash(value)
137
+ case value
138
+ when Array
139
+ value.map { |v| _convert_value_to_hash(v) }
140
+ when Hash
141
+ value.transform_values { |v| _convert_value_to_hash(v) }
142
+ when nil
143
+ nil
144
+ else
145
+ if value.respond_to?(:to_h)
146
+ value.to_h
147
+ else
148
+ value
149
+ end
109
150
  end
110
151
  end
111
152
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: optify-config
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.0
4
+ version: 1.7.0
5
5
  platform: x86_64-linux
6
6
  authors:
7
7
  - Justin D. Harris
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-06-11 00:00:00.000000000 Z
11
+ date: 2025-06-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sorbet-runtime
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.5.12083
19
+ version: 0.5.12167
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.5.12083
26
+ version: 0.5.12167
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake-compiler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -44,42 +44,42 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 3.9.3
47
+ version: 4.0.0.dev.4
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 3.9.3
54
+ version: 4.0.0.dev.4
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: sorbet
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.5.12083
61
+ version: 0.5.12167
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.5.12083
68
+ version: 0.5.12167
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: tapioca
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.16.11
75
+ version: 0.17.2
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.16.11
82
+ version: 0.17.2
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: test-unit
85
85
  requirement: !ruby/object:Gem::Requirement