Sha256: 3a0ee2e62d21485a8f86b43249829726e0727d078eeb3592a635c936fabe762d

Contents?: true

Size: 1.7 KB

Versions: 2

Compression:

Stored size: 1.7 KB

Contents

class Card
  def act opts={}
    if !DirectorRegister.act_card
      DirectorRegister.clear
      self.director = nil
      DirectorRegister.act_card = self
      main_act_block = true
      if opts[:success]
        Env[:success] = Success.new(cardname, Env.params[:success])
      end
    else
      main_act_block = false
    end
    yield
  ensure
    DirectorRegister.clear if main_act_block
  end

  def self.new_director card, opts={}
    if opts[:parent]
      StageSubdirector.new card, opts
    elsif DirectorRegister.act_card &&
          DirectorRegister.act_card != card &&
          DirectorRegister.act_card.director.running?
      DirectorRegister.act_card.director.subdirectors.add(card)
    else
      StageDirector.new card
    end
  end

  class DirectorRegister
    cattr_accessor :act_card

    class << self
      def act_director
        return unless DirectorRegister.act_card
        DirectorRegister.act_card.director
      end

      def directors
        @directors ||= {}
      end

      def clear
        DirectorRegister.act_card = nil
        directors.each_pair do |card, _dir|
          card.director = nil
        end
        @directors = nil
      end

      def fetch card, opts={}
        directors[card] ||= Card.new_director card, opts
      end

      def add director
        directors[director.card] = director
      end

      def delete director
        return unless @directors
        @directors.delete director.card
        director.delete
      end

      def deep_delete director
        director.subdirectors.each do |subdir|
          deep_delete subdir
        end
        delete director
      end

      def to_s
        directors.values.map(&:to_s).join "\n"
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
card-1.18.6 lib/card/director_register.rb
card-1.18.5 lib/card/director_register.rb