module Card::Subcards::Args

Handling shared subcard args processing

Public Instance Methods

extract_subcard_args!(args) click to toggle source
# File lib/card/subcards/args.rb, line 5
def extract_subcard_args! args
  safe_subcard_args args do |subcards|
    extract_explicit_fields subcards, args
    extract_implicit_fields subcards, args
  end
end

Private Instance Methods

extract_explicit_fields(subcards, args) click to toggle source
# File lib/card/subcards/args.rb, line 21
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
extract_implicit_fields(subcards, args) click to toggle source
# File lib/card/subcards/args.rb, line 35
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
normalize_field_key(key) click to toggle source

ensure a leading ‘+’

# File lib/card/subcards/args.rb, line 30
def normalize_field_key key
  key = Card::Codename.name! key if key.is_a?(Symbol)
  key.to_name.prepend_joint
end
safe_subcard_args(args) { |subcards| ... } click to toggle source

FIXME: the following should be handled before it gets this far

# File lib/card/subcards/args.rb, line 15
def safe_subcard_args args
  subcards = args.delete(:subcards) || {}
  yield subcards
  subcards.try(:to_unsafe_h) || subcards
end