エクステンション(1⁄2)の続き。分割したほうがよかったかも。残念な英語力ではぴんとこない箇所は英語のままpending。実践もしくは英語力の向上を伴って正しく理解することがあれば、加筆・修正する予定です。この記事は2013/07/17現在のものです。DEVELOPERエクステンションの作り方(original)はじめに(original)シンプルなエクステンションをつくってみましょう。ある商品がセール中であることを示したいとします。商品にセール価格を設定して、”セール商品特集ページ”で表示されるようにしていきます。この例はSpreeの機構で適切なエクステンションをつくるのかをしる非常に良い例です。エクステンションを生成するところから始めてみましょう。simple_salesこれでいくつかのファイルやディレクトリを含む、spree_simple_salesが作成されます。上記のコマンドはエクステンションのディレクトリ内で実行してください。:scale(その内の小数部の桁数)を正しく調整する必要がありいます。endendSpreeアプリケーションにエクステンションを追加(original)エクステンションの開発を続ける前に、作成したSpreeアプリケーションへ追加してみましょう。これで開発中に、実際のSpreeストアでエクステンションがどのように動作するのかわかります。'../spree_simple_sales':pathについては、作成したエクステンションの場所にあわせて適宜調整してください。‘mystore'のロケーションへの相対パスになるようにしてください。spree_simple_sales:installHomeControllerへのアクションの追加(original)’Spree::HomeController’を拡張して、セール中の商品を選択するアクションを追加していきます。endendこれは'sale_price'を持っている商品だけを選択するでしょう。'config/routes.rb'にこのアクションに対応したルートを追加する必要もあります。現在、'variants'には"セール価格"という属性があるのでサンプルデータを更新して少なくとも1商品をセール中にしてみましょう。consoleを使用しておこなう必要があります。次のチュートリアルではDefaceによるオーバーライドを使用して機能的に追加する方法を紹介します。consoleここから選んだ商品にセール価格を設定してみます。手元の環境では以下のコードにある同じ商品ではないこともありますが、あまり気にしないでください。’セール商品特集ページ’に指定の商品を表示することさえできればいいのです。trueビューの作成(original)現在、データベースにはセール価格の商品が少なくとも一つ存在しています。この商品が表示されるようにビューを作っていきましょう。%></div>'http://localhost:3000/sale'へアクセスすると、チュートリアルで'セール価格'を設定した商品がリスト表示されているはずです。価格を見ると正しい価格が表示されていないことに気がつくでしょう。これは次のセクションで簡単に修正できます。Variantsのデコレート(original)'セール価格'を扱うエクステンションを修正してきましょう。endendここではオリジナルのメソッドの’price_in’へ'orig_price_in'という別名をつけてオーバーライドしています。商品のマスタに'セール価格'があれば、その価格を返します。それ以外は元の’price_in’を返します。デコレーターのテスト(original)書いたコードをテストするのにいい方法があります。decoratorは特に注意して書かなければなりません。variant_decorator.rbの1組みのシンプルなユニットテストを書いていきましょう。テストアプリケーションの作成エクステンションは完全なRailsアプリケーションではないので、エクステンションに対してテストするものが必要です。'test_app'というRakeタスクを実行することで、テストを実行する為のセットがspecディレクトリに生成されます。failuresグレート!テストを追加する準備をしましょう。endendエクステンションのバージョン管理(original)異なるバージョンのSpreeでは作成したエクステンションの振る舞いも変わってしまいます。エクステンションが、異なるバージョンのSpreeで動作するようにブランチを作成して活発にメンテナンスして対応したほうがいいでしょう。Spree自体のバージョン付けに従うようにエクステンションのバージョン管理をすることを推奨します。2.0.xへ対応しているのであれば、'2-0-stable'というブランチをつくっておけば、使用する側のユーザにもわかりやすくなります。1.3.xにしか対応していないのであれば、同様に'1-3-stable'ブランチをつくっておきます。Spreeとエクステンションの間に一貫した命名規則を持っていれば戸惑うことは少なくなるでしょう。まとめ(original)このチュートリアルでは、エクスションをインストールする方法と、自分自身で作る方法を学びました。Spreeの開発コンセプトとSpree内部のいくつかの仕組みについてふれることができました。次のパートではこのエクステンションをDefaceによるオーバライドを用いて改善する方法を紹介します。エクステンション(2/2)Tweet関連記事2013-10-14Spreeにカード決済を導入する方法Spreeざんまいの毎日です。seeds.rbをつくってみたgistに上げました。