Learning Ruby Caesar Cipher
That's a pretty good start, however I noticed that your code only works on letters. For non-alphabetic characters it returns confusing results e.g. encrypting and decrypting ! gives you ;. I can think of three good ways to handle non-alphabetic characters:


Ignore them
Use ASCII codes to shift them as well (so Z shifted right one becomes [)
Raise an error


Any of those approaches will ensure that decrypting and encrypting are inverses (which should be a property of any cipher!). That also leads you to a nice way to refactor your code: decrypting with a shift of 5 is the same thing as encrypting with a shift of -5. Try rewriting your code to look like this:

def encrypt(str)
  str.split('').map { |char| round(char, @shift) }.join
end

def decrypt(str)
  str.split('').map { |char| round(char, -@shift) }.join
end

private
def round(char, shift)
  # ...
end


Other than that, just a couple tips:


Ways to compare ranges of characters: /[a-z]/i =~ chr or (?A..?Z) === chr
What if @shift is greater than 26? You can use modulus % to account for shifts of any size