insert_into_file
カスタム ジェネレーターのメソッドを使用して、いくつかの新しい関連付けを既存のモデルに挿入しようとしています。美的な理由から、またハードコーディングを避けるために、最後に見つかったものの後に挿入したいと思います。これをRubularで動作する正規表現で実装しようとしましたが、ジェネレーターを実行したときは動作しませんでした:
def add_associations_to_other_things
content = <<-CONTENT
has_many :things
CONTENT
inject_into_file "app/models/other_things.rb", \
content, \
:after => /(?:(has_and_belongs_to_many|has_many|has_one|belongs_to)[^\n]*$)(?!.*has_and_belongs_to_many|has_many|has_one|belongs_to.*\z)/m
end
言い換えれば、これは、それ以上関連付けが続かない改行への最後の関連付けを見つける必要があります。このm
オプションは、否定先読みのドットを改行として扱い、ファイルの最後まで検索する必要があることを意味します。Rubular では最終的な関連付けが選択されますが、ジェネレーターが実行されると、すべての関連付けの後にコンテンツが挿入されます。
私の正規表現の何が問題になっていますか?