RuremaFresh

RuremaFreshは、るりまの愛称で知られるRubyリファレンスマニュアルのrd形式の文書の整形・サポートを目的としたgemです。

なお、現在は、「古い条件分岐の削除、可能ならifsinceuntilに置き換える、メソッド・コマンド」のみを提供しています。

Installation

主なインストール方法を紹介します。

  • gemのbundlerを用いてインストールする方法
    1. Gemfilegem 'rurema_fresh', :github => 'universato/rurema_fresh'と書きます。
    2. コマンドbundle installで、Gemfile(& Gemfile.lock)に従って、インストール。 <!-- - コマンドgem install rurema_freshを打ち、インストール。 -->

Usage

コマンドでファイルを破壊的に変更する方法

Command rurema_fresh versions destructively modifies the file.

コマンドを使って、ファイルを書き換えます。 念のためGitでコミットを打つなど戻せる状態でコマンドを実行してください。

gemコマンドではなく、bundlerbundleコマンドで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

引数の文字列を破壊的に変更することはなく、新しい文字列を生成して返します。

versionsサブコマンドによるif文の対応

対応済み

  • #@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は「未満」の指定です。

since の例

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以上の環境で出力される。」だけが出力されます。

until の例

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以上では必要なくなり、条件分岐のブロックとともに中身も消えます。

Development

全体のテスト

当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オプションで指定することで実行できます。

Contributing

改善に繋がるかもしれないと思えば、自由にPull RequestやIssueを送ってください。