Sha256: c7a6ff05b4cd5e92bc74a161360ccdf436c1db2f93017c16000f76b724fdc0e2

Contents?: true

Size: 1.31 KB

Versions: 1

Compression:

Stored size: 1.31 KB

Contents

  # -*- encoding : utf-8 -*-

class Card
  class Content
    module Chunk
      class Reference < Abstract
        attr_writer :referee_name
        attr_accessor :name

        def referee_name
          return if name.nil?

          @referee_name ||= referee_raw_name
          @referee_name = @referee_name.absolute_name card.name
        rescue Card::Error::NotFound
          # do not break on missing id/codename references.
        end

        def referee_raw_name
          Name[render_obj(name)]
        end

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

        private

        def replace_name_reference old_name, new_name
          @referee_card = @referee_name = nil
          replacing_content_object name, old_name, new_name do
            @name = name.to_name.swap old_name, new_name
          end
        end

        def replacing_content_object obj, old_name, new_name
          if obj.is_a? Content
            obj.find_chunks(:Reference).each do |chunk|
              chunk.swap_name old_name, new_name
            end
          elsif obj.present?
            yield
          end
        end

        def render_obj raw
          return raw unless format && raw.is_a?(Content)

          format.process_content raw
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
card-mod-content-0.15.6 lib/card/content/chunk/reference.rb