ジョギング
- 香椎浜 x 2 周
- テンポは良いが、フォームを意識し過ぎてギクシャクした感じが残っている
日課
- (腕立て x 50 + 腹筋 x 30) x 3
夕飯
- 奥さんが外食だったので、よしもとで
- よしもとのママにデザートをサービスして頂いた
- 結構、お腹いっぱい食べたけど 2000 円ちょいだった...よしもと、コスパ最高である
今日のるびぃ ~ awspec の generator を追加するメモ ~
先日...
久しぶりに awspec にプルリクエストして無事にマージされたので, generator を追加する方法をメモっておく.
generator メソッドを書く
/lib/awspec/generator/spec/rds_db_parameter_group.rb を以下のように書いた.
- https://github.com/k1LoW/awspec/blob/master/lib/awspec/generator/spec/rds_db_parameter_group.rb
- https://github.com/k1LoW/awspec/blob/master/lib/awspec/generator/spec/rds_db_cluster_parameter_group.rb
module Awspec::Generator module Spec class RdsDbParameterGroup include Awspec::Helper::Finder def generate_by_parameter_group(parameter_group) @parameter_group = parameter_group res = select_all_rds_db_parameters(@parameter_group) ERB.new(db_parameter_group_template, nil, '-').result(binding).gsub(/^\n/, '') end def db_parameter_group_template template = <<-'EOF' describe rds_db_parameter_group('<%= @parameter_group %>') do <% res.each do |key, value| %> its('<%= key %>') { should eq '<%= value %>' } <% end %> end EOF template end end end end
select_all_rds_db_parameters
メソッドで @paramater_group
で指定した DB パラメータグループを取得している. select_all_rds_db_parameters
は aws-sdk の describe_db_parameters
をラップした Awspec::Helper::Finder モジュールメソッド.
Awspec::Helper::Finder モジュールメソッド
先述の select_all_rds_db_parameters
を Awspec::Helper::Finder モジュールメソッドとして定義する.
... def select_all_rds_db_parameters(parameter_group) parameters = {} res = rds_client.describe_db_parameters({ db_parameter_group_name: parameter_group }) loop do res.parameters.each do |param| parameters[param.parameter_name] = param.parameter_value end (res.next_page? && res = res.next_page) || break end parameters end ...
このモジュールメソッドの修正は, 今回の generator 追加にあたっては必須では無かったけど, describe_db_parameters
を awspec/lib/awspec/type/rds_db_parameter_group.rb でも呼んでいたので, コードを集約する意味で Awspec::Helper::Finder に寄せた.
awspec/lib/awspec/generator.rb に generator メソッドを追加
... require 'awspec/generator/spec/rds_db_parameter_group' ...
awspec/lib/awspec/command/generate.rb にメソッド呼び出しを追加
... types = %w( rds_db_parameter_group rds_db_cluster_parameter_group ) types.each do |type| desc type + ' [parameter_name]', "Generate #{type} spec from parameter name." define_method type do |_parameter_name| Awsecrets.load(profile: options[:profile], region: options[:region], secrets_path: options[:secrets_path]) eval "puts Awspec::Generator::Spec::#{type.camelize}.new.generate_by_parameter_group(_parameter_name)" end end ...
今回は db_parameter_group と db_cluster_parameter_group を一緒に追加するので、上記のように define_method
で動的にメソッドを呼ぶようにして重複コードを出来るだけ避けるようにした. この実装は既にこちらで実装されているので, それをそのまま流用した.
あとは...
テストはしっかりと.
$ bundle exec rake spec:rds_db_parameter_group .... Finished in 0.01137 seconds (files took 1.33 seconds to load) 4 examples, 0 failures $ bundle exec rake spec:rds_db_cluster_parameter_group .... Finished in 0.01114 seconds (files took 1.32 seconds to load) 4 examples, 0 failures
あと, Rubocop 警察の取り締まりも.
$ bundle exec rake spec:rubocop Running RuboCop... Inspecting 405 files ..................................................................................................................................................................................................................................................................................................................................................................................................................... 405 files inspected, no offenses detected
generator にはテストは無いので, プルリクエスト前に generate しておくことをお薦め.
$ bundle exec awspec generate rds_db_parameter_group foo $ bundle exec awspec generate rds_db_cluster_parameter_group bar
こんな感じで
$ bundle exec awspec generate | grep rds_ awspec generate rds_db_cluster_parameter_group [parameter_name] # Generate rds_db_cluster_parameter_group spec from parameter name. awspec generate rds_db_parameter_group [parameter_name] # Generate rds_db_parameter_group spec from parameter name.
awspec はリソースタイプや generator の追加が簡単に行えるように実装されているので, これからも気付いたら色々と追加していけたらなあと思う.