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 33 34 35 36 |
# 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 else # Some unfortunate nastiness to get around Opus::Enum potentially not # being defined. if defined?(Opus) && defined?(Opus::Enum) && what.class == Opus::Enum what else what.clone end end freeze ? result.freeze : result end |
.merge_serialized_optional_rule(prop_rules) ⇒ Object
60 61 62 |
# File 'lib/types/props/utils.rb', line 60 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.
40 41 42 43 |
# File 'lib/types/props/utils.rb', line 40 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.
46 47 48 |
# File 'lib/types/props/utils.rb', line 46 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
55 56 57 58 |
# File 'lib/types/props/utils.rb', line 55 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
50 51 52 53 |
# File 'lib/types/props/utils.rb', line 50 def self.required_prop?(prop_rules) # Clients should never reference :_tnilable as the implementation can change. !prop_rules[:_tnilable] end |