Deserialize type: Date values (#776)
* Be explicit about datetimes * Parse Date objects as specified in the types
This commit is contained in:
		
							parent
							
								
									cb0b81f794
								
							
						
					
					
						commit
						812b374103
					
				| 
						 | 
				
			
			@ -80,6 +80,10 @@ module Google
 | 
			
		|||
              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
 | 
			
		||||
            if options[:type] == Date
 | 
			
		||||
              options[:render_filter] = ->(value, _doc, *_args) { value.nil? ? nil : value.to_s}
 | 
			
		||||
              options[:parse_filter] = ->(fragment, _doc, *_args) { Date.parse(fragment) }
 | 
			
		||||
            end
 | 
			
		||||
 | 
			
		||||
            options[:render_nil] = true
 | 
			
		||||
            options[:getter] = getter_fn(name)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -30,6 +30,8 @@ RSpec.describe Google::Apis::Core::JsonRepresentation do
 | 
			
		|||
      attr_accessor :string_value
 | 
			
		||||
      attr_accessor :boolean_value_true
 | 
			
		||||
      attr_accessor :boolean_value_false
 | 
			
		||||
      attr_accessor :datetime_value
 | 
			
		||||
      attr_accessor :nil_datetime_value
 | 
			
		||||
      attr_accessor :date_value
 | 
			
		||||
      attr_accessor :nil_date_value
 | 
			
		||||
      attr_accessor :bytes_value
 | 
			
		||||
| 
						 | 
				
			
			@ -49,8 +51,10 @@ RSpec.describe Google::Apis::Core::JsonRepresentation do
 | 
			
		|||
      property :string_value, as: 'stringValue'
 | 
			
		||||
      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 :datetime_value, as: 'dateTimeValue', type: DateTime
 | 
			
		||||
      property :nil_datetime_value, as: 'nullDateTimeValue', type: DateTime
 | 
			
		||||
      property :date_value, as: 'dateValue', type: Date
 | 
			
		||||
      property :nil_date_value, as: 'nullDateValue', type: Date
 | 
			
		||||
      property :bytes_value, as: 'bytesValue', base64: true
 | 
			
		||||
      property :big_value, as: 'bigValue', numeric_string: true
 | 
			
		||||
      property :items
 | 
			
		||||
| 
						 | 
				
			
			@ -85,8 +89,16 @@ RSpec.describe Google::Apis::Core::JsonRepresentation do
 | 
			
		|||
      expect(json).to be_json_eql(%(false)).at_path('booleanValueFalse')
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'serializes datetime values' do
 | 
			
		||||
      expect(json).to be_json_eql(%("2015-05-01T12:00:00.000+00:00")).at_path('dateTimeValue')
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'allows nil datetime values' do
 | 
			
		||||
      expect(json).to be_json_eql(%(null)).at_path('nullDateTimeValue')
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'serializes date values' do
 | 
			
		||||
      expect(json).to be_json_eql(%("2015-05-01T12:00:00.000+00:00")).at_path('dateValue')
 | 
			
		||||
      expect(json).to be_json_eql(%("2015-05-01")).at_path('dateValue')
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'allows nil date values' do
 | 
			
		||||
| 
						 | 
				
			
			@ -121,7 +133,10 @@ RSpec.describe Google::Apis::Core::JsonRepresentation do
 | 
			
		|||
      model.nil_value = nil
 | 
			
		||||
      model.numeric_value = 123
 | 
			
		||||
      model.string_value = 'test'
 | 
			
		||||
      model.date_value = DateTime.new(2015, 5, 1, 12)
 | 
			
		||||
      model.datetime_value = DateTime.new(2015, 5, 1, 12)
 | 
			
		||||
      model.nil_datetime_value = nil
 | 
			
		||||
      model.date_value = Date.new(2015, 5, 1)
 | 
			
		||||
      model.nil_date_value = nil
 | 
			
		||||
      model.boolean_value_true = true
 | 
			
		||||
      model.boolean_value_false = false
 | 
			
		||||
      model.bytes_value = 'Hello world'
 | 
			
		||||
| 
						 | 
				
			
			@ -129,7 +144,6 @@ 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.big_value = 1208925819614629174706176
 | 
			
		||||
      model
 | 
			
		||||
    end
 | 
			
		||||
| 
						 | 
				
			
			@ -145,7 +159,9 @@ RSpec.describe Google::Apis::Core::JsonRepresentation do
 | 
			
		|||
        nil_value: nil,
 | 
			
		||||
        string_value: 'test',
 | 
			
		||||
        numeric_value: 123,
 | 
			
		||||
        date_value: DateTime.new(2015, 5, 1, 12),
 | 
			
		||||
        datetime_value: DateTime.new(2015, 5, 1, 12),
 | 
			
		||||
        nil_datetime_value: nil,
 | 
			
		||||
        date_value: Date.new(2015, 5, 1),
 | 
			
		||||
        nil_date_value: nil,
 | 
			
		||||
        boolean_value_true: true,
 | 
			
		||||
        boolean_value_false: false,
 | 
			
		||||
| 
						 | 
				
			
			@ -171,7 +187,10 @@ RSpec.describe Google::Apis::Core::JsonRepresentation do
 | 
			
		|||
  "booleanValueTrue": true,
 | 
			
		||||
  "booleanValueFalse": false,
 | 
			
		||||
  "numericValue": 123,
 | 
			
		||||
  "dateValue": "2015-05-01T12:00:00+00:00",
 | 
			
		||||
  "dateTimeValue": "2015-05-01T12:00:00+00:00",
 | 
			
		||||
  "nullDateTimeValue": null,
 | 
			
		||||
  "dateValue": "2015-05-01",
 | 
			
		||||
  "nullDateValue": null,
 | 
			
		||||
  "bytesValue": "SGVsbG8gd29ybGQ=",
 | 
			
		||||
  "bigValue": "1208925819614629174706176",
 | 
			
		||||
  "items": [1,2,3],
 | 
			
		||||
| 
						 | 
				
			
			@ -198,8 +217,20 @@ EOF
 | 
			
		|||
      expect(model.boolean_value_false).to be_falsey
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'deserializes datetime values' do
 | 
			
		||||
      expect(model.datetime_value).to eql DateTime.new(2015, 5, 1, 12)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'deserializes null datetime values' do
 | 
			
		||||
      expect(model.nil_datetime_value).to be_nil
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'deserializes date values' do
 | 
			
		||||
      expect(model.date_value).to eql DateTime.new(2015, 5, 1, 12)
 | 
			
		||||
      expect(model.date_value).to eql Date.new(2015, 5, 1)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'deserializes null date values' do
 | 
			
		||||
      expect(model.nil_date_value).to be_nil
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    it 'deserializes basic collections' do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue