Ruby

LTSV ロガーを自作して Rails アプリで使ってみた

WEB+DB PRESS Vol.74 の LTSV 特集を読んで LTSV 熱が高まったので、Ruby 用の LTSV ロガーを作って、Rails アプリに組み込んでみた。 tnakamura/logger-ltsv tnakamura/rack-ltsvlogger LTSV フォーマットでログを出力するライブラリは既にいろんな人が公開…

Rails 本体で特定のパスに IP アドレス制限をかける方法

RailsAdmin で Web サービスの管理ページを実装しているんだけど、公開するにあたって、管理ページに誰でもアクセスできるのはマズイ。そこでまず考えるのは、管理ページに IP アドレスの制限をかけること。 ただ、今回は Heroku を使っているので、Apache …

モデル間のアソシエーションの情報を取得する方法

belongs_to や has_many で宣言した、 モデル間のアソシエーションの情報を取得するには、 ActionRecord::Reflection の reflect_on_all_associations メソッドを使えばいい。 ActiveRecord::Base は ActiveRecord::Reflection を include しているので、 モ…

Rails で JavaScript を国際化する

はじめに Rails で JavaScript を国際化するには、『i18n-js』という gem を使う。 fnando/i18n-js 自分が作っている Web アプリでそこまでやる必要性は無いかもしれないけど、 国際化せずに直接 HTML や JavaScript のメッセージに日本語を書き込むのは、何…

AngularJS のルーティング機能を試してみた

AngularJS を使って Single Page Application を作成するなら、おそらく避けて通れないのがルーティング機能。例えば一覧と編集でビューを切り替えたい場合、ルーティング機能を使ってコントローラーとテンプレートを切り替えて描画する、はず。先日作成した…

AngularJS で Web API を呼び出す

AngularJS で Web API を呼び出すのに使う $resource が、ドキュメントを読んだだけじゃイマイチ分からなかったんで、簡単なサンプルを書いてみた。まず、呼び出す対象の Web API は Sinatra でさくっと作成。 # coding: utf-8 require "sinatra" require "j…

Ruby で RSS を作成する方法

標準ライブラリの RSS::Maker を使うのが手っ取り早い。 # coding: utf-8 require "rss/maker" FEED_LINK = "http://d.hatena.ne.jp/griefowrker" def sample_feed RSS::Maker.make("2.0") do |rss| rss.channel.title = "present" rss.channel.description …

TracLightning移行用データを出力するスクリプトのメモ

TracLightning を動かしているサーバーが なので、新しいサーバーに移行することになった。当然、Subversion の履歴や Trac のチケットも移行しないといけない。手作業で trac-admin や svnadmin をたたくなんてやってられないので、Ruby で Trac のデータを…

PublicActivity を使って GitHub の News Feed みたいな機能を実装したメモ

GitHub の News Feed みたいな機能を実装するのに、今まで TimelineFu を使っていたけど、GitHub のコミットログを見たら2年前から開発が滞っているみたい。 Rails 4 が出ても対応なんて望めそうもないので、Ruby Toolbox で TimelineFu の次に人気の Publi…

Web API のレスポンスからクラスのソースコードを生成してみた

外部の Web API を呼び出して取得した JSON を格納するクラスをいちいち定義するのが面倒だったんだけど、つい先日閃いた。「Web API のレスポンスのボディは JSON なんだから、その JSON をもとにソースコードを生成すればいいじゃないか」ってね。Ruby で…

Koala を使って Facebook の Graph API を呼び出してみた

OmniAuth Facebook を使って Facebook アカウントで認証できるようにはなったけど、ユーザーの情報や友人の情報を取得するには Graph API を呼び出さないといけない。OmniAuth Facebook はそこまで面倒みてくれないので、Graph API クライアントライブラリを…

Devise + OmniAuth + OmniAuth Facebookで Facebook 認証

はじめに Devise を使って実装した認証機能を、Facebook の OAuth を使ったものに変更したい。そこで OmniAuth と OminiAuth Facebook を導入して、認証機能を修正してみた。OmniAuth の Wiki 通りにやれば簡単にいくと思っていたら、ちょっと躓いたので、手…

外部に HTTP アクセスする機能の単体テストで WebMock 使ってみた

ブログの Feed をダウンロードする機能の単体テストで、いちいち本物の Feed にアクセスしたくない。テスト遅くなるし、Feed 更新されたらテスト結果変わっちゃうし。こういうときはスタブやモックの出番。WebMock という gem を使うことにした。 bblimke/we…

Evergreen を導入したばかりだけど Konacha に移行した

先日 Evergreen を導入したけど Evergreen は今メンテされてないってコメントで教えてもらった。確かに、README よく見たら書いてあるし…。完全に見落としてた。不覚。README のリンク先、Google グループのスレッドでは Konacha っていう Rails エンジンが…

Evergreen で Rails アプリの JavaScript を単体テストする

はじめに Rails アプリの JavaScript のテストは capybara(+capybara-webkit) を使えば一応できるけど、統合テストなのがね…。統合テストもちゃんと書くけど、やりたいのは JavaScript の単体テストなのに。 そこで Evergreen そんな中で最近知ったのが Ever…

ActiveRecordでテーブルの情報を取得する方法

