app/models/coupdoeil/hovercard/option/placement.rb
# frozen_string_literal: true module Coupdoeil class Hovercard class Option class Placement < Coupdoeil::Hovercard::Option self.bit_size = 4 * 4 VALUES = %w[ auto top top-start top-end right right-start right-end bottom bottom-start bottom-end left left-start left-end ].freeze INDEX_BY_VALUES = VALUES.each_with_index.to_h.with_indifferent_access.freeze class << self def parse(value) values = value.to_s.split(",") 4.times.sum do |index| next 0 unless (placement = values[index]) placement.strip! placement_index = INDEX_BY_VALUES[placement] placement_index << (index * 4) end end end def validate! values = value.to_s.split(",") values.each do |placement_value| next if placement_value.strip.in?(VALUES) values_sentence = VALUES.to_sentence(last_word_connector: " or ") raise_invalid_option "Value must be one of: #{values_sentence}" end end end end end end