twiglet 3.1.3 → 3.2.0
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/twiglet/logger.rb +12 -14
- data/lib/twiglet/validator.rb +1 -5
- data/lib/twiglet/version.rb +1 -1
- data/test/formatter_test.rb +1 -1
- data/test/logger_test.rb +55 -0
- data/test/validator_test.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6970a1b98fbd77737c3742429691e3c03c7966e894e2f6a523824df785941858
|
4
|
+
data.tar.gz: 3a878416f432a4c9e38b0299afb6204fd2202168646d028298d40ab2c6cc7746
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8a2e0c5bd321f495f4cf2c5d69a8caaff889e352305c5a900c1c7415e8637d0127729c91bd030353c1dd3b56e9c5623880f46849d3ff3eac1d502c3df8752c54
|
7
|
+
data.tar.gz: 0076c02f4070de277e488278f9f858d529b0ab39d8f8c07bc59a9d583c40421f0231b769a7ffb6a6ad1b422ed17f22ee4cd2a7eb68e436dc3b2b6c70c0246c8e
|
data/lib/twiglet/logger.rb
CHANGED
@@ -13,28 +13,29 @@ module Twiglet
|
|
13
13
|
|
14
14
|
def initialize(
|
15
15
|
service_name,
|
16
|
-
|
17
|
-
now: -> { Time.now.utc },
|
18
|
-
output: $stdout,
|
19
|
-
level: Logger::DEBUG
|
16
|
+
**args
|
20
17
|
)
|
21
18
|
@service_name = service_name
|
22
|
-
|
23
|
-
@
|
24
|
-
|
19
|
+
default_properties = args.delete(:default_properties) || {}
|
20
|
+
@args = args
|
21
|
+
|
22
|
+
now = args.fetch(:now, -> { Time.now.utc })
|
23
|
+
output = args.fetch(:output, $stdout)
|
24
|
+
level = args.fetch(:level, Logger::DEBUG)
|
25
|
+
validation_schema = args.fetch(:validation_schema, File.read("#{__dir__}/validation_schema.json"))
|
25
26
|
|
26
27
|
raise 'Service name is mandatory' \
|
27
28
|
unless service_name.is_a?(String) && !service_name.strip.empty?
|
28
29
|
|
29
|
-
@validator = Validator.
|
30
|
+
@validator = Validator.new(validation_schema)
|
30
31
|
|
31
|
-
|
32
|
+
formatter = Twiglet::Formatter.new(
|
32
33
|
service_name,
|
33
34
|
default_properties: default_properties,
|
34
35
|
now: now,
|
35
36
|
validator: @validator
|
36
37
|
)
|
37
|
-
super(output, formatter:
|
38
|
+
super(output, formatter: formatter, level: level)
|
38
39
|
end
|
39
40
|
|
40
41
|
def configure_validation_error_response(&block)
|
@@ -59,10 +60,7 @@ module Twiglet
|
|
59
60
|
def with(default_properties)
|
60
61
|
Logger.new(
|
61
62
|
@service_name,
|
62
|
-
default_properties: default_properties
|
63
|
-
now: @now,
|
64
|
-
output: @output,
|
65
|
-
level: @level
|
63
|
+
**@args.merge(default_properties: default_properties)
|
66
64
|
)
|
67
65
|
end
|
68
66
|
|
data/lib/twiglet/validator.rb
CHANGED
@@ -8,14 +8,10 @@ module Twiglet
|
|
8
8
|
attr_accessor :custom_error_handler
|
9
9
|
|
10
10
|
def initialize(schema)
|
11
|
-
@schema = schema
|
11
|
+
@schema = JSON.parse(schema)
|
12
12
|
@custom_error_handler = ->(e) { raise e }
|
13
13
|
end
|
14
14
|
|
15
|
-
def self.from_file(file_path)
|
16
|
-
new(JSON.parse(File.read(file_path)))
|
17
|
-
end
|
18
|
-
|
19
15
|
def validate(message)
|
20
16
|
JSON::Validator.validate!(@schema, message)
|
21
17
|
rescue JSON::Schema::ValidationError => e
|
data/lib/twiglet/version.rb
CHANGED
data/test/formatter_test.rb
CHANGED
@@ -8,7 +8,7 @@ require_relative '../lib/twiglet/validator'
|
|
8
8
|
describe Twiglet::Formatter do
|
9
9
|
before do
|
10
10
|
@now = -> { Time.utc(2020, 5, 11, 15, 1, 1) }
|
11
|
-
@formatter = Twiglet::Formatter.new('petshop', now: @now, validator: Twiglet::Validator.new({}))
|
11
|
+
@formatter = Twiglet::Formatter.new('petshop', now: @now, validator: Twiglet::Validator.new({}.to_json))
|
12
12
|
end
|
13
13
|
|
14
14
|
it 'initializes an instance of a Ruby Logger Formatter' do
|
data/test/logger_test.rb
CHANGED
@@ -380,6 +380,61 @@ describe Twiglet::Logger do
|
|
380
380
|
end
|
381
381
|
end
|
382
382
|
|
383
|
+
describe 'validation schema' do
|
384
|
+
before do
|
385
|
+
validation_schema = <<-JSON
|
386
|
+
{
|
387
|
+
"type": "object",
|
388
|
+
"required": ["pet"],
|
389
|
+
"properties": {
|
390
|
+
"pet": {
|
391
|
+
"type": "object",
|
392
|
+
"required": ["name", "best_boy_or_girl?"],
|
393
|
+
"properties": {
|
394
|
+
"name": {
|
395
|
+
"type": "string",
|
396
|
+
"minLength": 1
|
397
|
+
},
|
398
|
+
"best_boy_or_girl?": {
|
399
|
+
"type": "boolean"
|
400
|
+
}
|
401
|
+
}
|
402
|
+
}
|
403
|
+
}
|
404
|
+
}
|
405
|
+
JSON
|
406
|
+
|
407
|
+
@logger = Twiglet::Logger.new(
|
408
|
+
'petshop',
|
409
|
+
now: @now,
|
410
|
+
output: @buffer,
|
411
|
+
validation_schema: validation_schema
|
412
|
+
)
|
413
|
+
end
|
414
|
+
|
415
|
+
it 'allows for the configuration of custom validation rules' do
|
416
|
+
@logger.debug(
|
417
|
+
{
|
418
|
+
pet: { name: 'Davis', best_boy_or_girl?: true, species: 'dog' }
|
419
|
+
}
|
420
|
+
)
|
421
|
+
log = read_json(@buffer)
|
422
|
+
|
423
|
+
assert_equal true, log[:pet][:best_boy_or_girl?]
|
424
|
+
end
|
425
|
+
|
426
|
+
it 'raises when custom validation rules are broken' do
|
427
|
+
nonconformant = {
|
428
|
+
pet: { name: 'Davis' }
|
429
|
+
}
|
430
|
+
|
431
|
+
assert_raises JSON::Schema::ValidationError,
|
432
|
+
"The property '#/pet' did not contain a required property of 'best_boy_or_girl?'" do
|
433
|
+
@logger.debug(nonconformant)
|
434
|
+
end
|
435
|
+
end
|
436
|
+
end
|
437
|
+
|
383
438
|
private
|
384
439
|
|
385
440
|
def read_json(buffer)
|
data/test/validator_test.rb
CHANGED