Sha256: 2ee08cf2221b797e873a3a5b1549d55f5fb3453f656ea2e0d97a635f321f7b6d

Contents?: true

Size: 1.54 KB

Versions: 6

Compression:

Stored size: 1.54 KB

Contents

module ClassMethods
  def default_type_id
    @@default_type_id ||= Card[:all].fetch(trait: :default).type_id
  end
end

def type_card
  return if type_id.nil?
  Card.quick_fetch type_id.to_i
end

def type_code
  Card::Codename[type_id.to_i]
end

def type_name
  type_card.try :name
end

def type_name_or_default
  type_card.try(:name) || Card.quick_fetch(Card.default_type_id).name
end

def type_cardname
  type_card.try :cardname
end

def type= type_name
  self.type_id = Card.fetch_id type_name
end

def get_type_id_from_structure
  return unless name && (t = template)
  reset_patterns # still necessary even with new template handling?
  t.type_id
end

event :validate_type_change, before: :approve, on: :update, changed: :type_id do
  if (c = dup) && c.action == :create && !c.valid?
    errors.add :type, "of #{ name } can't be changed; errors creating new " \
                      "#{ type_id }: #{ c.errors.full_messages * ', ' }"
  end
end

event :validate_type, before: :approve, changed: :type_id do
  if !type_name
    errors.add :type, 'No such type'
  end

  if (rt = structure) && rt.assigns_type? && type_id != rt.type_id
    errors.add :type, "can't be changed because #{name} is hard templated " \
                      "to #{rt.type_name}"
  end
end

event :reset_type_specific_fields, after: :store do
  wql = { left: { left_id: type_id },
          right: { codename: 'type_plus_right' }
        }
  wql_comment = "sets with a type_plus_right rule for #{name}"

  Auth.as_bot do
    Card.search(wql, wql_comment).each &:reset_set_patterns
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
card-1.17.4 mod/01_core/set/all/type.rb
card-1.17.3 mod/01_core/set/all/type.rb
card-1.17.2 mod/01_core/set/all/type.rb
card-1.17.1 mod/01_core/set/all/type.rb
card-1.17.0 mod/01_core/set/all/type.rb
card-1.16.15 mod/01_core/set/all/type.rb