- はじめに
— 作ったもの
— なんで作ったのか - 実装メモ
— ActiveRecord すごいなあ
— Minitest の setup と teardown - おわり
— やっと…
— 頑張ったところ
はじめに
作ったもの
github.com
なんで作ったのか
データベースの検証にあたり, 実際のアプリケーションからデータベースの書き込み、更新、削除する状況を用意したかったので.
実装メモ
ActiveRecord すごいなあ
自分で 1 bit もデータベースを意識した実装 (データベースへの接続ハンドリングとか SQL とか)を書かなくても良いところに驚いた.
models/topic.rb を以下のように.
require 'active_record' require 'mysql2' require 'sqlite3' ActiveRecord::Base.configurations = YAML.load_file('database.yml') ActiveRecord::Base.establish_connection(ENV['ENV'].to_sym) class Topic < ActiveRecord::Base end
これを書いて, アプリケーションに require するだけ.
... require './models/topics' get '/topics' do content_type :json, :charset => 'utf-8' params['limit'] == nil ? limit = 10 : limit = params['limit'] topics = Topic.order("created_at DESC").limit(limit) topics.to_json(:root => false) end ...
テーブルにデータを書き込むのは, 以下のように Topic クラスのインスタンス作ってからのテーブルアトリビュート名のインスタンスメソッドを呼び出して、最後に save メソッドを呼ぶだけ.
... topic = Topic.new topic.title = title topic.description = description topic.save ...
なんということでしょう…
このあたりの実装については, メタプログラミング Ruby に書かれているので改めて読んでみたい.
www.oreilly.co.jp
Minitest の setup と teardown
setup と teardown はテストケース毎に呼ばれるので注意する…
require 'minitest/autorun' class SampleTest < MiniTest::Unit::TestCase def setup p 'setup' end def teardown p 'teardown' end def test_foo assert_equal 'foo', 'foo' end def test_bar assert_equal 'bar', 'bar' end end
実行すると以下のように.
$ bundle exec ruby test/sample_test.rb MiniTest::Unit::TestCase is now Minitest::Test. From test/sample_test.rb:3:in `<main>' Run options: --seed 5712 # Running: "setup" "teardown" ."setup" "teardown" . Finished in 0.001742s, 1147.8691 runs/s, 1147.8691 assertions/s. 2 runs, 2 assertions, 0 failures, 0 errors, 0 skips
ふむふむ.
おわり
やっと…
データベースの検証を始めることが出来る…
頑張ったところ
いつもなら、挫折してしまうんだけど…インテグレーションテストを追加したところ.
以上。
元記事はこちら
「Sinatra + ActiveRecord + SQLite3 でシンプルな RESTFul API サーバー (っぽいもの) を作った」