module Cardio::Mod::ClassMethods

class methods for Cardio::Mod

Public Instance Methods

dependencies(name, nickname=true) click to toggle source
# File lib/cardio/mod/class_methods.rb, line 53
def dependencies name, nickname=true
  return unless (spec = gem_spec name, nickname)

  deps = spec&.dependencies || []
  dep_names = deps.map { |dep| dependencies dep.name, false }
  (dep_names << spec).flatten.compact.uniq
end
dirs() click to toggle source

@return an array of Rails::Path objects

# File lib/cardio/mod/class_methods.rb, line 18
def dirs
  @dirs ||= Mod::Dirs.new Cardio.paths["mod"].existent
end
ensure_installed() click to toggle source
# File lib/cardio/mod/class_methods.rb, line 42
def ensure_installed
  Card::Auth.as_bot do
    Card::Cache.reset_all
    puts "installing card mods".green
    ensure_asset_lists do |hash|
      puts "ensuring mod and asset cards"
      Cardio.mods.each { |mod| ensure_asset_cards mod.ensure_card, hash }
    end
  end
end
ensure_uninstalled() click to toggle source
# File lib/cardio/mod/class_methods.rb, line 34
def ensure_uninstalled
  leftover.each do |mod_card|
    Card::Auth.as_bot do
      delete_auto_installed_cards mod_card
    end
  end
end
fetch(mod_name) click to toggle source
# File lib/cardio/mod/class_methods.rb, line 22
def fetch mod_name
  dirs.fetch_mod mod_name
end
gem_specs() click to toggle source

@return [Hash] in the form{ modname(String) => Gem::Specification }

# File lib/cardio/mod/class_methods.rb, line 62
def gem_specs
  Bundler.definition.specs.each_with_object({}) do |gem_spec, h|
    h[gem_spec.name] = gem_spec if gem_spec? gem_spec
  end
end
leftover() click to toggle source
# File lib/cardio/mod/class_methods.rb, line 30
def leftover
  Card.search(type: :mod).reject { |mod_card| fetch mod_card.modname }
end
load() click to toggle source
# File lib/cardio/mod/class_methods.rb, line 7
def load
  return if ENV["CARD_MODS"] == "none"

  if Card.take
    Loader.load_mods
  else
    Rails.logger.warn "empty database"
  end
end
normalize_name(name) click to toggle source
# File lib/cardio/mod/class_methods.rb, line 26
def normalize_name name
  name.to_s.sub(/^card-mod-/, "")
end

Private Instance Methods

auto_installed_cards(mod_card) click to toggle source
# File lib/cardio/mod/class_methods.rb, line 95
def auto_installed_cards mod_card
  [mod_card].tap do |cards|
    mod_card.each_descendant do |card|
      cards.unshift card
    end
  end
end
delete_auto_installed_cards(mod_card) click to toggle source

it would be nice if this were easier…

# File lib/cardio/mod/class_methods.rb, line 88
def delete_auto_installed_cards mod_card
  auto_installed_cards(mod_card).each do |card|
    card.codename = nil
    card.delete!
  end
end
ensure_asset_cards(modcard, hash) click to toggle source
# File lib/cardio/mod/class_methods.rb, line 70
def ensure_asset_cards modcard, hash
  %i[script style].each do |asset_type|
    hash[asset_type] << modcard.ensure_mod_asset_card(asset_type)
  end
end
ensure_asset_lists() { |hash| ... } click to toggle source
# File lib/cardio/mod/class_methods.rb, line 76
def ensure_asset_lists
  hash = { script: [], style: [] }
  yield hash
  # puts "updating asset lists"
  Card[:all, :script].update! content: hash[:script].compact
  Card::Auth.as_bot # FIXME: should not be necessary
  Card[:style_mods].update! content: hash[:style].compact
  # puts "refreshing assets"
  Card::Assets.refresh force: true
end
gem_spec(name, nickname=true) click to toggle source
# File lib/cardio/mod/class_methods.rb, line 103
def gem_spec name, nickname=true
  name = "card-mod-#{name}" if nickname && !name.match?(/^card-mod/)
  spec = Gem::Specification.stubs_for(name)&.first
  gem_spec?(spec) ? spec : nil
end
gem_spec?(spec) click to toggle source

@return [True/False]

# File lib/cardio/mod/class_methods.rb, line 110
def gem_spec? spec
  return unless spec

  spec.name.match?(/^card-mod-/) || spec.metadata["card-mod"].present?
end