Sha256: a119c9477c814740cc24eaf8e7235beb54aca490fb2b25b21ec0e8e4a31188eb

Contents?: true

Size: 1.1 KB

Versions: 12

Compression:

Stored size: 1.1 KB

Contents

class Card
  class Subcards
    # Handling shared subcard args processing
    module Args
      def extract_subcard_args! args
        safe_subcard_args args do |subcards|
          extract_explicit_fields subcards, args
          extract_implicit_fields subcards, args
        end
      end

      private

      # FIXME: the following should be handled before it gets this far
      def safe_subcard_args args
        subcards = args.delete(:subcards) || {}
        yield subcards
        subcards.try(:to_unsafe_h) || subcards
      end

      def extract_explicit_fields subcards, args
        return unless (fields = args.delete :fields)

        fields.each_pair do |key, value|
          subcards[normalize_field_key(key)] = value
        end
      end

      # ensure a leading '+'
      def normalize_field_key key
        key = Card::Codename.name! key if key.is_a?(Symbol)
        key.to_name.prepend_joint
      end

      def extract_implicit_fields subcards, args
        args.each_key do |key|
          subcards[key.to_s] = args.delete(key) if key.to_s.match?(/^\+/)
        end
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

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