Sha256: b65ea512d96538375c4ad132e5cc05eed8f6a074554fd31a52e7dd243535d1e8

Contents?: true

Size: 1.63 KB

Versions: 12

Compression:

Stored size: 1.63 KB

Contents

class Card
  class Subcards
    # subcard-related Card instance methods
    module All
      Card.action_specific_attributes << :subcards

      def subcards
        @subcards ||= Card::Subcards.new self
      end

      def subcards?
        subcards.present?
      end

      def subcard card_name, args={}
        if (sc = subcards.card card_name)
          sc.assign_attributes args
          sc
        else
          subcards.add card_name, args
        end
      end

      def subcard_content card_name
        subcards.card(card_name)&.content
      end

      def subcard? card_name
        subcards.card(card_name).present?
      end

      def field field_name, args={}
        if (sf = subcards.field field_name)
          sf.assign_attributes args
          sf
        else
          subcards.add_field field_name, args
        end
      end

      def field_content field_name
        subcards.field(field_name)&.content
      end

      def field? tag
        fetch(tag) || subcards.field(tag).present?
      end

      def drop_subcard name_or_card
        subcards.remove name_or_card
      end

      def drop_field name_or_card
        subcards.remove_field name_or_card
      end

      def handle_subcard_errors
        subcards.each do |subcard|
          subcard.errors.each do |error|
            subcard_error subcard, error
          end
          subcard.errors.clear
        end
      end

      private

      def subcard_error subcard, error
        msg = error.message
        msg = "#{error.attribute} #{msg}" unless %i[content abort].member? error.attribute
        errors.add subcard.name.from(name), msg
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
card-1.108.1 lib/card/subcards/all.rb
card-1.108.0 lib/card/subcards/all.rb
card-1.107.0 lib/card/subcards/all.rb
card-1.106.0 lib/card/subcards/all.rb
card-1.105.6 lib/card/subcards/all.rb
card-1.105.5 lib/card/subcards/all.rb
card-1.105.4 lib/card/subcards/all.rb
card-1.105.3 lib/card/subcards/all.rb
card-1.105.2.pre1 lib/card/subcards/all.rb
card-1.105.2 lib/card/subcards/all.rb
card-1.105.1 lib/card/subcards/all.rb
card-1.105.0 lib/card/subcards/all.rb