困难的代码包装设计

时间:2013-08-10 01:16:37

标签: ruby git nanoc

我使用静态网站生成器tool to write college curricula构建了nanoc。 Nanoc是一个很好的基于Ruby的包,它作为一个宝石分发。

我安装了gem,并使用“nanoc new”命令创建基本目录结构。在该目录结构中,我编写了一些自定义ruby代码,以及大量的markdown文件来定义我的第一个课程。 Here's the course as it is built

我在上面展示的代码,在git中,对应于该工作的结果,nanoc +我的自定义。还有一个捆绑文件必须运行才能引入我的额外宝石。

让我们将个别课程称为“cosi235a.course”,让我们称之为“nanoc-course”工具。我将把cosi235a.course的作者称为“作者”,我将把“nanoc-course”的维护者称为“我”。

我正在寻求帮助的是一个很好的设计,将nanoc-course与cosi235a.course分离。换句话说,我想将我定制的基于nanoc的工具与一门课程的内容分开。

这样,如果我想为第二门课程设计课程,我可以创建它并仍然提供公共代码的更新。更重要的是,另一位作者可以在他们的网站上创建一个新课程,并为自己使用nanoc-course,并从我对该工具的更新中获益。

我一直在思考这个设计问题而我找不到自己喜欢的想法。到目前为止,这些是一半被烘焙的想法:

  1. 在Git上创建nanoc-courss包含除了所有Markdown,HTML和其他内容文件之外的所有内容。根据nanoc,它们碰巧都存在于名为./content的子目录中。 Git上的目录为空。添加一些Rake任务以创建符号链接到包含cosi235a.course文件的单独目录。通过这种方式,作者可以处理他们的内容文件,并随时对任何更新的nanoc-course进行git拉取。这是一个干净的分离但很笨重。

  2. 让nanoc课程成为与nanoc一起使用的宝石。换句话说,作者安装nanoc,执行gemoc安装(或捆绑安装)nanoc-course并在nanoc的libs中添加一行或两行以合并逻辑。这种分离不太完整,需要作者(不一定是Ruby程序员)来修改代码。此外,它对纳米变化也很脆弱。

  3. 你有什么想法吗?

1 个答案:

答案 0 :(得分:2)

有同样的问题。选项1似乎最明显,但它要求作者理解git的复杂性 - 我可以很容易地看到它出错。

我倾向于修改2,你有一个基于nanoc的自定义gem,但是将它锁定到gemspec中的特定版本。 “课程”只需包含一些基本要素,例如

/内容

/输出

Gemfile< ==包含您的“nanoc-course”宝石

Gemfile.lock的

为课程作者提供模板项目,您只需要教授作者如何使用bundler。