adaptiveconfiguration 1.0.0.beta04 → 1.0.0.beta06

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: a11fad3ccce7d331a27190c743c44688ad95900a7cc8f168a4fdcb824b625bce
4
- data.tar.gz: aa7ed25488d182dcaf59ec3f2f0a6442c9004660d9c22b8b1ba73b0e730b190c
3
+ metadata.gz: 2e6d7ffc7756d8ea2cb2d685ef00ca01561d232c99852516b38b7bf1ce72cb66
4
+ data.tar.gz: bb716f63caf1e4fec6a90da636a30a4bcfc7b546f610d548f275bb630780f2bc
5
5
  SHA512:
6
- metadata.gz: 82df20c8476433d0cec6cb10df0242b5b2b9acfe426741727871f67bde4b46b1bff4e3ab56c1bd8553284d5336074f48abad92ba30f3cc4ef2f27ca41e5b2429
7
- data.tar.gz: c83a76b55815d78ddc19cce6a118ce6ce26f4c3a4288837e40ee9b565db1d13c329d8dfed04ef1f42923d76b703d20742b73de652a4857fd2f9b0f158e64c850
6
+ metadata.gz: fbb8df8e89fab329b3ca8464a8088c0617b800ab981be36cae596debb7f29a26b2768520665926d2a30148074f981d59dbbade409932b5c02407efdcb600b5cc
7
+ data.tar.gz: ae9e3c1d6fde00f4136edf6e4cc9cb85e621170f78ba52c86211bb1121e3bfe20e9e76fb606bd009e218957c0a6260a127e03342c494cb733d4803d2ad8973ec
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do | spec |
2
2
 
3
3
  spec.name = 'adaptiveconfiguration'
4
- spec.version = '1.0.0.beta04'
4
+ spec.version = '1.0.0.beta06'
5
5
  spec.authors = [ 'Kristoph Cichocki-Romanov' ]
6
6
  spec.email = [ 'rubygems.org@kristoph.net' ]
7
7
 
@@ -16,6 +16,7 @@ module AdaptiveConfiguration
16
16
  Time => ->( v ) { v.respond_to?( :to_time ) ? v.to_time : Time.parse( v.to_s ) },
17
17
  URI => ->( v ) { URI.parse( v.to_s ) },
18
18
  String => ->( v ) { String( v ) },
19
+ Symbol => ->( v ) { v.respond_to?( :to_sym ) ? v.to_sym : nil },
19
20
  Rational => ->( v ) { Rational( v ) },
20
21
  Float => ->( v ) { Float( v ) },
21
22
  Integer => ->( v ) { Integer( v ) },
@@ -1,12 +1,14 @@
1
1
  module AdaptiveConfiguration
2
2
  class Context < BasicObject
3
3
 
4
+ include ::PP::ObjectMixin if defined?( ::PP )
5
+
4
6
  attr_reader :errors
5
7
 
6
8
  def initialize( values = nil, definitions:, converters: )
9
+ raise ArgumentError, 'The Scaffold initialitization attributes must be a Hash pr Hash-like.'\
10
+ unless values.nil? || ( values.respond_to?( :[] ) && values.respond_to?( :key? ) )
7
11
 
8
- values = values ? values.transform_keys( &:to_sym ) : {}
9
-
10
12
  @converters = converters&.dup
11
13
  @definitions = definitions&.dup
12
14
  @values = {}
@@ -14,21 +16,13 @@ module AdaptiveConfiguration
14
16
 
15
17
  @definitions.each do | key, definition |
16
18
  name = definition[ :as ] || key
