Sha256: 231e11a11725d73090eb37954fe8f9a7746b49129fcf9d46334ab7e10949c874

Contents?: true

Size: 1.63 KB

Versions: 26

Compression:

Stored size: 1.63 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'
require 'ostruct'

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 << ::OpenStruct.new(value: value, time: time)
        true
      end

      def check_with_blank_value_ignore(value, date)
        return 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

26 entries across 26 versions & 1 rubygems

Version Path
ehbrs-tools-0.38.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.37.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.36.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.35.1 lib/ehbrs/observers/base.rb
ehbrs-tools-0.35.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.34.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.33.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.32.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.31.1 lib/ehbrs/observers/base.rb
ehbrs-tools-0.31.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.30.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.29.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.28.3 lib/ehbrs/observers/base.rb
ehbrs-tools-0.28.2 lib/ehbrs/observers/base.rb
ehbrs-tools-0.28.1 lib/ehbrs/observers/base.rb
ehbrs-tools-0.28.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.27.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.26.0 lib/ehbrs/observers/base.rb
ehbrs-tools-0.25.1 lib/ehbrs/observers/base.rb
ehbrs-tools-0.25.0 lib/ehbrs/observers/base.rb