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

module Maskable
  extend ActiveSupport::Concern

  # * Single line
  # * No escape characters
  # * No variables
  # * No spaces
  # * Minimal length of 8 characters
  # * Characters must be from the Base64 alphabet (RFC4648) with the addition of @ and :
  # * 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