プログラミング的なSomething

プログラミング的なSomething

ITエンジニア(?)目線で生活・自転車・トレーニング話を綴ります

Ruby

RSpecでのテストの書き方まとめ( & 先日作成したファクトリメソッド試行コードのテスト作成)

テストコード書いてないじゃんって気付いた 昨日作成したファクトリメソッドのテストコード書いてなかったので書きました。 順番逆ですけど大目にみてやってください。 ファクトリメソッドでインスタンス生成をクラス任せにする 早速テストコード RSpecで書…

ファクトリメソッドでインスタンス生成をクラス任せにする

連日のRails学習から一旦離れてファクトリメソッドの実装をしてみた ファクトリメソッドはインスタンス生成をクラスに任せます。ゆえに工場(ファクトリ)メソッドと呼ばれております。 クラス生成を隠蔽するので、結合が疎になってメンテナンス性が向上しま…

Railsでのサインイン・サインアウトの実装

サインインを永続化する サインインを永続化して、サインアウトしたときにセッションを削除するシステムを考えます。 cookieと認証のためのモジュールであるSessionsHelperを用います。 SessionsHelperモジュールをアプリケーションコントローラにインクルー…

RESTfulなルーティングで必要なアクションだけ指定するresourcesのonlyオプション

resourcesのonlyオプション route.rbに以下のように書けばRESTfulなルーティングが自動で割り当てられます。 resources :users でもそんなに要らないじゃん?index,new,create,show,edit,update,destroy全部は要らない場合。 resources :users, :only[:new,:…

Factory Girlを使用してデータベースにデータを読み込ませる

Factory Girl 恥ずかしながら、いままでテストに使用するデータはデータマッパーを使ったスクリプトを作成して対処していました。 Factory Girlでは簡単に登録できるんですね。RSpecを使用する際に親和性が高いみたいです。 何はともあれGemfileを書いてbund…

RailsにおけるValidationの処理をまとめてみた

Validationのお作法をまとめてみました バリデーションの基本的なパターンは存在性、長さ、フォーマット、一意性の確認となります。 整理のため、これら4つの処理をRailsで行う際のお作法をまとめてみます。テストコードも最後に付記しています。 存在性の検…

matchを使ったroute.rbの記載

config/routes.rbの編集 ルーティングの記述は、Railsの流儀に従うと以下のように書き換える必要がある。 get ‘static_pages/help' 例えば、上記のようなルートを書いていると、リンク作成時に都度

パーシャルを用いてコードの重複をなくす

パーシャルの使い方を整理します。 headrerとかfooterとかタグ情報を書くのがとにかく嫌い。重複なんて大嫌いなのでパーシャルを使って重複をなくします。「パーシャル」って言葉でひっかけることができなくて、いままで恥ずかしながら知らない概念でした。 …

RSpecのlet関数を使ってコードの重複を排除する

Ruby on Rails チュートリアル、3章にしてテスト駆動の話が出てくるので初学者が恐れおののいている(だって罵詈雑言が飛んで来るじゃないですか)テストの書き方を学べてとても良いと思います。 というわけで、RSpecの重複を排除するlet関数を書いてみます…

has_manyとbelong_toの関連付け

例によってRuby on Rails チュートリアルです。2章のモデルの関連付けをメモします。 関連付け苦手なので出会ったそばから書き留めておきます。 class User < ActiveRecord::Base attr_accessible :email, :name has_many :microposts end class Micropost <…

Gemfileに記載されているrakeを使用するためのコマンド

例によってRuby on Rails チュートリアル読んでます。 http://railstutorial.jp/ Gemfileに記載されたrakeを使う場面があったのでメモ bundle exec rake db:migrate rakeを実行する前に「bundle exec」を接頭につけます。 その他 bundle exec rake -T db rak…

Ruby on Rails チュートリアルのGitの解説がわかりやすかったので個人的まとめ

普段Git等さわらないので操作をすぐに忘れてしまいがちなので個人的にまとめ。 ブランチの作成 git checkout -b <branch-name> -bオプションを入れれば作成したブランチにcheckoutした状態で作成が済みます。 拡張子の変更 git mv README.rdoc README.md コミット git com</branch-name>…

undef_methodによるブランクスレート

メタプログラミングRubyを再読しています。 P101ページにundef_methodにより__id__や__send__を削除した場合のアラートが紹介されていたが、Ruby1.9.3-p342では若干動作が違っていたので記録。例によってGistです。 __id__がobject_idにかわっていただけで、…

素数判定処理をベンチマークにかけてみた

素数判定の処理をベンチマークにかけてみた。 結果はこんな感じです。 (自作) 0.840000 0.000000 0.840000 ( 0.835207) (ライブラリ) 0.010000 0.000000 0.010000 ( 0.011727)20回くらいの繰り返しであれば自作の方が速かったのですが、大きくすればする程ダ…

素数判定をRubyで書く

学習のお題目として単純な素数判定を書きました。 結果は以下のような感じです。 10 is not prime number 11 37 47 55 is not prime number 2から割り始めて、、、という力技です。 割り切れた時点で割り算の処理を止めています。このメソッドをまわせば1〜1…

再帰関数書いたので記録

def printd(n) if ((n / 10) != 0) printd(n / 10) end putc("#{n % 10}") end printd(123) 再帰関数を書いた。 putcは一文字だけ表示させるメソッド。これまで知らなかったので、まとめられた記事を記載しておきます http://www.skymerica.com/blog/yotsumo…

(追記)Nokogiriで属性値を取得する際の処理を簡便化する

(追記)テストを書きました。Gistに追加しています。動的プロキシの勉強兼、Nokogiriの処理について復習するため題のようなプログラムを書きました。 Nokogiriでは各種属性値が取れますが、それを簡単に指定できれば素敵だなということで作成しました。目標は…

プログラムへの引数について(eachの返り値について)

injectとeachは同等の動作ができるということで書きなおしてみたがハマった。 eachの返り値がinjectを使った値と同じになると思ったがどっこいそう同じには書けない。eachを返り値に使うようなことはないよう気を付けたいですね。

DataMapperのマイグレーション用スクリプトが完成したのでさらす

ツッコミ歓迎です。モデルも合わせて公開します。 まずモデル。 次にマイグレーションスクリプト。 取り込んだデータはSQLiteで保存しています。Select文とschemaです。 sqlite> select * from posts; 1|うんこを流す場所は?|1|2012-08-24T06:50:12+09:00 2…

DataMapper用手動マイグレーションスクリプト

sinatraでDataMapperを扱うにあたり、マイグレーション用スクリプトを作成しました。 用意しておいたcsvファイルを読み込む形式にしてあります。ただ、DataMapper.finalizeの処理ができていないため、belongs_toを指定したテーブルがDBファイルに正常に反映…

Sinatra+DataMapperによるSQLite3の利用

まだまだ勉強中なので途中経過まで。 SQLiteの仕組みを理解できていなかった。sqlite コマンドでコンソールから操作するんですね。sqliteコマンドだけで操作しようとしていたので、.tablesを打ってもテーブルが表示されないところでハマりました。

指定したサイト上のjpgのリンク先を一気に保存するスクリプト

ファイルを保存する作業って案外大変ですよね。というわけでスクリプトを書いてみました。友人から着想を得てから一気に書いたのでかなり粗びきですが、公開公開。 require 'nokogiri' require 'open-uri' require 'date' class Test @ary = Array.new # 指…

回線の工事・故障情報を確認するため、RSSフィードを定期的に取得するスクリプト作ったよ

タイトルの通り作りました。 かなりガチャガチャしてますし、スクリプトの自動実行を仕込まないと動かないなど、まだまだやることはありますが、とりあえず骨子になるスクリプトの紹介。早速のスクリプト。 require 'rss' require 'open-uri' require 'time'…

WAN回線の工事情報や故障情報を一元化したい(RSSフィードの取得)

タイトルの通り、WAN回線の工事情報とか故障情報を一元化するためのスクリプトを書き始めました。 突然のネットワーク断に慌てないよう、情報は一箇所にまとめておきたいものです。ゆくゆくはTwitterBOTで吐き出せるとよさそう、ということで途中経過まで備…

開発環境構築で手間取ったのでその辺をメモ

すごく基本的な過ちをおかしていたのでその辺をメモ。 やりたいこと 何しようとして手間取ったの? →友人が作成しているアプリケーションをローカルで起動させるためにbundle installでコケておりました。bundle installを成功させてrails server叩きたい。 …

rvmで1.9.3-p194をインストールした際のメモ

rvmを使ってRubyの1.9.3-p194をインストールしてみました。 コマンド rvm install 1.9.3-p194 1.9.3-p194をデフォルトで利用できるように設定 rvm use 1.9.3-p194 --default 確認してみる rvm listその結果。 rvm rubies ruby-1.8.6-p420 [ i686 ] ruby-1.8.…

OpenCVを使った画像の顔検出

この土日でOpenCVを使った顔検出を実験してみたのでそのメモです。 環境 ・Ruby(1.9.2) ・sinatra(1.3.1) ・OpenCV(2.3.1) 環境準備 OpenCVとそのライブラリの導入・ソースは以下のサイトを参考にさせていただきました。多謝。macportsを使ってmacにopenCVを…

REXMLでのパース処置アレコレー最終回ー

今までのREXMLでのパース処理の実装をもとに、Livedoor天気情報を取得します。 Livedoor天気情報Livedoor天気情報の仕様にも書いてありますが、パスを指定することで、特定の地域・時間の天気を取得することができます。ただ、今回はREXMLの実装ということで…

REXMLでのパース処理アレコレ−その2−

今回もREXMLを利用したパース処理についてまとめていきます。 やったこと −XMLファイルの生成 −XMLファイルのコピー −XMLの要素を属性でソート以上3点になります。 XMLファイルの生成 XML_output.rb #XMLファイルを生成するスクリプトです require 'rexml/do…

REXMLでのパース処理アレコレ

あけましておめでとうございます。 有用な記事を少しでも。とか生意気なことを年初は思っていましたが、そもそも「書かなきゃ忘れる!」という自身の性質のためにオープンしたブログですので、雑文気味ですが公開公開。 やること 現在、WebAPIいじってなにが…