Class: Cardio::Mod

Inherits:
Object show all
Extended by:
ClassMethods
Defined in:
card/lib/cardio/mod.rb,
card/lib/cardio/mod/eat.rb,
card/lib/cardio/mod/sow.rb,
card/lib/cardio/mod/dirs.rb,
card/lib/cardio/mod/loader.rb,
card/lib/cardio/mod/eat/edibles.rb,
card/lib/cardio/mod/modfile_api.rb,
card/lib/cardio/mod/class_methods.rb,
card/lib/cardio/mod/load_strategy.rb,
card/lib/cardio/mod/sow/yaml_dump.rb,
card/lib/cardio/mod/modfile_loader.rb,
card/lib/cardio/mod/module_template.rb,
card/lib/cardio/mod/sow/card_source.rb,
card/lib/cardio/mod/loader/set_loader.rb,
card/lib/cardio/mod/load_strategy/eval.rb,
card/lib/cardio/mod/loader/set_template.rb,
card/lib/cardio/mod/load_strategy/tmp_files.rb,
card/lib/cardio/mod/loader/set_pattern_loader.rb,
card/lib/cardio/mod/load_strategy/set_tmp_files.rb,
card/lib/cardio/mod/load_strategy/pattern_tmp_files.rb,
card/lib/cardio/mod/load_strategy/set_binding_magic.rb

Overview

A Card Mod (short for “module” or “modification”) is a library containing discrete chunk of card functionality. Mods are how the Decko community develops and shares code. If you want to customize a deck in a way that can’t be done on the site itself, try a mod.

The simplest way to add a mod is to run this command in your deck:

card generate mod MOD_NAME

# or, for short:
card g mod MOD_NAME

This will create a directory following the pattern DECK_NAME/mod/MOD_NAME. This directory contains all the specifications of your mod. By default that includes a README.md file and the subdirectories in bold below:

  • assets
    • script - JavaScript, CoffeeScript, etc
    • style - CSS, SCSS, etc
  • config
    • early ruby init files loaded before Card
    • late ruby init files loaded after Card
    • locales i18n yml files
  • data - seed and test data.
  • lib - standard ruby libraries
    • task - rake tasks
  • public - accessible via the web at DECK_URL_ROOT/mod/MOD_NAME/
  • set - the mod’s focal point where card sets are configured
  • set_pattern - (advanced) for adding types of sets.
  • spec - for rspec tests
  • vendor - for external code, especially git submodules

Mods also often contain a .gemspec file to specify the mod as a ruby gem.

Learn more:

  • Card introduces card objects
  • Card::Set explains of how set modules work

Defined Under Namespace

Modules: ClassMethods, ModfileApi Classes: BindingMagic, Dirs, Eat, LoadStrategy, Loader, ModfileLoader, ModuleTemplate, Sow

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ClassMethods

dependencies, dirs, ensure_installed, ensure_uninstalled, fetch, gem_specs, leftover, load, normalize_name

Constructor Details

#initialize(name, path, group:, index:, spec: nil) ⇒ Mod

Returns a new instance of Mod.



47
48
49
50
51
52
53
# File 'card/lib/cardio/mod.rb', line 47

def initialize name, path, group:, index:, spec: nil
  @name = Mod.normalize_name name
  @path = required_path path
  @group = group || :custom
  @index = index
  @spec = spec
end

Instance Attribute Details

#groupObject (readonly)

Returns the value of attribute group.



45
46
47
# File 'card/lib/cardio/mod.rb', line 45

def group
  @group
end

#indexObject (readonly)

Returns the value of attribute index.



45
46
47
# File 'card/lib/cardio/mod.rb', line 45

def index
  @index
end

#nameObject (readonly)

Returns the value of attribute name.



45
46
47
# File 'card/lib/cardio/mod.rb', line 45

def name
  @name
end

#pathObject (readonly)

Returns the value of attribute path.



45
46
47
# File 'card/lib/cardio/mod.rb', line 45

def path
  @path
end

#specObject (readonly)

Returns the value of attribute spec.



45
46
47
# File 'card/lib/cardio/mod.rb', line 45

def spec
  @spec
end

Instance Method Details

#codenameObject



59
60
61
# File 'card/lib/cardio/mod.rb', line 59

def codename
  "mod_#{name}"
end

#ensure_cardObject



76
77
78
79
80
81
82
83
84
# File 'card/lib/cardio/mod.rb', line 76

def ensure_card
  if Card::Codename.exist? codename
    card = Card.fetch codename.to_sym
    card.update type: :mod unless card.type_code == :mod
    card
  else
    Card.create name: mod_card_name, type: :mod, codename: codename
  end
end

#mod_card_nameObject



55
56
57
# File 'card/lib/cardio/mod.rb', line 55

def mod_card_name
  "mod: #{name.tr '_', ' '}"
end

#subpath(*parts, force: false) ⇒ Object



63
64
65
66
67
68
69
# File 'card/lib/cardio/mod.rb', line 63

def subpath *parts, force: false
  path = File.join [@path] + parts
  return path if File.exist? path
  return unless force

  FileUtils.mkdir_p path
end

#tmp_dir(type) ⇒ Object



71
72
73
74
# File 'card/lib/cardio/mod.rb', line 71

def tmp_dir type
  File.join Cardio.paths["tmp/#{type}"].first, @group.to_s,
            "mod#{'%03d' % (@index + 1)}-#{@name}"
end