タグ

ブックマーク / r7kamura.github.io (4)

  • Scheman - r7km/s

    Schemanという、Ruby製のSQLパーサをつくった。 例 文章で説明するより見たほうが早いだろうということで、例を用意した。 require "scheman" require "yaml" parser = Scheman::Parsers::Mysql.new schema = parser.parse(<<SQL) CREATE TABLE `users` ( `id` INTEGER(11) NOT NULL PRIMARY KEY AUTO INCREMENT, `name` VARCHAR(255) NOT NULL ); SQL puts schema.to_hash.to_yaml 構文解析結果はHash, Array, Symbol, Stringの組合せで表現される (※可読性のためにYAML形式で表示した) --- - :create_table: :name:

  • Gitreceived - r7km/s

    git pushに対応することに特化したSSHサーバ Gitreceived を読んだところ、幾つかの知見が得られた。 git-shell Git付属のシェル git-shell がGitreceivedで利用されている。 git-shellはGitに関する作業しかできない制限付きのシェルである。 GitreceivedはSSH経由で入力された任意のコマンドを外部コマンドとして実行しようとするが、 このとき外部コマンドはgit-shellを利用して実行される。 つまり、任意のコマンドと言えどGitに関する作業しか実行できないように制限されている。 git push クライアントでgit push origin masterが実行されたとしよう。 このときGitは、サーバへのSSH接続を開始する send-pack プロセスを実行する。 サーバ側では、以下のようなSSHの呼出を介してコマンド

  • Includable YAML - r7kamura per second

    YAMLの定義内で別のファイルに書いたYAMLを参照出来るようにしてみた。 YAMLに加える変更 YAMLの各要素には任意のタグを埋め込むことができ、またその振る舞いを定義出来る。 # test.rb require "yaml" YAML.add_domain_type(nil, "include") do |type, val| YAML.load_file(val) end # 折角なので再度YAMLに加工して出力してみる puts YAML.load_file("api.yml").to_yaml Includeする側 例えば、レシピデータを返すREST APIの仕様をYAMLで定義するというユースケースを考える。 レシピのスキーマをrecipe.ymlに書いて、各APIから定義を使い回すことにする。 # api.yml /recipes: GET: response: array

  • faraday-lazyable - r7kamura blog

    faraday-lazyableという、 HTTPリクエストを遅延評価させるためのライブラリを作った。 遅延評価はある種の複雑性を持ち込むが、ビジネスの要求に合わせて正しく使っていきたい。 遅延評価 HTTPリクエストにおける遅延評価とは何か。 遅延評価というのは、評価しなければならない値が存在するとき、 実際の計算を値が必要になるまで行わないことをいう。 HTTPリクエストを遅延評価するというのは、つまりHTTPクライアントはすぐにレスポンスオブジェクトを返すが、 レスポンスオブジェクトに対してメソッドが呼ばれたときに初めてHTTP通信を発生させるということを意味している。 Faraday Faradayとは何か。 faraday-lazyableは、FaradayというRuby製のHTTPクライアントのプラグインとして実現されている。 FaradayはRackのようにプラグイン(=この

    faraday-lazyable - r7kamura blog
  • 1