YOSHINO日記

プログラミングに関すること

正規表現とcaseを利用して分類する+α.............

美しいとおもった

実例

読みやすいしキレイ。

def type
  @type ||=
    case content_type
    when /^text/  then 'text'
    when /^image/ then 'image'
    when /^audio/ then 'audio'
    when /^video/ then 'video'
    when /pdf/    then 'pdf'
    else 'file'
    end.inquiry
end

inquiryメソッド

inquiry (String) - APIdock

使い方

 test "inquery type" do
    blob = create_blob data: "Hello world!"
    assert blob.type.text?
    assert_not blob.type.audio?
  end

※create_blobはtest_helper.rbに定義されていてます。

    def create_blob(data: "Hello world!", filename: "hello.txt", content_type: "text/plain")
      ActiveStorage::Blob.create_after_upload! io: StringIO.new(data), filename: filename, content_type: content_type
    end

Ref

Add Blob#type as a StringInquirer · rails/activestorage@801b4eb · GitHub

いや、 blob.type.text?の”type”は冗長じゃない??

すぐ後ろのコミットで思いっきり書き直されていた。。。。。

実例

# Returns true if the content_type of this blob is in the image range, like image/png.
  def image?() content_type =~ /^image/ end
   # Returns true if the content_type of this blob is in the audio range, like audio/mpeg.
  def audio?() content_type =~ /^audio/ end
   # Returns true if the content_type of this blob is in the video range, like video/mp4.
  def video?() content_type =~ /^video/ end
   # Returns true if the content_type of this blob is in the text range, like text/plain.
  def text?()  content_type =~ /^text/  end

使い方

test "text?" do
  blob = create_blob data: "Hello world!"
  assert blob.text?
  assert_not blob.audio?
end

Ref

activestorage/blob_test.rb at a91bb13b8d5b7e3a75feed23e76121c516116d35 · rails/activestorage · GitHub