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
を壊す。' " & < > は XHTML 属性・実体参照(W14010)。
? % は URL 特殊文字。\ : * | は Windows 不可・zip 移植性。制御文字も対象。
/[()'"&<>#?%\\:*|\x00-\x1f]/
Class Method Summary collapse
-
.offending_characters(str) ⇒ Object
含まれる危険文字を出現順・重複なしで返す。.
-
.sanitize(basename) ⇒ String
拡張子を除いた basename から危険文字を除去し、連続
_を畳む。 削除方式により Einstein's → Einsteins のように自然な名前になる。空なら 'image'。. -
.unsafe?(str) ⇒ Boolean
危険文字を含むか。.
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'。
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
危険文字を含むか。
39 |
# File 'lib/vivlio_starter/cli/image_filename_sanitizer.rb', line 39 def unsafe?(str) = str.to_s.match?(DANGEROUS_PATTERN) |