cfa 0.6.3 → 0.6.4
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 +4 -4
- data/lib/cfa/augeas_parser.rb +28 -8
- data/lib/cfa/base_model.rb +2 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b16f5b90e04efbadc819f5a47ef4855118d4ea2b286cfa790edd64ee333ce129
|
4
|
+
data.tar.gz: 8ec15e83b710cbc323077b16309d4f2b58584890dd40e8d7bf21ee4019bcc82d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f2ef2156c4810935459f0dbed8c15e365b61ec82b80652efb65d056df6262d4151f824ea5887972abe3dd9650b92f96977ca0e9df7437ee783d04c7e8ed81e2d
|
7
|
+
data.tar.gz: 375e2b81646579375e7824b2852960223414c146cdf342129d95b3cbec66e5fa6951e3db4726e79fa650b41e9f0800d257b5fe3e5c176e85259a4697d56aa26b
|
data/lib/cfa/augeas_parser.rb
CHANGED
@@ -298,15 +298,20 @@ module CFA
|
|
298
298
|
# require "cfa/augeas_parser"
|
299
299
|
#
|
300
300
|
# parser = CFA::AugeasParser.new("Sysconfig.lns")
|
301
|
+
# parser.file_name = "/etc/default/grub" # for error reporting
|
301
302
|
# data = parser.parse(File.read("/etc/default/grub"))
|
302
303
|
#
|
303
304
|
# puts data["GRUB_DISABLE_OS_PROBER"]
|
304
305
|
# data["GRUB_DISABLE_OS_PROBER"] = "true"
|
305
306
|
# puts parser.serialize(data)
|
306
307
|
class AugeasParser
|
308
|
+
# @return [String] optional, used for error reporting
|
309
|
+
attr_accessor :file_name
|
310
|
+
|
307
311
|
# @param lens [String] a lens name, like "Sysconfig.lns"
|
308
312
|
def initialize(lens)
|
309
313
|
@lens = lens
|
314
|
+
@file_name = nil
|
310
315
|
end
|
311
316
|
|
312
317
|
# @param raw_string [String] a string to be parsed
|
@@ -324,7 +329,8 @@ module CFA
|
|
324
329
|
root = load_path = nil
|
325
330
|
Augeas.open(root, load_path, Augeas::NO_MODL_AUTOLOAD) do |aug|
|
326
331
|
aug.set("/input", raw_string)
|
327
|
-
report_error(aug
|
332
|
+
report_error(aug, "parsing", file_name) \
|
333
|
+
unless aug.text_store(@lens, "/input", "/store")
|
328
334
|
|
329
335
|
return AugeasReader.read(aug, "/store")
|
330
336
|
end
|
@@ -343,7 +349,7 @@ module CFA
|
|
343
349
|
AugeasWriter.new(aug).write("/store", data)
|
344
350
|
|
345
351
|
res = aug.text_retrieve(@lens, "/input", "/store", "/output")
|
346
|
-
report_error(aug) unless res
|
352
|
+
report_error(aug, "serializing", file_name) unless res
|
347
353
|
|
348
354
|
return aug.get("/output")
|
349
355
|
end
|
@@ -358,16 +364,30 @@ module CFA
|
|
358
364
|
private
|
359
365
|
|
360
366
|
# @param aug [::Augeas]
|
361
|
-
|
367
|
+
# @param activity ["parsing", "serializing"] for better error messages
|
368
|
+
# @param file_name [String,nil] a file name
|
369
|
+
def report_error(aug, activity, file_name)
|
362
370
|
error = aug.error
|
363
371
|
# zero is no error, so problem in lense
|
364
|
-
if
|
365
|
-
raise "Augeas error #{error[:message]}. Details: #{error[:details]}."
|
372
|
+
if error[:code].nonzero?
|
373
|
+
raise "Augeas error: #{error[:message]}. Details: #{error[:details]}."
|
366
374
|
end
|
367
375
|
|
368
|
-
|
369
|
-
|
370
|
-
|
376
|
+
file_name ||= "(unknown file)"
|
377
|
+
raise format("Augeas #{activity} error: %<message>s" \
|
378
|
+
" at #{file_name}:%<line>s:%<char>s, lens %<lens>s",
|
379
|
+
aug_get_error(aug))
|
380
|
+
end
|
381
|
+
|
382
|
+
def aug_get_error(aug)
|
383
|
+
{
|
384
|
+
message: aug.get("/augeas/text/store/error/message"),
|
385
|
+
line: aug.get("/augeas/text/store/error/line"),
|
386
|
+
char: aug.get("/augeas/text/store/error/char"), # column
|
387
|
+
# file, line+column range, like
|
388
|
+
# "/usr/share/augeas/lenses/dist/hosts.aug:23.12-.42:"
|
389
|
+
lens: aug.get("/augeas/text/store/error/lens")
|
390
|
+
}
|
371
391
|
end
|
372
392
|
end
|
373
393
|
end
|
data/lib/cfa/base_model.rb
CHANGED
@@ -39,6 +39,7 @@ module CFA
|
|
39
39
|
# insertion of such values in the first place.
|
40
40
|
def save(changes_only: false)
|
41
41
|
merge_changes if changes_only
|
42
|
+
@parser.file_name = @file_path if @parser.respond_to?(:file_name=)
|
42
43
|
@file_handler.write(@file_path, @parser.serialize(data))
|
43
44
|
end
|
44
45
|
|
@@ -51,6 +52,7 @@ module CFA
|
|
51
52
|
# @raise a *parser* specific error. If the parsed String is malformed, then
|
52
53
|
# depending on the used parser it may raise an error.
|
53
54
|
def load
|
55
|
+
@parser.file_name = @file_path if @parser.respond_to?(:file_name=)
|
54
56
|
self.data = @parser.parse(@file_handler.read(@file_path))
|
55
57
|
@loaded = true
|
56
58
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cfa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josef Reidinger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-04-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby-augeas
|