diff --git a/lib/sapling/utility.rb b/lib/sapling/utility.rb new file mode 100644 index 0000000..12b13f1 --- /dev/null +++ b/lib/sapling/utility.rb @@ -0,0 +1,59 @@ +# Utility functionality for all of Sapling to reference + +# Constants + +# A series of constants for handing a brand new tree. The skeleton tree provides +# a very basic introduction to Sapling. More details can be found in the +# documentation. + +# The default trunk text of a new tree +SKELE_TRUNK_TEXT = "Welcome to the Sapling Editor. For details, please see the +documentation!" + +# The default first-branch text of a new tree +SKELE_BRANCH_TEXT = "The first branch is always shown by default. It should act +as the introduction to the story. From here, the user enters your world!" + +# The default first-leaf text of the first branch of a new tree. The leaf points +# to it's own branch. The only way out of the program is to either force-quit or +# reply with option 0. +SKELE_LEAF_TEXT = "Each branch can have any number of leaves, which represent +the options a user has on that branch. Each leaf points to another branch, or +can point to branch 0 to immediately exit." + +# The final tree +SKELETON_TREE = [ + {"trunk" => "#{SKELE_TRUNK_TEXT}"}, + {"branch" => { + "number" => 1, + "text" => "#{SKELE_BRANCH_TEXT}", + "leaf" => [{ + "text" => "#{SKELE_LEAF_TEXT}", + "branch" => 1 + }] + } + } +] + + +# Verify that a file is a dialogue tree file. +# +# @param file [File] The provided file +# @return [Boolean] True if the file is a tree; false otherwise +def verify_tree(file) + results = [] + begin + tree = YAML.load_file(file) + results << tree[0].keys.include?("trunk") + results << tree[1]["branch"].keys.include?("number") + results << tree[1]["branch"].keys.include?("text") + results << tree[1]["branch"].keys.include?("leaf") + rescue + puts "Sorry chummer, I don't think this is a tree." + puts "Verify your YAML file is formatted properly." + results << false + end + + results.include?(false) ? false : true + +end