summaryrefslogtreecommitdiff
path: root/app/models/concerns/maskable.rb
blob: e0f2c41b836ce7546758af0fd19e0fd2be56e52d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# frozen_string_literal: true

module Maskable
  extend ActiveSupport::Concern

  # * Single line
  # * No escape characters
  # * No variables
  # * No spaces
  # * Minimal length of 8 characters from the Base64 alphabets (RFC4648)
  # * Absolutely no fun is allowed
  REGEX = /\A[a-zA-Z0-9_+=\/-]{8,}\z/.freeze

  included do
    validates :masked, inclusion: { in: [true, false] }
    validates :value, format: { with: REGEX }, if: :masked?
  end

  def to_runner_variable
    super.merge(masked: masked?)
  end
end