Module: T::Props::Utils
- Defined in:
- lib/types/props/utils.rb
Overview
typed: true
Class Method Summary collapse
-
.deep_clone_object(what, freeze: false) ⇒ Object
Deep copy an object.
- .merge_serialized_optional_rule(prop_rules) ⇒ Object
-
.need_nil_read_check?(prop_rules) ⇒ Boolean
The prop_rules indicate whether we should check for reading a nil value for the prop/field.
-
.need_nil_write_check?(prop_rules) ⇒ Boolean
The prop_rules indicate whether we should check for writing a nil value for the prop/field.
- .optional_prop?(prop_rules) ⇒ Boolean
- .required_prop?(prop_rules) ⇒ Boolean
Class Method Details
.deep_clone_object(what, freeze: false) ⇒ Object
Deep copy an object. The object must consist of Ruby primitive types and Hashes and Arrays.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/types/props/utils.rb', line 7 def self.deep_clone_object(what, freeze: false) result = case what when true true when false false when Symbol, NilClass, Numeric what when Array what.map {|v| deep_clone_object(v, freeze: freeze)} when Hash h = what.class.new what.each do |k, v| k.freeze if freeze h[k] = deep_clone_object(v, freeze: freeze) end h when Regexp what.dup when T::Enum what else what.clone end freeze ? result.freeze : result end |
.merge_serialized_optional_rule(prop_rules) ⇒ Object
56 57 58 |
# File 'lib/types/props/utils.rb', line 56 def self.merge_serialized_optional_rule(prop_rules) {'_tnilable' => true}.merge(prop_rules.merge('_tnilable' => true)) end |
.need_nil_read_check?(prop_rules) ⇒ Boolean
The prop_rules indicate whether we should check for reading a nil value for the prop/field. This is mostly for the compatibility check that we allow existing documents carry some nil prop/field.
36 37 38 39 |
# File 'lib/types/props/utils.rb', line 36 def self.need_nil_read_check?(prop_rules) # . :on_load allows nil read, but we need to check for the read for future writes prop_rules[:optional] == :on_load || prop_rules[:raise_on_nil_write] end |
.need_nil_write_check?(prop_rules) ⇒ Boolean
The prop_rules indicate whether we should check for writing a nil value for the prop/field.
42 43 44 |
# File 'lib/types/props/utils.rb', line 42 def self.need_nil_write_check?(prop_rules) need_nil_read_check?(prop_rules) || T::Props::Utils.required_prop?(prop_rules) end |
.optional_prop?(prop_rules) ⇒ Boolean
51 52 53 54 |
# File 'lib/types/props/utils.rb', line 51 def self.optional_prop?(prop_rules) # Clients should never reference :_tnilable as the implementation can change. !!prop_rules[:_tnilable] end |
.required_prop?(prop_rules) ⇒ Boolean
46 47 48 49 |
# File 'lib/types/props/utils.rb', line 46 def self.required_prop?(prop_rules) # Clients should never reference :_tnilable as the implementation can change. !prop_rules[:_tnilable] end |