Class: Metadata::Base

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

Overview

rubocop:todo Style/Documentation

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

convert_labware_to_receptacle_for, find_by_id_or_name, find_by_id_or_name!

Methods included from Squishify

extended

Constructor Details

#initialize(attributes = {}, *args, &block) ⇒ 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.


121
122
123
# File 'app/models/metadata.rb', line 121

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

Class Method Details

.localised_sections(field) ⇒ Object


171
172
173
# File 'app/models/metadata.rb', line 171

def localised_sections(field)
  localised_sections_store[field]
end

.localised_sections_generator(field) ⇒ Object


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

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


153
154
155
# File 'app/models/metadata.rb', line 153

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

.metadata_attribute_path(field) ⇒ Object


149
150
151
# File 'app/models/metadata.rb', line 149

def (field)
  [field]
end

.metadata_attribute_path_generator(field) ⇒ Object


145
146
147
# File 'app/models/metadata.rb', line 145

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

.metadata_attribute_path_storeObject


141
142
143
# File 'app/models/metadata.rb', line 141

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

Instance Method Details

#merge_instance_defaultsObject


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

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