おれせか

なんかそれっぽいのをうにうに。

kennyjのブログ(仮): rails3.0の頃からvalidationにコンテキストを指定できる様になってた

↑の記事を読んで、おおこりゃいいやと思いつつ使ってみた時に気づいたことメモ。

@hoge.update_attributes(params[:hoge], context: :foo)

何も考えずにupdate_attributesにも:contextオプション指定できるかなー?と思ってやってみた。
→ :updateコンテキスト(デフォ)扱いされる。

@hoge.attributes = params[:hoge]
@hoge.save(context: :foo)

attributes= してからsaveしてみた。
→ やったー。:fooコンテキスト扱いされたよー。

railsのdocumentちろっと見てみたらupdate_attributesの引数は1個しかないみたいなんで当たり前っちゃ当たり前なんですが、なんかrailsだとこのくらいサクっといけてしまうんじゃなかろうかて気がしたのでやってみたというね。

PAGETOP

rakなんかしたときに「invalid byte sequence in UTF-8」みたいなこと言われたら、たぶんファイルがutfじゃないんでしょうよ、ということでとりあえず適当にutfに変換するとかなんとか。

  • jsファイルまとめて変換の場合(mac os x)
    find . -type f -name \*.js -print0 | xargs -0 nkf -w --overwrite
    

-print0 とか -0 忘れないように。
Macでfindとxargsをパイプで繋いで使うなら -print0 と -0 を必ず使うメモ - kanonjiの日記

ほんとはまとめて変換しないでちゃんと対象ファイルしっかり選んで変換したほうがきっといいよ!

PAGETOP

最近お仕事でtitaniumでのiphoneアプリ開発などちょいちょいしております。

で、最初はフツーにjavascriptをガリガリ書いてたのですが、coffeescriptなるものの噂を聞いたので使ってみるとこりゃいいやということに。

で、こっから本題。

で、coffeescriptってjsにコンパイルしなきゃいけないんですが毎度叩くのもなんだかなーて感じだったのでwatchrていうgemがあったのでこいつをインストール。

  • coffee_compile.watchr
    coffee_files = %r{^(.*\.coffee)$}
    
    watch(coffee_files) do
      cmd = "coffee --bare --compile ."
      puts "$#{cmd}"
      `#{cmd}`
    end

で、下記で実行。

watchr -d coffee_compile.watchr

しかし、追加ファイル感知してくれないとか、ファイル削除のイベントがなぜか止まらないとかあったので、結局使わなくなったり。

というわけで、毎度コンパイル叩くことにしたんだけど、

ちょっとは楽しようということでRakefile書いた

  • Rakefile
    task :default => ["coffee:compile"]
    
    def show_and_cmd(title, cmd = nil)
      cmd = title if cmd.nil?
      puts %{===== #{title} =====}
      puts %{$#{cmd}}
      system cmd
    end
    
    namespace :coffee do
      desc "Compile coffee scripts"
      task :compile do
        show_and_cmd 'compile coffee', %{coffee --bare --compile .}
      end
    
      desc "Watch coffee scripts"
      task :watch do
        watchr_file = 'coffee_compile.watchr'
        show_and_cmd 'watching files', %{watchr -l #{watchr_file}}
        puts ''
        show_and_cmd 'watch coffee', %{watchr -d #{watchr_file}}
      end
    end

これで、

rake #または rake coffee:compile

でコンパイルできるぜー。ひゃっほい。

いちおう念のため、watchrのほうも

rake coffee:watch

でいけるようにしてたり。

あと、titaniumのほうも

titaniumって普段はbuildやシミュレータの起動をtitanium developerてアプリを立ち上げといて、その中にあるボタンをぽちっとなするわけなんですが、毎度これ起動しとくのヤダナーと思ってたんですよ。

と思ってたら、なんかコマンドラインで叩けるらしいじゃないですか。
コマンドラインでTitanium Mobileを操作する - kaz_konno’ blog: walkthisway

やったー!

というわけでRakefile修正。

task :default => ['coffee:compile', 'titanium:run']

def show_and_cmd(title, cmd = nil)
  cmd = title if cmd.nil?
  puts %{===== #{title} =====}
  puts %{$#{cmd}}
  system cmd
end

namespace :titanium do
  desc "build & run on iphone simulator"
  task :run do
    show_and_cmd 'build & run', '/Library/Application\ Support/Titanium/mobilesdk/osx/1.7.X/iphone/builder.py run ./'
  end
end

namespace :coffee do
  desc "Compile coffee scripts"
  task :compile do
    show_and_cmd 'compile coffee', %{coffee --bare --compile .}
  end
  desc "Watch coffee scripts"
  task :watch do
    watchr_file = 'coffee_compile.watchr'
    show_and_cmd 'watching files', %{watchr -l #{watchr_file}}
    puts ''
    show_and_cmd 'watch coffee', %{watchr -d #{watchr_file}}
  end
end

namespace :git do
  desc %{Show "git diff -- *.coffee"}
  task :diff do
    show_and_cmd 'git diff *.coffee', 'git diff -- \*.coffee'
  end
end

「rake」で以下まとめて出来るようになったよー。

  1. coffeescriptのコンパイル
  2. titaniumのビルド
  3. iphone simulatorの起動

やったー!

#ちなみにRakefieの最後に書いてあるrake git:diffはcoffeeファイルの差分だけ見たくてよく使うコマンドだったのでついでに追加しといた。

PAGETOP

Search