annotaterb v4.14.0コミット流し読み
annotaterb v4.14.0で入ったコミットを流し読みしました。
入ったコミットは下記
Opt-in for MFA requirement #166
gem にMFA(Multi-Factor Authentication)を導入することでより secure にしてくれる設定を追加している。 この設定を追加していると、新しいversionをデプロイする際に認証されていない場合弾いてくれる。
refs:
Lock concurrent-ruby gem to fix CI #180
dummyapp(Rails7.0.x)のCIにて発生していたエラーの解消PRです。
activesupport-7.0.8.7/lib/active_support/logger_thread_safe_level.rb:12:in `<module:LoggerThreadSafeLevel>': uninitialized constant ActiveSupport::LoggerThreadSafeLevel::Logger (NameError)
Rails7.0.8 では activesupport/lib/active_support/logger_thread_safe_level.rb
にて logger
をrequireせずに実装していました。
coccurent-ruby 1.3.4
ではrequire coccurent
により内部でlogger
が読み込まれていたので、問題なかったのですが1.3.5に上がるタイミングでlogger
の依存が削除されたため、上記エラーが発生していました。
なのでこのPRではcoccurent-ruby
を1.3.4に固定して対応しています。本エラーはRails7.1より修正されています。
refs:
- Lock concurrent-ruby gem to fix CI
- Rails 7.0.8 fails to create an app with most recent concurrent-ruby version · Issue #54260 · rails/rails
- Release v1.3.5 · ruby-concurrency/concurrent-ruby
- require “concurrent”
Fix translation foreign key exclusion bug #181
globalize
gemを利用した際に発生するバグの修正です。
上記gemを使用した際に、ABCustomer
というモデルの翻訳モデルとしてABCustomer::Translation
が追加されます。
追加されたモデルにはオリジナルモデルの外部キーが追加されますが、それを下記ではannotateの対象から除外するため自前で外部キー名を生成しようとしていました。
ですが、下記のロジックでは ABCustomer
-> abcutomer_id
と変換されます。(翻訳モデルに紐づくテーブルに存在しているのはcustomer_id
)
結果的に翻訳モデルから上記外部外部キー見つからず、キーが除外されないというバグが発生していました。
# lib/annotate_rb/model_annotator/model_wrapper.rb
...
def ignored_translation_table_columns
# Construct the foreign column name in the translations table
# eg. Model: Car, foreign column name: car_id
foreign_column_name = [
@klass.translation_class.to_s
.gsub("::Translation", "").gsub("::", "_")
.downcase,
"_id"
].join.to_sym
[
:id,
:created_at,
:updated_at,
:locale,
foreign_column_name
]
end
end
そのためこのPRでは自前実装で外部キー生成をせずに、ActiveSupport::Inflector
で定義されているforeign_key
メソッドを利用しています。(Stringに拡張されている。)
refs:
Add expected file to automatically require #185
lib/annotaterb.rb
が存在しないため、app側では明示的にrequire annotate_rb
を記述する必要があったため、lib/annotaterb.rb
を追加したPRです。
bundler
はGemfileに書かれた名前からlib配下にあるgem_name.rbをrequireしてくれますが、今回はその対象がないためlib配下のファイルパスがLOAD_PATHに追加される時点で処理が終わっていました。
そのため、このPRではlib/annotaterb.rb
を追加し、その中でrequire annotate_rb
を行うように修正しています。
ref: Add expected file to automatically require #185
Chore: alert when multiple conmmands were selected #179
複数コマンドが指定された際にalertを出すPRです。
bundle exec annotaterb models --version
#=> ❯ Only one command can be run at a time
ref: Chore: alert when multiple conmmands were selected #179
Updated COLUMN_PATTERN to handle optional metadata (e.g., constraints or descriptions) enclosed in parentheses. #170
annotateを実行する際のdiff照合にて、カラムをscanする正規表現がメタデータに対応するように修正されたPRです。
Add support for virtual columns #163
カラムがvirtualカラムの場合、name_upcased :virtual(string)のように 型の前に virtual
という文字が付与されるようになりました。