2019-12-01から1ヶ月間の記事一覧

Best Practice Ruby on Rails Refactoringは、Rails開発を初めて半年のエンジニアにピッタリの本だった

Rails AntiPatterns: Best Practice Ruby on Rails Refactoring (Addison-Wesley Professional Ruby Series) (English Edition)作者:Chad Pytel,Tammer Saleh出版社/メーカー: Addison-Wesley Professional発売日: 2010/11/09メディア: Kindle版 Best Practi…

Design Patterns in RubyでStrategyパターンを学んだ

Design Patterns in Ruby でStrategyパターンを学んだ。自分用のメモとして残しておく。 Design Patterns in Ruby (Adobe Reader) (Addison-Wesley Professional Ruby Series) (English Edition)作者:Russ Olsen出版社/メーカー: Addison-Wesley Professiona…

Rubyであるメソッドの定義場所を知る方法

OSSなど実装を見る機会が乏しいコードに触れる時、あるメソッドがどこに定義されているか継承を辿るとデバッグに時間がかかる時がある。 そんな時は、methodとsource_locationメソッドを利用すると便利である。 GraphQL::Types::String.method( :graphql_def…

GraphQLで独自Scalar型を定義する時に気をつけること

GraphQL-Rubyでは、Int、Float、String、Boolean,IDといったビルドイン以外にISO8601DateTimeやISO8601Date型が提供されています。 また、独自Scalar型を定義することができ、その方法はドキュメントに記載されています。 class Types::Url < Types::BaseSca…

alert(1)では、危険性がわからなかった人にも優しいXSS解説

XSSとは、攻撃者によって意図しないHTMLやJavaScriptを挿入される脆弱性です。 XSSを説明する際に、ローカルサーバーを立ち上げた後にブラウザ上でhttp://localhost:8080/?keyword=<script>alert(1)</script>にアクセスすると警告ダイヤルが表示される例を目にすることが多い…

GraphQL-RubyでUnion型を実装する方法

GraphQLにおけるUnion型は、Object型のリストを表現します。 実装方法は、ドキュメントを参考にすると以下の通りです。 簡易的にUnionを試すためUserクラスにcommentsメソッドを実装していますが、本来はSTIやCTIなどの実装を表現する場合に利用します。それ…

Rubyの予約語を取得する方法

Rubyの予約語を取得するワンライナーを知った。いくつか疑問があるので忘れないように残しておく。 RubyToken::TokenDefinitions.select { |definition| definition[1] == RubyToken::TkId }.map { |definition| definition[2] }.compact しかし、v2_7_0_pre…

Rubyでは、クラスの比較ができる

Rubyでは、クラスを比較できることを知ったのでメモとして残しておく。 String < Object 比較演算子は、Moduleクラスに存在している。 ここで、以下を比較すると結果としてnilが返る。 Kernel < BasicObject これは、BasicObjectとKernelが継承関係にないか…

GraphQL-RubyのEnum classes are never instantiated and their methods are never called.とは何か

GraphQL-RubyのEnumを翻訳するにあたり、Enum classes are never instantiated and their methods are never called.に疑問を持ったのでソースコードを読むことにしました。 version graphq-ruby: 1.9.5 ruby: 2.6.5 実装は、GraphQL::Schema::Enumにありま…

Rubyのmodule_functionは、引数なしで指定できる

Classにmoduleをmix-inしてもmoduleで定義したクラスメソッドを利用できない。 これを解決するために、以下ようにincludeされた時点でクラスに対してmoduleをextendする方法がある。 module M def self.included(klass) klass.extend ClassMethods end modul…

GraphQL-RubyのInstrumentationを翻訳して学んだこと

GraphQL-Rubyには、Queryの実行前後で処理を差し込むことが可能なInstrumentが実装されています。 この機能を利用するためには、必ず#before_query(query)と#after_query(query)二つのメソッドを定義する必要があります。 以下のように自身のスキーマクラス…