ActiveMerchantでPaypalのIPNを受取る

ドキュメントに完璧なサンプルがある。
IPNの送り元確認もやってくれる
http://rubydoc.info/github/Shopify/active_merchant/master/ActiveMerchant/Billing/Integrations/Paypal/Notification

ActiveMerchantでPaypalのExpressCheckoutをするには下記URLが参考になる
Twiwt:Blog / jugyo : Rails3 + Mongoid + ActiveMerchant で Paypal Express Checkout

サンプル

  class BackendController < ApplicationController
    include ActiveMerchant::Billing::Integrations

    def paypal_ipn
      notify = Paypal::Notification.new(request.raw_post)
  
      order = Order.find(notify.item_id)
    
      if notify.acknowledge #ここでIPNの送り元と内容確認をしている
        begin
          
          if notify.complete? and order.total == notify.amount
            order.status = 'success' 
            
            shop.ship(order)
          else
            logger.error("Failed to verify Paypal's notification, please investigate")
          end
  
        rescue => e
          order.status        = 'failed'      
          raise
        ensure
          order.save
        end
      end
  
      render :nothing
    end
  end

RailsのActiveRecordでレコード(モデル)のコピー

日記のコピーなどで、すでにあるレコードを元に別のレコードを作りたいときの話。
元となるレコードのattributesをコピーしてnewのテンプレートに表示してやればいい

def copy
  @old_entry = Entry.find(params[:id])
  @entry = Entry.new
  @entry.attributes = @old_entry.attributes 
  
  render :action => "new"
end

たのしいRuby第3版を読んで忘れてたこととか

たのしいRuby 第3版

たのしいRuby 第3版

Ruby会議でなんども”Joyful Ruby”の字幕とともにこの本が出てきたので第2版はもってるけど買うことにした。
忘れてたこととか、知らなかったことをメモ

print,putsには引数がいくつも渡せる

print "hello ", "ruby" #=> helloruby

文字列をシンボルにできる

"foo".intern #=> :foo

Class A を継承したクラスを1行で作る

Class.new(A)

catchとthrow

知らなかった…

catch(:foo) do
  loop do
    loop do
      throw :foo "でた"
    end
  end
end #=> でた

Rationalオブジェクト, Complexオブジェクト

分数や複素数が表現できる(1.9から標準)

1.5.to_r #=> (3/2)
1.5.to_c #=> (1.5+0i)

ハッシュの作り方(1.9)

(1.9からはordered hashになってるらしい)

{a: "b", c: "d"} #=> {:a=>"b",:c=>"d"}

Hash#fetch

キーが登録されてないときの値を指定できる

a = {}
a.fetch("key","no_data") #=> "no_data"

RubyKaigi2011に行ってきた(帰りの新幹線より)

最後のRuby会議であるRubyKaigi2011に名古屋からいってきました。

スタッフの皆さん。発表者の皆さん楽しく心地よいイベントをありがとうございました。
ジョジョ言語やらデプロイ物理ボタンぐらいしか自分のRubyプロダクトはありませんが、もっともっとコードを書きたい!今すぐ書きたい!となるぐらいたくさんの刺激を受けた二日間でした。

会場

筑波は遠いので練馬で嬉しかった。地方参加者の僕には上京するのは関東方面の知り合いと会う機会にもなるので都内なのはとてもうれしい

ノベルティ

バッグにシャツに豪華でした。学生枠の人が何もないのはかわいそうだなと思いました。若者こそ甘やかして洗脳すべき。

Rubyを利用した大規模ウェブサービスの開発・運用

cookpadの開発体制の話し。次にきいたgithubの話しと重複する部分が多く、相乗効果で説得力があった。テストとデプロイと、監視を両方とも徹底していたなあ

軽量Ruby

  • 日立とは力を合わせないのか
  • Matzがそんなにコードを書いてることに驚いた

日本の図書館はどのようにRubyを使っているか

この日一番面白かった。去年の事件のイメージを覆す進んだ図書館の話し。特に国会図書館オープンソースで公開することを前提にシステム開発をしたというのが「やるじゃん!」と思った。
Rubyistだけで共有するのがもったいない発表ですのでぜひ多くのひとに見えもらいたい。
(とっころで神戸の図書館員さんにEmacsを強制的に使わせたエンジニアさんはだれなんだろう)

Rubyで作った"critical mission"システムについて

まとめとしては1.6系のRubyでもスレッド以外に大きな問題は起こらなかったということなのだろうか?Rubyすごいじゃん

二日目

スカイツリーがみたかったので寄り道。ついでに浅草にもいったので昼前からの参加。

たのしいRails

さっそくコミットログを見るようしようとおもう
ヘッドのgemのバグ取りとか、ドキュメントの整理なら手伝えるかもと思った

BDD Style Unit Testing

次のRspecの話しと合わせて、こういう「やり方は調べればわかるんだけど、このやり方であってるのか不安」系のことで実践されている方々の話しはとても参考になる

The Gate

あの列車に僕も乗りたいと真剣に思った。
乗ってやろうと決意した。

懇親会

  • 残念ながら一時間しか参加できず
  • シャイなので時間制限のおかげで逆に積極的になれた
  • 名古屋Ruby会議のお礼などが伝えられて満足
  • 名古屋から来たというだけで関数型の話しになる流れ。名古屋のファンクショナルクラスタ許すまじ。と思ったけど僕もHaskell読書会とかを開催してた

まとめ

スタッフの皆さんお疲れ様でした。旅行が苦手で3日間も一人で東京にいたくないので帰ります。最後の一日は名古屋から応援しています。発表者のみなさんもたくさんの刺激をありがとうございました。

東海道新幹線下り 浜松付近より

CakePHP1.3のWebTestCaseでfixtureを使う

sizuhiko - CakePHPのWebTestCaseでfixtureを使う:
http://my.opera.com/sizuhiko/blog/2009/10/01/cakephp-webtestcase-fixture

という素晴らしい記事があるのですが僕の1.3.10環境で動かなかったので動くようにした。
変えないといけないのは

2.上記ファイルの「CakeTest」 部分を 「FixturableWebBaseTest」に変換
これはお使いのエディタを開いて、置換機能を使えばあっという間に完了です。 app/vendors/webtest/
fixturable_web_base_test_case.php を編集してください。

の部分で、単純に置換してはダメでコピーした後にすることは

  1. dispatcher.phpの読み込みをやめる
  2. simpletest/unit_tester.phpを読み込む
  3. class CakeTestDispatcherを削除
  4. class CakeTestCase extends UnitTestCase {をclass FixturableWebBaseTestCase extends WebTestCase {にする。(置換するのはここだけ。一括置換すると不要なところまで置換される。)

あと、直接は関係ないですが最初1.3.0で試していたらbootstrapでApp::importができませんでした。