14946: Updates SSO's install documentation so it doesn't ask for ruby 2.5
[arvados.git] / services / api / app / models / jsonb_type.rb
1 # Copyright (C) The Arvados Authors. All rights reserved.
2 #
3 # SPDX-License-Identifier: AGPL-3.0
4
5 class JsonbType
6   # Emulate pre-rails5.0 behavior by having a interpreting NULL/nil as
7   # some other default value.
8   class WithDefault < ActiveModel::Type::Value
9     include ActiveModel::Type::Helpers::Mutable
10
11     def default_value
12       nil
13     end
14
15     def deserialize(value)
16       if value.nil?
17         self.default_value
18       elsif value.is_a?(::String)
19         SafeJSON.load(value) rescue self.default_value
20       else
21         value
22       end
23     end
24
25     def serialize(value)
26       if value.nil?
27         self.default_value
28       else
29         SafeJSON.dump(value)
30       end
31     end
32   end
33
34   class Hash < JsonbType::WithDefault
35     def default_value
36       {}
37     end
38   end
39
40   class Array < JsonbType::WithDefault
41     def default_value
42       []
43     end
44   end
45 end