Class: Metadata::Base

Inherits:
ApplicationRecord show all
Includes:
Attributable
Defined in:
app/models/metadata.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Attributable

#association_value_pairs, #attribute_details_for, #attribute_value_pairs, #field_infos, included, #instance_defaults, #required?

Methods inherited from ApplicationRecord

alias_association, convert_labware_to_receptacle_for, find_by_id_or_name, find_by_id_or_name!

Methods included from Squishify

extended

Constructor Details

#initialize(attributes = {}) ⇒ Base

This ensures that the default values are stored within the DB, meaning that this information will be preserved for the future, unlike the original properties information which didn’t store values when nil which lead to us having to guess.



119
120
121
# File 'app/models/metadata.rb', line 119

def initialize(attributes = {}, *, &)
  super(self.class.defaults.merge(attributes.try(:symbolize_keys) || {}), *, &)
end

Class Method Details

.localised_sections(field) ⇒ Object



169
170
171
# File 'app/models/metadata.rb', line 169

def localised_sections(field)
  localised_sections_store[field]
end

.localised_sections_generator(field) ⇒ Object



155
156
157
158
159
160
161
162
163
164
165
166
167
# File 'app/models/metadata.rb', line 155

def localised_sections_generator(field)
  Section.new(
    *(
      SECTION_FIELDS.map do |section|
        I18n.t(
          section,
          scope: [:metadata, (field)].flatten,
          default: I18n.t(section, scope: %i[metadata defaults])
        )
      end << {}
    )
  )
end

.localised_sections_storeObject



151
152
153
# File 'app/models/metadata.rb', line 151

def localised_sections_store
  @loc_sec ||= Hash.new { |h, field| h[field] = localised_sections_generator(field) }
end

.metadata_attribute_path(field) ⇒ Object



147
148
149
# File 'app/models/metadata.rb', line 147

def (field)
  [field]
end

.metadata_attribute_path_generator(field) ⇒ Object



143
144
145
# File 'app/models/metadata.rb', line 143

def (field)
  name.underscore.split('/').map(&:to_sym) + [field.to_sym]
end

.metadata_attribute_path_storeObject



139
140
141
# File 'app/models/metadata.rb', line 139

def 
  @md_a_p ||= Hash.new { |h, field| h[field] = (field) }
end

Instance Method Details

#merge_instance_defaultsObject



125
126
127
128
129
130
131
132
# File 'app/models/metadata.rb', line 125

def merge_instance_defaults
  # Replace attributes with the default if the value is nil
  instance_defaults.each do |attribute, value|
    next unless send(attribute).nil?

    send(:"#{attribute}=", value)
  end
end