Sha256: b5f3a69d532f8ba09f262da76fda0b021bd9c2b10ea72a4ed27dc451395856e5

Contents?: true

Size: 1.6 KB

Versions: 5

Compression:

Stored size: 1.6 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'

module Ehbrs
  module Observers
    class Base
      include ::EacRubyUtils::Listable

      lists.add_string :blank_value, :add, :ignore, :raise

      attr_reader :records, :blank_value, :last_check_time

      common_constructor :options, default: [{}] do
        @records = options[:records] || []
        @blank_value = options[:blank_value].if_present(BLANK_VALUE_ADD) do |v|
          v = v.to_s
          ::Ehbrs::Observers::Base.lists.blank_value.value_validate!(v)
          v
        end
      end

      def check(value, date = ::Time.required_zone.now)
        @last_check_time = date
        send("check_with_blank_value_#{blank_value}", value, date)
      end

      def changing_value?(value)
        records.if_present(true) do
          last_value.if_present(value.present?) { |v| v != value }
        end
      end

      def last_change_time
        records.last.if_present(&:time)
      end

      def last_value
        records.last.if_present(&:value)
      end

      private

      def check_with_blank_value_add(value, time)
        return false unless changing_value?(value)

        records << { value: value, time: time }.to_struct
        true
      end

      def check_with_blank_value_ignore(value, date)
        false if value.blank? ? false : check_with_blank_value_add(value, date)
      end

      def check_with_blank_value_raise(value, date)
        raise(::ArgumentError, "Blank value checked (Value: #{value}, Class: #{value.class})") if
        value.blank?

        check_with_blank_value_add(value, date)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
ehbrs-tools-0.43.1 lib/ehbrs/observers/base.rb
ehbrs-tools-0.43.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.42.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.39.1 lib/ehbrs/observers/base.rb
ehbrs-tools-0.39.0 lib/ehbrs/observers/base.rb