Search code examples
rubyregexsubstring

Check if string contains any substring in an array in Ruby


I am using the Tmail library, and for each attachment in an email, when I do attachment.content_type, sometimes I get not just the content type but also the name. Examples:

image/jpeg; name=example3.jpg

image/jpeg; name=example.jpg

image/jpeg; name=photo.JPG

image/png

I have an array of valid content types like this:

VALID_CONTENT_TYPES = ['image/jpeg']

I would like to be able to check if the content type is included in any of the valid content types array elements.

What would be the best way of doing so in Ruby?


Solution

  • I think we can divide this question in two:

    1. How to clean undesired data
    2. How to check if cleaned data is valid

    The first is well answered above. For the second, I would do the following:

    (cleaned_content_types - VALID_CONTENT_TYPES) == 0
    

    The nice thing about this solution is that you can easily create a variable to store the undesired types to list them later like this example:

    VALID_CONTENT_TYPES = ['image/jpeg']
    cleaned_content_types = ['image/png', 'image/jpeg', 'image/gif', 'image/jpeg']
    
    undesired_types = cleaned_content_types - VALID_CONTENT_TYPES
    if undesired_types.size > 0
      error_message = "The types #{undesired_types.join(', ')} are not allowed"
    else
      # The happy path here
    end