Обертка для итератора


(Kvokka) #61

основа- это cancan и pundit, где первый даст потом огромный класс, который будет справедливо обхаян тем же rubycritic. pundit более красив в этом, мне он ближе

всегда можно взять warden, как наиболее примитивное нечто. на сколько я помню, под капотом cancan именно он. хотя, повторюсь, я был за pundit. хотя и юзал его последний раз примерно 2 года назад, а ныне все конторские велосипеды.


#62

мне казалось, что cancan давно мертв, вместе с третьими рельсами, почему и пробовал cancancan.

И вот что еще… не подкинешь ли векторных идей, а я попробую реализовать? Хотелось бы сделать в ЛК юзверя симулятор вот такой консоли, как на видео. Понятно, что это не лог, это я puts прописывал в контроллере когда кодил, после экшенов, для дебага и наглядности. Всяких-разных jquery-console как грязи, да можно и на css, вопрос не в этом. Раздумываю, как выводить подобный список действий в контексте только текущего пользователя… чего думаешь? Уж больно капризен Twitter API, врет-не-врет, но и правды не говорит. Живет своей жизнью, зараза… Хотелось бы выводить юзверям инфу о технических действиях, предпринимаемых софтиной именно в плане его твиттер-акка, и никаких других. Что думаешь? Планирую пока что использовать devise, active_admin, cancancan.


(Kvokka) #63

c cancan у тебя потом будет супержирный блок, на который будет рубокоп ругаться. и который не разбить красиво. так-то и фиг с ним. оттого и pundit

вывод вскгого такого барахла придется делать асинхронно, тоесть у тебя все эти запросы прут в очередь и оттуда уже через js обратно вываливаются. если ты совсем модный, то у тебя еще и какая-то хрень для очереди будет, типа rabbitmq. но, это если ты действительно любишь боль


#64

Когда приложение в режиме твиттер-бота начинает ретвитить найденные по заданным хештегам твиты, довольно быстро получаю

ActionDispatch::Cookies::CookieOverflow in TweetsController#index

Суть здесь, в общем, понятна. Вопрос только в оптимальном решении проблемы 4кб в качестве максимального размера cookie. Что посоветуешь, @kvokka , Active Record Session Store гем или что-то иное?

Или, может, снова rescue и ну его нах? :slight_smile: Really, чешу репу.

P.S. Хотя, в свете происходящего во ВКонтакте, даже и не знаю, оставить ли авторетвиты в проге или убрать этот функционал подобру-поздорову… это ж черт знает что из этого выйдет, учитывая конъюнктуру многочисленных расейских судебных процессов “по ретвитам”. Одна надежда, что Твиттер - не говноВКонтакте… ну да все равно, в качестве технической проблемы вопрос интересен.

P.P.S. ДОжили @ля. Пушистый арктический песец.


(Kvokka) #65

если ты в куки гадишь много и жирно, то надо либо прибираться, либо перенастроить контроллер чтобы все было прилично. в любом случае тебе http://api.rubyonrails.org/v5.0/classes/ActionDispatch/Cookies.html сюда и либо запилить expired_at либо чистить руками, либо найти чтобы аккуратно прибирался сам контроллер. за 2 минуты как это сделать я не смог, а выбор между жрачкой с киношкой и кукисами не в пользу последних

на твоем месте я бы это делал как тестовое задание без какого-то продакшена. залочуть и хорошо если только аппу, а то и тебя, как ты сам подметил. не надобно с бешеным принтером заигрывать. ну или в начале трактор, граница… ну ты понел…


#66

оптимальное средство, походу: a session store backed by an Active Record class. Говорят, кто-то получает ошибку null value in column “session_id” violates not-null constraint , но у меня все запустилось без особых проблем. Если не считать за неудобство необходимость время от времени запуска db:sessions:trim - отличная имхо весчь.


(Kvokka) #67

ну если на производительно пофиг, то тогда норм. для эксперимента уж точно норм.
просто все эти сохранения сессии в базе - это как-то не верно, канеш.
похорошему, конечно, я бы все это перенаправил в какой-то вид кеша.
но, если нагрузка низкая и всем насрать то и зашибись. нефиг решать проблему пока ее нет :wink:

красава, что разобрался


