module Card::Name::All

methods connecting Card to Card::Name

Attributes

supercard[R]

Public Instance Methods

[](*args) click to toggle source
Calls superclass method
# File lib/card/name/all.rb, line 29
def [] *args
  case args[0]
  when Integer, Range
    fetch_name = Array.wrap(name.parts[args[0]]).compact.join Name.joint
    Card.fetch(fetch_name, args[1] || {}) unless simple?
  else
    super
  end
end
autoname(name) click to toggle source
# File lib/card/name/all.rb, line 43
def autoname name
  if Card.exists?(name) || Director.include?(name)
    autoname name.next
  else
    name
  end
end
cardname()
Alias for: name
key() click to toggle source
Calls superclass method
# File lib/card/name/all.rb, line 16
def key
  @key ||= left_id ? name.key : super
end
key=(newkey) click to toggle source
# File lib/card/name/all.rb, line 64
def key= newkey
  return if newkey == key

  update_cache_key key do
    write_attribute :key, (name.simple? ? newkey : nil)
    @key = newkey
  end
  clean_patterns
  @key
end
lex() click to toggle source
# File lib/card/name/all.rb, line 39
def lex
  simple? ? name : [left_id, right_id]
end
name() click to toggle source
Calls superclass method
# File lib/card/name/all.rb, line 11
def name
  @name ||= left_id ? Lexicon.lex_to_name([left_id, right_id]) : super.to_name
end
Also aliased as: cardname
name=(newname) click to toggle source
# File lib/card/name/all.rb, line 20
def name= newname
  @name = superize_name newname.to_name
  self.key = @name.key
  update_subcard_names @name
  write_attribute :name, (@name.simple? ? @name.s : nil)
  assign_side_ids
  @name
end
update_subcard_names(new_name, name_to_replace=nil) click to toggle source
# File lib/card/name/all.rb, line 56
def update_subcard_names new_name, name_to_replace=nil
  return unless @subcards

  subcards.each do |subcard|
    update_subcard_name subcard, new_name, name_to_replace if subcard.new?
  end
end
update_superleft(newname=nil) click to toggle source
# File lib/card/name/all.rb, line 51
def update_superleft newname=nil
  newname ||= name
  @superleft = @supercard if newname.field_of? @supercard.name
end

Private Instance Methods

assign_side_id(side_id_equals, side_name) click to toggle source

assigns left_id and right_id based on names. if side card is new, id is temporarily stored as -1

# File lib/card/name/all.rb, line 88
def assign_side_id side_id_equals, side_name
  side_id = Lexicon.id(name.send(side_name)) || -1
  send side_id_equals, side_id
end
assign_side_ids() click to toggle source
# File lib/card/name/all.rb, line 77
def assign_side_ids
  if name.simple?
    self.left_id = self.right_id = nil
  else
    assign_side_id :left_id=, :left_name
    assign_side_id :right_id=, :right_name
  end
end
clean_patterns() click to toggle source
# File lib/card/name/all.rb, line 101
def clean_patterns
  return unless patterns?

  reset_patterns
  patterns
end
name_to_replace_for_subcard(subcard, new_name) click to toggle source
# File lib/card/name/all.rb, line 121
def name_to_replace_for_subcard subcard, new_name
  # if subcard has a relative name like +C
  # and self is a subcard as well that changed from +B to A+B then
  # +C should change to A+B+C. #replace doesn't work in this case
  # because the old name +B is not a part of +C
  if subcard.name.starts_with_joint? && new_name.parts.first.present?
    "".to_name
  else
    name
  end
end
superize_name(cardname) click to toggle source
# File lib/card/name/all.rb, line 93
def superize_name cardname
  return cardname unless @supercard

  @supercard.subcards.rename key, cardname.key
  update_superleft cardname
  @supercard.name.relative? ? cardname : cardname.absolute_name(@supercard.name)
end
update_cache_key(oldkey) { || ... } click to toggle source
# File lib/card/name/all.rb, line 108
def update_cache_key oldkey
  yield
  was_in_cache = Card.cache.soft.delete oldkey
  Card.write_to_soft_cache self if was_in_cache
end
update_subcard_name(subcard, new_name, name_to_replace) click to toggle source
# File lib/card/name/all.rb, line 114
def update_subcard_name subcard, new_name, name_to_replace
  name_to_replace ||= name_to_replace_for_subcard subcard, new_name
  subcard.name = subcard.name.swap name_to_replace, new_name.s
  # following needed?  shouldn't #name= trigger this?
  subcard.update_subcard_names new_name, name
end