Sha256: 5359a6c403e3377424891ca82a687c2b1af4dbe31bb2d210bc706eca92606acb

Contents?: true

Size: 1.46 KB

Versions: 5

Compression:

Stored size: 1.46 KB

Contents

# frozen_string_literal: true

module Arxutils_Sqlite3
  # 簡易的なトランザクション処理
  class TransactState
    # 対象ID群
    attr_reader :ids
    # 状態
    attr_accessor :state

    # 初期化
    def initialize
      # 対象ID群
      @ids = []
      # 状態
      @state = :NONE
    end

    # :TRACE状態の時のみ対象IDとして追加
    def add(xid)
      @ids << xid if @state == :TRACE
    end

    # 対象ID群をクリア
    def clear
      @ids = []
    end

    # 処理の必要性の確認
    def need?
      @ids.size.positive?
    end
  end

  # 複数の簡易的なトランザクション処理
  class TransactStateGroup
    # 初期化
    def initialize(*names)
      @names = names
      @state = :NONE
      @inst = {}
      names.map { |x| @inst[x] = TransactState.new }
    end

    # 処理の必要性の確認
    def need?
      @state != :NONE
    end

    # 状態の一括設定
    def set_all_inst_state
      @inst.map { |x| x[1].state = @state }
    end

    # 状態を:TRACEに一括設定
    def trace
      @state = :TRACE
      set_all_inst_state
    end

    # 状態を:NONEに一括設定
    def reset
      @state = :NONE
      set_all_inst_state
    end

    # 指定名の状態を返す
    def method_missing(name, _lang = nil)
      @inst[name]
    end

    # 指定名に対応するかを返す
    def respond_to_missing?(symbol)
      name = symbol.to_s
      @names.include?(name)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
arxutils_sqlite3-0.1.64 lib/arxutils_sqlite3/transactstate.rb
arxutils_sqlite3-0.1.63 lib/arxutils_sqlite3/transactstate.rb
arxutils_sqlite3-0.1.61 lib/arxutils_sqlite3/transactstate.rb
arxutils_sqlite3-0.1.60 lib/arxutils_sqlite3/transactstate.rb
arxutils_sqlite3-0.1.59 lib/arxutils_sqlite3/transactstate.rb