moonleerecords/moonlee-website

View on GitHub
app/models/release_type.rb

Summary

Maintainability
A
0 mins
Test Coverage
class ReleaseType < ApplicationRecord
  default_scope { order('position ASC') }

  FORMAT_CD = 'cd'.freeze
  FORMAT_LP = 'lp'.freeze
  FORMAT_SEVEN_INCH = 'seven_inch'.freeze
  FORMAT_TEN_INCH = 'ten_inch'.freeze
  FORMAT_LP_CD = 'lp_cd'.freeze
  FORMAT_DIGITAL = 'digital'.freeze
  FORMAT_DIGITAL_MERCH = 'digital_merch'.freeze

  ALLOWED_FORMATS = {
    FORMAT_CD => 1,
    FORMAT_LP => 2,
    FORMAT_SEVEN_INCH => 3,
    FORMAT_TEN_INCH => 4,
    FORMAT_LP_CD => 5,
    FORMAT_DIGITAL => 6,
    FORMAT_DIGITAL_MERCH => 7
  }.stringify_keys.freeze

  belongs_to :release
  has_many :release_type_buy_links, dependent: :destroy

  accepts_nested_attributes_for :release_type_buy_links, allow_destroy: true

  validates :release, presence: true
  validates :release_format, presence: true, inclusion: { in: ALLOWED_FORMATS.keys }

  before_save :assign_position

  def self.allowed_formats
    ALLOWED_FORMATS.keys
  end

  private

  def assign_position
    self.position = ALLOWED_FORMATS[release_format]
  end
end