hocon 0.0.7 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +4 -2
- data/lib/hocon.rb +2 -0
- data/lib/hocon/config.rb +1010 -0
- data/lib/hocon/config_error.rb +32 -2
- data/lib/hocon/config_factory.rb +46 -0
- data/lib/hocon/config_include_context.rb +49 -0
- data/lib/hocon/config_includer_file.rb +27 -0
- data/lib/hocon/config_list.rb +49 -0
- data/lib/hocon/config_mergeable.rb +74 -0
- data/lib/hocon/config_object.rb +144 -1
- data/lib/hocon/config_parse_options.rb +33 -9
- data/lib/hocon/config_parseable.rb +51 -0
- data/lib/hocon/config_render_options.rb +4 -2
- data/lib/hocon/config_resolve_options.rb +31 -0
- data/lib/hocon/config_syntax.rb +5 -2
- data/lib/hocon/config_util.rb +73 -0
- data/lib/hocon/config_value.rb +122 -0
- data/lib/hocon/config_value_factory.rb +66 -2
- data/lib/hocon/config_value_type.rb +5 -2
- data/lib/hocon/impl.rb +2 -0
- data/lib/hocon/impl/abstract_config_node.rb +29 -0
- data/lib/hocon/impl/abstract_config_node_value.rb +11 -0
- data/lib/hocon/impl/abstract_config_object.rb +148 -42
- data/lib/hocon/impl/abstract_config_value.rb +251 -11
- data/lib/hocon/impl/array_iterator.rb +19 -0
- data/lib/hocon/impl/config_boolean.rb +7 -1
- data/lib/hocon/impl/config_concatenation.rb +177 -28
- data/lib/hocon/impl/config_delayed_merge.rb +329 -0
- data/lib/hocon/impl/config_delayed_merge_object.rb +274 -0
- data/lib/hocon/impl/config_document_parser.rb +647 -0
- data/lib/hocon/impl/config_double.rb +44 -0
- data/lib/hocon/impl/config_impl.rb +143 -19
- data/lib/hocon/impl/config_impl_util.rb +18 -0
- data/lib/hocon/impl/config_include_kind.rb +10 -0
- data/lib/hocon/impl/config_int.rb +13 -1
- data/lib/hocon/impl/config_node_array.rb +11 -0
- data/lib/hocon/impl/config_node_comment.rb +19 -0
- data/lib/hocon/impl/config_node_complex_value.rb +54 -0
- data/lib/hocon/impl/config_node_concatenation.rb +11 -0
- data/lib/hocon/impl/config_node_field.rb +81 -0
- data/lib/hocon/impl/config_node_include.rb +33 -0
- data/lib/hocon/impl/config_node_object.rb +276 -0
- data/lib/hocon/impl/config_node_path.rb +48 -0
- data/lib/hocon/impl/config_node_root.rb +60 -0
- data/lib/hocon/impl/config_node_simple_value.rb +42 -0
- data/lib/hocon/impl/config_node_single_token.rb +17 -0
- data/lib/hocon/impl/config_null.rb +15 -7
- data/lib/hocon/impl/config_number.rb +43 -4
- data/lib/hocon/impl/config_parser.rb +403 -0
- data/lib/hocon/impl/config_reference.rb +142 -0
- data/lib/hocon/impl/config_string.rb +55 -7
- data/lib/hocon/impl/container.rb +29 -0
- data/lib/hocon/impl/default_transformer.rb +24 -15
- data/lib/hocon/impl/from_map_mode.rb +3 -1
- data/lib/hocon/impl/full_includer.rb +2 -0
- data/lib/hocon/impl/memo_key.rb +42 -0
- data/lib/hocon/impl/mergeable_value.rb +8 -0
- data/lib/hocon/impl/origin_type.rb +8 -2
- data/lib/hocon/impl/parseable.rb +455 -91
- data/lib/hocon/impl/path.rb +181 -59
- data/lib/hocon/impl/path_builder.rb +24 -3
- data/lib/hocon/impl/path_parser.rb +280 -0
- data/lib/hocon/impl/replaceable_merge_stack.rb +22 -0
- data/lib/hocon/impl/resolve_context.rb +254 -0
- data/lib/hocon/impl/resolve_memos.rb +21 -0
- data/lib/hocon/impl/resolve_result.rb +39 -0
- data/lib/hocon/impl/resolve_source.rb +354 -0
- data/lib/hocon/impl/resolve_status.rb +3 -1
- data/lib/hocon/impl/simple_config.rb +264 -10
- data/lib/hocon/impl/simple_config_document.rb +48 -0
- data/lib/hocon/impl/simple_config_list.rb +282 -8
- data/lib/hocon/impl/simple_config_object.rb +424 -88
- data/lib/hocon/impl/simple_config_origin.rb +263 -71
- data/lib/hocon/impl/simple_include_context.rb +31 -1
- data/lib/hocon/impl/simple_includer.rb +196 -1
- data/lib/hocon/impl/substitution_expression.rb +38 -0
- data/lib/hocon/impl/token.rb +17 -4
- data/lib/hocon/impl/token_type.rb +6 -2
- data/lib/hocon/impl/tokenizer.rb +339 -109
- data/lib/hocon/impl/tokens.rb +330 -79
- data/lib/hocon/impl/unmergeable.rb +14 -1
- data/lib/hocon/impl/unsupported_operation_error.rb +6 -0
- data/lib/hocon/impl/url.rb +37 -0
- data/lib/hocon/parser.rb +7 -0
- data/lib/hocon/parser/config_document.rb +92 -0
- data/lib/hocon/parser/config_document_factory.rb +36 -0
- data/lib/hocon/parser/config_node.rb +30 -0
- metadata +67 -43
- data/lib/hocon/impl/config_float.rb +0 -13
- data/lib/hocon/impl/parser.rb +0 -977
- data/lib/hocon/impl/properties_parser.rb +0 -83
@@ -0,0 +1,44 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'hocon/impl'
|
4
|
+
require 'hocon/impl/config_number'
|
5
|
+
|
6
|
+
class Hocon::Impl::ConfigDouble < Hocon::Impl::ConfigNumber
|
7
|
+
def initialize(origin, value, original_text)
|
8
|
+
super(origin, original_text)
|
9
|
+
@value = value
|
10
|
+
end
|
11
|
+
|
12
|
+
attr_reader :value
|
13
|
+
|
14
|
+
def value_type
|
15
|
+
Hocon::ConfigValueType::NUMBER
|
16
|
+
end
|
17
|
+
|
18
|
+
def unwrapped
|
19
|
+
@value
|
20
|
+
end
|
21
|
+
|
22
|
+
def transform_to_string
|
23
|
+
s = super
|
24
|
+
if s.nil?
|
25
|
+
@value.to_s
|
26
|
+
else
|
27
|
+
s
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def long_value
|
32
|
+
@value.to_i
|
33
|
+
end
|
34
|
+
|
35
|
+
def double_value
|
36
|
+
@value
|
37
|
+
end
|
38
|
+
|
39
|
+
def new_copy(origin)
|
40
|
+
self.class.new(origin, @value, original_text)
|
41
|
+
end
|
42
|
+
|
43
|
+
# NOTE: skipping `writeReplace` from upstream, because it involves serialization
|
44
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require 'hocon/impl'
|
2
4
|
require 'hocon/impl/simple_includer'
|
3
5
|
require 'hocon/config_error'
|
@@ -6,14 +8,17 @@ require 'hocon/impl/simple_config_origin'
|
|
6
8
|
require 'hocon/impl/simple_config_list'
|
7
9
|
require 'hocon/impl/config_boolean'
|
8
10
|
require 'hocon/impl/config_null'
|
11
|
+
require 'hocon/impl/parseable'
|
9
12
|
|
10
13
|
class Hocon::Impl::ConfigImpl
|
11
|
-
@default_includer = Hocon::Impl::SimpleIncluder.new
|
14
|
+
@default_includer = Hocon::Impl::SimpleIncluder.new(nil)
|
12
15
|
@default_value_origin = Hocon::Impl::SimpleConfigOrigin.new_simple("hardcoded value")
|
13
16
|
@default_true_value = Hocon::Impl::ConfigBoolean.new(@default_value_origin, true)
|
14
17
|
@default_false_value = Hocon::Impl::ConfigBoolean.new(@default_value_origin, false)
|
15
18
|
@default_null_value = Hocon::Impl::ConfigNull.new(@default_value_origin)
|
16
19
|
@default_empty_list = Hocon::Impl::SimpleConfigList.new(@default_value_origin, Array.new)
|
20
|
+
@default_empty_object = Hocon::Impl::SimpleConfigObject.empty(@default_value_origin)
|
21
|
+
|
17
22
|
|
18
23
|
ConfigBugOrBrokenError = Hocon::ConfigError::ConfigBugOrBrokenError
|
19
24
|
ConfigNotResolvedError = Hocon::ConfigError::ConfigNotResolvedError
|
@@ -23,9 +28,16 @@ class Hocon::Impl::ConfigImpl
|
|
23
28
|
@default_includer
|
24
29
|
end
|
25
30
|
|
31
|
+
|
32
|
+
class FileNameSource < Hocon::Impl::SimpleIncluder::NameSource
|
33
|
+
def name_to_parseable(name, parse_options)
|
34
|
+
Hocon::Impl::Parseable.new_file(name, parse_options)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
26
38
|
def self.improve_not_resolved(what, original)
|
27
39
|
new_message = "#{what.render} has not been resolved, you need to call Config#resolve, see API docs for Config#resolve"
|
28
|
-
if new_message == original.
|
40
|
+
if new_message == original.message
|
29
41
|
return original
|
30
42
|
else
|
31
43
|
return ConfigNotResolvedError.new(new_message, original)
|
@@ -40,14 +52,11 @@ class Hocon::Impl::ConfigImpl
|
|
40
52
|
end
|
41
53
|
end
|
42
54
|
|
43
|
-
def self.
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
else
|
49
|
-
return Hocon::Impl::SimpleConfigObject.empty(origin)
|
50
|
-
end
|
55
|
+
def self.parse_file_any_syntax(basename, base_options)
|
56
|
+
source = FileNameSource.new()
|
57
|
+
Hocon::Impl::SimpleIncluder.from_basename(source,
|
58
|
+
File.expand_path(basename),
|
59
|
+
base_options)
|
51
60
|
end
|
52
61
|
|
53
62
|
def self.empty_list(origin)
|
@@ -65,7 +74,7 @@ class Hocon::Impl::ConfigImpl
|
|
65
74
|
|
66
75
|
def self.from_any_ref_mode(object, origin, map_mode)
|
67
76
|
if origin.nil?
|
68
|
-
raise ConfigBugOrBrokenError.new("origin not supposed to be nil"
|
77
|
+
raise ConfigBugOrBrokenError.new("origin not supposed to be nil")
|
69
78
|
end
|
70
79
|
if object.nil?
|
71
80
|
if origin != @default_value_origin
|
@@ -73,6 +82,8 @@ class Hocon::Impl::ConfigImpl
|
|
73
82
|
else
|
74
83
|
return @default_null_value
|
75
84
|
end
|
85
|
+
elsif object.is_a?(Hocon::Impl::AbstractConfigValue)
|
86
|
+
return object
|
76
87
|
elsif object.is_a?(TrueClass) || object.is_a?(FalseClass)
|
77
88
|
if origin != @default_value_origin
|
78
89
|
return Hocon::Impl::ConfigBoolean.new(origin, object)
|
@@ -82,7 +93,7 @@ class Hocon::Impl::ConfigImpl
|
|
82
93
|
return @default_false_value
|
83
94
|
end
|
84
95
|
elsif object.is_a?(String)
|
85
|
-
return Hocon::Impl::ConfigString.new(origin, object)
|
96
|
+
return Hocon::Impl::ConfigString::Quoted.new(origin, object)
|
86
97
|
elsif object.is_a?(Numeric)
|
87
98
|
# here we always keep the same type that was passed to us,
|
88
99
|
# rather than figuring out if a Long would fit in an Int
|
@@ -90,7 +101,7 @@ class Hocon::Impl::ConfigImpl
|
|
90
101
|
# not using ConfigNumber.newNumber() when we have a
|
91
102
|
# Double, Integer, or Long.
|
92
103
|
if object.is_a?(Float)
|
93
|
-
return Hocon::Impl::
|
104
|
+
return Hocon::Impl::ConfigDouble.new(origin, object, nil)
|
94
105
|
elsif object.is_a?(Integer)
|
95
106
|
return Hocon::Impl::ConfigInt.new(origin, object, nil)
|
96
107
|
else
|
@@ -98,7 +109,7 @@ class Hocon::Impl::ConfigImpl
|
|
98
109
|
end
|
99
110
|
elsif object.is_a?(Hash)
|
100
111
|
if object.empty?
|
101
|
-
return self.
|
112
|
+
return self.empty_object_from_origin(origin)
|
102
113
|
end
|
103
114
|
|
104
115
|
if map_mode == FromMapMode::KEYS_ARE_KEYS
|
@@ -106,15 +117,14 @@ class Hocon::Impl::ConfigImpl
|
|
106
117
|
object.each do |key, entry|
|
107
118
|
if not key.is_a?(String)
|
108
119
|
raise ConfigBugOrBrokenError.new(
|
109
|
-
"bug in method caller: not valid to create ConfigObject from map with non-String key: #{key}"
|
110
|
-
nil)
|
120
|
+
"bug in method caller: not valid to create ConfigObject from map with non-String key: #{key}")
|
111
121
|
end
|
112
122
|
value = self.from_any_ref_mode(entry, origin, map_mode)
|
113
123
|
values[key] = value
|
114
124
|
end
|
115
125
|
return Hocon::Impl::SimpleConfigObject.new(origin, values)
|
116
126
|
else
|
117
|
-
|
127
|
+
raise ConfigBugOrBrokenError, "java properties format not supported"
|
118
128
|
end
|
119
129
|
elsif object.is_a?(Enumerable)
|
120
130
|
if object.count == 0
|
@@ -129,7 +139,121 @@ class Hocon::Impl::ConfigImpl
|
|
129
139
|
|
130
140
|
return Hocon::Impl::SimpleConfigList.new(origin, values)
|
131
141
|
else
|
132
|
-
raise ConfigBugOrBrokenError.new("bug in method caller: not valid to create ConfigValue from: #{object}"
|
142
|
+
raise ConfigBugOrBrokenError.new("bug in method caller: not valid to create ConfigValue from: #{object}")
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
|
147
|
+
|
148
|
+
def self.env_variables_as_config_object
|
149
|
+
EnvVariablesHolder.get_env_variables
|
150
|
+
end
|
151
|
+
|
152
|
+
# This class is a lot simpler than the Java version ...
|
153
|
+
# The Java version uses system properties to toggle these settings.
|
154
|
+
# We don't have system properties in MRI so it's not clear what to do here.
|
155
|
+
# Initially, I ported this as more of a direct translation from the Java code,
|
156
|
+
# but I ran into issues around how to translate stupid Java static
|
157
|
+
# initialization crap to Ruby, so what we have here is a much simpler version
|
158
|
+
# that is # equivalent.
|
159
|
+
#
|
160
|
+
# There's no way to toggle this logging without changing code, but it's
|
161
|
+
# actually proved to be useful for debugging purposes while porting code
|
162
|
+
# down from Java.
|
163
|
+
class DebugHolder
|
164
|
+
class << self
|
165
|
+
|
166
|
+
def trace_loads_enabled
|
167
|
+
TRACE_LOADS_ENABLED
|
168
|
+
end
|
169
|
+
|
170
|
+
def trace_substitutions_enabled
|
171
|
+
TRACE_SUBSTITUTIONS_ENABLED
|
172
|
+
end
|
173
|
+
|
174
|
+
private
|
175
|
+
|
176
|
+
TRACE_LOADS_ENABLED = false
|
177
|
+
TRACE_SUBSTITUTIONS_ENABLED = false
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def self.trace_loads_enabled
|
182
|
+
# Ignoring 'catch ExceptionInInitializerError' from that java version,
|
183
|
+
# that is just terrible java code anyway.
|
184
|
+
DebugHolder.trace_loads_enabled
|
185
|
+
end
|
186
|
+
|
187
|
+
def self.trace_substitution_enabled
|
188
|
+
# Ignoring 'catch ExceptionInInitializerError' from that java version,
|
189
|
+
# that is just terrible java code anyway.
|
190
|
+
DebugHolder.trace_substitutions_enabled
|
191
|
+
end
|
192
|
+
|
193
|
+
def self.trace(message, indent_level = 0)
|
194
|
+
while indent_level > 0
|
195
|
+
$stderr.putc(" ")
|
196
|
+
indent_level -= 1
|
197
|
+
end
|
198
|
+
$stderr.puts(message)
|
199
|
+
end
|
200
|
+
|
201
|
+
def self.empty_object_from_origin(origin)
|
202
|
+
# we want null origin to go to SimpleConfigObject.empty() to get the
|
203
|
+
# origin "empty config" rather than "hardcoded value"
|
204
|
+
if origin == @default_value_origin
|
205
|
+
@default_empty_object
|
206
|
+
else
|
207
|
+
Hocon::Impl::SimpleConfigObject.empty(origin)
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
def self.empty_object(origin_description)
|
212
|
+
if !origin_description.nil?
|
213
|
+
origin = Hocon::Impl::SimpleConfigOrigin.new_simple(origin_description)
|
214
|
+
else
|
215
|
+
origin = nil
|
216
|
+
end
|
217
|
+
|
218
|
+
empty_object_from_origin(origin)
|
219
|
+
end
|
220
|
+
|
221
|
+
def self.empty_config(origin_description)
|
222
|
+
empty_object(origin_description).to_config
|
223
|
+
end
|
224
|
+
|
225
|
+
def empty(origin)
|
226
|
+
self.class.empty_object_from_origin(origin)
|
227
|
+
end
|
228
|
+
|
229
|
+
def self.default_reference
|
230
|
+
resource = Hocon::Impl::Parseable.new_resources("reference.conf",
|
231
|
+
Hocon::ConfigParseOptions.defaults)
|
232
|
+
resource.parse.to_config
|
233
|
+
end
|
234
|
+
|
235
|
+
private
|
236
|
+
|
237
|
+
def self.load_env_variables
|
238
|
+
env = ENV
|
239
|
+
m = {}
|
240
|
+
env.each do |key, value|
|
241
|
+
m[key] = Hocon::Impl::ConfigString::Quoted.new(
|
242
|
+
Hocon::Impl::SimpleConfigOrigin.new_simple("env var #{key}"), value)
|
243
|
+
end
|
244
|
+
|
245
|
+
Hocon::Impl::SimpleConfigObject.new(
|
246
|
+
Hocon::Impl::SimpleConfigOrigin.new_simple("env variables"),
|
247
|
+
m,
|
248
|
+
Hocon::Impl::ResolveStatus::RESOLVED,
|
249
|
+
false)
|
250
|
+
end
|
251
|
+
|
252
|
+
class EnvVariablesHolder
|
253
|
+
ENV_VARIABLES = Hocon::Impl::ConfigImpl.load_env_variables
|
254
|
+
|
255
|
+
def self.get_env_variables
|
256
|
+
ENV_VARIABLES
|
133
257
|
end
|
134
258
|
end
|
135
|
-
end
|
259
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require 'hocon/impl'
|
2
4
|
require 'stringio'
|
3
5
|
|
@@ -68,6 +70,22 @@ class Hocon::Impl::ConfigImplUtil
|
|
68
70
|
s
|
69
71
|
end
|
70
72
|
|
73
|
+
def self.join_path(*elements)
|
74
|
+
Hocon::Impl::Path.from_string_list(elements).render
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.split_path(path)
|
78
|
+
p = Hocon::Impl::Path.new_path(path)
|
79
|
+
elements = []
|
80
|
+
|
81
|
+
until p.nil?
|
82
|
+
elements << p.first
|
83
|
+
p = p.remainder
|
84
|
+
end
|
85
|
+
|
86
|
+
elements
|
87
|
+
end
|
88
|
+
|
71
89
|
def self.whitespace?(c)
|
72
90
|
# this implementation is *not* a port of the java code, because it relied on
|
73
91
|
# the method java.lang.Character#isWhitespace. This is probably
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
1
3
|
require 'hocon/impl'
|
2
4
|
require 'hocon/impl/config_number'
|
3
5
|
require 'hocon/config_value_type'
|
@@ -8,6 +10,8 @@ class Hocon::Impl::ConfigInt < Hocon::Impl::ConfigNumber
|
|
8
10
|
@value = value
|
9
11
|
end
|
10
12
|
|
13
|
+
attr_reader :value
|
14
|
+
|
11
15
|
def value_type
|
12
16
|
Hocon::ConfigValueType::NUMBER
|
13
17
|
end
|
@@ -25,7 +29,15 @@ class Hocon::Impl::ConfigInt < Hocon::Impl::ConfigNumber
|
|
25
29
|
end
|
26
30
|
end
|
27
31
|
|
32
|
+
def long_value
|
33
|
+
@value
|
34
|
+
end
|
35
|
+
|
36
|
+
def double_value
|
37
|
+
@value
|
38
|
+
end
|
39
|
+
|
28
40
|
def new_copy(origin)
|
29
41
|
Hocon::Impl::ConfigInt.new(origin, @value, @original_text)
|
30
42
|
end
|
31
|
-
end
|
43
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'hocon/impl'
|
4
|
+
require 'hocon/config_error'
|
5
|
+
require 'hocon/impl/config_node_single_token'
|
6
|
+
require 'hocon/impl/tokens'
|
7
|
+
|
8
|
+
class Hocon::Impl::ConfigNodeComment < Hocon::Impl::ConfigNodeSingleToken
|
9
|
+
def initialize(comment)
|
10
|
+
super(comment)
|
11
|
+
unless Hocon::Impl::Tokens.comment?(@token)
|
12
|
+
raise Hocon::ConfigError::ConfigBugOrBrokenError, 'Tried to create a ConfigNodeComment from a non-comment token'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def comment_text
|
17
|
+
Hocon::Impl::Tokens.comment_text(@token)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'hocon/impl'
|
4
|
+
require 'hocon/impl/abstract_config_node_value'
|
5
|
+
require 'hocon/impl/config_node_field'
|
6
|
+
require 'hocon/impl/config_node_include'
|
7
|
+
require 'hocon/impl/config_node_single_token'
|
8
|
+
require 'hocon/impl/tokens'
|
9
|
+
require 'hocon/config_error'
|
10
|
+
|
11
|
+
module Hocon::Impl::ConfigNodeComplexValue
|
12
|
+
include Hocon::Impl::AbstractConfigNodeValue
|
13
|
+
def initialize(children)
|
14
|
+
@children = children
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_reader :children
|
18
|
+
|
19
|
+
def tokens
|
20
|
+
tokens = []
|
21
|
+
@children.each do |child|
|
22
|
+
tokens += child.tokens
|
23
|
+
end
|
24
|
+
tokens
|
25
|
+
end
|
26
|
+
|
27
|
+
def indent_text(indentation)
|
28
|
+
children_copy = @children.clone
|
29
|
+
i = 0
|
30
|
+
while i < children_copy.size
|
31
|
+
child = children_copy[i]
|
32
|
+
if child.is_a?(Hocon::Impl::ConfigNodeSingleToken) && Hocon::Impl::Tokens.newline?(child.token)
|
33
|
+
children_copy.insert(i + 1, indentation)
|
34
|
+
i += 1
|
35
|
+
elsif child.is_a?(Hocon::Impl::ConfigNodeField)
|
36
|
+
value = child.value
|
37
|
+
if value.is_a?(Hocon::Impl::ConfigNodeComplexValue)
|
38
|
+
children_copy[i] = child.replace_value(value.indent_text(indentation))
|
39
|
+
end
|
40
|
+
elsif child.is_a?(Hocon::Impl::ConfigNodeComplexValue)
|
41
|
+
children_copy[i] = child.indent_text(indentation)
|
42
|
+
end
|
43
|
+
i += 1
|
44
|
+
end
|
45
|
+
new_node(children_copy)
|
46
|
+
end
|
47
|
+
|
48
|
+
# This method will just call into the object's constructor, but it's needed
|
49
|
+
# for use in the indentText() method so we can avoid a gross if/else statement
|
50
|
+
# checking the type of this
|
51
|
+
def new_node(nodes)
|
52
|
+
raise Hocon::ConfigError::ConfigBugOrBrokenError, "subclasses of ConfigNodeComplexValue should override `new_node` (#{self.class})"
|
53
|
+
end
|
54
|
+
end
|