Class: Cardio::Mod
- Inherits:
-
Object
- Object
- Cardio::Mod
- Extended by:
- ClassMethods
- Defined in:
- lib/cardio/mod.rb,
lib/cardio/mod/eat.rb,
lib/cardio/mod/sow.rb,
lib/cardio/mod/dirs.rb,
lib/cardio/mod/loader.rb,
lib/cardio/mod/eat/edibles.rb,
lib/cardio/mod/modfile_api.rb,
lib/cardio/mod/class_methods.rb,
lib/cardio/mod/load_strategy.rb,
lib/cardio/mod/sow/yaml_dump.rb,
lib/cardio/mod/modfile_loader.rb,
lib/cardio/mod/module_template.rb,
lib/cardio/mod/sow/card_source.rb,
lib/cardio/mod/loader/set_loader.rb,
lib/cardio/mod/load_strategy/eval.rb,
lib/cardio/mod/loader/set_template.rb,
lib/cardio/mod/load_strategy/tmp_files.rb,
lib/cardio/mod/loader/set_pattern_loader.rb,
lib/cardio/mod/load_strategy/set_tmp_files.rb,
lib/cardio/mod/load_strategy/pattern_tmp_files.rb,
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:
-
-
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
-
#group ⇒ Object
readonly
Returns the value of attribute group.
-
#index ⇒ Object
readonly
Returns the value of attribute index.
-
#name ⇒ Object
readonly
Returns the value of attribute name.
-
#path ⇒ Object
readonly
Returns the value of attribute path.
-
#spec ⇒ Object
readonly
Returns the value of attribute spec.
Instance Method Summary collapse
- #codename ⇒ Object
- #ensure_card ⇒ Object
-
#initialize(name, path, group:, index:, spec: nil) ⇒ Mod
constructor
A new instance of Mod.
- #mod_card_name ⇒ Object
- #subpath(*parts, force: false) ⇒ Object
- #tmp_dir(type) ⇒ Object
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 '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
#group ⇒ Object (readonly)
Returns the value of attribute group.
45 46 47 |
# File 'lib/cardio/mod.rb', line 45 def group @group end |
#index ⇒ Object (readonly)
Returns the value of attribute index.
45 46 47 |
# File 'lib/cardio/mod.rb', line 45 def index @index end |
#name ⇒ Object (readonly)
Returns the value of attribute name.
45 46 47 |
# File 'lib/cardio/mod.rb', line 45 def name @name end |
#path ⇒ Object (readonly)
Returns the value of attribute path.
45 46 47 |
# File 'lib/cardio/mod.rb', line 45 def path @path end |
#spec ⇒ Object (readonly)
Returns the value of attribute spec.
45 46 47 |
# File 'lib/cardio/mod.rb', line 45 def spec @spec end |
Instance Method Details
#codename ⇒ Object
59 60 61 |
# File 'lib/cardio/mod.rb', line 59 def codename "mod_#{name}" end |
#ensure_card ⇒ Object
76 77 78 79 80 81 82 83 84 |
# File '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_name ⇒ Object
55 56 57 |
# File '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 '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 '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 |