Archive for category Ruby

Ruby で、独自スキーマ向けの URI オブジェクトを定義する

Time to Read

1分

意外と簡単でした。

URI::Generic を継承したクラスを作る:

1
2
require 'uri'
class URI::MySQL < URI::Generic; end

URI.scheme_list に登録する:

1
URI.scheme_list["MYSQL"] = URI::MySQL

あとは、

1
2
3
4
5
uri = URI.parse("mysql://u-kondo:XXXXX@localhost:3306/hogege")
uri.class
#=> URI::MySQL
uri.host
#=> localhost

簡単ですね。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
require 'uri'
require 'active_record'
 
class URI::MySQL < URI::Generic
  def default_port
    3306
  end
 
  def database
    path[1..-1] rescue nil
  end
 
  def connection_hash
    {
      :adapter  => scheme,
      :host     => host,
      :username => user,
      :password => password,
      :database => database,
      :encoding => 'utf8',
      :port     => port
    }
  end
end
URI.scheme_list["MYSQL"] = URI::MySQL
 
uri = URI.parse("mysql://u-kondo:XXXXX@localhost/hogege")
ActiveRecord::Base.establish_connection(uri.connection_hash)

サクッとこういうコードが書けるとかっこいいですね。

see also

ドキュメント。

rubygems で提供されている Addressable は、RFC 3986 準拠の URI を表現するライブラリです

 

GitHub の OAuth2 ログイン連携を実装しようとして、困ったんですけど……

Time to Read

30秒

要するに、ログインしてAccount Settingなどを開いても、このページへの導線がないので大変難儀しました。あほか~

あとは twitter などと同じく、アップリケーションを登録して使うだけですね、 GitHub OAuth Busy Developer’s Guide というページもあるのでそちらも参考にしましょう。って、 OmniAuth と omniauth-github gem ですぐセットアップできるんですけどね……。

 

*.jpg をまとめて *_orig.jpg みたいにリネームする

Time to Read

30秒

Perl 製の rename(1) コマンドを使うわけだが、機械的に後ろにくっつけるわけじゃないのでコツがいる。

$ rename
Usage: rename [-v] [-n] [-f] perlexpr [filenames]

Perl(?:互換)? の正規表現なので、先読みができるじゃないか!

$ rename -v 's/(?=\.jpg)/_orig/' *.jpg
1055.jpg renamed as 1055_orig.jpg
127.jpg renamed as 127_orig.jpg
1376.jpg renamed as 1376_orig.jpg
151.jpg renamed as 151_orig.jpg
1556.jpg renamed as 1556_orig.jpg

先読みは長さゼロのマッチング(/^//$/と同じ)なので、そこにマッチした場合の置換は、結局その位置に文字を挿入することになる、と。

先読みはルッビ~でも使える大事な正規表現テクです。

 

Webistrano はもっと評価されてもいいと思うので、紹介します

Time to Read

2分

業務でも便利に使わせていただいております、 Webistrano 、言ってみれば capistrano の web UI なんですけれど、大変有用なので、ちょこっと紹介します。

What’s good

Webistrano は、リモートサーバーへのデプロイを大変簡単にしてくれる capistrano と言うコマンドラインツールを、ウェブアプリケーションでラップしたものです。

やれることは素の capistrano と同じなんですが、ブラウザベースアプリケーションになることで以下のようなメリットが生まれます。

  • ブラウザベースなので、 CUI に抵抗がある人でも簡単にデプロイできる
    (CUIをいつまで経っても覚えてくれない人っていますよね~…)
  • テスト、ステージング、本番、などで別々の設定を保存できる
    (Highline などを使ってインタラクティブに尋ねる必要なし)
  • プロジェクトをまたいで Capfile というか config/deploy.rb を共有できる
    (そもそも、同じようなことばかり書いてあるであろう config/deploy.rb を各プロジェクトのソースツリーに入れるのは DRY じゃないよね?)
  • デプロイメントの履歴の記録ができる
    (いつ誰がどのリビジョンをデプロイしたかを淡々と記録してくれます)

インストール

Read the rest of this entry »

 

かっこいいウェブアプリを作りました

Time to Read

10秒

大人向け?

Read the rest of this entry »