#68
  1. rubocop прикольный… я раньше не использовал. Пишу в итераторе условие, if, а он переписывает на next unless. Как думаешь, не опасно ему доверять подобное, я имею в виду

rubocop -a

?
помнится, порой начнешь онлайн в вебе код форматить, глядишь - херак - а он после этого не работает…
Нет, пока все четко. Тестирую как раз.

  1. Код у меня уже сполна ветвится, DRYить надо. Я большую часть в concerns запихал пока, с пыха обожаю куски кода инклюдить… оно и в тему. Правда, на рельсах с этим сложнее. Метод у меня содержит ряд вложенных методов, я бы с удовольствием это инклюдил модулями, да еще и в зависимости от условий. Но вот ведь незадача. Вне метода не работает elsif, а внутри метода не работает include… как справиться с этим противоречием?

(Kvokka) #69

1- когда рубокоп накатывал только (что приходилось делать на нескольких проектах), то был там 1 баг, когда изменилась логика. но, это было быстро исправлено, и если брать версию не напрямую с гита, то имхо норм. рубокоп крут! потом привыкаешь к автозамене и пишешь как курица лапой. но все ровно на выходе красиво :wink: чит жеж

2-если запилил ты какой-то супер-мега-метод, то порой его можно выделить в отдельный класс, куда в качестве стартового контекста ты будешь вводить builder переменную, и отдавать туда self из класса вызова.
вообще include зачастую больше засоряет чем чистит. старайся бить на классы, а не на модули (это не панацея, просто часто так правильнее, особенно после пыхи)


#70

Слегка отрихтовал/отрефакторил, выложил на гитхабе. Буду благодарен, если что, за адекватные отзывы; по возможности не в родном отечественном стиле “сам в полной ж* и другим не дам”, как зачастую принято. Собсно, сам класс, вся логика только в нем. Вьюха на бутстрапе и аяксе, можно быстрехонько оценить на скринкасте. Контроллер - почти дефолтный scaffold (немного изменил, чтоб ограничить доступ юзверей к своим данным только), пашет и шут-то с ним, include main.rb. Как было бы более адекватно инициализировать конфигу, скажите, если кто в теме.

В целом, всего лишь концепт и практически без стилей, написан именно так, как мне было бы с ним удобно работать далее. Если, конечно, работа продолжится, в целесообразности чего не уверен… с каждым днем все сложнее не только использовать токены доступа Твиттера, но даже их получить. Две-три недели, и то еще если пройдешь ручную модерацию, что совсем не факт. Попробовал запросить очередной токен - меня, в свою очередь, попросили показать мои демки - я, в свою очередь, сглупил и отправил ссылки… ответ пришел практически сразу, типа вежливого go to fuck my friend. Такая фигня.


(Kvokka) #71

пока до тебя можно легко докопаться в плане стиля- говорить не о чем.
глобальные переменные, табы, неинформативные имена переменных, забитый болт в DRY = неуважение к тому, кто это обозревает. тесты- не, не слышал.

чесслово, даже если это отлично работает - пофиг.

а тег #putin повеселил, кек. привет фабрике трололо


#72

имхо, @kvokka , трактовать вопрос ламера как неуважение - элементарно говорит за излишне раздутое ЧСВ “того, кто это обозревает”. Так будет логично, ты ведь попросту невежество аффтора, который плохо учился в школах, расцениваешь как им отвешенную пощечину по фейсу кого-то, кто аффтором даже не назван. Вдвойне натянуто… Вызов на дуэль мне не грозит, надеюсь, в ответ на неуважение? - в рашке это ща модно. ))

Я правильно тебя понял, что в парадигме показанного кода невозможно ответить на вопрос, заданный в предыдущем посте, насчет конфига; частного решения здесь не существует? спс что напомнил про $, элементарно забыл убрать… мог бы кстати и заметить, что никакой смысловой нагрузки эти “глобальные” переменные не несут и нафиг здесь не нужны.


#73
@tweets = current_user.tweet
		tweet = @tweets.detect {
			|t| params[:select] == t.name
		}

		config = {
			consumer_key: tweet&.key,
			consumer_secret: tweet&.secret,
			access_token: tweet&.token,
			access_token_secret: tweet&.token_secret
		}