Module: Textus::Manifest::Entry::Publish
- Defined in:
- lib/textus/manifest/entry/publish.rb,
lib/textus/manifest/entry/publish/each.rb,
lib/textus/manifest/entry/publish/mode.rb,
lib/textus/manifest/entry/publish/none.rb,
lib/textus/manifest/entry/publish/tree.rb,
lib/textus/manifest/entry/publish/each_dir.rb,
lib/textus/manifest/entry/publish/template.rb,
lib/textus/manifest/entry/publish/to_paths.rb,
lib/textus/manifest/entry/publish/each_file.rb,
lib/textus/manifest/entry/publish/subtree_mirror.rb
Overview
ADR 0049: the publish design is a three-key concept (ADR 0047 table) realized as one resolved sum type. Each directory entry resolves, once, to one Publish::* mode that owns its publish algorithm — no nil-cascade, no pairwise exclusivity guards, one shared subtree mirror.
None — nothing to publish
ToPaths — publish_to: 1 stored file -> N fixed repo paths
EachFile — publish_each (file leaves): 1 leaf file -> 1 templated path
EachDir — publish_each + index_filename: 1 leaf subtree -> 1 templated dir
Tree — publish_tree: whole entry subtree -> 1 dir, no keys
Defined Under Namespace
Modules: Template Classes: Each, EachDir, EachFile, Mode, None, SubtreeMirror, ToPaths, Tree
Class Method Summary collapse
-
.resolve(entry) ⇒ Object
Resolve an entry to its single publish mode.
Class Method Details
.resolve(entry) ⇒ Object
Resolve an entry to its single publish mode. Raises one UsageError if more than one of publish_each, publish_tree is set —exclusivity is structural here, not four scattered pairwise guards.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/textus/manifest/entry/publish.rb', line 18 def self.resolve(entry) set = [] set << "publish_to" unless Array(entry.publish_to).empty? set << "publish_each" unless entry.publish_each.nil? set << "publish_tree" unless entry.publish_tree.nil? if set.length > 1 raise Textus::UsageError.new( "entry '#{entry.key}': #{set.join(", ")} are mutually exclusive — an entry publishes exactly one way", ) end mode_for(entry, set.first) end |