module Foo
  module Helpers
    def bar
      'unk'
    end
  end
end

こういうHelpersを

helpers do
  include Foo::Helpers
end

こういう風に使ってた場合。

RSpec.configure do |config|
  config.include Foo::Helpers
end
describe Foo::Helpers do
  context 'bar' do
    it 'should return unk' do
      bar.should eql('unk')
    end
  end
end

Spec::Runner.configでincludeするとテスト出来る。

LokkaはSinatraベースなので同じようにHelpersのテスト書ける。でもRspecややこしいな。config.includeのとことか。とTest::Unit, Shoulda信者が申しております。

Lokkathon #4 : ATND

LokkathonはLokka + Hack + Marathonです。 Lokkaに関する作業をモクモクとするイベントです。会場は用意されますが、Lingrのチャットのみでの参加も可能です。(むしろ推奨)

予定通り毎週やってきます。スゴイ捗るんですが、スゴク疲れたので3時間から2時間にしました。あと、腹が減るので飯食ってからもしくは食いながらがいいと思います。

時間中はLingrにみんな常駐しますので何か言いたいとか聞きたいなどあれば是非。

Lokkathon #3 : ATND

LokkathonはLokka + Hack + Marathonです。 Lokkaに関する作業をモクモクとするイベントです。会場は用意されますが、Lingrのチャットのみでの参加も可能です。(むしろ推奨)

もう明日ですが、Lokkathon #3をやりたいと思います。毎週水曜日のこの時間にやってく予定です。リモート参加前提で、一応場所もあるよという感じです。というか毎週3時間はLokkaの作業をする!という自分に対する縛りです・・・。

単にLokka使ってみたいけどよくわかんないので教えて欲しいとかでも全然OKです。

メーリングリストの方に投稿したので興味がある方がいらっしゃればメーリングリストに参加してもらえると嬉しいです!

改めてLokkaでやろうとしてることまとめ - lokka-ja | Google グループ

Heroku-ja Meetup #1 : ATND

Heroku-ja Meetup #1 - 写真 - Google+

昨日行われたHeroku-ja Meetup #1でPaaS向けCMS LokkaというLTをさせていただきました。

正にHeroku三昧の時間で楽しかったです。会場のリクルート メディアテクノロジーラボ MTL Cafeも設備が整っていて、発表するのにとてもやり易かったです。Herokuオフィスの雰囲気や皆さんがどうやってHerokuを使っているのかというお話がとても為になりました。

Lokkaについてもruby1.9.2対応してくださった@tyabeさん(Herokuのデフォルトが1.9.2に変わって焦ったけど@tyabeさんのお陰でLokkaが動いてて良かった)に会えたり、@yagi_さんと次何実装するか話したり、Herokuユーザーの方々に宣伝できたりで行って良かったです。

RubyKaigi2011終わったらまたLokkathonやりたいです。

主催の@junyaさん、キャンセル待ちから運営側に回ることで滑り込むという裏技を使いつつ、ピザでみんな手がベタベタになるのに気を効かせて速攻ティッシュを買ってくるなどの名運営っぷりを見せた@rono23さんなどなど、皆さんありがとうございました。

殆ど同じと言って良いくらい使い勝手がHerokuと似ているPaaSのDuostackでもLokkaが動くようになりました。

% gem install duostack
% git clone git://github.com/komagata/lokka.git
% lokka
% duostack create foobarbuz
% git push duostack master
% open http://foobarbuz.duostack.net

Duostackでも動くようにしたと言っても実際は2行足しただけだった。

# Gemfile
group :production do	
   gem 'dm-postgres-adapter', '1.1.0'	
+  gem 'dm-mysql-adapter', '1.1.0'	
end
# config.yml
production:
-  dsn: <%= ENV['DATABASE_URL'] %>
+  dsn: <%= ENV['DATABASE_URL'] || ENV['DUOSTACK_DB_MYSQL'] %>
development:
   dsn: sqlite3://<%= root %>/db/development.sqlite3

Commit f62862d491e5b2dce9afde9c82e6e2c7640ac60f to komagata/lokka - GitHub

これはcoolだ。

HerokuではpostgresだけどDuostackではmysqlで動きます。

% git push heroku master
% git push duostack master

こんな感じで同じローカルリポジトリで二つのPaaSを使い分けるという荒業も出来る。両方AWSベースらしいから障害耐性という面では意味無いけど。

datamapper(dm-core) 1.1.0では0.10.0からdeprecatedになっていた明示的なINの利用が出来なくなりました。明示的なINと暗黙的なINって何なのかというと下記の様な違いです。

# implicit
Foo.all(:id.in => [1, 2, 3])

# explicit
Foo.all(:id => [1, 2, 3])

対象がArrayだと自動的にINになるんですね。1.0.2で使ってたけどdeprecatedの表示は出てなかった気がするけどなあ。ヤラレタ。

つい先日、LokkaにもCI環境が整ったのでデグレしないようにテスト駆動バグ修正していくことにしました。

RuntimeError - explicit use of 'in' operator is deprecated - Issues - komagata/lokka - GitHub

考えても答えが出ないので書いてみます。

Lokkaにプラグインのインストーラー機構が欲しい。

最近のWordPressとかJenkinsとかって管理画面からプラグイン検索して簡単にインストールできるじゃない?あれいいなーと。でもLokkaはPaaS用がメインだからファイルシステムに書きこむ前提のあの仕組みが使えない。どうしよう?という話。

DBにプラグインを保存する?

PaaS用のソフトは全く別の考え方にして、ローカルからPaaSを操ることを前提だから、ローカルにプラグイン持ってきてからPaaSにアップするみたいな感じにする?

皆さんだったらどうします?

LokkaのHerokuへのインストールのスクリーンキャストも作ってみました。

@pwimさん監修で英語直した。

[DataMapper] Re: Deprecate Warnings on dm-do-adapter

This deprecation warning is silenced in DataMapper 1.1.1 which will be released within the next few days.

Cheers

DataObjects::URI.new with arguments is deprecated, use a Hash of URI components

dm-do-adapterで出る上記のdeprecatedは次の1.1.1で直るそうです。Lokkaでもログにでちゃうけどしばらくの辛抱かな。