1.9がそろそろ出そうなところに1.8の話をするんですけど、1.8からInspectプロトコルで文字列化される構造体のメンバをキーで指定できるようになりました。:encrypted_password]endこうしておくと、意図せずログにメールアドレスとか個人情報やらが出力されることを防げたり、人間が見てもあんま意味ないものを出さないようにできるというわけですね。本題は、こういうものを自分で実装するにはどうしたらいいんでしょうか、ということを思ったので書いてみました、というものです。defstructのドキュメントとProtocol.derive/3のドキュメントに全て書いてあるんですけど、Jason.Encoderのコードも読んで参考にしました。Elixirのドキュメント、こっちが知りたいことは大抵書いてあるんですよね。メンバの値を"*****"に置き換えるMaskプロトコルを実装します。:onlyオプションを付けた場合は、指定したものだけ"*****"に置き換えます。使われ方の例はこちら。endend説明@deriveはモジュール属性を設定するだけなので、特にこれが何をやってるとかではないです。何かやってるのはdefstructの方で、@derive属性が設定されている場合に、この辺りから諸々呼ばれてMask.__deriving__/3マクロが展開されます。Userしておいてあげると、Mask.mask(%User{})できるようになるという寸法です。[:password]]が渡ってくるので、よしなに利用してあげればマスクするべきキーが判定できます。今回はdefimplしてないもの以外はraiseするようにしたので、例えばnilなんか投げるとこうなります。20:56Protocolの@deriveについて調べたTweet広告を非表示にする関連記事2018-02-15AbsintheでContextを組み立てたりMiddlewareを挟んだり最近AbsintheをつかってGraphQLサーバを実装しはじめているので...2017-01-11あっちこっちでpreload問題こんばんは。Ectoでは関連を明示的にpreloadすることがよくあ...2016-08-28Gettextの使い方メモはいコンバンハ。今回はリレーションです。Propertyが定義されていればそれを使い、定義されていなければデフォルト値を使うSassの変数pre-commitが便利Svelteコンポーネントをテストするときはテスト用コンポーネントを書くといい気がしたSvelteのstoreでバリデーションを実装するRenderでmonorepo管理されたアプリケーションを動かす月別アーカイブはてなブログをはじめよう!Joe_nohさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。