RuremaFreshは、るりまの愛称で知られるRubyリファレンスマニュアルのrd形式の文書の整形・サポートを目的としたgemです。
なお、現在は、「古い条件分岐の削除、可能ならif
をsince
やuntil
に置き換える、メソッド・コマンド」のみを提供しています。
主なインストール方法を紹介します。
-
gem
コマンドを用いて、Rubyにgemをインストールする方法。gem install rurema_fresh
と打ち、インストールします。
-
gemの
bundler
を用いてインストールする方法Gemfile
にgem 'rurema_fresh', :github => 'universato/rurema_fresh'
と書きます。- コマンド
bundle install
で、Gemfile(& Gemfile.lock)に従って、インストール。
Command rurema_fresh versions
destructively modifies the file.
コマンドを使って、ファイルを書き換えます。 念のためGitでコミットを打つなど戻せる状態でコマンドを実行してください。
gem
コマンドではなく、bundler
のbundle
コマンドでGemfileで指定しインストールしている場合は、
bundler
を通してコマンドを打てるように、
bundle exec rurema_fresh versions
コマンドを打って下さい。
また、versions
と複数形になっていることに注意してください。
複数の古いバージョン分岐を削除し、サポート対象範囲の複数のバージョンのものが残る可能性があるため、複数形にしています。
$ cat sample.rd
#@samplecode
#@since 2.4.0
puts "Hello, World!"
#@else
puts "Goodbye, World!"
#@end
#@end
#@until 2.3.0
#@samplecode
puts "old"
#@end
#@end
$ rurema_fresh versions sample.rb --ruby=2.4.0
sample.rd
上記のファイルについて、Ruby2.4.0より古い条件分岐がありました
9行、削除しました。
$ cat sample.rd
#@samplecode
puts "Hello, World!"
#@end
コード上で文字列の条件分岐を削除するときは、以下のように使います。
require 'rurema_fresh'
src = <<-'TEXT'
#@samplecode
#@since 1.9.0
# 0番目の文字を返す
p "abc"[0] #=> "a"
#@else
# 0番目の文字コードを返す
p "abc"[0] #=> 97
#@end
#@end
TEXT
puts RuremaFresh.remove_old_versions(src, '2.4.0')
# alias RuremaFresh.versions
↓
#@samplecode
# 0番目の文字を返す
p "abc"[0] #=> "a"
#@end
引数の文字列を破壊的に変更することはなく、新しい文字列を生成して返します。
#@if( version >= "2.0.0")
は、#@since 2.0.0
に置き換えた上で、古ければ削除します。#@if( version < "2.0.0")
は、#@until 2.0.0
に置き換えた上で、古ければ削除します。#@if( version > "1.8.7")
は、#@since 1.9.0
とバージョンを上げ置き換えた上で、古ければ削除します。#@if( version <= "2.7.0")
は、#@until 3.0.0
とバージョンを上げ置き換えた上で、古ければ削除します。#@if( version == 1.0.0)
は、条件分岐が古ければ削除し、そうでなければif文のままです。#@if( version != 1.0.0)
は、条件分岐が古ければ削除し、そうでなければif文のままです。#@if ( "1.0.0" < version and version <= "1.5.0" )
で、1つ目の条件分岐が古ければ、2つ目の式だけを#@until
に置き換え、さらに古ければ削除します。1つめの条件分岐がサポート対象範囲の場合、if文のままです。
なお #@if(
のように、#@if
と(
の間にスペースがないif文は、間にスペースを入れます。
#@if ( "1.0.0" < version)
のように、具体的なバージョンが左のもの。#@if ( version > "1.0.0" and version <= "3.0.0")
のような、両式のversionが中央に来てないもの。
これらの式が来たときは、スルーします。
#@since
は「以上」の指定ですが、#@until
は「未満」の指定です。
sample_since.rd
#@since 3.0.0
3.0.0以上の環境で出力される。
#@end
rurema_fresh versions sample_since.rd --ruby=3.0.0
このコマンドはサポートの最低バージョンとして3.0.0
を指定しており、
条件分岐が不要になり、中身の文章「3.0.0以上の環境で出力される。」だけが出力されます。
sample_until.rd
#@until 3.0.0
3.0.0未満の環境で出力される。
#@end
rurema_fresh versions sample_until.rd --ruby=3.0.0
このコマンドはサポートの最低バージョンとして3.0.0
を指定しており、
条件分岐が不要になり、中身の文章は3.0.0
未満でのみ必要とされ、
3.0.0
以上では必要なくなり、条件分岐のブロックとともに中身も消えます。
当rurema_freshのディレクトリに移動した上で、
rake test
ないしrake
で、全体のテストを実行します。
もしくは、ruby ./test/rurema_fresh_test
で実行できます。
Ruby標準のminitest
を用いテストを書いており、個別のテストメソッドを実行するには、
当rurema_freshのディレクトリに移動した上で、
ruby ./test/rurema_fresh_test --name=test_remove_old_since1
とテストしたいメソッド名をname
オプションで指定することで実行できます。
改善に繋がるかもしれないと思えば、自由にPull RequestやIssueを送ってください。