Module: VivlioStarter::CLI::ImageFilenameSanitizer

Defined in:
lib/vivlio_starter/cli/image_filename_sanitizer.rb

Overview

画像ファイル名の危険文字の判定・除去

Constant Summary collapse

DANGEROUS_PATTERN =

確実にビルド/EPUB を壊す文字(spec §4-2 の「危険」)。 () は Markdown alt を壊す。' " & < > は XHTML 属性・実体参照(W14010)。

? % は URL 特殊文字。\ : * | は Windows 不可・zip 移植性。制御文字も対象。

/[()'"&<>#?%\\:*|\x00-\x1f]/

Class Method Summary collapse

Class Method Details

.offending_characters(str) ⇒ Object

含まれる危険文字を出現順・重複なしで返す。



42
# File 'lib/vivlio_starter/cli/image_filename_sanitizer.rb', line 42

def offending_characters(str) = str.to_s.chars.select { it.match?(DANGEROUS_PATTERN) }.uniq

.sanitize(basename) ⇒ String

拡張子を除いた basename から危険文字を除去し、連続 _ を畳む。 削除方式により Einstein's → Einsteins のように自然な名前になる。空なら 'image'。

Parameters:

  • basename (String)

    拡張子を含まないファイル名

Returns:

  • (String)


33
34
35
36
# File 'lib/vivlio_starter/cli/image_filename_sanitizer.rb', line 33

def sanitize(basename)
  safe = basename.to_s.gsub(DANGEROUS_PATTERN, '').strip.gsub(/_{2,}/, '_').sub(/\.+\z/, '')
  safe.empty? ? 'image' : safe
end

.unsafe?(str) ⇒ Boolean

危険文字を含むか。

Returns:

  • (Boolean)


39
# File 'lib/vivlio_starter/cli/image_filename_sanitizer.rb', line 39

def unsafe?(str) = str.to_s.match?(DANGEROUS_PATTERN)