Archive for category Ruby

Rubyist Magazine 36 号に寄稿しました

Time to Read

1分

昨日公開されたRubyist Magazine 0036 号に寄稿させていただきました。

昨日公開時点と比べ、 11月29日 11時現在では一点だけ修正をさせていただいています。

Sinatra Extensions

続いて、Sinatra Extensions についてですが、こちらはもっと簡単で、

  • register された際に、self.registered(app) と言うフックが呼ばれる
  • register したモジュールのメソッドは、 Sinatra アプリの「クラスマクロ」として使える

というだけです。

下線部が追加箇所で、実は原稿を書いた時点では私も誤解していた、ということでした……。

Read the rest of this entry »

 

shibuya.rb(仮名)、第一回簡易報告+ ActiveSupport の便利 tips

Time to Read

5分

11月25日、有志にておこなった、渋谷近辺の Rubyist とそうでもない Rubyist による勉強会。今回は、 ActiveSupport のソースを読んでみた。

会場は最近「株式会社 VOYAGE GROUP に行ってきた!」で話題にもなった VOYAGE GROUP さん提供でした。

見たファイルとそのメモ

公式 github repo から落としてきた。下記、抜けがあるかもしれません。

Read the rest of this entry »

 

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

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

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