From d5ae1208dcb82c7ff899d7cb7d85d54b40cdd2ea Mon Sep 17 00:00:00 2001 From: Yuki Ito Date: Tue, 19 Apr 2016 18:22:19 +0900 Subject: [PATCH] Serialize Fluent::EventTime as Integer in JSON. fixes #897 --- lib/fluent/time.rb | 4 ++++ test/test_event_time.rb | 30 ++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/lib/fluent/time.rb b/lib/fluent/time.rb index 18edff60bf..91b40d2e70 100644 --- a/lib/fluent/time.rb +++ b/lib/fluent/time.rb @@ -59,6 +59,10 @@ def to_s @sec.to_s end + def to_json(*args) + @sec.to_s + end + def to_msgpack(io = nil) @sec.to_msgpack(io) end diff --git a/test/test_event_time.rb b/test/test_event_time.rb index 9dee908a6d..aff0f7b5de 100644 --- a/test/test_event_time.rb +++ b/test/test_event_time.rb @@ -1,5 +1,7 @@ require_relative 'helper' require 'timecop' +require 'oj' +require 'yajl' class EventTimeTest < Test::Unit::TestCase setup do @@ -34,6 +36,34 @@ class EventTimeTest < Test::Unit::TestCase assert_equal('100', "#{time}") end + test '#to_json' do + time = Fluent::EventTime.new(100) + assert_equal('100', time.to_json) + assert_equal('{"time":100}', {'time' => time}.to_json) + assert_equal('["tag",100,{"key":"value"}]', ["tag", time, {"key" => "value"}].to_json) + end + + test 'JSON.dump' do + time = Fluent::EventTime.new(100) + assert_equal('100', JSON.dump(time)) + assert_equal('{"time":100}', JSON.dump({'time' => time})) + assert_equal('["tag",100,{"key":"value"}]', JSON.dump(["tag", time, {"key" => "value"}])) + end + + test 'Oj.dump' do + time = Fluent::EventTime.new(100) + assert_equal('100', Oj.dump(time, mode: :compat)) + assert_equal('{"time":100}', Oj.dump({'time' => time}, mode: :compat)) + assert_equal('["tag",100,{"key":"value"}]', Oj.dump(["tag", time, {"key" => "value"}], mode: :compat)) + end + + test 'Yajl.dump' do + time = Fluent::EventTime.new(100) + assert_equal('100', Yajl.dump(time)) + assert_equal('{"time":100}', Yajl.dump({'time' => time})) + assert_equal('["tag",100,{"key":"value"}]', Yajl.dump(["tag", time, {"key" => "value"}])) + end + test '.from_time' do sec = 1000 usec = 2