Sha256: 61eaad1099b467e48e5bb0259b377092d0030ee7f1619d57ca2461eedcc59a1c

Contents?: true

Size: 1.72 KB

Versions: 2

Compression:

Stored size: 1.72 KB

Contents

class Card
  class Name
    # Name-based "Fields" are compound names in which the right name is treated
    # as an attribute of the left.  (Eg MyName+address)
    #
    # "Traits" are the subset of fields in which the right name corresponds to a
    # card with a codename
    module FieldsAndTraits
      # @return [String]
      def field tag_name
        field_name(tag_name).s
      end

      # @return [Card::Name]
      def field_name tag_name
        case tag_name
        when Symbol
          trait_name tag_name
        else
          tag_name = tag_name.to_s[1..-1] if tag_name.to_s[0] == "+"
          [self, tag_name].to_name
        end
      end

      # @return [True/False]
      def field_of? context_name
        if context_name.present?
          child_of?(context_name) && relative_name(context_name).length == 2
        else
          s.match(/^\s*\+[^+]+$/).present?
        end
      end

      def relative_field_name tag_name
        field_name(tag_name).relative_name self
      end

      # @return [String]
      def trait tag_code
        name = trait_name tag_code
        raise Card::Error::NotFound, "unknown codename: #{tag_code}" unless name
        name.s
      end

      # @return [Card::Name]
      def trait_name tag_code
        return unless (card_id = Card::Codename[tag_code])
        [self, Card.quick_fetch(card_id).name].to_name
      end

      # @return [True/False]
      def trait_name? *traitlist
        junction? && begin
          right_key = right_name.key
          traitlist.find do |codename|
            (card_id = Card::Codename[codename]) &&
              (card = Card.quick_fetch card_id) &&
              card.key == right_key
          end.present?
        end
      end



    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
card-1.20.1 lib/card/name/fields_and_traits.rb
card-1.20.0 lib/card/name/fields_and_traits.rb