attr_reader :name не про задание прав чтения. Это просто короткая запись для объявления метода, все что он делает, это сам объявляет метод для чтения, аналог
def name
@name
end
attr_writer :name объявляет
def name=(value)
@name = value
end
attr_accessor :name объявит сразу оба метода. move у Вас это уже метод, который работает с внутренними данными, он инкапсулирует их. Поэтому он объявлен как метод.
На самом деле в руби все методы, в руби извне нельзя прочитать атрибут без объявленых методов. move же похож на просто метод, привычный из других ЯП. Его задача скрыть внутреннюю амплементацию класса и предоставить интерфес для работы с ним