From 1ee88320e91deccf4e69fe589b4959046dcc752e Mon Sep 17 00:00:00 2001 From: Steve Bazyl Date: Mon, 25 Apr 2016 10:49:00 -0700 Subject: [PATCH] #403 - allow nil dates --- lib/google/apis/core/json_representation.rb | 4 ++-- spec/google/apis/core/json_representation_spec.rb | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/google/apis/core/json_representation.rb b/lib/google/apis/core/json_representation.rb index 4c78d361f..6194efcb5 100644 --- a/lib/google/apis/core/json_representation.rb +++ b/lib/google/apis/core/json_representation.rb @@ -69,11 +69,11 @@ module Google def set_default_options(name, options) if options[:base64] - options[:render_filter] = ->(value, _doc, *_args) { Base64.urlsafe_encode64(value) } + options[:render_filter] = ->(value, _doc, *_args) { value.nil? ? nil : Base64.urlsafe_encode64(value) } options[:parse_filter] = ->(fragment, _doc, *_args) { Base64.urlsafe_decode64(fragment) } end if options[:type] == DateTime - options[:render_filter] = ->(value, _doc, *_args) { value.is_a?(DateTime) ? value.rfc3339(3) : value.to_s } + options[:render_filter] = ->(value, _doc, *_args) { value.nil? ? nil : value.is_a?(DateTime) ? value.rfc3339(3) : value.to_s } options[:parse_filter] = ->(fragment, _doc, *_args) { DateTime.parse(fragment) } end diff --git a/spec/google/apis/core/json_representation_spec.rb b/spec/google/apis/core/json_representation_spec.rb index 644a5ac0b..005dabf39 100644 --- a/spec/google/apis/core/json_representation_spec.rb +++ b/spec/google/apis/core/json_representation_spec.rb @@ -31,6 +31,7 @@ RSpec.describe Google::Apis::Core::JsonRepresentation do attr_accessor :boolean_value_true attr_accessor :boolean_value_false attr_accessor :date_value + attr_accessor :nil_date_value attr_accessor :bytes_value attr_accessor :items attr_accessor :child @@ -48,6 +49,7 @@ RSpec.describe Google::Apis::Core::JsonRepresentation do property :boolean_value_true, as: 'booleanValueTrue' property :boolean_value_false, as: 'booleanValueFalse' property :date_value, as: 'dateValue', type: DateTime + property :nil_date_value, as: 'nullDateValue', type: DateTime property :bytes_value, as: 'bytesValue', base64: true property :items property :child, class: klass do @@ -85,6 +87,10 @@ RSpec.describe Google::Apis::Core::JsonRepresentation do expect(json).to be_json_eql(%("2015-05-01T12:00:00.000+00:00")).at_path('dateValue') end + it 'allows nil date values' do + expect(json).to be_json_eql(%(null)).at_path('nullDateValue') + end + it 'serializes byte values to base64' do expect(json).to be_json_eql(%("SGVsbG8gd29ybGQ=")).at_path('bytesValue') end @@ -117,10 +123,12 @@ RSpec.describe Google::Apis::Core::JsonRepresentation do model.child = child_class.new model.child.value = 'child' model.children = [model.child] + model.nil_date_value = nil model end include_examples 'it serializes' + end context 'with hash' do @@ -131,6 +139,7 @@ RSpec.describe Google::Apis::Core::JsonRepresentation do string_value: 'test', numeric_value: 123, date_value: DateTime.new(2015, 5, 1, 12), + nil_date_value: nil, boolean_value_true: true, boolean_value_false: false, bytes_value: 'Hello world',