2013年5月27日月曜日

ドット記法のStringを元にオブジェクトのメンバを取得する[JavaScript]

以下のような階層の深いオブジェクトから、任意の階層にあるプロパティを楽に取得したくて作ってみました。

var foo = {
  bar: {
    hoge: 1,
    fuga: {
      isBar: true
    }
  }
};

こんな感じ。

var findRecursively = function(keyString, src) {
    var varSplitter = /\./,
        srcObj = src || window,
        keyAry = keyString.split(varSplitter),
        key;

    while (key = keyAry.shift()) {
      obj = obj[key];
      if (!obj) {
        return null;
      }
    }
    return obj;
};

var result = findRecursively('foo.bar.hoge');
console.log(result);  // 1

var result2 = findRecursively('bar.fuga.isBar', foo);
console.log(result2); // true

第一引数には、取得したいプロパティの場所をドット記法で表記したStringを渡します。
第二引数には第一引数で渡したプロパティを探したいオブジェクトを渡します。
第二引数がない場合はwindow変数から探します。

if ('foo' in window && 'bar' in foo && …) {
  ...
}

みたいな書き方をしないで済むようになります。

homebrewでgradleをインストールする

groovyもgradleもhomebrewのformulaにあるのでチョー簡単です。

groovyのインストール

brew install groovy

インストールが終わったら、 正しくインストールされていることを確認。以下のようにバージョン情報が表示されればOK

groovy -v
Groovy Version: 2.1.3 JVM: 1.6.0_45 Vendor: Apple Inc. OS: Mac OS X

gradleのインストール

brew install gradle

インストールが終わったら、正しくインストールされていることを確認。以下のようにバージョン情報が表示されればOK

gradle -v

------------------------------------------------------------
Gradle 1.6
------------------------------------------------------------

Gradle build time: 2013�N5��7�� 9��12��14�b UTC
Groovy: 1.8.6
Ant: Apache Ant(TM) version 1.8.4 compiled on May 22 2012
Ivy: 2.2.0
JVM: 1.6.0_45 (Apple Inc. 20.45-b01-451)
OS: Mac OS X 10.7.5 x86_64

文字化けはとりあえずスルー。
インストールされていたら、環境変数PATHに GRADLE_HOME/bin を追加。

vim .zshrc

export GRADLE_HOME=/usr/local/Cellar/gradle/1.6
export PATH=$PATH:$GRADLE_HOME/bin

とりあえずはこんな感じで。
jsの圧縮に使ってるAntの設定ファイルの移行とか、色々試してみよう。

2013年5月9日木曜日

gitでコミット時のメッセージ編集でエラーになる時の対処法

gitでコミットする時、viでコミットメッセージを入力しても

error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.

みたいなエラーが出てコミットされなかったので調べたら、gitで使用するエディタを明示的に指定すればいいらしい。
こんな感じ。

git config --global core.editor "/usr/bin/vim"

コミットメッセージを保存する時はいつもどおり :wq でOK。