enhancement: -j/--json flag

Phillip Davis created

Change summary

bin/view-events | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)

Detailed changes

bin/view-events 🔗

@@ -68,7 +68,9 @@ def to_stream_id(str)
 	"#{epoch * 1000}-0"
 end
 
-def format_event(fields)
+def format_event(fields, json: False, **)
+	return JSON.dump(fields) if json
+
 	event = fields["event"]
 	parts = [fields.fetch("timestamp", "—"), Color.event(event)]
 
@@ -146,6 +148,7 @@ parser = OptionParser.new do |opts|
 	opts.on("--from TEL", "Filter by sender")                  { |v| options[:from] = v }
 	opts.on("--bandwidth-id ID", "Filter by Bandwidth msg ID") { |v| options[:bandwidth_id] = v }
 	opts.on("--stanza-id ID", "Filter by XMPP stanza ID")      { |v| options[:stanza_id] = v }
+	opts.on("-j", "--json", "Format output as JSON")           { |v| options[:json] = v }
 end
 
 parser.parse!
@@ -189,7 +192,7 @@ if options[:recent]
 		break if entries.size < BATCH_SIZE
 	end
 
-	matched.each { |fields| puts format_event(fields) }
+	matched.each { |fields| puts format_event(fields, **options) }
 	count = matched.length
 else
 	start_id = to_stream_id(options[:start])
@@ -202,7 +205,7 @@ else
 
 		entries.each do |_id, fields|
 			next unless matches?(fields, filters)
-			puts format_event(fields)
+			puts format_event(fields, **options)
 			count += 1
 		end