17
- if definition[ :type ] == :group
18
- context = Context.new(
19
- values[ key ] || {},
20
- converters: @converters, definitions: definition[ :definitions ],
21
- )
22
- @values[ name ] = context unless context.empty?
23
- elsif definition.key?( :default )
24
- @values[ name ] = definition[ :array ] ?
25
- ::Kernel.method( :Array ).call( definition[ :default ] ) :
26
- definition[ :default ]
27
- # note: this is needed to know when an array paramter which was initially assigned
19
+ if definition.key?( :default )
20
+ self.__send__( key, definition[ :default ] )
21
+ # note: this is needed to know when an array parameter which was initially assigned
28
22
  # to a default should be replaced rather than appended
29
23
  definition[ :default_assigned ] = true
30
24
  end
31
- self.__send__( key, values[ key ] ) if values[ key ]
25
+ self.__send__( key, values[ key ] ) if values && values.key?( key )
32
26
  end
33
27
 
34
28
  end
@@ -41,6 +35,10 @@ module AdaptiveConfiguration
41
35
  @values.empty?
42
36
  end
43
37
 
38
+ def key?( key )
39
+ @values.key?( key )
40
+ end
41
+
44
42
  def []( key )
45
43
  @values[ key ]
46
44
  end
@@ -93,7 +91,13 @@ module AdaptiveConfiguration
93
91
  end
94
92
 
95
93
  def inspect
96
- @values.inspect
94
+ { values: @values, definitions: @definitions }.inspect
95
+ end
96
+
97
+ if defined?( ::PP )
98
+ def pretty_print( pp )
99
+ pp.pp( { values: @values, definitions: @definitions } )
100
+ end
97
101
  end
98
102
 
99
103
  def class
@@ -107,20 +111,23 @@ module AdaptiveConfiguration
107
111
  alias :kind_of? :is_a?
108
112
 
109
113
  def method_missing( method, *args, &block )
110
-
114
+
111
115
  if @definitions.key?( method )
112
-
113
116
  definition = @definitions[ method ]
114
117
  name = definition[ :as ] || method
115
118
 
116
119
  unless definition[ :array ]
117
120
  if definition[ :type ] == :group
118
- context =
119
- @values[ name ] || Context.new(
120
- args.first,
121
- converters: @converters,
122
- definitions: definition[ :definitions ]
123
- )
121
+ argument = args.first
122
+ context = @values[ name ]
123
+ if context.nil? || argument
124
+ context =
125
+ Context.new(
126
+ argument,
127
+ converters: @converters,
128
+ definitions: definition[ :definitions ]
129
+ )
130
+ end
124
131
  context.instance_eval( &block ) if block
125
132
  @values[ name ] = context
126
133
  else
@@ -133,13 +140,17 @@ module AdaptiveConfiguration
133
140
  ::Array.new :
134
141
  @values[ name ] || ::Array.new
135
142
  if definition[ :type ] == :group
136
- context = Context.new(
137
- args.first,
138
- converters: @converters,
139
- definitions: definition[ :definitions ]
140
- )
141
- context.instance_eval( &block ) if block
142
- @values[ name ] << context
143
+ values = [ args.first ].flatten
144
+ values = values.map do | v |
145
+ context = Context.new(
146
+ v,
147
+ converters: @converters,
148
+ definitions: definition[ :definitions ]
149
+ )
150
+ context.instance_eval( &block ) if block
151
+ context
152
+ end
153
+ @values[ name ].concat( values )
143
154
  else
144
155
  values = ::Kernel.method( :Array ).call( args.first )
145
156
  if type = definition[ :type ]
@@ -243,6 +254,7 @@ module AdaptiveConfiguration
243
254
  else
244
255
 
245
256
  if definition[ :type ] == :group
257
+ groups = ::Kernel.method( :Array ).call( value )
246
258
  groups.each do | group |
247
259
  group.__validate_values( "#{ ( path || '' ) + ( path ? '/' : '' ) + key.to_s }", &block )
248
260
  @errors.concat( group.errors )
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: adaptiveconfiguration
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.beta04
4
+ version: 1.0.0.beta06
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kristoph Cichocki-Romanov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-08 00:00:00.000000000 Z
11
+ date: 2024-10-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec