Ваш простой вопрос не так прост, как кажется.
Недостаток инстанс переменных в том, что по умолчанию они имеют значение nil и поэтому возможно пропустить опечатку. К этому многие приходят, потому что рано или поздно пишут код, в котором для инстанс переменной допустимо значение nil, а оно там всегда nil из-за опечатки. Инстанс переменные хороши для мемоизации, но их использование лучше сократить до минимума.
В данном случае нет идеального решения, потому что в руби нельзя объявить приватный setter.
Т.е. в следующем коде
class Log_parse
attr_accessor :dir
def initialize
self.dir = ""
end
end
руби не поймет, что вы из одного и того же класса вызываете сеттер. self считается объектом, а вызов через точку - вызовом публичного метода. Идеальный вариантом был бы случай, когда вы отдельно определяете отдельно публичные аксессоры, отдельно приватные и пользуетесь только аксессорами, но в руби так сделать нельзя (без костылей по крайней мере).
В итоге совет следующий:
В остальных методах класса использовать только аксессоры - публичные или приватные.
В конструкторе уже возможны варианты. Если вы считаете, что объявление публичных аксессоров никак не навредит классу, лучше использовать аксессоры. Иначе - инстанс переменные.