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

Methods included from Warren::BroadcastMessages

#broadcast, included, #queue_associated_for_broadcast, #queue_for_broadcast, #warren

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.


107
108
109
# File 'app/models/metadata.rb', line 107

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

Class Method Details

.localised_sections(field) ⇒ Object


155
156
157
# File 'app/models/metadata.rb', line 155

def localised_sections(field)
  localised_sections_store[field]
end

.localised_sections_generator(field) ⇒ Object


143
144
145
146
147
148
149
150
151
152
153
# File 'app/models/metadata.rb', line 143

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


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

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

.metadata_attribute_path(field) ⇒ Object


135
136
137
# File 'app/models/metadata.rb', line 135

def (field)
  [field]
end

.metadata_attribute_path_generator(field) ⇒ Object


131
132
133
# File 'app/models/metadata.rb', line 131

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

.metadata_attribute_path_storeObject


127
128
129
# File 'app/models/metadata.rb', line 127

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

Instance Method Details

#merge_instance_defaultsObject


113
114
115
116
117
118
119
120
# File 'app/models/metadata.rb', line 113

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