Sha256: c3f64bbdfa9f7419817b114450a15a01daf3b128b9838e03277be672a48f34cb

Contents?: true

Size: 1.35 KB

Versions: 5

Compression:

Stored size: 1.35 KB

Contents

# -*- encoding : utf-8 -*-
module Card::Chunk
  class Reference < Abstract
    attr_accessor :referee_name, :name

    def referee_name
      return if name.nil?

      @referee_name ||= begin
        rendered_name = render_obj(name)
        ref_card =
          case rendered_name # FIXME: this should be standard fetch option.
          when /^\~(\d+)$/ # get by id
            Card.fetch $1.to_i
          when /^\:(\w+)$/ # get by codename
            Card.fetch $1.to_sym
          end
        ref_card ? ref_card.cardname : rendered_name.to_name
      end
      @referee_name = @referee_name.to_absolute(card.cardname).to_name
    end

    def referee_card
      @referee_card ||= referee_name && Card.fetch(referee_name)
    end

    # FIXME: if we need this, then it should be faster, using fetch_id
    # def referee_id
    #   referee_card and referee_card.id
    # end

    def replace_name_reference old_name, new_name
      @referee_card = nil
      @referee_name = nil
      if Card::Content === name
        name.find_chunks(Chunk::Reference).each do |chunk|
          chunk.replace_reference old_name, new_name
        end
      else
        @name = name.to_name.replace_part(old_name, new_name)
      end
    end

    def render_obj raw
      if format && Card::Content === raw
        format.process_content raw
      else
        raw
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
card-1.17.4 mod/01_core/chunk/reference.rb
card-1.17.3 mod/01_core/chunk/reference.rb
card-1.17.2 mod/01_core/chunk/reference.rb
card-1.17.1 mod/01_core/chunk/reference.rb
card-1.17.0 mod/01_core/chunk/reference.rb