静的サイト ジェネレーターnanocを使用して、大学のカリキュラムを作成するためのツールを作成しました。Nanoc は素晴らしい Ruby ベースのパッケージで、gem として配布されています。
gem をインストールし、「nanoc new」コマンドを使用して基本的なディレクトリ構造を作成しました。そのディレクトリ構造内に、いくつかのカスタム Ruby コードと、最初のコースを定義するための多数のマークダウン ファイルを作成しました。コースはこんな感じです。
上に示した git のコードは、その作業の結果である nanoc + 私のカスタマイズに対応しています。追加の gem を取り込むために実行する必要があるバンドラー ファイルもあります。
個々のコースを「cosi235a.course」と呼び、ツールを「nanoc-course」と呼びましょう。cosi235a.course の作者を「作者」と呼び、「nanoc-course」のメンテナーを「私」と呼びます。
私が助けを求めているのは、cosi235a.course から nanoc-course を分離するための優れた設計です。つまり、カスタマイズした nanoc ベースのツールを 1 つのコースのコンテンツから分離したいと考えています。
そうすれば、2 番目のコースのカリキュラムを設計したい場合に、それを作成しながら、共通コードの更新を取り込むことができます。それ以上に、別の作成者が自分のサイトで新しいコースを作成し、自分自身で nanoc-course を使用して、私がツールに加えた更新の恩恵を受けることができます。
私はこのデザインの問題を頭の中でひっくり返してきましたが、気に入ったアイデアが見つかりません。これまでのところ、半分焼き上がったアイデアは次のとおりです。
Git 上の nanoc-courses に、すべての Markdown、HTML、およびその他のコンテンツ ファイルを除くすべてを含めます。nanoc によると、それらはたまたま ./content というサブディレクトリに存在します。ディレクトリは Git では空です。いくつかの Rake タスクを追加して、cosi235a.course ファイルを含む別のディレクトリへのシンボリック リンクを作成します。このようにして、作成者はコンテンツ ファイルで作業し、いつでも nanoc-course への更新に対して git pull を実行できます。これはきれいな分離ですが、扱いにくいです。
nanoc コースを nanoc で使用する gem にします。つまり、作成者は nanoc をインストールし、nanoc-course の gem インストール (または bundler インストール) を実行し、nanoc の libs に 1 行または 2 行を追加してロジックを組み込みます。この分離は完全ではなく、作成者 (Ruby プログラマーである必要はありません) がコードを変更する必要があります。また、nanoc の変更に関しても脆弱です。
あなたはなにか考えはありますか?