frankendoc
Version:
bringing documents alive
85 lines (63 loc) • 1.89 kB
text/coffeescript
fs = require 'fs'
path = require 'path'
_ = require 'underscore'
{ defaults } = require '../settings'
argv = {}
@read = ->
global.settings = {}
read_argv()
merge settings, defaults
set_root_folder()
merge_user_settings()
merge settings, argv
###
# Command line
###
read_argv = ->
usage = '''
Usage: frank [docs] [options]
Docs: [docs.root\\[docs.type]]
shortcut to set root & type properties in settings.docs
--docs.root docs root folder [.]
--docs.type extension of doc files [*.txt]
Options:
these become settings properties
-h, --help output usage information
-r, --report <name> select report output [console]
-o, --only <pattern> only run docs matching <pattern>
'''
argv = require('optimist')
.alias('h', 'help')
.alias('r', 'report')
.alias('o', 'only')
.argv
if argv.help?
console.log usage
process.exit()
###
# Root Folder
###
set_root_folder = ->
return unless argv._.length
settings.docs.root = argv._[0]
ext = path.extname settings.docs.root
if ext.length
settings.docs.root = path.dirname settings.docs.root
settings.docs.type = ext
settings.code.root = settings.docs.root
###
# User settings
###
merge_user_settings = ->
return unless has_user_settings()
merge settings, user_settings()
user_settings_file = -> path.resolve settings.docs.root, 'settings.coffee'
has_user_settings = -> fs.existsSync user_settings_file()
user_settings = -> require(user_settings_file()).settings
merge = (one, another) ->
for property, value of another
if is_object(value) and is_object(one[property])
merge one[property], value
else
one[property] = value
is_object = (o) -> toString.call(o) is '[object Object]'