Railsエンジンを作ってるとテーブル名や列情報を取得したいときがある。Railsアプリを作ってるときはあんまり無いけど。そんなとき用に、ActiveRecord にはテーブルの情報を取得するためのクラスメソッドが用意されている。テーブル名なら table_name、列情…

Subversion リポジトリを更新してビルドを実行する Rakefile 書いてみた

Ruby を Rails アプリ開発だけに使うのはもったいない。刺身タンポポ作業は Ruby でスクリプト書いてどんどん自動化しないと。というわけで、Ruby で Subversion のリポジトリを更新して、プロジェクトをビルドする作業を自動化してみた。Rake ファイルだけ…

Rails の Application Template を使ってアプリ新規作成時の刺身タンポポ作業を自動化

rails コマンドにこんな便利機能があったなんて…っ!qiita.comRails アプリを新規作成するとき、決まって次の作業をやっている。 rspec_rails インストール factory_girl_rails インストール Devise インストール ユーザー作成 管理ユーザー作成 RailsAdmin …

非同期処理のために DelayedJob を導入したメモ

メールの送信やランキング集計といった、時間がかかる(かもしれない)処理をバックグラウンドで実行したいので、手軽に導入できそうな DelayedJob を試してみた。 collectiveidea/delayed_job · GitHub DelayedJob をインストール Gemfile に gem 'delayed_jo…

Windows マシンで現在使っている RubyGems メモ

Windows では RailsInstaller を使ってインストールしたから、追加でインストールした gem をリストアップしておく。 RailsInstaller 一式 debugger awesome_print simplecov simplecov-rcov sinatra warden rspec factory_girl rspec-rails factory_girl_ra…

Fiber を使って Enumerable#lazy を再発明してみた

Ruby2.0 で追加されると噂の Enumerable#lazy は、Ruby で遅延リストが使えるようになる、個人的に待望の機能。map や select をメソッドチェーンしたとき、何度もループをぶん回すのが不満だったからなぁ。Enumerable#lazy は以前ちらっとソースコードを見…

acts_as_taggable_on でユーザーごとにタグを設定する方法

タグをユーザーごとに管理したいんだけど、acts_as_taggable_on では出来ないんだろうな、って勝手に思い込んでいたら、ReadMe に方法書いてあった。英語だからって拒否反応起こしてないで、ちゃんと ReadMe ぐらい読んでおけよ、自分。ReadMe に書いてある…

認証に Devise を使っている Rails アプリの Request Specs の書き方

認証に Devise を使っている Rails アプリ の Request Specs の書き方をネットで調べたら、ヒットしたのは Request Specs + Capybara の情報ばかりだった。今 Rails で作っているのは Web API だから、Capybara は要らないんだよな。Request Specs だけでい…

Ruby で HTTP サーバーを起動するワンライナー

RequireJS で遊んでいるんだけど、RequireJS では HTTP GET で依存しているモジュールを取得するから、デバッグするにも HTTP サーバーを起動しないといけない。このためだけに、HTTP サーバーをインストールするか、Sinatra でデバッグ用アプリ作れっていう…

JavaScript 以外での即時関数パターン

以前書いた次の記事を読み返していて思ったんだけど、 目から鱗が落ちた JavaScript の即時関数パターンの使い方 - present C# でも無名関数作れるから即時関数パターンできるよね。 using System; using System.Diagnostics; namespace ImmediateFunctionSa…

GitHub の NewsFeed みたいな機能を実装するための Rails プラグイン『TimelineFu』を使ってみた

GitHub の NewsFeed みたいな機能を実装したい party_boy を使ってフォロー機能を実装したら、フォローしているユーザーのアクティビティを表示したい、と思うのは自然なことだよね。NewsFeed みたいな機能を実装するための Rails プラグインに、『TimelineF…

Twitter みたいなフォロー機能を実装するための Rails プラグイン『party_boy』

Twitter みたいなフォロー機能を実装中 自分で一から作ってもいいけど、GitHub をぶらついていたら party_boy っていう面白そうな gem を見つけたので、これを使ってみる。 mnelson/party_boy · GitHub party_boy のインストール Gemfile に追加し、 gem "pa…

Rails3 で管理画面を作成するなら RailsAdmin で決まりかも

はじめに アプリの管理画面はユーザーに見せないから、Rails プラグインでサクッと作ってしまいたい。Rails で管理画面を生成できるプラグインは Typus、ActiveAdmin とかあるけど、個人的に RailsAdmin で決まりかな、って思ってる。 RailsAdmin の何がいい…

Ruby で Plagger の二番煎じを作って gem を公開してみた

Plagger の二番煎じを作ってみた いや、違うな。Pragger や Yapra や、最近では Automatic Ruby なんてのも出たから、五番煎じくらいか。 fragile | RubyGems.org | your community gem host ソースコードは GitHub で公開している。 GitHub - tnakamura/fra…

Ruby で RSS からリンクを抽出する方法

ブログなどの RSS をパースしてゴニョゴニョするための gem を探そうとしたけど、パーサなら Ruby1.9 の標準ライブラリで既に提供されていた。 require "rss" class RssInput def initialize(config) @url = config[:url] end def call result = RSS::Parser…