Project

General

Profile

Actions

機能 #1172

open

mikutterが返すディレクトリパスは積極的にPathnameを利用する

Added by toshi_a 初音 over 6 years ago. Updated over 6 years ago.

Status:
新規
Priority:
通常
Assignee:
-
Target version:
Start date:
2018-02-14
Due date:
% Done:

0%

プラグイン名:

Description

Environment::CONFROOT などは "/homedir/.mikutter/" のようなStringクラスのインスタンスだが、これを Pathname でwrapする。
前から思っていたけど思い出したのでメモしておく。

メリット

標準添付ライブラリで、Ruby on Railsなどでも利用されている

pathnameは標準添付ライブラリなので依存関係を替えずに利用できる。
Railsで Environment::CONFROOT に相当する Rails.root はPathnameを返している。

File.joinなどのパスを扱うためのテクニックのより直感的な代替が提供されている

文字列でディレクトリパスを連結する場合、末尾にスラッシュがあるか否かがバグの原因になるため、mikutterではすべての箇所で File#join を使って連結しているが、 Pathname#/ を使えば同じことができる。

num = 1
File.join(path, "dir#{num}" ) #=> "/path/to/dir1" 
path / "dir#{num}" # => Pathname(/path/to/dir1)

デメリット

互換性のないメソッド

Pathname#+ は String#+ とは異なる動きをする。こんなことをやっている場所はないと思うが、もしやっていたらこの部分のコードは修正する必要がある。1箇所くらいならいいが、サードパーティプラグインも含めて多く使われていたらこのチケットは見送るべきかもしれない。

num = 1
path + "dir" + num # "/path/to/dir1" or Pathname(/path/to/dir/1)
Actions #1

Updated by toshi_a 初音 over 6 years ago

  • Target version changed from 3.7 to 4.0

現状、 String#+ や String#start_with? の引数にパス文字列を与えているケースが散見され、Pathnameに変えるとクラッシュすることがわかった。
思ったより簡単ではなく互換性を損なう危険性が高いため4.0で再検討する。

Actions

Also available in: Atom PDF