読者です 読者をやめる 読者になる 読者になる

Codenize.toolsのRoadworkerのソースコードを読む(roadwork -e) #fukuokarb

AWSCLIツール系では最高レベルに便利なCodenize.toolsからいろいろ学ぼうと思って、Fukuoka.rbでもくもくと読んでいました。

fukuokarb.connpass.com

同時にawspec業もしていたので、面白そうなapplyコマンドまで読み進められなかったのが残念。

以下、メモ。

bin/roadwork

なんとなく bin/roadwork からスタート。optparseを使っているのか。

if options[:debug]
  Aws.config.update(
    :http_wire_trace => true,
    :logger => options[:logger]
  )
end

おお...(デバッグオプションとかつけてないな、awspec

client = Roadworker::Client.new(options)

roadwork -e

awspec generateと同じ流れだろうと踏んで、exportコマンドから追ってみる。

コードを追ってみると実体は Roadworker::Exporter#export_hosted_zones(hosted_zones) っぽい。

Roadworker::Collection.batch

Roadworker::Collection.batch で(大抵のaws-sdk-rubyの*::Clientクラスのレスポンスで返ってくる)ページング可能なオブジェクトをいい感じに回している。カッコいい。

module Roadworker
  class Collection

    class << self
      def batch(pageable_response, collection_name)
        pageable_response.each do |response|
          response.public_send(collection_name).each do |item|
            yield(item)
          end
        end
      end
    end # of class method

  end # Collection
end # Roadworker

DSL変換

aws-sdk-rubyからのレスポンスをいい感じにハッシュにまとめてRoadworker::Client#exportに戻して、今度はRoadworker::DSL::Converter#convert でRoadworkerのDSLに変換している。

Roadworker::DSL::Converter#output_rrsetの中

name = recrod.delete(:name).inspect

Hash#deleteの動きで、keyを消しつつvalueを取り出していて、String#inspectで、エスケープしている。こういうふうに使うのかー。


というわけで時間切れ。