module Card::Subcards::Add

Methods for adding subcards

Public Instance Methods

<<(value) click to toggle source
# File lib/card/subcards/add.rb, line 19
def << value
  add value
end
[]=(name, card_or_attr) click to toggle source
# File lib/card/subcards/add.rb, line 23
def []= name, card_or_attr
  case card_or_attr
  when Hash
    new_by_attributes name, card_or_attr
  when Card
    new_by_card card_or_attr
  end
end
add(*args) click to toggle source
# File lib/card/subcards/add.rb, line 32
def add *args
  case args.first
  when Card then new_by_card args.first
  when Hash then add_hash args.first
  else new_by_attributes(*args)
  end
end
add_child(name, args) click to toggle source
# File lib/card/subcards/add.rb, line 48
def add_child name, args
  name = name.is_a?(Symbol) ? name.cardname : name.to_name
  add name.prepend_joint, args
end
Also aliased as: add_field
add_field(name, args)
Alias for: add_child
add_hash(hash) click to toggle source
# File lib/card/subcards/add.rb, line 40
def add_hash hash
  if (name = hash.delete :name)
    new_by_attributes name, hash
  else
    multi_add hash
  end
end
initialize_by_attributes(name, attributes) click to toggle source
# File lib/card/subcards/add.rb, line 73
def initialize_by_attributes name, attributes
  attributes[:supercard] ||= @context_card
  Card.assign_or_newish name, attributes, local_only: true
end
new_by_attributes(name, attributes={}) click to toggle source
# File lib/card/subcards/add.rb, line 63
def new_by_attributes name, attributes={}
  attributes = attributes&.symbolize_keys || {}
  absolute_name = absolutize_subcard_name name
  subcard_args = extract_subcard_args! attributes
  card = initialize_by_attributes absolute_name, attributes
  subcard = new_by_card card
  card.subcards.add subcard_args
  subcard
end
new_by_card(card) click to toggle source
# File lib/card/subcards/add.rb, line 54
def new_by_card card
  card.supercard = @context_card
  card.update_superleft card.name
  @keys << card.key
  Card.write_to_temp_cache card
  card.director = @context_card.director.subdirectors.add card
  card
end

Private Instance Methods

multi_add(args) click to toggle source

Handles hash with several subcards

# File lib/card/subcards/add.rb, line 81
def multi_add args
  args.each_pair do |key, val|
    case val
    when String, Array, Integer
      new_by_attributes key, content: val
    when Card
      val.name = absolutize_subcard_name key
      new_by_card val
    when nil
      next
    else
      new_by_attributes key, val
    end
  end
end