Module: RDBr::Metadata::Values
- Defined in:
- lib/rdbr/metadata/values.rb
Class Method Summary collapse
- .boolean(value, field:) ⇒ Object
- .collection(value, member:, field:, allow_empty: true) ⇒ Object
- .deep_copy_freeze(value) ⇒ Object
- .name(value, field:) ⇒ Object
- .names(value, field:, allow_empty: false) ⇒ Object
- .optional_name(value, field:) ⇒ Object
- .optional_string(value, field:) ⇒ Object
- .unique_names!(items, field:) ⇒ Object
Class Method Details
.boolean(value, field:) ⇒ Object
46 47 48 49 50 |
# File 'lib/rdbr/metadata/values.rb', line 46 def boolean(value, field:) return value if [ true, false ].include?(value) raise InvalidMetadataError, "#{field} must be true or false" end |
.collection(value, member:, field:, allow_empty: true) ⇒ Object
28 29 30 31 32 33 34 35 |
# File 'lib/rdbr/metadata/values.rb', line 28 def collection(value, member:, field:, allow_empty: true) unless value.is_a?(Array) && value.all?{|item| item.is_a?(member) } raise InvalidMetadataError, "#{field} must be an Array of #{member}" end raise InvalidMetadataError, "#{field} must not be empty" if !allow_empty && value.empty? value.dup.freeze end |
.deep_copy_freeze(value) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/rdbr/metadata/values.rb', line 52 def deep_copy_freeze(value) case value when Array value.map{|item| deep_copy_freeze(item) }.freeze when Hash value.to_h{|key, item| [ deep_copy_freeze(key), deep_copy_freeze(item) ] }.freeze when String value.dup.freeze else value.freeze end end |
.name(value, field:) ⇒ Object
9 10 11 12 13 |
# File 'lib/rdbr/metadata/values.rb', line 9 def name(value, field:) raise InvalidMetadataError, "#{field} must be a non-empty String" unless value.is_a?(String) && !value.empty? value.dup.freeze end |
.names(value, field:, allow_empty: false) ⇒ Object
37 38 39 40 41 42 43 44 |
# File 'lib/rdbr/metadata/values.rb', line 37 def names(value, field:, allow_empty: false) unless value.is_a?(Array) && value.all?{|item| item.is_a?(String) && !item.empty? } raise InvalidMetadataError, "#{field} must be an Array of non-empty Strings" end raise InvalidMetadataError, "#{field} must not be empty" if !allow_empty && value.empty? value.map{|item| item.dup.freeze }.freeze end |
.optional_name(value, field:) ⇒ Object
15 16 17 18 19 |
# File 'lib/rdbr/metadata/values.rb', line 15 def optional_name(value, field:) return if value.nil? name(value, field: field) end |
.optional_string(value, field:) ⇒ Object
21 22 23 24 25 26 |
# File 'lib/rdbr/metadata/values.rb', line 21 def optional_string(value, field:) return if value.nil? raise InvalidMetadataError, "#{field} must be a String" unless value.is_a?(String) value.dup.freeze end |
.unique_names!(items, field:) ⇒ Object
65 66 67 68 69 70 |
# File 'lib/rdbr/metadata/values.rb', line 65 def unique_names!(items, field:) duplicates = items.group_by(&:name).reject{|name, _| name.nil? }.select{|_, matches| matches.length > 1 }.keys return if duplicates.empty? raise InvalidMetadataError, "#{field} contains duplicate names: #{duplicates.join(', ')}" end |