StripeObject について
最近お仕事で決済サービスの Stripe を使っているので色々メモする。
溜まったらまとめて Qiita に記事にするかな。
Ruby で Stripe の API を叩くと StripeObject が返ってくる。StripeObject のドキュメントは
http://www.rubydoc.info/github/stripe/stripe-ruby/Stripe/StripeObject ここにあって、内部に Set を持っていて key value を管理している様子。
この StripeObject は Hash っぽいけど Hash じゃないので稀にハマる。
以下の点が気になる
- key? が使えないので値が nil な要素は判別不可能
- 文字でも symbol でもアクセスできる (with_indifferent_acceesしたような感じ)
StripeObject は to_h で hash に変換できるので、1 番目の問題は解決できる。でも hash に変換すると文字列ではアクセスできなくなる。
StripeObject を扱う時は to_h.with_indifferent_access してやると良いかもしれない。
rails c などコンソールで挙動を確かめる時は construct_from で実際に StripeObject を作ってみると良い。
pry(main)> a = Stripe::StripeObject.construct_from({id: 1, 'foo' => 'bar', 'hoge' => {piyo: nil}}) => #<Stripe::StripeObject:0x3ff2b128bb60 id=1> JSON: { "id": 1, "foo": "bar", "hoge": {"piyo":null} } pry(main)> a[:id] => 1 pry(main)> a['id'] => 1 // symbol でも文字列でもアクセスできる pry(main)> a.to_h[:id] => 1 pry(main)> a.to_h['id'] => nil // 文字列ではアクセスできなくなる