Sha256: 3b103997c0ec393d813f9966d711932f7502d2d0af4013397f23e650535fda10

Contents?: true

Size: 1.6 KB

Versions: 9

Compression:

Stored size: 1.6 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
        return false unless compound?

        if context.present?
          absolute_name(context).left_name.key == context.to_name.key
        else
          s.match(/^\s*\+[^+]+$/).present?
        end
      end

      def field_only?
        relative? && stripped.to_name.parts.reject(&:blank?).first == parts.last
      end

      def relative_field_name tag_name
        field_name(tag_name).name_from self
      end

      # @return [String]
      def trait tag_code
        name = trait_name tag_code
        name.s
      end

      # @return [Card::Name]
      def trait_name tag_code
        Card::Name[self, tag_code.to_sym]
      end

      # @return [True/False]
      def trait_name? *traitlist
        return false unless compound?

        right_key = right_name.key
        traitlist.any? do |codename|
          Card::Codename.name(codename)&.key == right_key
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
card-1.103.4 lib/card/name/fields_and_traits.rb
card-1.103.3 lib/card/name/fields_and_traits.rb
card-1.103.2 lib/card/name/fields_and_traits.rb
card-1.103.1 lib/card/name/fields_and_traits.rb
card-1.103.0 lib/card/name/fields_and_traits.rb
card-1.101.7 lib/card/name/fields_and_traits.rb
card-1.102.0 lib/card/name/fields_and_traits.rb
card-1.101.6 lib/card/name/fields_and_traits.rb
card-1.101.5 lib/card/name/fields_and_traits.rb