Sha256: 6fcd9272d5f8c0bc98ed11348ae86a8374b7569c7cf03c1b9fc519f404738f78

Contents?: true

Size: 1.97 KB

Versions: 2

Compression:

Stored size: 1.97 KB

Contents

class Card
  module Set
    class Pattern
      # methods for Set::Pattern classes
      module ClassMethods
        attr_accessor :pattern_code, :pattern_id, :junction_only,
                      :assigns_type, :anchorless
        attr_writer :anchor_parts_count

        def new card
          super if pattern_applies? card
        end

        def register pattern_code, opts={}
          if (self.pattern_id = Card::Codename.id(pattern_code))
            self.pattern_code = pattern_code
            Pattern.concrete.insert opts.delete(:index).to_i, self
            self.anchorless = !respond_to?(:anchor_name)
            opts.each { |key, val| send "#{key}=", val }
          else
            warn "no codename for pattern code: #{pattern_code}"
          end
        end

        def junction_only?
          junction_only == true
        end

        def anchorless?
          anchorless
        end

        def pattern
          Card.fetch(pattern_id, skip_modules: true).name
        end

        def pattern_applies? card
          junction_only? ? card.name.compound? : true
        end

        def anchor_parts_count
          @anchor_parts_count ||= (anchorless? ? 0 : 1)
        end

        def module_key anchor_codes
          return pattern_code.to_s.camelize if anchorless?
          return unless anchor_codes # is this not an error?

          ([pattern_code] + anchor_codes).map { |code| code.to_s.camelize }.join "::"
        end

        # label for set pattern if no anchor is given
        def generic_label
          label nil
        end

        private

        def left_type card
          card.superleft&.type_name || quick_type(card.name.left_name)
        end

        def quick_type name
          if name.present?
            card = Card.fetch name, skip_modules: true, new: {}
            card.include_set_modules if card.new? && name.to_name.compound?
            card&.type_name
          else
            "RichText"
          end
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
card-1.103.4 lib/card/set/pattern/class_methods.rb
card-1.103.3 lib/card/set/pattern/class_methods.rb