Class: Card::Mod::Dirs
- Inherits:
-
Array
- Object
- Array
- Card::Mod::Dirs
- Defined in:
- lib/card/mod/dirs.rb
Overview
Dirs objects are used to manage the load paths for card mods. Mods can be loaded as gems and by using directories with mod subdirectories.
Gemfile A mod gem needs a metadata attribute with { "card-mod" => "the_mod_name" } or the name has to start with "card-mod-". Then you can just add it to your Gemfile. Otherwise it won't be recognized as mod.
mod directory Give a path to a directory with mods. The mods will be loaded in alphabetical order. To change the load order you can add number prefixes to the mod names (like "01_this_first") or add a Modfile. In the Modfile you list all the mods you want to be loaded from that directory in load order with a preceding "mod" command (similar to a Gemfile). The mods are expected in subdirectories with the mod names.
Example for a mod directory: # my_mod/Modfile mod "twitter" mod "cache"
# directory structure my_mods/ Modfile cache/ set/ all/ my_cache.rb twitter/ set/ type/ basic.rb set_pattern/ my_pattern.rb
Dir checks always for gems. You can initialize an Dirs object with an additional array of paths to card mod directories.
Instance Attribute Summary collapse
-
#mods ⇒ Object
readonly
Returns the value of attribute mods.
Instance Method Summary collapse
-
#add_path(mod_name, path = nil) ⇒ Object
(also: #mod)
Add a mod to mod load paths.
-
#each(type = nil) ⇒ Object
Iterate over each mod directory.
- #each_tmp(type) ⇒ Object
- #each_with_tmp(type = nil) ⇒ Object
-
#initialize(mod_paths = []) ⇒ Dirs
constructor
A new instance of Dirs.
-
#path(mod_name) ⇒ Object
The path to mod
mod_name
.
Constructor Details
#initialize(mod_paths = []) ⇒ Dirs
Returns a new instance of Dirs.
55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/card/mod/dirs.rb', line 55 def initialize mod_paths=[] @mods = [] @paths = {} mod_paths = Array(mod_paths) mod_paths.each do |mp| @current_path = mp load_from_modfile || load_from_dir end load_from_gemfile super() @mods.each do |mod_name| self << @paths[mod_name] end end |
Instance Attribute Details
#mods ⇒ Object (readonly)
Returns the value of attribute mods.
52 53 54 |
# File 'lib/card/mod/dirs.rb', line 52 def mods @mods end |
Instance Method Details
#add_path(mod_name, path = nil) ⇒ Object Also known as: mod
Add a mod to mod load paths
71 72 73 74 75 76 77 78 79 |
# File 'lib/card/mod/dirs.rb', line 71 def add_path mod_name, path=nil if @mods.include? mod_name raise Error, "name conflict: mod with name \"#{mod_name}\" already loaded" end @mods << mod_name path ||= File.join @current_path, mod_name @paths[mod_name] = path end |
#each(type = nil) ⇒ Object
Iterate over each mod directory
92 93 94 95 96 97 98 |
# File 'lib/card/mod/dirs.rb', line 92 def each type=nil super() do |path| dirname = type ? File.join(path, type.to_s) : path next unless Dir.exist? dirname yield dirname end end |
#each_tmp(type) ⇒ Object
100 101 102 103 104 105 106 |
# File 'lib/card/mod/dirs.rb', line 100 def each_tmp type @mods.each do |mod| path = tmp_dir mod, type next unless Dir.exist? path yield path end end |
#each_with_tmp(type = nil) ⇒ Object
108 109 110 111 112 113 114 |
# File 'lib/card/mod/dirs.rb', line 108 def each_with_tmp type=nil @mods.each do |mod| dirname = type ? File.join(@paths[mod], type.to_s) : @paths[mod] next unless Dir.exist? dirname yield dirname, tmp_dir(mod, type) end end |
#path(mod_name) ⇒ Object
Returns the path to mod mod_name
.
85 86 87 |
# File 'lib/card/mod/dirs.rb', line 85 def path mod_name @paths[mod_name] end |