Программирование


Ответить в тред Ответить в тред

<<
Назад | Вниз | Каталог | Обновить тред | Автообновление
573 26 158

The Ruby Programming Language /ruby/ Аноним 10/01/19 Чтв 17:47:12 13244371
ruby.png (57Кб, 550x550)
550x550
rails.png (30Кб, 400x400)
400x400
taric.jpg (213Кб, 1410x1080)
1410x1080
СЛОУНОВОСТИ
Ruby 2.6 introduces an initial implementation of JIT (Just-in-time) compiler
Ruby 2.5 has removed top level constant lookup
Ruby 2.5 requires pp by default
Ruby 2.5 added lazy proc allocation for block parameters
Ruby 2.4 unifies Fixnum and Bignum into Integer

Предыдущий тред: https://2ch.hk/pr/res/1272457.html

ИЗУЧЕНИЕ ЯЗЫКА
Q: C чего мне начать, чтобы стать рубистом?
A: Отличным началом будет Programming Ruby (The Pragmatic Programmers Guide), читать Eloquent Ruby и The Well Grounded Rubyist после прочтения первой толку особо не даст, одни и те же вещи, дальше читаем Ruby Way, затем познаем метапрограммирование с Metaprogramming Ruby.
А дальше открываем Ruby cookbook 2015 года, Пишем свой код во время чтения.

Q: Следующий уровень, продвинутые книги по руби:
A: Confident Ruby by Avdi Grimm | Practical Object-Oriented Design in Ruby
Refactoring Ruby Edition | Ruby Under a Microscope

Q: Онлайн курсы чтобы попробовать/вкатиться:
A: http://tryruby.org/levels/1/challenges/0/ | https://rubymonk.com/
http://www.codewars.com/?language=ruby | http://rubykoans.com

Q: Какой gem посмотреть, чтобы понять, как писать код?
A: Лучше всего посмотреть небольшие gem'ы вроде cancancan, pundit, camping.
Еще можешь полистать на гитхабе гемы с нарастающей популярностю (там еще нет тысяч строк, и тебе будет легче понять): https://github.com/trending?l=ruby

Q: Хорошие практики по руби и рельсам?
A: Обязательно стайлгайды (как оформлять код):
https://github.com/bbatsov/ruby-style-guide
https://github.com/JuanitoFatas/fast-ruby
https://github.com/bbatsov/rails-style-guide

Руководства "для чайников":
https://www.railstutorial.org/book [en]
http://www.theodinproject.com/ruby-on-rails [en] | http://codenamecrud.ru/ [ru]

Q: Документация по стандартным библиотекам руби и рельс:
A: http://ruby-doc.org/ | http://api.rubyonrails.org
http://guides.rubyonrails.org | http://ruby.railstutorial.org

Q: Можно ли на руби писать нативные GUI, мобильные приложения, игры?
A: Нет.

Q: Что ещё изучить?
A: Английский, git, linux. Паттерны. Один из часто используемых - Service Object.

СРЕДА РАЗРАБОТКИ
Q: Как установить разные версии рубей?
A: https://rvm.io | https://github.com/sstephenson/rbenv
Аноним 10/01/19 Чтв 19:39:21 13244952
в шапку надо было добавить скорый приход РоР 6
Аноним 11/01/19 Птн 00:53:55 13246963
Тесты

Вот скажите, где золотая пуля?
В рельсах есть так называемые фикстуры - пишешь в ямле объекты и используешь их в своих тестах.
Еще есть FactoryBot - описываешь так называемую фабрику и она при помощи лаконичного вызова генерит объекты.
Практически безапеляционно побеждают фабрики ибо позволяют генерить любые наборы, под нужную ситуацию, что было бы просто нереально захардкодить фикстурами.
Ок.
Но есть задачи со сложной предметной областью: когда у моделей/проекта есть жизненный цикл с множеством состояний и ветвистый процесс. И чтобы протестировать программу в конкретной точке, недостаточно просто сгенерить несколько объектов. А нужен весьма большой сетап из нескольких моделей (не двух и не трех), со взаимозависимыми (!) стейтами и с кучей подчиненных объектов.
Если это делать при помощи фабрик, то уже третья ассоциация становится адом. И это только иерархия, без учета количества объектов и свойств связанных объектов. Отдельная боль это валидации, ведь фабрики должны быть валидными очевидно нехуй держать валидации в моделях.

Каждый раз когда я попадаю в такую ситуацию, я охуеваю.
Вопрос - есть ли какая-либо практика для таких случаев, когда нужно тестировать сложные контексты в разных точках жизненного цикла?

PS
И еще один смежный вопрос. Вот в Рспеке есть стабы и запись типа allow_any_instance_of to_recieve... И оговорка, что вообще-то это прием для легаси кода, и этого надо избегать.

А как же избегать, если тестируемые процессы много от чего зависят. Ну например какой-нибудь сервис-обджект, который использует другой сервис-обджект, оба используют квери-обджекты и еще используют полиси-обджекты. Уже дохуя, хотя все примитивно. И мы хотим протестить наш SO. И чтобы не моделировать сложные контексты для этих вложенных сервис/квери/полиси-обджетов (ибо тестируем не их) мы берем их и стабаем с нужным результатом - чтобы получить нужную ситуацию.

А если не стабать, то как тогда? Dependency Injection? Но в таком случае наш объект помимо своих основных параметров должен принимать еще штук пять DI-инъекций. Код превратится во что-то неперевариваемое.

Аноним 11/01/19 Птн 13:32:46 13249104
тема для срача
Django vs RoR
Аноним 11/01/19 Птн 20:01:03 13251635
>>1324696
>Вопрос - есть ли какая-либо практика для таких случаев, когда нужно тестировать сложные контексты в разных точках жизненного цикла?
В текущем проекте пишем методы которые создают объекты/добавляют стабы и вызываем их потом в before. Причем может быть много небольших методов создающих только небольшие части контекста и на их основе уже строятся более сложные методы. Все эти методы принимают один хеш с настройками, если метод составной, то он соответственно, передает этот хеш ниже. Не то что бы идеальное решение, но в проекте уже 10к+ тестов и пока полет нормальный.

>А если не стабать, то как тогда? Dependency Injection?
DI в руби не нужен, я считаю, это не джава, где все гвоздями прибито. По-моему это они на волне хайпа DI года 3 назад решили написать, что allow это плохо. А так сколько я не работал, везде в тестах были allow, использование DI в продакшене проектах не видел ни разу. Хотя злоупотреблять allow тоже не стоит, а то вполне могут получится тесты, которые только стабы одни и тестируют, а не реальный код.
Аноним 11/01/19 Птн 20:05:43 13251716
>>1324910
Я на django никогда не писал, но слышал, что батареек в нем меньше, чем в рельсах. И спрашивается зачем он тогда нужен? Если уж отказываться от батареек и писать не на руби, то лучше взять сразу какой-нибудь kotlin со спринг бутом или ktor, а не такой же тормозной питон.
Аноним 11/01/19 Птн 22:06:33 13252237
интересно, 6 рельсы будут жрать ресурсы как черная дыра?
Аноним 11/01/19 Птн 22:24:00 13252308
35575708.jpeg (44Кб, 770x433)
770x433
Аноним 12/01/19 Суб 00:58:29 13252929
>>1325163
>злоупотреблять allow тоже не стоит, а то вполне могут получится тесты, которые только стабы одни и тестируют
Там кстати нужно включить настройку, какую не помню, чтобы проверялась сигнатура, то есть чтобы проверялось существование застабаных методов.
Аноним 12/01/19 Суб 01:00:47 132529510
>>1325171
Зато вакансий причем годных дохуя. А по рельсам уже второй год висят одни и те же 15 вакансий на легаси-проекты аля "доработка функционала, фиксинг багов".
Аноним 12/01/19 Суб 11:58:38 132541811
>>1325295
Вакансии на питоне могут неплохие на МЛ быть, а веб-параша, она и есть веб-параша. Скинь парочку что ли, а то я проскролил первую страницу hh с поиском по django и ничего годного не нашел.
Аноним 12/01/19 Суб 12:13:37 132542712
>>1325418
Просто зашел на фрилансим, смотрю что есть по руби - ну буквально задачи четыре. Потом смотрю питон - а там несколько страниц. Ну я и экстраполировал это на вакансии.
Да и так я частенько видел годноту на питоне. Мапс.ме относительно недавно видел, например, и вообще мейловые вакансии часто встречал.

Кстати, у меня такое ощущение, что в питере больше рубишных вакансий, вам не кажется?
Аноним 12/01/19 Суб 12:19:48 132543013
Посоны, а что случилось с rubyjobs.ru? Я раньше там мониторил буржуйские вакансии для вань, а теперь хуй.
Аноним 12/01/19 Суб 12:22:09 132543214
>>1325295
вопрос был про техническую составляющую
Аноним 12/01/19 Суб 12:48:01 132544415
>>1325427
>фрилансим
Так-то да, русскоязычный фриланс на руби мертв, но он всегда был мертв, хочешь фрилансить на руби, идешь на апворк.

>Мапс.ме относительно недавно видел, например, и вообще мейловые вакансии часто встречал.
У нас, наверное, разное понятие годноты, хотя в мапс.ме может быть и неплохо. Но вообще вся годнота требует знаний в релевантной области, ЯП знать там зачастую достаточно на поверхностном уровне.

>Кстати, у меня такое ощущение, что в питере больше рубишных вакансий, вам не кажется?
Нет, в ДС явно больше.
Аноним 12/01/19 Суб 13:35:18 132546016
мертвый тред мертвого языка
Аноним 12/01/19 Суб 15:38:24 132551317
>>1325430
Переехал в телеграмм. Ищи там одноимённый канал.
Аноним 12/01/19 Суб 15:42:00 132551518
Я сам не местный, короче рубибои объясните, как вы делаете что в терминале процент загрузки например пишется в этой же строчке а не в новой. Типа
$ update
modulname updating 98% и проценты как бы в одной строчке меняются
а не
$ update
modulname updating 95%
modulname updating 96%
modulname updating 97%
то есть не пишет постоянно в новой строчке
Аноним 12/01/19 Суб 16:30:24 132553419
>>1325515
print и возврат каретки в строке. Наверное есть и другие способы.
Аноним 12/01/19 Суб 20:17:12 132567120
>>1325534
\r ? А в Рубях stdout не кешируется?
Аноним 12/01/19 Суб 22:34:49 132575821
>>1325671
Кешируется. Делай или STDOUT.flush или STDOUT.sync = true. Но убедись, что понимаешь последствия второго варианта перед тем как его использовать.
Аноним 12/01/19 Суб 22:57:38 132576722
>>1325758
А где можно вообще про stdout прочитать по этой теме?
Аноним 12/01/19 Суб 23:05:08 132577023
Аноним 13/01/19 Вск 01:50:41 132581024
Хочу вкатиться в Ruby. Какой стек технологий и на каком уровне необходимо освоить, чтобы взяли на работу трейни/джуном?
Аноним 13/01/19 Вск 07:30:43 132584625
>>1325810
Рандомный (стандартный стек осваивай: реальса реакт скуль линукс охапка популярных гемов) стек осваивай, руби джун вакансий настолько мало, что это чистый рандом в россии.
Как вариант набери опыта в PHP-конторе.
Аноним 13/01/19 Вск 12:52:20 132593526
Аноним 13/01/19 Вск 13:44:22 132596027
Посоветуйте книгу для быстрого изучения основ языка. Лучше на русском, но можно на английском.

Нужно для экзамена в университете.
Аноним 13/01/19 Вск 15:11:39 132598428
>>1325960
странный университет
Аноним 13/01/19 Вск 15:37:41 132598929
>>1325984
Согласен
Курс был рассчитан на изучение основ веб программирования и Ruby on Rails

По итогу было прочитано много материала по рельсам, но есть непонимание самого языка, поэтому реквестирую книгу по чистому руби без упоминания рельс.
Аноним 13/01/19 Вск 20:54:41 132619030
Аноним 14/01/19 Пнд 00:43:32 132635931
Эх, как вы здесь, без меня потомки? Даже старый файлик с перекататом сохранился у меня.

1. C чего мне начать, чтобы стать рубистом?
Отличным началом будет Programming Ruby (The Pragmatic Programmers Guide), читать Eloquent Ruby и The Well Grounded Rubyist после прочтения первой толку особо не даст, одни и теже вещи, дальше читаем Ruby Way, затем познаем метапрограммирование с Metaprogramming Ruby. А дальше открываем Ruby cookbook 2015 года, Пишем свой код во время чтения.

Следующий уровень, продвинутые книги по руби:
Confident Ruby by Avdi Grimm
Practical Object-Oriented Design in Ruby
Refactoring Ruby Edition
Ruby Under a Microscope для любителей залезть под капот.
Документация по стандартным библиотекам http://ruby-doc.org/
Можно пройти руби онлайн - http://tryruby.org/levels/1/challenges/0
И ещё раз онлайн: http://www.codewars.com/?language=ruby
Не веришь в свои силы? Прочитал уже книжек много и силы свои хочешь познать, сделай - http://rubykoans.com
И вот еще https://rubymonk.com/ - Матц одобряет.

2. Какой gem посмотреть, чтобы понять, как писать код?
Лучше всего посмотреть небольшие gem'ы вроде cancancan, pundit, camping.
А еще можешь полистать на гитхабе гемы с нарастающей популярностю.
https://github.com/trending?l=ruby
Там еще нет тысяч строк, и тебе будет легче понять.

3. Есть ли GUI для руби?
Да. Есть обвязки к Qt, GTK, wxWidgets, Shoes, fxruby (одобренный).

4. Можно ли писать на руби мобильное ПО?
Да. Для iOS есть RubyMotion терпимого качества, для Android - лагающий и падающий, но всеми силами развивающийся ruboto. Для WinPhone до сих пор ничего не завезли.

5. Как установить разные версии рубей?
Легко и просто: https://github.com/sstephenson/rbenv
И это тоже, легко и просто: https://rvm.io

6. Что почитать по рельсам?
http://guides.rubyonrails.org
http://ruby.railstutorial.org
API: http://api.rubyonrails.org
Прекрасные туториалы в стиле for dummies - http://www.theodinproject.com/ruby-on-rails , а вот тут все тоже, но на русском http://codenamecrud.ru/
Классический вводный туториал, где делается с нуля клон твиттера, для новичков в rails самое то - https://www.railstutorial.org/book
Для дотошных читателей есть The Rails 4 Way.

7. Хорошие практики по руби и рельсам?
Читаем Rails AntiPatterns, смотрим Rails Best Practices, также неплохо посмотреть Rails Recipes.
Почитайте еще Grimm A. - Objects on Rails
Еще продвинутое чтиво - http://tutorials.jumpstartlab.com/

8. Ruby/Rails блоги, рассылки и твитторы
IRC каналы на FreeNode: #ruby, #ruby-core, #RubyOnRails, #rails (не очень активен).
Твитторы @rails, @dhh, @yukihiro_matz, @wycats, @tenderlove
Рассылки ruby-core, rails-core, rails-talk
Подкасты:
- http://rubyrogues.com
- http://ruby5.envylabs.com
Скринкасты:
- http://railscasts.com
- https://peepcode.com
- https://www.destroyallsoftware.com
- http://railsforzombies.com
Блоги:
- rubyflow.com - каждый день новости, новые библиотеки, обновления, все дела.
- rubysource.com - читаем интервью, хорошие практики, и безумные сравнения упоротого дибила-индуса на самом деле их пропускаем
- rubyinside.com - новости, туториалы.
- rubyweekly.com
- http://37signals.com/svn
- http://yehudakatz.com
- http://afreshcup.com


9. Я не могу в английский, что делать, анон?
Идти учить английский, без него тут делать нечего.

10. Есть ли у руби русское коммьюнити?
Нет. Вернее есть, но оно протухло и там полно людей у которых чсв высоко.
Яркий пример - ruby@conference.jabber.ru
А еще есть русская слак конфа - https://russiandevs.slack.com она общая, но есть очень активный руби канал.
Так же русская гугл группа, активная - https://groups.google.com/forum/#!forum/ror2ru
Еще вот - https://onrails.club/

11. Какие гемы стоит знать?
capybara, rack, rspec, devise, cancancan, simple_form, solr, sinatra, тысячи их.
Поиск гемов https://www.ruby-toolbox.com

12. Зачем нужны тесты и как их писать?
http://rusrails.ru/a-guide-to-testing-rails-applications
http://habrahabr.ru/post/163597/
Вместо этого можно прочитать классную книгу Everyday Rails Testing

13. Где можно задать глупые и не очень вопросы?
- здесь
- stackoverflow.com
- тематические slack-конфы
- а вообще, гугли, с вероятностью в 90% ответ на твой вопрос уже висит на stackoverflow.

14. Как фокнуть\сделать фичу\исправить баг, сложно ли это?
Нет, не сложно. На rubyflow появляется много новостей с реализацией новой библиотеки, вы можете сделать тесты, фичу для него, старые либы также обрастают багами, улучшайте их! пишите код.

15. В чём писать код?
Atom, Brackets, Sublime Text, TextMate, Vim, GNU Emacs. Для особо упоротых энтерпрайз-макак есть rubymine, плагины к эклипс и нетбинс.

16. Можно ли писать на руби с под windows?
Можно, но придется обрасти костылями в виде виртуальной машины, придется сходу разбираться с Vagrant и многим другим. Чем дальше ты продвигаешься, тем ближе становится ясно, что пора перекатываться на linux/mac

17. Руби язык одного фреймворка?
Есть еще Sinatra, Hanami (ранее Lotus), Volt, Grape, отличные штуки для DevOps - Chef, Puppet и годные генераторы для бложиков - Jekyll, Middleman, всё это активно используется в продакшене

18. Можно ли делать игры на Ruby?
Можно, но не нужно. Гем Gosu.

19. Ютуб каналы
Youtube driven development...
Вот тебе пара каналов, но никому не говори что учишься по видео.
https://www.youtube.com/channel/UCIQmhQxCvLHRr3Beku77tww/videos
https://www.youtube.com/channel/UCfWZwsP8trUy5uHJg8gcGIQ
https://www.youtube.com/channel/UCSI77lJlzlCFPLdV1RSAoYQ
https://www.youtube.com/channel/UCPIyDzf1vwWc8EQJGUX-vYw - тут на ру$$ком даже.

20. Как и где искать работу?
Легко и просто - http://rubyjobs.ru/
Не так просто - https://upwork.com/
Еще вконтакте есть группы по руби/рельсам, там иногда постят вакансии. Еще в русской гугл группе постят вакансии. Новичку будет сложно, но возможно.

TODO лист для ньюфагов:
И так, ты поставил руби, уже сгенерировал свой первый проект rails new pidaras
Начни уже с платинового пути, блог >> клон твиттера >> своя имейджборда >> свой гем >> дальше сам придумаешь.
Рекомендации:
1. Для блога, создать роли, Админ, Пользователь (можно использовать паттерн form object). Прикрутить лайки, комментарии.
2. По твиттеру, следуя гайду Хартла, пиши все то что он предлагает в качестве доп. заданий, например оповещение по нику (@eblan: привет)
3. По имиджборде: воссоздать по возможности полный функционал, в этом случае придется ознакомится с javascript/jquery/coffeescript, но тебе так или иначе придется. Еще хорошей фичей будет использование background job и крон тасков (sidekiq, whenever), чтобы заполнять свою борду тредами и постами с другой борды, можно использовать api двача, чтобы вытягивать треды и посты - https://github.com/ID25/api_2ch
4. Не стесняемся постить свои репозитории, наши эксперты с радостью отревьювят вас.

После этого тебе будут нужны паттерны, без них твой код превратится в говно. Один из часто используемых - Service Object.
https://netguru.co/blog/service-objects-in-rails-will-help - о сервисах
Еще паттернов - https://robots.thoughtbot.com/back-to-basics-solid

Но самый читаемый код, как и следовало ожидать, даёт функциональное программирование. Начни отсюда:
http://www.sitepoint.com/functional-programming-techniques-with-ruby-part-i/
http://www.sitepoint.com/functional-programming-techniques-with-ruby-part-ii/
http://www.sitepoint.com/functional-programming-techniques-with-ruby-part-iii/
http://www.sitepoint.com/functional-programming-pure-functions/
http://www.sitepoint.com/functional-programming-ruby-value-objects/
Только не переборщи. Руби - не функциональный язык, и иногда такой код может работать медленней.

Прочитал? Теперь рефактори то, что уже написал. И не забывай покрывать тестами.

Хорошим финалом будет деплой, это пожалуй самое болезненное, и ничего общего с деплоем на heroku, где тыц тыц и готово. Придется поковыряться со смежными вещами и узнать много нового, уже устоявшийся гем для таких дел - Capistrano.

Не забывайте спрашивать у анонасов вопросы, код лучше показывать через gist или pastebin с подсветочкой.
Ну, а мы открываем очередной Ruby Thread.
Аноним 14/01/19 Пнд 00:48:01 132636232
>>1326359
А нафиг ты это протухшее говно притащил?
Все течет, все меняется, анон.
Аноним 14/01/19 Пнд 00:58:21 132636833
>>1326362
На самом деле ты прав. Хотел вспомнить свои влажные мечты далекого 15 года.

Сейчас увы из-за рынка пришлось перекатится на голанг. Да и платят чуток выше.
Аноним 14/01/19 Пнд 09:02:13 132646534
>>1326359
Твой гайд великоват. Лучше бы чаще сидел тут.
Аноним 14/01/19 Пнд 16:12:45 132661235
>>1326368
Рассказывай как перекатывался, интересно же
Аноним 14/01/19 Пнд 17:07:30 132663636
>>1324696
>А если не стабать, то как тогда? Dependency Injection? Но в таком случае наш объект помимо своих основных параметров должен принимать еще штук пять DI-инъекций. Код превратится во что-то неперевариваемое.

dry-rb
https://www.icelab.com.au/notes/effective-ruby-dependency-injection-at-scale/

Аноним 14/01/19 Пнд 17:28:20 132664437
>>1326636
>dry-rb
Пробовал использовать. Какое-то оверинжиниред говно по ощущением. Только валидации и транзакции более-менее понравились.
Аноним 14/01/19 Пнд 18:19:05 132667238
>>1326644
Оно говно, если не писать в стиле автора гемов, но тебе не нужно юзать весь стек, возьми только то, что добавили там для DI
Аноним 14/01/19 Пнд 18:55:02 132668839
>>1324696
>Но есть задачи со сложной предметной областью: когда у моделей/проекта есть жизненный цикл с множеством состояний и ветвистый процесс.
Если тебе сложно написать тест для юнита(класс, контроллер, модель, неважно), то значит этот модуль делает слишком дохуя вещей. И лучшее решение в этом случае - это НЕ продолжать писать сложные тесты и думать, какими фабриками-хуябриками их можно сделать читабельнее, а упростить сам юнит. То есть вынести из него часть логики, протестировать эту логику отдельно, а в тесте для юнита проверять только то, что эта логика используется в принципе.
>Вот в Рспеке есть стабы и запись типа allow_any_instance_of to_recieve... И оговорка, что вообще-то это прием для легаси кода, и этого надо избегать.
>А как же избегать, если тестируемые процессы много от чего зависят.
Ну зависят, ииии что? Тестировать надо не объект, а юзкейс. Если твой юзкейс - это создать пользователя в базе, то тесты будут выглядеть вот так:
1) GIVEN такие-то параметры
1) WHEN я вызываю кусок публичного API(например публичный метод класса, POST /users, обычная функция, и т.д)
2) THEN В базе создается юзер с такими параметрами и API возвращает мне юзера в таком формате

Это все. Тест пишется ТОЛЬКО с позиции пользователя API, будь то юзер на сайте или программист. И соответственно в тесте должна быть только та информация, которая доступна пользователю API. Там не должно быть хуйни вроде "если у меня замокан вот этот класс, замокана БД и вот эта переменная выставлена на 0, то метод в классе вернет :sosi_hui". Потому что это не то, как пользуются твоим API.

Пример вещей, достойных моканья:
1) То, над чем ты не имеешь контроля в принципе, как API стороннего сервиса, например web API ютуба
2) Кусок легаси кода, который ты переписываешь, но не планируешь менять вообще
Пример вещей, недостойных моканья:
1) БД
2) Любой собственный код в проекте
3) Любой сторонний код в проекте(либы)

Заодно можешь посмотреть отличное выступление, где все эти вещи объясняются более подробно:
https://www.youtube.com/watch?v=EZ05e7EMOLM
Аноним 15/01/19 Втр 02:10:42 132692240
>>1326636
>>1326644
Блять, пиздец просто. Не дай бог после таких проект поддерживать.
Когда кто-то предлагает драй на полном серьезе, это повод задуматься не то что о профпригодности, а о вменяемости человека.

>>1326688
Сори, но ты какой-то теоретик в вакууме с предрасположенностью к наставничеству.
Написано же было в посте "когда есть сложный контекст".
Ну усложни свой пример с созданием пользователя тем, что в случае, если на данный момент недоступен сервис проверки паспорта, то API должно вернуть failure с соответствующим сообщением/кодом.
Добавь условие, что если сейчас закрыта регистрация, то опять же соответствующая ошибка.
Добавь условие, что "регистрация закрыта" вычисляемое условие. Например конкурс завершен или на конкурсе уже достаточно заявок или на конкурсе уже выбраны команды или на текущем конкурсе только в обеденный перерыв можно регаться.
Добавь условие про количество невалидных попыток.
И тд и тп. Это еще примитивный случай, тут нет жизненного цикла.

Что нам поможет? Либо охуевший DI либо стабы.
Либо, если не все идеально распихано по модулям и функциям и нечего застабать, то придется моделировать состояние системы. Его иногда и так придется моделировать.

Офтопом:
>Если тебе сложно написать тест для юнита(класс, контроллер, модель, неважно), то значит этот модуль делает слишком дохуя вещей.
Я, конечно, понимаю, что это была дежурная цитата. Все так, безусловно. Но наверняка найдется будущий художник фрактальных котов. Для таких хочется напомнить про
>Ravioli code is a term specific to object-oriented programming. It describes code that comprises well-structured classes that are easy to understand in isolation, but difficult to understand as a whole.
Аноним 15/01/19 Втр 02:20:10 132692641
>>1326922
PS: Извиняюсь за резкость на счет драя. Анон вероятно просто хотел указать на решения по инжекту. Но драй очень дерьмовое решение, использующим его нет оправдания.
Аноним 15/01/19 Втр 02:51:20 132693442
>>1326922
Я тебе наоборот дал самые практические советы из личного опыта TDD с минимумом теорий.
>Ну усложни свой пример с созданием пользователя
Эти проверки выносятся в отдельный модуль/класс, как только ты понимаешь, что через контролер их тестировать неудобно, и в итоге контролер вызывает, например метод check_registration_availability, внутри которого проверяется что угодно: открытая/закрытая регистрация, предыдущие попытки, доступность API. Контролер не ебет, что там проверяется, он просто знает, что если метод вернул availability.success? == true, то можно продолжить регистрацию, если false, то отрендерить availability.errors и завершить выполнение запроса. Внутри модуля проверок их точно так же можно вынести в свои отдельные модули, как только тестировать нюанс каждой проверки становится неудобно.

И соотвественно в тестах для контроллера тебе достаточно добавить один простой кейс, что доступность регистрации проверяется в принципе, и что пользователю возвращаются какие-то ошибки, если регистрация недоступна. Потому что это как раз ответственность контроллера. Без нюансов, т.к нюансы уже покрыты в тестах для другого модуля. Я в таких случаях обычно беру из модуля регистрации самый простой юзкейс, который почти наверняка не поменяется, и дублирую его в тесте для контроллера. Либо, если тебе очень не хочется дублировать, то можно вынести данный юзкейс тоже в отдельный модуль и использовать его в обоих тестах. Моки тут только навредят.

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

Хз, как можно еще более подробно расписать, разве что только кодом.
Аноним 15/01/19 Втр 06:11:28 132697043
>>1326926
>Но драй очень дерьмовое решение, использующим его нет оправдания

Почему?
15/01/19 Втр 17:42:47 132728444
Аноним 15/01/19 Втр 17:45:11 132728645
Аноним 15/01/19 Втр 19:58:25 132738246
уже давно пытаюсь во что-нибудь вкатиться и вдруг Постиг понимания что кристал крайне многообещающий проект, и странным образом он практически полностью(?) идентичен по синтаксису с раби. Посмотрел примеры кода на rosettacode, и на кристале они ясны практически как божий день, в отличие от остального туманного говна, в которое надо изрядно вникать. даже в питоноподобную хуйню, она же нечитабельна по сравнению с кристало-раби, ну совсем не читабельна же Проект молодой, но, сука, донатов на него в bountysource $2,502 против $856 на Nim. Который мне, как ньюфагу, поначалу казался охуенно любопытным продуктом.
забыл блядь что хотел спросить

Так вот. Мне вообще похуй на веб и всё такое, у меня бекграунд вообще музыкальный, то есть частично хотелось бы заниматься DSP обработкой, и я знаю что там царит сплошной с++. Но я минималист.
И глядя на то как, сука, прост код фурье обработки на кристале, может быть и двигло на нём было бы не настолько сложно какое-то (на/до)писать, чтобы сделать, к примеру, 2D игрушку? (вопрос по сути риторический)
https://rosettacode.org/wiki/Fast_Fourier_transform#Crystal
Вроде и под андроид есть для раби какие-то обёртки.

не знаю нахуя я это написал, мне по сути нечего спросить, запосчу просто так
Аноним 15/01/19 Втр 20:11:55 132739247
>>1327382
Хочешь веб и руби - бери эликсир. Хочешь андроид - бери жабу. Хочешь сам не знаешь что - бери питон. "Читабельность" зависит только от уровня твоего знакомства с синтаксисом и от опыта программиста, который писал код, в любом языке.
Аноним 15/01/19 Втр 20:17:57 132739948
>>1327392
>"Читабельность" зависит только от уровня твоего знакомства с синтаксисом и от опыта программиста
Нет. Код на каком-нибудь коболе может быть читабельным по-сравнению с другим кодом на коболе, но он никогда не станет таким же читабельным как аналогичный код на том же руби. Потому что в коболе на уровне синтаксиса языка нету возможности написать такой же читабельный код.
Аноним 15/01/19 Втр 20:36:42 132740549
>>1327392
осилить все можно все-вопрос во времени и информации по теме
Аноним 15/01/19 Втр 20:43:04 132740850
>>1327392
>Хочешь веб и руби - бери эликсир
точнее феникс
Аноним 15/01/19 Втр 20:46:25 132741151
>>1327399
Если у тебя дохуя опыта написания кода на коболе и дохуя написания кода на руби, то синтаксические конструкции ты будешь читать и понимать с одинаковой скоростью, что там, что там. Это и есть читабельность, она всегда личная и зависит от опыта. Дальше вопрос только в выразительности языка на строчку кода.
Аноним 15/01/19 Втр 20:48:31 132741252
>>1327408
Точнее эликсир. И слава богу, что феникс не пошел по пути рельс, когда экосистема фреймворка подменяет собой экосистему языка.
Аноним 15/01/19 Втр 20:50:39 132741353
>>1327411
ну согласись,на руби приятнее читать,код чист от нагромождений,более логичен для человеческого мозга
Аноним 15/01/19 Втр 21:01:16 132741854
Julia-1.png (118Кб, 850x1024)
850x1024
Julia-2.png (91Кб, 848x1024)
848x1024
Julia-3.png (201Кб, 848x1024)
848x1024
>>1327382
Не надо C++ нет нет нет нет не надо больше нам такого, теперь есть Julia, она умеет на видеокартах считать. И синтаксис на Ruby похож.
Аноним 15/01/19 Втр 21:52:03 132745055
>>1327418
Знаю про юлию, но как-то не зашла она у меня с позиции новичка. Возможно потом зайдёт после кристало-раби питоноподобный синтаксис (он же в юлии питоноподобен, а не раби-подобен, если я правильно понимаю) удобен для того чтобы на нём писать бухим в говно, но не для того чтобы его потом кто-то читал? Я же предполагаю что мне придётся всё таки читать чей-то код, его фиксить, а если он прям щас у меня почти что зашёл, без знания языка, так потом вообще нормально будет, кпд на единицу времени по итогам будет выше(?)
Аноним 15/01/19 Втр 22:34:39 132747756
>>1327450
Писать читаемый код - это огромная наука, которую можно освоить только на практике, написав перед этим тонны нечитаемого говна. От языка это зависит очень мало, ты все равно будешь писать хуйню и потом хвататься за голову, когда эту хуйню нужно будет через неделю прочитать и вспомнить, что она делает. Хоть на руби, хоть на джаве. Так что не заебывайся, выбирай язык под задачу, а не по красивости синтаксиса, и иди практикуйся. Потом можешь еще почитать всякие code complete, clean code, чтобы подхватить и сопоставить со своим опытом уже сформулированные концепции по написанию читаемого кода, но полезны они будут только после/во время практики, а не перед ней.
Аноним 15/01/19 Втр 22:51:12 132748357
>>1327418
julia не нужна, потому что есть numba
Аноним 15/01/19 Втр 23:54:45 132752458
>>1326934
>Эти проверки выносятся в отдельный модуль/класс
>соотвественно в тестах для контроллера тебе достаточно добавить один простой кейс, что доступность регистрации проверяется в принципе
Так а я разве отрицаю? Но мы и приходим к стабам
allow_any_instance_of(SomePolicy).to receive(:check_registration_availability).and_return(true)

При том это мы говорим об идеальном допущении, что логика была грамотно осознана и структурирована, а внутри SomePolicy отрабатывает еще десяток (без преувеличения, именно для нашего примера) других SubPolicy и все их получилось (!) органично собрать в единый механизм, сведенный к единственному методу.

То есть должна быть очень сильная декомпозиция. Например, в коде тестируемого сервис-обджекта не может быть ничего подобного:
policy = @user.legal_status == 'phisical' ? PhisicalPolicy : JuridicalPolicy
А вместо этого будет обертка типа LegalPolicy:
policy = LegalPolicy.new(@user, ...)

В противном случае мы уже должны вводить контекст в виде пользователя с какой-то правовой формой.
Кстати, тоже хотел давно спросить, как распихивать такой набор по файловой системе? В рельсах нет модульности и если это делать по технической иерархии (policies, models, etc), то получается каша.

Другая ситуация - когда мы работаем с жизненным циклом и с какой-то структурой лень сейчас придумывать конкретный пример. Суть в том, что наш модуль должен ответить на один единственный вопрос. Но чтобы ответить он должен проанализировать состояние сложного контекста - функция от нескольких моделей с их сочетанием полей.
Или при тестировании query-обджектов, иногда под запрос нужно создать сложный набор.
Аноним 16/01/19 Срд 00:52:18 132756859
>>1327524
>Но мы и приходим к стабам
Не приходим. То есть ты конечно можешь их использовать, но сразу охуеешь, если захочешь поменять структуру кода, не меняя при этом его поведение(рефакторинг). Тесты должны этому помогать, а со стабами/моками ты ломаешь инкапсуляцию, потому что теперь твой тест знает гораздо больше, чем должен(что внутри тестируемого компонента есть конкретная SomePolicy с конкретным методом, который ожидает конкретные параметры), и при этом прочно связываешь тест с конкретной внутренней реализацией тестируемого компонента. Из-за чего менять внутреннюю реализацию компонента будет невозможно, не поменяв тест.

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

>При том это мы говорим об идеальном допущении, что логика была грамотно осознана и структурирована
>То есть должна быть очень сильная декомпозиция.
В том и дело, что тестам должно быть абсолютно похуй на то, как твоя логика структурирована внутри. Они проверяют конкретные юзкейсы, а не конкретные куски логики внутри приложения. Между этими двумя вещами есть разница. Если, допустим, логика проверки регистрации не засунута в отдельный класс, а написана прямо внутри контролера, то тебе просто-напросто придется писать больше тестов для контролера, которые тестируют эту логику. Как только ты вынесешь логику проверок в отдельный компонент - ты сможешь во-первых протестировать ее отдельно, не дергая контролер, а во вторых удалить из тестов для контролера все повторяющиеся(и до сих пор зеленые) кейсы этой логики, оставив только один.

>Кстати, тоже хотел давно спросить, как распихивать такой набор по файловой системе?
Распихивать надо так, чтобы вещи, которые меняются вместе, были рядом. В этом плане рельсы и многие другие популярные фреймворки делают полную хуйню. Вместо
/models/user.rb
/models/role.rb
/controllers/users_controller.rb
/controllers/roles_controller.rb

Должно быть
/user/model.rb
/user/controller.rb
/role/model.rb
/role/controller.rb

И т.д. Просто потому, что в твоем проекте никогда не встанет задача "поменять какую-то хуйню во всех моделях/контроллерах"(а даже если и встанет, ты не будешь менять это в каждой модели, а пойдешь в ActiveRecord::Base), но зато задачи "поменять хуйню в юзерах, которая затронет контролер юзера, модель юзера, сервис юзера и прочее у юзера" возникают постоянно. Со второй схемой ты просто идешь в папку user и меняешь там нужную логику в нужных файлах, а с первой - прыгаешь туда-сюда. Я уверен, что такое относительно просто организовать даже в рельсах с их магией, но сам уже давно рельсы забросил и постепенно переношу свой последний крупный проект на эликсир. Вообще советую тебе попробовать отдохнуть от рельс и написать что-то либо на другом языке, либо на чистом руби. Рельсы слишком извращают мышление и закрывают собой кучу хороших простых практик, поощряя вместо них лютый оверинжинирнг. А в последних версиях там вроде вообще пиздец нагородили.
Аноним 16/01/19 Срд 15:53:56 132790660
>>1327568
> В твоем примере придется трогать как минимум один стаб, а скорее всего и еще что-то. Это контрпродуктивно и очень неудобно.

Слабая связность - не сильвер буллет, ебал я в рот продираться через миллионы тонких классов. Это тоже, знаешь ли, тоже очень неудобно.

При разумном использовании стабов поправить один интерфейс в тесте - не так страшно, как ты описываешь. То, что последователи solid будут недовольны - ну а как они с рельсой вообще живут? Стабов не нужно избегать, но пользоваться в ограниченном объёме. Сomplexity класса не может быть слишким низким или высоким, вот и весь секрет.

мимо
Аноним 16/01/19 Срд 23:58:08 132828761
>>1327568
>Не приходим
>ты ломаешь инкапсуляцию, потому что теперь твой тест знает гораздо больше, чем должен(что внутри тестируемого компонента есть конкретная SomePolicy с конкретным методом, который ожидает конкретные параметры)
Вот теперь я тебя не понимаю. А как тогда тестировать кейс, когда логика внутри тестируемого юнита зависит от результата другого юнита? Ну то есть как тогда проверить, два сценария: 1) Policy вернула true 2) Policy вернула false, не создавая при этом соответствующих условий для нее?

>Распихивать надо так
Да, но если внутри есть суб-директории без скоуп-модулей, то автолоадинг перестает работать. Я сейчас сам прелоадю, но это как-то не очень красиво. инбифо, трейлблейзер идет нахуй

>>1327906
Хорошо сказал про классы. Двачую. Только я не понял, почему "связность". SRP имелось в виду?
Аноним 17/01/19 Чтв 19:45:35 132880862
>>1327906
>Слабая связность - не сильвер буллет, ебал я в рот продираться через миллионы тонких классов.
Поэтому ты и пишешь вещи сверху-вниз, вынося в отдельные классы/паттерны/модули только тогда, когда это реально оправдано, улучшает читаемость или помогает внедрить изменение. И тесты в этом отлично помогают, если они конечно не замоканы.
>Стабов не нужно избегать, но пользоваться в ограниченном объёме.
Тут еще есть проблема в понимании определения стабов. Стаб - это затычка. Например, у тебя есть функция, которая требует 3 аргумента, но ты знаешь, что последний аргумент в данном тесте использоваться не будет вообще. И ты даешь этой функции стаб. Чем он проще - тем лучше. У стаба не должно быть никакой логики, он должен соотвествовать абсолютному минимум требований. allow receive - это не стаб, а полноценный мок с поведением. Стабы - это нормально, но они все равно используются довольно редко(и если тебе реально нужен стаб, то ты можешь его написать сам за минуту, без всяких мокинг либ). Моки - это не норма, а исключение, и должны использоваться еще реже, чем стабы.
>>1328287
> А как тогда тестировать кейс, когда логика внутри тестируемого юнита зависит от результата другого юнита? Ну то есть как тогда проверить, два сценария: 1) Policy вернула true 2) Policy вернула false
Сценарии должны звучать не как "компонент вернул true/false", а соотвествовать юзкейсам. Например, в контроллере у тебя были такие юзкейсы(и, соответственно, тесты для них)
a) Если регистрация закрыта, то API вернет ошибку 1
b) Если не проверить паспорт, то API вернет ошибку 2
c) Если не проверить еще что-то, то API вернет ошибку 3
d) Если регистрация открыта, паспорт и все остальное проверны, то API вернет что-то другое
... и т.д
Ты решил упростить контроллер и вынести пункты a-d в свою Policy. Для этого ты:
1) написал Policy
2) написал для нее тесты(по сути просто скопировал нужные тесткейсы из контроллера и подправил API).
3) Интегрировал Policy в контролер и убрал из контролера весь повторяющийся код
4) Прогнал все тесты для контролера, они должны быть зелеными.
5) Начинаешь убирать все повторяющиеся тесты внутри контроллера(эти тесты ты вынес в Policy на шаге 2). И вот тут важный момент - в контроллере нужно оставить тот минимум тестов, которые позволят тебе с уверенностью знать, что Policy контроллером на самом деле используется. Например, в контроллере остались тесты юзкейса а), юзкейса d) и нужный сетап для этих тестов.
6) Так как сетап повторяется и внутри тестов контроллера, и внутри тестов Policy, его логично и удобно вынести в общий модуль, который будет этими тестами использоваться
7) Опционально можно вынести оба повторяющихся теста в такой же модуль. Но можно и не выносить, если тесты очень простые и проверяют те юзкейсы, которые почти наверняка никогда не будут меняться.
Подобный процесс требует не сильно больше усилий, чем моканье, но при этом не привязывает твой код к текущей внутрней имплементации, и такие тесты будут ломаться только тогда, когда сломался реальный юзкейс, а не левый мок.
>Да, но если внутри есть суб-директории без скоуп-модулей, то автолоадинг перестает работать
Это уже рельсопроблемы, тут ничего посоветовать не могу.
Аноним 17/01/19 Чтв 21:10:10 132887463
>>1327286
Комментарий о том, что в питон встроены удобства для прямой работы с DI. В коментарих к коментарию пишут, что это не правда. То же и о руби. Я не понял, как инфа по ссылке отвечает на мой вопрос. Можешь подробнее?
Аноним 17/01/19 Чтв 21:36:37 132889564
>>1328874
Тебе не нужен целый DI-фреймворк, как в джаве, если ты и так можешь инжектить что угодно и куда угодно в рантайме.
Аноним 17/01/19 Чтв 23:57:59 132897965
>>1328895
Понял твою мысль, но инджэктить с десяток зависимостей в каждом вызове не удобно, для этого нужна та либа.
Аноним 18/01/19 Птн 00:03:27 132898766
>>1324437 (OP)
Пиздец я рубист, у меня нет друзей
Аноним 18/01/19 Птн 00:09:25 132899767
>>1328979
Возможно твоя проблема как раз в том, что тебе в принципе приходится инжектить по 10 зависимостей на вызов, а не в том, что это делать (внезапно) неудобно.
Аноним 18/01/19 Птн 00:12:21 132899968
>>1328808
В общем, если я тебя правильно понял, ты предлагаешь создавать соответствующие условия (контекст). И чтобы не делать это каждый раз - выносить в модули.
Но в этом и заключался мой изначальный вопрос в самом первом посте - как создавать сложные условия.

Я же с самого начала написал, что это либо DI/стабы ок, моки либо моделирование условий.
Аноним 18/01/19 Птн 00:14:29 132900169
>>1328997
А как собственно инжектить, чтобы удобно?

другой анон
Аноним 18/01/19 Птн 00:20:36 132900670
>>1328895
>если ты и так можешь инжектить что угодно и куда угодно в рантайме
Вот тут уже не понятно: или мы под инжектом понимаем разные вещи или в чем разница-то между явой и руби?

опять другой анон
Аноним 18/01/19 Птн 00:31:18 132901671
>>1328999
>либо моделирование условий.
Так моки это и есть моделирование условий, просто с ними ты привязываешься к текущей имплементации, получая взамен только иллюзию, что якобы так будет проще поддерживать код.
Аноним 18/01/19 Птн 02:05:31 132905572
>>1328997
У тебя есть сервисоббджект который вызывает несколько других сервисобджектов, каждый из которых вызывает еще несколько. Вот внезапно и набирается с десяток зависимостей.
Аноним 18/01/19 Птн 02:22:20 132906473
>>1329055
И для чего именно тебе нужно инжектить зависимости в каждый из этих объектов? Я такой случай представить вообще не могу.
>>1329001
Зависит от того, что именно ты инжектишь, куда, и зачем.
>>1329006
В том, что в руби тебе не нужно хуячить никакую спецификацию для твоего DI(XML, аттрибуты и т.д), чтобы удовлетворить компилятор. Ты просто берешь и инжектишь без задней мысли.
Аноним 18/01/19 Птн 02:43:54 132907374
Аноним 18/01/19 Птн 03:00:06 132907575
>>1329064
>И для чего именно тебе нужно инжектить зависимости в каждый из этих объектов? Я такой случай представить вообще не могу.

На вход тебе приходят три параметра. Для каждого из них нужно сделать следующее: произвести вычисления, сохранить результат, отправить отчёт, всё это залогировать.

вычисление
сохранение
отчёт
логирование


И так три раза

Ты выносишь эту последовательность в отдельный сервис.
Вычислениями занимается также отдельный сервис.
Сохранением тоже, логированием тоже, и отчётом. Твоему модулю не нужно знать, с помощью чего будет происходить логирование, ему не нужно знать, куда будут сохраняться данные, по какому каналу отправлться отчёт.
Поэтому твой сервис на вход получает класс отвечающий за вычислени, класс отвечающий за логирование, класс отвечающий за сохранение, класс отвечающий за формирование отчета, класс отвечающий за его отправку.
И в твоем верхнеуровнем методе/контролере множество таких классов, которые вызывают методы других классов, вызывающих методы других классов.


Аноним 18/01/19 Птн 03:41:39 132908376
>>1329075
И что именно делает самый верхней модуль, если он ничего не знает, а только делегирует все задачи, сам не зная куда? Для чего он существует и почему ты не можешь убрать из него все инъекции и добавить эти зависимости напрямую? Чтобы настолько пиздецовые абстракции были оправданы, нужна очень сложная архитектура, в твоем примере ее нет.
Аноним 18/01/19 Птн 04:21:51 132908877
>>1329083
>И что именно делает самый верхней модуль, если он ничего не знает, а только делегирует все задачи, сам не зная куда

Этим и занимается.

>Для чего он существует и почему ты не можешь убрать из него все инъекции и добавить эти зависимости напрямую?

Добавил зависимости напрямую - усилил связанность классов. Привязал свой класс к другому классу. Это конец. Твой сервис уже сложнее использовать в другом контексте, потому что он содержит в себе контекст. Ты уже не можешь динамически выбирать способ отправки отчёта - он зашит в твоем модуле. Нет, конечно ты можешь в своём сервисе указать не класс, отвечающий за нотификацию, а класс, выбирающий способ нотификации. Да? Но как он будет выбирать. Ему какие-то данные нужны. Значит эти данные придется тащить внутрь твоего сервиса.

https://en.wikipedia.org/wiki/Coupling_(computer_programming)

>Чтобы настолько пиздецовые абстракции были оправданы, нужна очень сложная архитектура, в твоем примере ее нет.

Мой пример достаточен, для того, чтобы продемонстрировать идею, а умножить сложность в пару сотен раз ты и сам сможешь в своей голове, достаточно представить, что то, что я тебе описал - небольшая часть большого проекта. Она кажется простой, потому что вырвана из контекста. И я могу себе позволить вырвать её оттуда, потому что наш модуль ничего не знает о процессе формировани отчета и т.д. Отдельно он выглядит не таким уж и сложным, и реализовать его хочется просто, только это обманчивая простота.
Аноним 18/01/19 Птн 05:08:51 132909478
>>1329088
>Добавил зависимости напрямую - усилил связанность классов. Привязал свой класс к другому классу. Это конец. Твой сервис уже сложнее использовать
Наркоман? Использовать сложнее как раз те вещи, которые требуют какого-то предварительного сетапа или кучи условий для их работы.
>Ты уже не можешь динамически выбирать способ отправки отчёта - он зашит в твоем модуле.
Или вместо дрочки DI ты можешь добавить выбор отправки отчета в обычное API своего модуля, например notify_via: :email.
>Отдельно он выглядит не таким уж и сложным, и реализовать его хочется просто, только это обманчивая простота.
Весь новый функционал и должен реализовываться самым глупым-прямолинейным-простым способом, который покрывает только необходимый минимум условий. Усложнять этот функционал лишними абстракциями нужно только по мере надобности: когда падает читабельность, когда сложно добавить новый юзкейс и т.д. То, что ты описываешь - это классический оверинжинирнг, который приводит к лютой лапше. Декаплинга, паттерны и прочие абстракции - это не вселенское добро, которое нужно юзать при любом пуке, у них есть свои, часто немаленькие, трейдофы.
Аноним 18/01/19 Птн 05:15:34 132909979
>>1329094
>Или вместо дрочки DI ты можешь добавить выбор отправки отчета в обычное API своего модуля, например notify_via: :email.

И чем это отличается от передачи класса? Ты всё также передаешь параметр, только теперь тебе внутри еще нужен код, который твой email развернёт в класс.

>Наркоман? Использовать сложнее как раз те вещи, которые требуют какого-то предварительного сетапа или кучи условий для их работы.

Наркоман? В этом примере как раз таки по условию много условий, определяющих какой код будет выполнен, тебе в любом случае все придется параметризовывать.

>Усложнять этот функционал лишними абстракциями нужно только по мере надобности

В указанном примере надобность есть.

Ты меня троллируешь?
Аноним 18/01/19 Птн 10:15:58 132916080
>>1329099
> Ты меня троллируешь?

Он тебя не троллирует. Если тебя корёжит от захордкоженного класса, то предусмотри переопределение соотв. аттрибута в инициализаторе инъекциями, конфиг-классами, магией.
Аноним 18/01/19 Птн 14:05:37 132930481
как же я обожаю раби, серьезно, пописал немного на ноде - да, прикольно, но не то, сейчас опять пилю на рельсе - какая же она кайфовая, язык богов
Аноним 18/01/19 Птн 15:00:39 132934882
raby.jpg (19Кб, 274x329)
274x329
Аноним 19/01/19 Суб 01:26:49 132980883
>>1329016
>>1329064
>Так моки это и есть моделирование условий
>Зависит от... Ты просто берешь...
Какой же ты демагог.
>>1329083
>Для чего он существует ... в твоем примере ее не
И дилетант.
>>1329094
>например notify_via: :email
Сука, еще и рельсо-магическо-головый. Типичный devise-style. Из этого сразу понятно насколько сложные вещи тебе приходилось делать, точнее не приходилось.

>>1329094
>Весь новый функционал и должен реализовываться самым глупым-прямолинейным-простым способом
>Усложнять этот функционал лишними абстракциями нужно только по мере надобности
Вот тут вынужден согласиться. Только не в кассу, речь не об этом.

>>1329099
Он не тролирует, он похоже не очень разбирается. Эдакий эффективный аппер-интермидд, судя по тону в сеньоры стремящийся.
По теме: мне кажется такие ситуации можно решать каким-нибудь оркестратором. Вся задача которого будет в том, чтобы настроить зависимости - повесить лиснеры, в зависимости от опций прокинуть клиенты, адаптеры там всякие - и вызвать непосредственно рабочий объект. И как бы получится, что под капотом "движок" настраиваемый, а снаружи лаконичный интерфейс для вызова. И для каждого случая свой такой оркестратор, но чаще он будет один или с парочкой параметров.
Да, получается, что тут вроде как нет DI. Но блин, это же правда невозможно, определять туеву хучу зависимостей прямо при вызове, да еще и каждый раз.
Мне кажется DI это больше про глобальный конфиг, про инициализацию программы: хотим Pg или Mysql или CSV, ага? лол, такой логгер или другой, какой мидлвар использовать, с какой моделью работать (как девайс делает).
А что касается тестов, то мне кажется DI тут все равно не поможет. Ну вот есть механизм в dry-rb, ну и в чем разница замокаю я вызовы или буду использовать эту ебалу с зависимостями.
Аноним 19/01/19 Суб 03:43:37 132984884
>>1329099
>И чем это отличается от передачи класса? Ты всё также передаешь параметр,
Тем, что теперь твой клиент не знает ни о каких левых классах, а полагается только на публичное простое API
>>1329808
>Сука, еще и рельсо-магическо-головый. Типичный devise-style.
И к чему ты это кукарекнул? Где тут хоть какая-то магия?
Аноним 19/01/19 Суб 10:51:14 132994485
>>1329808

В 9 из 10 случаев объект пишет в стандартный логгер, на 10 раз тебе дали таск завернуть обращение, например, в телеграмм. Соответственно, 9 раз указывать логгер явно не нужно, ты его хардкодишь, как дефолтный. А на 10 случай пишешь: MyService.new(:customLogger => TelegaLogger.new).

Внедрение зависимости используется для понижения связости и переопределения частных случаев за счет повышения сцепленности (coupling).

Остальное комментировать не буду, тебе ещё много учится)

мимо недемагог
Аноним 19/01/19 Суб 11:17:17 132995086
>>1329944
Если говорить конкретно про пример логирования, то это решается немного другими приемами. Сувать такое в конструктор как-бы моветон.

И ты путаешь связность и зацепление (и по русски и по английски путаешь). Хотя возможно и понимаешь суть.

Сори, но ты-таки демагог.
Аноним 19/01/19 Суб 11:27:16 132995287
>>1329950

Ничего страшного, но я не буду пролжать общение, т.к. не увидел ни 1 аргумента с твоей стороны. Добрых выходных!
Аноним 19/01/19 Суб 12:20:01 132996788
>>1329952
Тут несколько людей независимо общаются, и никто не подписывается.

Какие аргументы тебе нужны? Я выше привёл хорошие аргументы, которые ты или кто-то другой разбил в пух и прах ответами "слишком сложная структура" и "логирование через стандартный логгер". Пример нужен был для наглядной демонстрации идеи, а ты стал доебываться до синих занавесок.

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

>>1329808

>Ну вот есть механизм в dry-rb, ну и в чем разница замокаю я вызовы или буду использовать эту ебалу с зависимостями

Этот DI нужен только для удобства. Ты все равно будешь мокать, но в этом случае моканье будет более комфортным. У тебя два варианта: либо воссоздавать всю структуру, добавлять в базу десятки объектов для одного теста, либо обмазываться стабами. Если это модульное тестирование - лучше всё стабить, а потом в интеграционном тестировании проверять связи между объектами и общую работоспособность создавая реальные объекты - никаких стабов.

Если ты используешь rspec, думаю, тебе стоит попробовать вынести создание double'ов в отдельный модуль. Сделать аналог FactoryBot, но только для double'ов. Так как у тебя моки и стабы повторяются по проекту, их надо куда-то вынести. У тебя в любом случае пердак будет гореть от тестов, DI, не панацея, он чуть упрощает этот процесс.

Аноним 19/01/19 Суб 12:33:05 132997289
>>1329967
>Сделать аналог FactoryBot, но только для double'ов
Хмм... это идея.
Правда не могу с ходу придумать, как это может выглядеть. А ты пробовал такое?
Аноним 19/01/19 Суб 13:51:17 133002790
>>1329972
Да. В spec/support/ кидаешь все свои вспомогательные классы. Например, есть определенное состояние, достаточно типовое, встречающиеся много раз в проекте, но для того, чтобы его получить, тебе нужно создать несколько различных записей в бд, установить какие-то настройки, добавить какие-то стабы и т.д. Ты это все вытаскиваешь в один метод и потом спокойно вызываешь его в тестах.
Аноним 19/01/19 Суб 15:19:11 133009391
>>1329950
>Сувать такое в конструктор как-бы моветон.
Это кто тебе сказал? Если тебе нужен кастомный логгер внутри одного отдельного объекта, то его легче всего засунуть в конструктор этого объекта, а не придумывать заранее целую систему инъекций или хуй знает чего.
Аноним 19/01/19 Суб 19:13:36 133028092
язык хороший,только гайдов маловато
Аноним 19/01/19 Суб 20:04:45 133031293
Платиновый вопрос, как переезжать с 4 на 6 рельсы, только через 5ые?
Аноним 19/01/19 Суб 20:38:14 133034294
>>1330312

странный ты человек
Аноним 19/01/19 Суб 21:23:37 133040495
в Б сказали шо питон лучше руби
Аноним 19/01/19 Суб 23:44:15 133049796
>>1330404
А вилка лучше ложки?
Аноним 20/01/19 Вск 02:04:03 133053597
Screen Shot 201[...].png (114Кб, 1024x661)
1024x661
Ну что пачаны, дерзайте
Аноним 20/01/19 Вск 13:15:26 133074998
>>1330312
че странного, хотелось бы пропустить этот этап, кучу гемов перепрописывать сначала для 5, а потом для 6
Аноним 20/01/19 Вск 13:24:12 133075399
>>1330497
нет,ложка более универсальна
Аноним 24/01/19 Чтв 16:59:03 1334097100
RubinsteinAnton[...].jpg (339Кб, 563x805)
563x805
Посоветуйте легковесную IDE или редактор с хорошей поддержкой Ruby.
Аноним 24/01/19 Чтв 18:20:28 1334160101
>>1334097
Очевидный Emacs очевиден.
Аноним 24/01/19 Чтв 21:47:19 1334308102
Аноним 24/01/19 Чтв 22:23:44 1334329103
>>1334097
Хорошей поддержки руби не существует в природе, язык слишком динамичный для этого. Бери или vscode или atom. Мне лично atom больше нравится, хотя в последнее время его стало модно обсирать и популярность у него уже не та. Но в плане UX он наголову выше vscode как по мне. Один мега уебищный поиск в vscode чего стоит. vscode использую только на домашнем ноуте, так как atom на нем тормозит.
Аноним 25/01/19 Птн 17:56:02 1334658104
где все рубисты?
Аноним 25/01/19 Птн 18:24:50 1334697105
>>1334658
Хз, я всё ещё на работке
Аноним 26/01/19 Суб 01:14:50 1334949106
thanks.png (7Кб, 300x168)
300x168
Аноним 26/01/19 Суб 01:19:49 1334951107
Анонч, где помониторить джобки, окромя хх и моегокруга?
Аноним 26/01/19 Суб 12:08:21 1335062108
>>1334329
>Мне лично atom больше нравится
В нем можно сделать нормальное автодополнение?
Аноним 26/01/19 Суб 13:09:27 1335126109
на чем быстрее мне запилить сайт с крудом и формой-питон или руби или пох?
Аноним 26/01/19 Суб 13:38:12 1335154110
Аноним 26/01/19 Суб 14:08:17 1335182111
Аноним 26/01/19 Суб 14:31:22 1335202112
>>1335062
На уровне RubyMine нельзя. Но как по мне, даже в RubyMine оно хоть и лучше конкурентов, все равно настолько уебищное, что смысла в нем нету. Так что я просто использую autocomplete-plus (установлен по-дефолту) с включенным дополнением из всех открытых файлов. На работе проект около 100к LOC и 500 моделей и мне этого хватает.
Аноним 26/01/19 Суб 19:39:05 1335485113
в чем практическая разница между переменной класса и переменной экземпляра класса?
Аноним 26/01/19 Суб 19:50:23 1335493114
>>1335485
Первая наследуется, а вторая нет. И, соответственно, если ты поменяешь переменную класса в сабклассе, то она поменяется и в родителе. Сложно представить зачем такое поведение вообще может понадобится, за 5 лет я вообще ни разу не видел переменных класса в продакшен коде, только инстансовые переменные класса.
Аноним 26/01/19 Суб 20:19:57 1335514115
>>1335493
>>1335493
спасибо,что объяснил,про это в обучающих материалах не упомянули,я не мог понять нахера исп переменную класса
Аноним 26/01/19 Суб 21:40:46 1335537116
>>1335202
То есть ничего подобного IntelliSense для Руби нет? Печаль. Сделаю, как ты написал. Спасибо.
Аноним 27/01/19 Вск 00:05:18 1335589117
>>1335126
Вот это хороший вопрос на самом деле.
Я недавно сам стал задумываться о плюсах и минусах рельс. Я кроме рельс ничего не видел, а очень хотелось бы сравнить с джанго. Было бы здорово поговорить с человеком который плотно поработал и с тем и с другим.
Вообще очень заебала рельсо-магия и упорное отрицание сообществом ооп-практик и солида. А в питоне и джанго я сылашал с этим получше и есть модульность, которой так не хватает рельсам.
С другой стороны я слышал что они там отсталые все, обратно-совместимые с неудобными миграциями и всякое такое.
Аноним 27/01/19 Вск 02:01:02 1335639118
>>1335589
если сайт не сильно сложный,то пох на магию-главное работает
Аноним 27/01/19 Вск 16:19:57 1336010119
MTGSageLatnamBa[...].png (922Кб, 1200x536)
1200x536
>>1335589
>>1335639
> магия
Никак не могу понять, что скрывается за этим?
Аноним 27/01/19 Вск 16:22:41 1336014120
>>1336010
фреймворк многие велосипедные места сделал за тебя,высокий уровень абстракции.
минус-хуже с тонкой настройкой
Аноним 27/01/19 Вск 16:48:38 1336054121
>>1336010
Функционал, который работает просто-таки магическим образом, принцип работы тщательно спрятан за условными договоренностями и в самых неожиданных местах, который сильно опирается на контекст (чтобы все лишнее спрятать) и который сложно/нельзя кастомизировать.

Как пример devise. Хорошее коробочное решение, до тех пор, пока не понадобится что-то поменять.
Разные acts_as_*, многочисленные магические DSL, всякие договоренности о том что :symbol работает так, а 'simbol' иначе, всякие охуевшие хуки при наследовании/включении/расширении.
Причем часто это очень хуево сделано под капотом. Авторы предусматривают какой-то один очень тупой сценарий и даже при желании нельзя изменить поведение.

Включаешь какой-нибудь auditable (трекает изменения моделей) и пишешь в модели `audit :phone, :email, ...`. А потом задумаваешься, а что, это стало быть во всех моделях этот функционал проинжектен? Да блять, они тупо расширили ЭктивРекорд. Потом такой думаешь, ну ок, я как-нибудь сам оберну треканье, тем более мне это не в контексте самой модели нужно сделать, дайте мне тот класс, который за это отвечает. А хуй тебе - смотришь, а там блять просто лапша методов, которая тупо инжектится в модель, это даже не сервис-обджект. И начинаешь, понимать, почему они написали какую-то ебалу для того чтобы переопределить current_user - потому что там все сплошь контекстно-зависимое.
Хотя либа полезная и по сути очень простая. Но эта ебаная магия головного мозга в головах у рейлс-сообщества им не позволяет создавать модульный, расширяемый, переиспользуемый код.
Аноним 27/01/19 Вск 17:43:11 1336113122
>>1336054
Ты прав, но этот рак давно уже распознали и большая часть комьюнити старается с ним бороться. Вместо devise есть sorcery. Audited пишется в 50 строчек под себя или вообще на триггерах делается paper_trail, кстати, погибче, посмотри в его сторону. А за попытку подключить всякие acts_as_huita в любой нормальной команде тебя в момент обоссут с ног до головы.
Аноним 27/01/19 Вск 18:08:51 1336139123
>>1336113
Не знаю я, мне кажется этот багаж еще долго будет тянуться за рельсами. Да и сами рельсы и сам DHH этому крайне способствуют. Пожалуйста, полюбуйтесь - https://api.rubyonrails.org/classes/ActiveRecord/Suppressor.html.

Алсо, покажите мне, пожалуйста, команды, где обоссут за такой код, хочу туда устроиться.
Аноним 27/01/19 Вск 18:41:56 1336174124
>>1336139
>Не знаю я, мне кажется этот багаж еще долго будет тянуться за рельсами
Да, это так. Вообще я был бы рад, если бы DHH ушел уже из рельс и перестал всякую хуиту пихать в них. Suppressor, кстати, мой любимый пример подобной хуиты от DHH. Но и других хватает: только из-за него sprockets до сих не выпили, в 6 рельсах зачем-то впихнут ActionText в core, почему нельзя было сделать это просто отдельным гемом для интеграции с npm пакетом (trix) не понятно, продвижение идеи, что если распихать жирную модель по concerns, то она типа перестанет быть жирной.

>Алсо, покажите мне, пожалуйста, команды, где обоссут за такой код, хочу туда устроиться.
Данон же. Но вообще большинство приличных контор в ДС пишущих на руби: поток, рокет, инстамарт, whelly, маил, марсиане хоть я и не люблю этих ЧСВшных пидоров. И ты всегда можешь спросить на собеседование про проект же, если окажется, что там fat models по 1к+ строк, то просто откажешься и все.
Аноним 27/01/19 Вск 18:56:38 1336207125
>>1336174
>Но вообще большинство приличных контор в ДС пишущих на руби: поток, рокет, инстамарт, whelly, маил, марсиан

Поток Rоток, как там, Канаева уволили? хуй знает. Судя по описанию вакансии там разброд и шатание. Драй-рб блять. Эликсир, которого будет больше. Короче позатащили чего смогли и не знаю что с этим делать.

Рокет, инстамарт как-то неинтересно совсем.

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

Марсин боюсь, они какие-то крутые слишком. Ну и удаленщики, а я так не умею.

А что майл? У них же вроде нет рубишных проектов?
Аноним 27/01/19 Вск 19:21:52 1336234126
>>1336207
Ты похоже рынок вакансий в ДС лучше меня знаешь. Я сам уже 2 с лишним года на удаленке на иностранную контору работаю и не особо в курсе рыночка. До этого в двух относительно ноу-нейм конторах работал в ДС и уже тогда там никаких acts_as не было, так что думал, что уж крупных командах таких проблем точно не должно быть.

>А сейчас насколько я знаю они уже полиглоты стали, микросервисы там.
Да я под офигел от их списка "желательных" языков, когда они в последний раз меня звали - ruby/go/js/scala/python.

>А что майл? У них же вроде нет рубишных проектов?
Сейчас вакансия в платежку висит (+ go), geekbrains да зашквар лютый, я знаю у них на руби, помню в прошлом году еще что-то видел.

Рокет по-моему интересным может быть, интересно же как вся эта банковская кухня работает. Но слышал, что у них ехал овертайм через овертайм.
Аноним 27/01/19 Вск 19:33:23 1336245127
>>1336174
шот я перехотел учить рельсы,пожалуй дальше пойду с джанго
Аноним 28/01/19 Пнд 16:28:00 1336709128
Аноним 28/01/19 Пнд 18:36:21 1336765129
Аноним 29/01/19 Втр 15:54:35 1337426130
Блять, хули вы так мало постите суки. Я уже заебался тред обновлять - нихуя блять нет новых постов. Что вы за уебки блять такие.
Аноним 29/01/19 Втр 17:28:11 1337467131
>>1337426
так рубистов 1,5 человека
Аноним 29/01/19 Втр 18:06:48 1337480132
>>1337467
А вот интересно, все рубисты рашки тут сидят (ну или периодически заходят)? Ведь время от времени ололокают все, кого я знаю.
29/01/19 Втр 19:50:47 1337517133
>>1337480
Думаю и пяти процентов не наберётся. У нас на проекте из 5 рубистов максимум ещё один чел в курсе про борды.
Аноним 29/01/19 Втр 20:23:37 1337536134
>>1337480
Тут нечего делать нормальным рубистам. Тред для них совершенно бесполезен, разве что от скуки зайти и что-то написать, поэтому тут так вяло.
Аноним 29/01/19 Втр 20:39:43 1337547135
>>1337536
а начинающим тем более
Аноним 29/01/19 Втр 20:46:38 1337551136
>>1337517
>5 рубистов
Вы же дружная команда, да?
ЕВПОЧЯ :3
Аноним 29/01/19 Втр 21:13:22 1337569137
>>1337536
Где вообще русскоязычное комьюнити рубистов сидит? А то я вроде в руби уже давно, но с местным комьюнити, не считая rails club, почти и не контактировал никогда.
Аноним 29/01/19 Втр 21:21:45 1337579138
29/01/19 Втр 21:35:18 1337592139
>>1337551
Ни разу не видел по настоящему дружного рубиста. думаю это форс пэхэпэшников.
Аноним 29/01/19 Втр 21:48:06 1337597140
>>1337592
>по настоящему дружного
>по настоящему
Все по Фрейду, хаха.
Значит правду про вас говорят.
Да и картинка в оппосте строго по дедушке :3
Аноним 29/01/19 Втр 23:09:43 1337649141
Аноним 29/01/19 Втр 23:33:34 1337658142
>>1337649
Да не стесняйся ты так, сладкий, сейчас быть таким даже модно и молодежно :3
Аноним 30/01/19 Срд 01:47:37 1337685143
>>1337569
Не знаю, да и какая разница? Обсуждать нечего. Руби очень простой язык. Задачи крайне однотипные. Большинство проблем решаются выбором правильного инструмента (гема, вебсервера, базы данных). Расти как рубисту некуда, потому что большая часть нужных технологий, умение работать с которыми повышает твою ценность на рынке, не привязана к какому-то конкретному языку.
Аноним 30/01/19 Срд 15:09:02 1337871144
>>1337685
Да, но мы же при этом используем сруби. И могли бы обсуждать инструменты, практики, подходы именно в контексте работы в рубях.
Аноним 01/02/19 Птн 14:03:06 1339263145
Хочу заняться backend разработкой. Какие перспективы меня ждут в ruby? Или лучше выбрать тот же php или node.js, питон?
Аноним 01/02/19 Птн 16:11:08 1339353146
>>1339263
>Какие перспективы меня ждут в ruby?
Сначала будет болеть, но потом привыкнешь и станет нравиться.
Аноним 01/02/19 Птн 16:38:15 1339368147
Блин, посоны, я не мог этим не поделиться - https://hh.ru/vacancy/29861666

Разработчик Raby on Rails
от 80 000 до 100 000 руб. до вычета НДФЛ
ОАО Точных Приборов, НИИ

>Обязанности: Разработка программного решения, предназначенного для:
>-развертывания и управления сетевой инфраструктурой (FOREMAN,DNS,FREEIPA,TETR,DHCP и т.д);
>- развертывания и управления функционированием программного обеспечения;
>- развертывания серверов/рабочих станций (bare metal) и виртуальных машин различных провайдеров виртуализации;
>-мониторинга работоспособности аппаратного и программного обеспечения;
>-централизованного журналирования событий в работе аппаратного и программного обеспечения,
>
>Требования:
>-Опыт RoR-разработки от года
>-знания HTML/CSS,JavaScript, CoffeeScript,jQuery, Slim,Sass
>- Умение писать тесты Rspec, Capybara
>-Знание gem`ов Devise,Pundit,Sidekiq,
>-Плюсом будет решение задач по администрированию Linux, базовые знания по сетям. виртуализации и автоматизации разработки и развертывания ПО, окончание курсов по RoR.
>
>Условия: На предприятии имеется своя медсанчасть, профком, турклуб. Работа с 9.00 до 17.40,
>Выходные -суббота, воскресенье. Оплата труда -два раза в месяц
Аноним 01/02/19 Птн 16:59:07 1339378148
Парни, если кто-то работал или как-то знаком с этими конторами, расскажите. Сижу смотрю вакансии и за их формальным описанием сложно понять что от них ждать.

Qlean.Стирка
AMarkets
OVERTEAM
PiRL Ventures
Лэндинг Солюшн Групп aka CashWagon
Центр недвижимости от Сбербанка, ДомКлик
TalentTech
Рево-технологии
Бизнес партнер
inShopper, Mail.Ru Group
Аноним 01/02/19 Птн 18:36:21 1339408149
Аноним 01/02/19 Птн 20:08:29 1339479150
>>1339368
Прикольно так-то, для дауншифтинга самое оно, после смены с михалычем и петровичем в подсобке прибухнуть.
Аноним 02/02/19 Суб 00:59:22 1339763151
209050483027418[...].jpg (198Кб, 1080x1080)
1080x1080
Аноним 02/02/19 Суб 13:21:53 1340035152
>>1339763
Объясни, плиз, что такое монада и зачем это нужно?
Аноним 02/02/19 Суб 23:48:43 1340449153
>>1340035
Монада - это моноид из категории эндофункторов.
Аноним 02/02/19 Суб 23:52:03 1340450154
>>1339763
Монадный интерфейс не заимплементен. Нет у тебя никакой монады.
Аноним 03/02/19 Вск 00:28:27 1340475155
>>1340035
Это тип данных, у которого реализованы 3 функции (return, join и bind) которые должны подчиняться определенным законам. По ссылке не монада, там этих функций вообще нет.
Аноним 03/02/19 Вск 01:12:23 1340499156
Аноним 03/02/19 Вск 08:06:02 1340608157
>>1340499
ну типа массив вычислений
Аноним 03/02/19 Вск 12:15:47 1340676158
Аноним 03/02/19 Вск 20:06:58 1340999159
кто нибудь пощупал 6 рельсы бета?
Аноним 03/02/19 Вск 20:13:46 1341009160
>>1340676
Схуяле? return и join - это натуральные преобразования: эта и мю соответственно.
Аноним 03/02/19 Вск 22:45:50 1341168161
>>1341009
По ссылке нет упоминаний никаких методов. Я написал код изучая книгу по теории категорий. Если есть замечания к коду с точки зрения терката, мне интересно.
Аноним 03/02/19 Вск 22:46:23 1341169162
>>1340999
Рельсы нинужны. Интересней Ханами 2.0 альфа.
Аноним 03/02/19 Вск 23:23:12 1341184163
Жуебки, вы объясните мне что это такое и что он там написал и зачем оно нужно?
Аноним 03/02/19 Вск 23:37:40 1341189164
>>1341184
>объясните мне что это такое
Коротко не объяснишь, если правда интересно, то читай http://learnyouahaskell.com/chapters. Если лень читать все, то можешь попробовать прочесть только 11 и 12 главу, получится или нет зависит от уровня твоего знакомства с функциональщиной.

>что он там написал
Хуиту.

>зачем оно нужно?
Не нужно, как и все остальные монадки в языках без компилятора, которой бы проверял за тобой, что ты не обосрался.
Аноним 03/02/19 Вск 23:42:58 1341190165
>>1341169
Они хоть кодрелоад без перезапуска приложения целиком завезли?
Аноним 03/02/19 Вск 23:45:02 1341192166
>>1341189
>Коротко не объяснишь
Ну камон, анон написал там 30 строк, я не верю, что чтобы понять смысл нужно прям идти функциональщину и теорию категорий учить.
Аноним 03/02/19 Вск 23:48:42 1341194167
>>1341192
Там есть пример использования внизу, камон.
Аноним 03/02/19 Вск 23:49:57 1341196168
>>1341190
Не знаю, а чем hanami-reloader не подходит?
Аноним 03/02/19 Вск 23:51:00 1341197169
>>1341194
Ты понимаешь про что я. Нахуй он эту ебалу написал, в чем прикол, зачем называть какими-то монадами структуру c флагом success/failure?
Аноним 03/02/19 Вск 23:54:54 1341198170
125088729372455[...].jpg (79Кб, 540x960)
540x960
>>1341197
Ты хочешь понять термин из теории категорий, но не хочешь изучать теорию категорий.
Аноним 03/02/19 Вск 23:56:38 1341199171
>>1341192
Понимаешь ли, ты задал два вопроса:

>Что это?
На этот просто ответить. Это монада Either хотя я согласен с аноном выше, что у нее должно быть хотя бы еще пару методов, что бы таковой называться.

>Зачем это?
На этот вопрос ответить намного сложнее. Если очень коротко, то нужны они для того что бы безопасно и выразительно описывать сложные операции в языках с развитой системой типов. Так как в руби нету развитой системы типов, а уж о безопасности без компилятора тем более речи идти не может, то в руби они не нужны. Зачем они нужны в том же хаскеле читай по ссылке в моем предыдущем посте.
Аноним 03/02/19 Вск 23:59:00 1341200172
>>1341196
Насколько я понимаю он тоже перезагружает весь проект целиков каждый раз. Этим и не подходит, слишком медленно.
Аноним 04/02/19 Пнд 00:04:24 1341202173
>>1341200
Я, честно говоря, еще не пробовал Ханами в работе вообще. Смотрел доки, примеры кода. После "магии" рельсов и идей поехавшего dhh-а Ханами выглядит интересно. Сейчас разбираюсь с ROM-rb чтобы им заменить сраный ActiveRecord, а после вместо рельсов - Ханами. А может быстрее в Эликсир перекачусь. В мире руби проекты практически все на рельсах, в Эликсир перекатиться может быть проще чем в Ханами.
Аноним 04/02/19 Пнд 00:04:51 1341204174
>>1341199
Ладно, буду считать, что монады это что-то типа гипотезы Пуанкаре и понять ее без предварительного изучения каких-то там разделов математики невозможно.
Аноним 04/02/19 Пнд 00:18:11 1341206175
>>1341202
В реальных проектах на рельсах опытные люди стараются просто не использовать совсем хуевые части AR, типа всякие suppress, before/after_save/create/etc, десятков методов для сохранения объектов в базу только save, максимум еще update, стараются по минимуму добавлять методы в модели, некоторые идут дальше и не используют валидации и scope. Webpacker вместе с assets pipeline, тоже сразу на помоечку отправляется, благо это можно сразу в rails new указать. Остальные части рельс вполне годно сделаны как по мне.
Эликсир с фениксом в целом годные, но там своей хуиты тоже хватает.
Аноним 04/02/19 Пнд 00:36:44 1341209176
>>1341206
Спасибо, опытный человек, что поделился своей мудростью. Кроме suppress, про который знает каждая собака, потому что про него в блогах писали, есть еще много мест где ты будешь тратить время на борьбу с рельсами, а не создание ценного кода.
Аноним 04/02/19 Пнд 00:42:07 1341213177
>>1341209
Ну-ка, например!
Назови такие места и не забудь провести параллель с ханамями, где ты будешь тратить время на написание велосипедов.
Вообще-то проблема рельс не техническая, а идеологическая.
Аноним 04/02/19 Пнд 00:48:45 1341218178
>>1341213
Ты же опытный человек, сам должен знать.
Аноним 04/02/19 Пнд 00:55:28 1341222179
>>1341218
Предыдущий пост другой анон написал. Но я с ним согласен. Пишу рельсо-код каждый день и ни с чем не борюсь. Реально единственная неслишком хорошо сделанная часть рельс это AR из-за слишком большого API. Но если использовать адекватное подмножество AR, то рельсы все так же охуенны. Не знаю с чем можно бороться в остальных частях фреймворка.
Что ты так полыхнул-то на ровном месте, я же не один suppress указал.
Аноним 04/02/19 Пнд 01:22:45 1341239180
>>1341222
ActiveSupport. Monkey patching, monkey patching everywhere. View helpers. Осознанное стремление dhh-a привязать бизнес-логику к фреймворку. Утяжеление приложения из-за того, что в рельсу пихают всякое нинужное говно. inb4 сейчас расскажешь что всё решаемо
Аноним 04/02/19 Пнд 01:35:29 1341250181
>>1341239
>View helpers
Никогда, НИКОГДА не было необходимости засунуть туда больше трех методов. А когда было нужно, было охуенно удобно. Бугурта декораторо-головых не понимаю - никто ж не запрещает делать по другому. реально не понимаю, что все привязались к этим хелперам
>ActiveSupport
Опять не понимаю бугурта. Что там такого плохо? Знаю из блогов концерны не нравятся людям. Ну я их никогда и не использую, например, пишу PORO. Расширения базовых классов охуенны. До того охуенны, что от раза к разу что-то мигрирует прямо в руби.
>Monkey patching
Нужно признать, что внутри движка кромешный ад, это правда. Но машина работает как часы и меня мало волнует как оно там внутри устроено.
>Осознанное стремление dhh-a привязать бизнес-логику к фреймворку
Идеологические проблемы, это да. Это беда рельсовой экосистемы.
Аноним 04/02/19 Пнд 02:23:31 1341297182
>>1341250
>Но машина работает как часы и меня мало волнует как оно там внутри устроено
Когда занимаешься проектами уровня блог за 15 минут, это нормально.
Аноним 04/02/19 Пнд 10:48:28 1341444183
>>1341239
>ActiveSupport
А что там плохого-то?

>Monkey patching, monkey patching everywhere
Ну давай рассказывай как ты каждый день борешься с present? у Object и second у Array. Я тоже, конечно, против money patching, но именно фреймворку по-моему позволительно добавить некоторые методы общего назначения в стандартную библиотеку. И как уже сказали выше некоторые из них кочуют в руби.

>View helpers
Согласен. Года 4 уже ничего кроме json рельсами не отдавал и как-то забыл об их существование просто.

>Осознанное стремление dhh-a привязать бизнес-логику к фреймворку
Это чисто пропаганда от dhh. В самом коде рельс ничто тебя не заставляет так делать.

>Утяжеление приложения из-за того, что в рельсу пихают всякое нинужное говно
Srsly? Когда у тебя приложение с сотнями и тысячами классов, то пофиг уже на несколько десятков лишних классов от рельс. Да и чистое рельсовое приложение около 100 метров всего жрет, насколько я помню, вполне вменяемо.
Аноним 04/02/19 Пнд 10:49:53 1341447184
Gggg
Аноним 04/02/19 Пнд 20:34:56 1341851185
если писать для себя-РОР лучший выбор?
Аноним 05/02/19 Втр 00:55:25 1342026186
>>1341297
>Когда занимаешься проектами уровня блог за 15 минут, это нормально.
Вот это ты погорячился сейчас. А раз уж ляпнул кукарекнул, точнее, то будь добр, приведи пример из практики, когда тебя волновали внутренности движка.
Аноним 05/02/19 Втр 11:59:22 1342191187
>>1342026
Ты не понимаешь как манки патчинг влияет на расширяемость кода?
Аноним 05/02/19 Втр 18:18:37 1342389188
Ребят, вот тут вы пишете коллбеки зло, а что делать? Вот у меня так - есть поле completed_count, которое хранит количество записей в связанной модели, ну как из counter_cache, только условие тут кастомное, так как его высчитывать без коллбека при добавлении записи?
Аноним 05/02/19 Втр 22:31:51 1342524189
>>1342389

Бизнес логику хранишь в сервисобджектах. Добавление записи в твою модель через отдельный сервис, в котором после добавления обновляется твой completed_count. Но в твоем случае я бы скорее всего забил и делал также, как и ты. Или еще хуже - хуйнул бы все через триггер в постгре.Я еще тот дебил.
Аноним 06/02/19 Срд 01:43:13 1342585190
carbon (1).png (41Кб, 792x373)
792x373
Аноним 06/02/19 Срд 01:55:55 1342590191
>>1342191
Э нет, не уводи в сторону. Приведи пример, когда это создало тебе проблему. Именно рельсовый движок, а не гемы и патчи от васянов.

>>1342389
Колбеки зло, если их ответственность выходит за рамки объекта. Их можно (наверное, даже нужно) использовать, если они работают с внутренним состоянием объекта. Хороший пример - простановка дефолтного значения.
На счет счетчика хз, зависит от счетчика. Если случай простой, то я бы тоже сделал коллбеком.

>>1342524
>хуйнул бы все через триггер
Научи. Как вы поддерживаете эти триггеры, помните о них, ну как вообще с ними работаете? В рельсах-то о таком не принято говорить.
Аноним 06/02/19 Срд 01:58:09 1342591192
>>1342585
Ёообаный по голове!
Ты понимаешь, что ты мудак?
Аноним 06/02/19 Срд 02:12:05 1342595193
>>1342591
Спешите видеть, у макаки анальная контузия.
Аноним 06/02/19 Срд 02:13:19 1342596194
>>1342595
Я подожду до завтрашнего вечера - почитаю, как тебя другие обольют говном, школьничек.
Аноним 06/02/19 Срд 02:14:40 1342597195
>>1342596
Лол. Скатертью по жопе.
Аноним 06/02/19 Срд 02:16:13 1342598196
>>1342596
>>1342597
У тебя 4 зашкварных ошибки в коде. Скринь.
Аноним 06/02/19 Срд 02:19:36 1342600197
>>1342598
Заскринил тебе за щеку.
Аноним 06/02/19 Срд 03:45:45 1342614198
>>1342590
>Научи. Как вы поддерживаете эти триггеры, помните о них, ну как вообще с ними работаете? В рельсах-то о таком не принято говорить.

Мы о них помним только потому, что периодически пьём курс витаминов, правильно питаемся, хорошо спим и занимаемся бегом.
Я существо ленивое, далекое от самосовершенствования, и стал заботиться о себе только после того, как пол дня потратил на выяснение "какого хуя". Хуя оказалось такого, что у нас в постгре триггеры наебенены по самые помидоры, а мы про это забыли. Еще говорят документация помогает, но я не хочу использовать костыли для мозга, слишком гордый для этого.

Триггеры в постгре - альтернатива коллбэкам в рельсах. Ящитаю так: если тебе нужно какую-то бизнес логику добавить в триггеры или коллбэки - тебе это не нужно. Пиши нормальную класс под это дело.
Если тебе нужно манипулировать какой-то информацией, которая более техническая, чем практическая (пример из вопроса анона про счетчик). то как ты это будешь делать - через триггер или коллбэк - разницы практически никакой. Главное где-то записывать, что они используются, чтобы все в проекте знали.
Аноним 06/02/19 Срд 12:47:47 1342788199
Аноним 06/02/19 Срд 12:49:34 1342789200
>>1342614
>если тебе нужно какую-то бизнес логику добавить в триггеры - тебе это не нужно
Весело у вас в рубиманямирке. А посоны из постгреса-то и не в курсе что триггеры зря делали лоооол.
Аноним 06/02/19 Срд 13:04:38 1342796201
>>1342789
За триггеры с бизнес-логикой обоссывать начали еще тогда, когда рельс даже не существовало.
Аноним 06/02/19 Срд 13:37:26 1342807202
>>1342796
Рельсам с их расширяемостью на уровне блога за 15 минут и перформансом на уровне пожилой улитки конечно не понять зачем в реляционных бд существуют триггеры. Остаётся только обоссывать собственный ротешник.
Аноним 06/02/19 Срд 14:20:05 1342833203
>>1342789
Весело у тебя в джуномирке. Посоны из постгреса на то и из постгреса, что решают проблемы в постгресе. Различные подходы и решения не просто так стандартизированы. Ты можешь всё захуячить в триггерах, ты можешь 99% бизнес логики описать в хранимках (и есть одна компания, которая так сделала) - это будет нормально, если все знают, что делают и всех это устраивает. Но если часть делать так, часть делать эдак - рано или поздно все проебётся. Люди уходят, люди приходят, а нестандартные решения остаются и дорогие человекочасы тратятся на разбирательства.
Аноним 06/02/19 Срд 14:49:23 1342844204
>>1342833
А кто сказал что триггеры предназначены для 99%/всей бизнес-логики.
А кто сказал что хранимки и триггеры не должны попадать в миграции и схему бд.

>джуномирке.
Плиз.
Аноним 06/02/19 Срд 15:02:30 1342850205
>>1342844
>А кто сказал что триггеры предназначены для 99%/всей бизнес-логики.

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

>А кто сказал что хранимки и триггеры не должны попадать в миграции и схему бд

Стартапер дохуя? У тебя в рельсах никогда не было несколько сотен миграций? Тебе нравится пялиться в schema.rb? У тебя, наверное, и коллег нет, или все они с большой любовью делают то же самое?

Техническая возмножность то, что ты хочешь делать есть, но это нихуя не удобно в большинстве случаев, и создает охуенно большое пространство для проблем.
Аноним 06/02/19 Срд 15:11:49 1342852206
>>1342850
>Ты так говоришь, как будто бы это что-то плохое
Нет, я так не говорю, это твоя фантазия.

>Стартапер дохуя? У тебя в рельсах никогда не было несколько сотен миграций? Тебе нравится пялиться в schema.rb? У тебя, наверное, и коллег нет, или все они с большой любовью делают то же самое?
No offence, bro, но ты выступаешь сейчас с позиции быдлокодера.
В моём текущем проекте например CI не пропустит билд если закоммитишь файл с <80% покрытием тестами.

>Техническая возмножность то, что ты хочешь делать есть, но это нихуя не удобно в большинстве случаев, и создает охуенно большое пространство для проблем.
Откуда ты знаешь что я хочу? Я нигде не говорил чего хочу.
В данном конкретном случае поместить пересчет счетчика в триггер/хранимку - вполне неплохая идея. Например, если приложение - месенджер с чат-комнатами, сообщения пишут часто, надо постоянно обновлять счетчик количества сообщений в комнате. Это действие вероятно станет ботлнеком при достижении определенного объема данных. Хранимка/триггер будет намного эффективней по перформансу. Не так удобна для поддержки, но у каждого решения свои плюсы и минусы, которые хорошо бы знать и уметь использовать когда нужно.
Аноним 06/02/19 Срд 15:31:24 1342856207
Аноним 06/02/19 Срд 16:57:31 1342892208
>>1342852
>Откуда ты знаешь что я хочу? Я нигде не говорил чего хочу.
>В данном конкретном случае поместить пересчет счетчика в триггер/хранимку - вполне неплохая идея

Это не бизнес логика. Ты предлагаешь её хранить в триггерах и процедурках налево и направо. Я выше писал, что если ты так делаешь, могут возникнуть проблемы. Необходима хорошая документация.

>Не так удобна для поддержки, но у каждого решения свои плюсы и минусы, которые хорошо бы знать и уметь использовать когда нужно.

То есть ты высказываешь ту же самую мысль, что я описал ранее, но делаешь это специально настолько ублюдочно, чтобы развести срач.

>>1342856

>https://github.com/jalkoby/squasher

Интересно, но есть подозрение, что он не будет корректно работать с последовательностью миграций, которые апдейтят связанные между собой хранимки.
Аноним 06/02/19 Срд 17:34:53 1342915209
>>1342892
Да пошел ты нахуй со своими додумываниями что я предлагаю.
Аноним 06/02/19 Срд 17:46:06 1342925210
>>1342915
Пошёл ты нахуй с свои предложениями, а потом маневрированиями.
Аноним 06/02/19 Срд 17:54:30 1342936211
>>1342925
Я тебе ничего не предлагал.
Аноним 06/02/19 Срд 21:03:44 1343030212
Аноним 06/02/19 Срд 21:35:58 1343051213
>>1343030
Ты тоже иди нахуй, третье колесо нам не нужно.
Аноним 06/02/19 Срд 22:29:27 1343087214
>>1343051
Нет ты иди нахуй, я вообще не к тебе обращался.
Аноним 06/02/19 Срд 23:01:50 1343110215
Аноним 06/02/19 Срд 23:27:33 1343118216
>>1343110
Нахуй твоё мнение не всралось.

мимо-второй
Аноним 09/02/19 Суб 17:47:51 1344638217
>>1342596
>>1342598
А где этот питушара? Мне самому интересно какие там ошибки лол. Вместо обсуждения программирования итт джуны кидаются какашками и переходят на личности, код покритиковать или предложить ни один мудак не может. Вафлы.
Аноним 10/02/19 Вск 12:59:17 1345012218
>>1344638
Ты добавил поведение методу save, которое от него не ожидается. Он должен сохранять объект, а не устанавливать какие-либо значения для него. Пользователи твоего класса ожидают, что save будет работать как обычно.
Аноним 10/02/19 Вск 13:30:55 1345023219
руби маст дай
Аноним 10/02/19 Вск 15:18:19 1345086220
101lwn.jpg (22Кб, 305x229)
305x229
>>1345012
О боже, какой кошмар, бедные пользователи моего класса, я обманул их ожидания.
Нужно срочно запретить оверрайдинг методов при наследовании чтобы не обманывать ожидания пользователей. Сообщите в комитет по ООП, они должны знать!!!!
Аноним 10/02/19 Вск 20:07:45 1345289221
>>1345023
Почему, что он тебе сделал?
Аноним 11/02/19 Пнд 09:27:26 1345501222
>>1345086
Чувак, ты какой-то странный, тебе вполне верное замечание сделали. Это важно, чтобы методы делали то, что описано в их сигнатуре. Это признак хорошего, понятного кода. Твой код пахнет так себе.
Аноним 11/02/19 Пнд 10:52:41 1345518223
>>1345501
То есть метод save не должен проводить валидацию, не должен обновлять timestamps, не должен вызывать before_ и after_ колбэки, обновлять changed_attributes, т.к. это всё не упомянуто в сигнатуре? Тогда рельсы пахнут еще в 1000 раз хуже.
Аноним 11/02/19 Пнд 11:51:08 1345544224
Да и в целом перегрузку методов при наследовании надо убрать из ООП, верно?
Аноним 11/02/19 Пнд 13:57:10 1345613225
Да не должен. Метода save вообще не должно быть , но это Ar и от этого не уйдешь
Аноним 11/02/19 Пнд 14:02:18 1345616226
Про валидацию вообще не понимаю как ты может засунуть не валидные данные?Я думаю что бы сделать save у модели даннвх данные нуэно проверить вне где то
Аноним 11/02/19 Пнд 14:12:59 1345620227
>>1345613
> но это Ar и от этого не уйдешь
Ну так че ты проблемы AR на мой код спихиваешь.
>>1345616
Т.е. ты даже не знаешь как валидации в рельсах работают, но чето кукарекаешь? Ясно.
Аноним 11/02/19 Пнд 14:49:28 1345631228
>>1345620
Я говорю валидация отдельно сохранение отдельно
Аноним 11/02/19 Пнд 15:12:33 1345643229
>>1345631
Че ты мямлишь, скажи как мужик че сказать хочешь.
Аноним 11/02/19 Пнд 16:28:23 1345682230

>>1345643
Валидация отдельно.
Сохранение отдельно.
Повторить еще?или ты глупый .
Аноним 11/02/19 Пнд 17:25:09 1345720231
>>1345682
Долбоёб, не повторять надо, а осмысленные фразы выдавать.
Аноним 12/02/19 Втр 08:19:30 1346183232
Существует ли похожий язык, только нацеленный не на веб, а приложения? Хотелось бы начать с чего то программирование, но на С++ чет не хочется.
Аноним 12/02/19 Втр 10:49:37 1346225233
>>1346183
Очевидный питон очевиден. Пример декстопного приложения на питоне: https://github.com/GNOME/meld
Но он тоже интерпретируемый, и чего-то требуещего производительности не сделаешь.
Менее похожий, но всё же что-то как-то - это Scala под JVM.
Для мобильных приложений бери Dart/Flutter, лучше ничего нету.
Аноним 12/02/19 Втр 10:52:01 1346226234
>>1346183
Но если тебе просто для вката в программирование, то на руби во время обучения пили консольные приложения, а там до рельсов рукой подать.
Для построения нескучного UI в консольных приложениях есть гем https://piotrmurach.github.io/tty/
Аноним 12/02/19 Втр 11:18:25 1346232235
>>1324437 (OP)
Господа, подскажите, пожалуйста, где можно найти полное описание синтаксиса Руби без ёбаных гайдов для новичков?
А то не очень понятно как читать подобное: huipizda :ebat => kopat, pizdec {:nahui => hiv}
Аноним 12/02/19 Втр 11:30:28 1346240236
lrg.jpg (105Кб, 500x656)
500x656
Аноним 16/02/19 Суб 15:46:42 1348813237
Вангую что вопрос у меня глупый, но никак не могу понять как сделать в рельсах следующее..

Есть модель tour с полями tour_id и title + соответствующий контроллер со стандартными методами index, show и т.п.
Есть контроллер stats со стандартными методами index, show и т.п.

В routes.rb:

resources :tours do
resources :statistics
end

Т.о., валидны урл-ы типа /tours/1/statistics.
Ппонимаю, что выглядит криво, но вопрос не в этом.

На страницах по адресу типа /tours/1/statistics мне нужно вывести форму с выпадающим селектом этих tours по id, причем по нажатию submit с выбранным tour_id, скажем, 2, браузер должен переадресоваться на /tours/2/statistics.

Пишу такую форму:
<%= form_with model: @tour do |f| %>
<%= f.select(:tour_id, Tour.all.collect {|u| [u.title, u.id]}, :prompt => 'Select') %>
<%= f.submit("Submit") %>
<% end %>

Ожидаемо переадресует на /tours/2. Не могу понять, что мне надо сделать для нужного мне результата. Или вообще перепилить statistics из отдельного контроллера в метод контроллера tour? Но и тогда не понимаю как сделать и, главное, где копать.
Аноним 16/02/19 Суб 15:47:26 1348814238
>>1348813
>Есть контроллер stats со стандартными методами index, show и т.п.
statistics, конечно.
Аноним 16/02/19 Суб 21:59:26 1349075239
>>1348813
А форму не хочешь через simple_form сделать? Селект особенно твой, очень страшно такое видеть.

Если я правильно понял твой вопрос, то ты должен в контроллере в методе :update или :save или что у тебя там, вот ты должен в конце метода сделать redirect_to на стату, там разберешься.
Аноним 16/02/19 Суб 23:06:28 1349131240
>>1349075
>А форму не хочешь через simple_form сделать?
О, спасибо, совсем забыл про этот гем. Мало работал с этой темой.

>Селект особенно твой, очень страшно такое видеть.
Ну из официальных api доков взял, как-то так.

>Если я правильно понял твой вопрос, то ты должен в контроллере в методе :update или :save или что у тебя там, вот ты должен в конце метода сделать redirect_to на стату, там разберешься.
Ага, были такие мысли, попробую.
Аноним 17/02/19 Вск 00:21:39 1349167241
>>1348813
>2k19
>Рендерить html на сервере
Осиль уже react или vue. Это не троллинг, если что, я за последние года 3, а то и больше, не могу вспомнить что бы мне хоть раз пришлось рельсами что-то кроме json или xml отдавать.
Аноним 17/02/19 Вск 00:41:12 1349176242
>>1349167
Да, это в планах.
Вопрос в том, по каким критериям стоит делать выбор. На данный момент vue, react, angular и тд, и тп для меня темный лес.
Аноним 17/02/19 Вск 03:03:51 1349212243
>>1348813
Не понятно, что ты хочешь сделать и ты видимо сам толком не понимаешь, отсюда и проблема.
Предположу что есть какая-то страница статы с быстрой goto-формой.

Есть три способа:
1. Делаем стату отдельным контроллером, а форма просто будет сабмитить id тура на StatsController#show.
2. Делаем стату collection-action-методом, а форма просто будет сабмитить id тура на ToursController#stats.
3. Делаем так как ты сказал, но обрабатываем сабмит js-ом, подставляя в window.location = '/tours/:id/stats'. И тащемта опять же тут не нужен отдельный контроллер, можно обойтись member-action-методом ToursController#stats.

>>1349075
Не слушай школьника. И никогда не используй говно-гемы для форм. Сейчас у тебя отличная форма.
Только сделай f.select(:tour_id, Tour.limit(100).pluck(:title, :id), :prompt => 'Select')
Аноним 17/02/19 Вск 12:44:40 1349420244
>>1349212
>Предположу что есть какая-то страница статы с быстрой goto-формой.
Да, так и есть.

Все получилось с добавлением редиректа в контроллер + добавил в форму method: :get и local: true.

Вообще, понял что в любом случае вариант с js будет более гибким, т.ч. пойду изучать как правильно его связывать с рельсами. Всем спс.
Аноним 17/02/19 Вск 17:23:42 1349708245
>>1349420
>Все получилось с добавлением редиректа в контроллер
Лол
Это что-то на уровне подпилить ножки у стола, чтобы отрегулировать высоту стула.
Аноним 17/02/19 Вск 20:26:05 1349946246
i4pkzbwmxcpz.jpg (1676Кб, 4032x3024)
4032x3024
>>1349167
> react или vue
Нинужное говноедство на которое убивается немеряно времени, а профита против turbolinks + rjs - чуть более чем нихуя.
Почитать на тему: https://medium.com/@jmanrubia/escaping-the-spa-rabbit-hole-with-turbolinks-903f942bf52c

>>1349212
>Только сделай f.select(:tour_id, Tour.limit(100).pluck(:title, :id), :prompt => 'Select')
Вызов модели из вью - мы вам перезвоним.

>>1349708
Двачую.

А делать надо было вот что. Для этой странички написать ЖС, в нём навесить обработчик onChange для селекта, который будет менять form action на "/tours/" + select.value +"/statistics". Всё.

Если пойти чуть дальше, то этот же обработчик может заодно и сабмитить форму, тогда можно убрать нинужную кнопку. Да и форму можно убрать, и делать переход с помощью window.location. Самое простое = самое лучшее.
Аноним 17/02/19 Вск 21:28:44 1349991247
Алсо, каким надо быть уёбком, чтобы человеку, которому нужон однострочник на JS, советовать выучить react.
Аноним 17/02/19 Вск 21:40:01 1350004248
>>1349946
>Нинужное говноедство на которое убивается немеряно времени, а профита против turbolinks + rjs - чуть более чем нихуя.
Скажу честно, статью не читал, слишком длинная. Если ты тратишь с vue больше времени, чем с rjs, то ты что-то делаешь не так или у тебя просто еще недостаточно опыта работы с ним. Я разрабатывал всякие сложные формочки и прочие сильно интерактивные штуки еще во времена тотального доминирования jquery и помню как даже первый angular был просто божественным откровением. Наконец-то не надо было вешать десятки обработчиков всяких onclick и onchange и 100% обосраться в процессе в каком-нибудь селекторе, или забыть обновить доступные значения в селекте, или забыть скрыть часть полей, или еще миллион других вариантов оставить интерфейс в неправильном виде удачи все это сделать с помощью rjs, кстати. С ангуляром (а сейчас с react/vue) можно было просто менять стейт в js и он сам правильно отображался на интерфейс. Это реально был переход от императивного к декларативному программированию на фронтенде.

>>1349991
В данном случае это, конечно, оверкилл, но это учебный проект и в них оверкиллы это норма и даже необходимость. В будущем, когда ему понадобится сделать и правда что-то сложное на фронтенде, он уже будет знаком с подходящими для этого инструментами.
Аноним 17/02/19 Вск 23:52:47 1350130249
>>1349946
>Вызов модели из вью - мы вам перезвоним.
Сложно переть со своим мнением против догм, но это самое адекватное решение в 99% случаев.
Конечно, вызов вызову рознь, если там сложные квери, то разумеется нельзя. Но в данном случае это ок.
Если бы мне соискатель сказал, что тут нужно завернуть в декоратор, налепить view-model и прочей поеботы и настаивал бы на этом после уточняющих вопросов, то я бы такому "правильному" точно перезвонил.
Аноним 18/02/19 Пнд 00:02:44 1350132250
>>1350130
>>1349946
Алос, раз уж заговорили про это. А скажи-ка как бы ты это оформил?
Если ты все-таки скажешь про форм-обжект, то приведи конкретную реализацию для этого случая. Точнее публичные интерфейсы форм-обжекта.
Аноним 18/02/19 Пнд 05:14:32 1350211251
>>1350130
>Если бы мне соискатель сказал, что тут нужно завернуть в декоратор, налепить view-model и прочей поеботы и настаивал бы на этом после уточняющих вопросов, то я бы такому "правильному" точно перезвонил.

Тебе достаточно определить переменную в экшене, пёс.
Аноним 18/02/19 Пнд 05:21:53 1350212252
а зачем он нужон ваш руби? что на нём писать то и в какой сфере?
чё-то в последнее время так наслуху он, но судя по всему предполгаю, что это очередной язык который "может всё", но при этом для неосиляторов.
Аноним 18/02/19 Пнд 05:39:45 1350217253
>>1350212
Руби нужон для написания блогов за 15 минут. Для остального он нинужен.
Алсо, если у тебя руби на слуху, то ты слоупок лет на 10. Руби уже отходит в мир иной вместе с индустрией блогов за 15 минут.
Аноним 18/02/19 Пнд 05:43:39 1350219254
>>1350217
а понял это для веба какая-то хуета. ну и зачем так усиленно его дрочить? есть же универсалниые инструменты давно
html/css/js/php/mysql/c#...
Аноним 18/02/19 Пнд 05:46:41 1350221255
>>1350217
алсо вас не послушаешь, так у вас всё свой век отживает. c++, php, джава что не спроси у анона всё отживает свой век. лол
Аноним 18/02/19 Пнд 05:51:04 1350223256
>>1350219
Когда говно в горло больше не лезет, тогда и перелезаешь с пхп на руби.
Аноним 19/02/19 Втр 12:09:00 1350837257
>>1350004
Нихуя себе оверкилл - выучить ещё один фреймворк вместо написать одну строчку. Оверкил лол.
На изучение жс-фреймворка потратишь уйму времени, а через полгода он устареет нахуй и пользы от него останется только в /пр/ глупые советы давать.
19/02/19 Втр 12:39:35 1350854258
>>1350223
И тогда понос польется в горло и потечет по бороде с бодрым бульканьем.
Аноним 19/02/19 Втр 13:37:13 1350869259
>>1350854
Не понос, а шоколадный смузи. Руби - самая годнота среди неборщехлебных языков. Трюли, индид.
19/02/19 Втр 14:15:24 1350878260
Аноним 19/02/19 Втр 14:31:58 1350879261
>>1350878
Неосиляторская истерика.
Аноним 19/02/19 Втр 14:45:34 1350881262
>>1350837
>выучить ещё один фреймворк вместо написать одну строчку
Ну это не рельсы, у react и vue публичное API сотни раз меньше. На react можно начать писать вполне вменяем код через день, на vue через пару дней. При условие, что ты уже знаком с js, конечно.

>а через полгода он устареет нахуй
Года 3-4 назад я согласился бы. Но сейчас все устаканилось, рыночек уже года 3 как доминирует реакт и никуда уходить не собирается, плюс есть популярная альтернатива - vue и angular 1 еще часто встречается в легаси проектах. И вообще-то все, все остальное почти мертво.
19/02/19 Втр 14:58:56 1350884263
>>1350879
В эпоху хайпа рельс я вполне себе использовал руби, мой юный друг, но делал это исключительно ради денег, а не из-за каких-то его мнимых преимуществ.
Аноним 19/02/19 Втр 15:34:17 1350893264
Аноним 19/02/19 Втр 15:35:42 1350894265
>>1350881
Вменяемый код который нахуй ненужон.
Аноним 19/02/19 Втр 15:41:37 1350897266
Как в руби работают с асинхронными вызовами? В интернете 2.5 статьи в отличии от того же пистона
Аноним 19/02/19 Втр 16:16:42 1350904267
>рыночек уже года 3 как доминирует реакт и никуда уходить не собирается, плюс есть популярная альтернатива - vue и angular 1 еще часто встречается в легаси проектах
В том и дело что популярная альтернатива появилась недавно, и так же может уйти. Появится что-то еще, и не будет спрашивать твоего мнения - уходить реакту или нет. Ангуляр третий выпустят, и будешь его с нуля учить, как учил второй после первого. Короче, у фронтендщиков уже который год каждая ночь трудная, а очко разработано так, что они без труда могут спрятать в нем десяток фреймворков.
Аноним 19/02/19 Втр 16:17:44 1350906268
Аноним 19/02/19 Втр 16:25:44 1350910269
>>1350904
>Ангуляр третий выпустят
Лол, уже бета 8-й версии вышла. Так что ад гораздо страшнее и глубже
Аноним 19/02/19 Втр 16:29:32 1350911270
>>1350904
>Ангуляр третий выпустят
Уже седьмой выпустили, всем на него похуй после обосрамса с переходом с первого на второй.
Я так-то согласен, что технологии на фронте менялись слишком быстро. Но коммьюнити это тоже осознало и сейчас темп стал намного более разменянным. Как пример не только react, но webpack по-сути тоже стал дефолтом на фронте уже несколько лет как и никуда уходить не собирается, всякие react-router, redux и прочие перестали мажорные версии выпускать.
Аноним 19/02/19 Втр 16:30:12 1350912271
>>1350906
>GIL
Можно асинхронные вызовы и в одном потоке гонять

>Никак
Ну это же пиздец, как у вас хайлоад писать
Аноним 19/02/19 Втр 16:31:28 1350914272
>>1350906
И питоне тоже GIL, ты путаешь aсинхронность и параллелизм. Для асинхроности в руби есть вполне годная EventMachine.
Аноним 19/02/19 Втр 16:38:23 1350919273
>>1350912
Хайлоад блог за 15 минут лол кек. Как только проект на руби достигает уровня "хайлоад", его переписывают на Скалу или еще что-то другое. Таких случаев в истории единицы, их все знают наперечёт, во всех остальных случаях слово "хайлоад" используется чтобы нахмурить брови на собеседовании (обеими сторонами), и реальным хайлодом там и близко не пахло. Так что, Иван Федорович, слушайте "валенки" и не выёбывайтесь.
Аноним 19/02/19 Втр 16:41:58 1350921274
Аноним 19/02/19 Втр 16:42:18 1350922275
>>1350919
У меня хуйлоад проект на пистоне, думал, что на рубях тоже можно запилить
Аноним 19/02/19 Втр 17:00:35 1350926276
Показывай свой хуйлоад, заценим с пацанами.
Аноним 19/02/19 Втр 17:03:10 1350928277
Аноним 19/02/19 Втр 17:37:55 1350937278
>>1350928
лол, вот те и хуйлоад, всё как я говорил
Аноним 19/02/19 Втр 17:39:22 1350938279
15367042617330.png (40Кб, 255x230)
255x230
>>1350937
Ты мне продакшен код предлагаешь скинуть?
Аноним 19/02/19 Втр 17:43:47 1350940280
>>1350938
Назвать проект хотя бы и рассказать что там по нагрузке.
19/02/19 Втр 17:44:38 1350941281
Правда ли, что вся популярность Рубина держалась на Ruby on Rails? Чем так хорош был этот фреймворк?
Аноним 19/02/19 Втр 17:45:29 1350943282
>>1350941
да.писать типовые задачи быстро и удобно
19/02/19 Втр 17:50:26 1350946283
>>1350943
А что в нём было такого? Ну, какие киллер-фичи зарешали?
Аноним 19/02/19 Втр 17:50:59 1350947284
>>1350940
Связан с беттингом, легкая интеграция и кастомизация собственной платформы для всех желающих
Аноним 19/02/19 Втр 17:51:50 1350948285
>>1350946
из за магии меньше кода по сравнению с другими фреймворками,более лаконичный код
Аноним 19/02/19 Втр 19:44:36 1350992286
Аноним 20/02/19 Срд 01:55:28 1351157287
В чем преимущество Руби? Есть ли смысл перекатываться от с++, python
Аноним 20/02/19 Срд 02:04:52 1351161288
>>1351157
От с++ перекатываться надо куда угодно. От питона смысла нет.
Аноним 20/02/19 Срд 02:15:57 1351163289
>>1351161
>От с++ перекатываться надо куда угодно
Эм, с чего бы это
Аноним 20/02/19 Срд 06:45:32 1351185290
Аноним 20/02/19 Срд 12:46:12 1351276291
>>1351163
Потому что poorly designed.
Аноним 20/02/19 Срд 15:15:12 1351344292
>>1341444
>Ну давай рассказывай как ты каждый день борешься с present? у Object и second у Array. Я тоже, конечно, против money patching, но именно фреймворку по-моему позволительно добавить некоторые методы общего назначения в стандартную библиотеку. И как уже сказали выше некоторые из них кочуют в руби.

Действительно, зачем делать валидации, приведение типов, если можно во все объекты, даже небо, даже Аллаха, захуячить blank?/present? и вызывать в любом месте проекте, да, быдлокодерок?
Аноним 20/02/19 Срд 16:45:18 1351383293
>>1351344
Действительно, зачем делать валидации и приведение типов, еслли можно во все обхекты захуячить blank?/present? ?
Аноним 20/02/19 Срд 19:56:07 1351512294
180px-ArApp.jpg (11Кб, 180x236)
180x236
Аноним 20/02/19 Срд 21:29:02 1351569295
>>1351512
Ты задал этот вопрос, решив подъебать собеседника, а я задал, потому что действительно хочу знать ответ. Объясни джуну, пожалуйста.
Аноним 21/02/19 Чтв 12:22:24 1351827296
>>1351569
Потому что валидация и приведение данных должны быть в одном определенном месте в архитектуре приложения. Когда введёные данные прошли этот фильтр, их можно считать корректными, безопасными и оперировать ими в коде бизнес-логики.
Манки-патчинг всех в мире объектов - это фактически добавление глобальных функций. В Руби есть глобальная функция puts для вывода, но мы же строим архитектуру MVC с выводом только из View слоя. Если провести аналогию, быдлокодеры говорят - зачем нам париться с View, давайте в каждую модель хуйнём метод puts, ведь это так удобно - выводить данные модели из самой модели.
Аноним 21/02/19 Чтв 16:06:01 1351985297
>>1351827
По твоей логике у Object вообще методов быть не должно. Плюс никто не мешает present? использовать только внутри валидаторов, хотя, как по мне, он и внутри бизнес логики иногда полезен. Интересно, кстати, что ты скажешь, если завтра present? добавят в стандартную библиотеку, как уже случалось с другими методами из рельс?
И puts, кстати не глобальный метод, а метод из модуля Kernel, который замиксинен только в Object, но не в BasicObject.
Аноним 21/02/19 Чтв 16:17:42 1351989298
>>1351985
Никто и на похапэ не мешает писать хороший код, только почему-то на руби код в среднем по больнице лучше.
Скажу что это плохой шаг. Пока что Мац сопротивляется уже на протяжении лет так трёх. Сейчас говорю что Мац молодец, пусть вашего брата быдлокодера и дальше на хую вертит.
Аноним 21/02/19 Чтв 16:58:18 1352021299
Потому что я не хочу чтоб уютный руби превращался в пыхопарашу.
Аноним 21/02/19 Чтв 17:22:05 1352045300
Аноним 21/02/19 Чтв 17:28:40 1352052301
Аноним 21/02/19 Чтв 17:54:02 1352074302
>>1351827
Я согласен по поводу валидации и обработки параметров. Но как это пересекается с present? ? Ты пишешь так, как будто бы наличие этого метода подразумевает отказ от валидаций. Сам по себе этот метод очень удобный, ничего плохого в нем нет. Проблема только в том, что это манки патчинг. Он хуевый по дефолту. Даже если в каком-то конкретном примере он приемлем, он все равно хуевый, потому что с маленького шашка начинается большая героиновая зависимость. Но ты пиздишь на present? так, как будто бы не понимаешь, в чем проблема. Тебе главное пиздеть, брюзжать, брызжать слюной.
Аноним 21/02/19 Чтв 18:26:44 1352102303
>>1352074
Откуда тебе знать что для меня главное, лол. Я даю аргументецию, а ты на личности переходишь. Неудивительно что такому быдлу нужен глобальный манки-патчинг лоол.
Аноним 21/02/19 Чтв 18:48:41 1352116304
>>1352102
Тем временем ниодного конкретного примера чем же present? так плохо, кроме кококо-манкипатчинг так и не было.
Аноним 21/02/19 Чтв 18:51:00 1352121305
>>1352116
>>1351827
inb4 только ты решаешь что такое хорошо, поэтому мои примеры не примеры, поэтому ты снова перейдешь на личности вместо аргументации
Аноним 21/02/19 Чтв 18:53:45 1352125306
>>1352102
Твои аргументы инвалидны. Ты ничего не говоришь конкретно о present?, ты подменяешь понятия и предполагаешь, что адепты present? в остальном тоже говнокодеры.
Аноним 21/02/19 Чтв 18:54:58 1352128307
>>1352125
Ну все как я и написал выше.
Аноним 21/02/19 Чтв 19:09:24 1352138308
>>1352128
Тут несколько человек с тобой разговаривают. Я хочу разобраться. Объясни. Ты не объясняешь нихуя. Я настроен на конструктивный диалог.
Аноним 21/02/19 Чтв 19:13:55 1352142309
>>1352138
Джуну который задавал вопрос я достаточно подробно ответил. Если тебе после этого что-то непонятно, то тебе потребуется поставить вопрос чтобы получить на него ответ. "Объясни. Ты не объясняешь нихуя." - как ты живешь с такими коммуникационными навыками.
Аноним 21/02/19 Чтв 22:16:17 1352248310
>>1352142
Я не он, но мне тоже интересно, чем плох present? и я, например, не понял как связаны объекты для валидации входящих данных и этот метод. То есть я понимаю, конечно, что его можно использовать как замену очень простой валидации и это, наверное, не очень хорошо, но ведь это не единственный юзкейс, да и внутри самих валидаторов скажем почему бы его не использовать.
Пример, есть очень ебанутое API, которое для одного из ключей в json объекте может возвращать null, пустую строку или массив - пустой или со строками. У меня есть класс, который приводит всю эту хуйню к нормально виду и в нем есть примерно вот такая строка: object[:foo] = [] unless object[:foo].present?
Что в ней плохого, если представить, что я до этого уже провалидировал, что от API пришел один из 3 вариантов выше?
Аноним 21/02/19 Чтв 23:19:16 1352293311
Gooby car susp[...].PNG (42Кб, 386x269)
386x269
>>1352248
Я написал чем плох манки-патчинг всех в мире объектов и почему это не надо делать на уровне языка. Ты спрашиваешь чем плох вызов метода в конкретном месте конкретного проекта.
Аноним 21/02/19 Чтв 23:56:17 1352313312
>>1352293
Нет ты противопоставлял валидации и прочие штуки методу present?
>Действительно, зачем делать валидации, приведение типов, если можно во все объекты, даже небо, даже Аллаха, захуячить blank?/present?
Но нигде не пояснил как одно мешает другому?

И так и не пояснил, чем плох конкретно этот манкипатчинг. А когда тебя спросили, что если добавить этот метод в стандартную библиотеку, ты просто сказал, что это плохо без аргументов.
>Скажу что это плохой шаг. Пока что Мац сопротивляется уже на протяжении лет так трёх. Сейчас говорю что Мац молодец, пусть вашего брата быдлокодера и дальше на хую вертит.
Аноним 22/02/19 Птн 00:54:59 1352345313
>>1352313
Я противопоставил выстраивание архитектуры манки-патчингу и глобальным функциям.
26/02/19 Втр 14:26:51 1355660314
Какой подход лучше когда во вью нужна короткая, но всё же логика для отображения: во вью её и вписать, использовать хелпер, использовать презентер?
Аноним 26/02/19 Втр 15:29:33 1355717315
Сажа приклеилась зря.
Аноним 27/02/19 Срд 11:03:18 1356153316
Тред умер?
Аноним 27/02/19 Срд 17:09:45 1356286317
Помогите не погромисту, и даже не эникею. Есть код https://pastebin.com/mU0QZ22B Нужно объяснить мне, как сделать, чтобы он работал. Установил интерпретатор, запустил файлик - не работает. Вылезает командная строка(?), исчезает - и ничего. За долю секунду разобрать, что было написано, не получается. Имеем винду и мозиллу версии 52.4.
Аноним 27/02/19 Срд 19:38:14 1356359318
>>1356153
Нет, это от руби запах.
Аноним 27/02/19 Срд 20:28:30 1356395319
>>1356286
Запусти командную строку, в ней запусти файлик - так вывод не пройдет мимо.
Аноним 27/02/19 Срд 21:25:00 1356424320
Безымянный 0.png (24Кб, 648x158)
648x158
Аноним 27/02/19 Срд 21:32:33 1356433321
30/час если на пол ставки. первый месяц 20/час, так-как давно не работал. не более 4 часов в день.
50/час если на полную ставку, удаленно.
70/час на полную и в офисе, время на дорогу за их счет.
норм просить? не хочу на полную.
35 лвл. много или пофиг? куда не стоит лезть?
Аноним 27/02/19 Срд 21:38:35 1356440322
>>1356424
Ищи любителя цопе, который тебе это заведёт. Сам ты на винде это не запустишь.

>>1356433
Если в евро, то норм. В долларах я бы подумал дважды, но в принципе можно.
Аноним 27/02/19 Срд 21:41:34 1356443323
>>1356440
>Сам ты на винде это не запустишь.
Ок. Теперь есть определенность, что этот код не нужон. А разве там не недостающую библиотеку скачать, чтобы заработало, не?
>>1356440
>Ищи любителя цопе, который тебе это заведёт.
Што?
Аноним 27/02/19 Срд 21:44:58 1356446324
>>1356443
Ну скачай если сможешь. Там библиотек несколько и что из них заработает под виндой - вопрос. А заниматься этим вопросом никому не интересно, т.к. винда и руби мало совместимы.
>Што?
А это скрипт для чего, как ты думаешь?
Аноним 27/02/19 Срд 21:48:38 1356448325
>>1356443
Чем запускать на винде, проще найти мак/линукс и установить/запустить там.
Аноним 27/02/19 Срд 21:54:45 1356450326
>>1356446
>Там библиотек несколько и что из них заработает под виндой - вопрос.
А разве по типу ошибки неясно, какую именно, нужно наугад библиотеки перебирать и тестить? Не подскажешь, где качать эти библиотеки? Или все равно работать не будет?
>А это скрипт для чего, как ты думаешь?
Взрослые одетые тины - ну такое себе цопе.
>>1356448
Я не хакир. И ради одного скрипта учиться пользоваться линуксом - это фантастика.
Аноним 27/02/19 Срд 22:13:50 1356458327
>>1356450
Библиотеки
>require 'excon'
>require 'fileutils'
>require 'nokogiri'
>require 'open-uri'
>require 'rmagick'
>require 'ruby-progressbar'

Как это в винде устанавливать не представляю.
Аноним 27/02/19 Срд 22:17:23 1356460328
Аноним 27/02/19 Срд 22:18:30 1356461329
Аноним 27/02/19 Срд 22:21:38 1356463330
Помню как я пытался ImageMagick на винде заставить работать в руби, ух бля, не завидую тебе.
Аноним 27/02/19 Срд 22:58:11 1356480331
>>1355660
Юзай презентеры, декораторы.
Аноним 27/02/19 Срд 23:16:35 1356488332
>>1356480
Но это ж оверкилл когда для пары методов новый класс создавать когда можно хелпер заюзать, не?
Аноним 28/02/19 Чтв 00:01:48 1356503333
>>1356488
Практически всегда наступает такой момент, когда логика расширяется, и какой-то умник продолжает её пихать в хелперы. Лучше сразу делать нормально. Это как урна мимо которой всегда бросают.
Аноним 28/02/19 Чтв 17:50:37 1356712334
>>1356488
В хелперах похерен ООП. Максимум пару методов там оставляй.
Аноним 03/03/19 Вск 12:43:06 1358248335
Подскажите идею для пет проекта.Что бы на уровень мидл тянуло. Кроме магаза в голову ни чего не приходит
Аноним 03/03/19 Вск 14:10:36 1358308336
>>1358248
Что вообще такое пет проект?
Аноним 03/03/19 Вск 14:42:37 1358347337
Стикер (383Кб, 512x512)
512x512
>>1358248
Имиджборда, чтобы выдавала по крайней мере 5 тысяч запросов в секунду.
Аноним 03/03/19 Вск 18:56:55 1358552338
>>1358308
Ну, проект "для себя"
Аноним 03/03/19 Вск 19:04:46 1358556339
>>1358347
А как проверять этот показатель? Просто в консоли смотреть время запросов SQL?
Аноним 04/03/19 Пнд 08:35:19 1358825340
>>1358556
Мань не делай хуйню. Придумай что-то интереснее и сложнее, сделай систему краша вк-групп с циклическим добавлением друг дружки ботов.
Это понял 100-200 аккаунтов, и они по кругу бы постоянно добавляли друг друга в групповой чат ВКонтакте и удалялись оттуда, создавая с этим бешеный флуд, и невозможность их кикнуть/забанить, ну только если через API как-то и всех сразу, но они бы инвайтили обратно того кого кикнул овнер.
Так-бы
Аноним 04/03/19 Пнд 08:35:51 1358827341
>>1358825
так бы... закрашить можно было кучу конференций ВКонтакте и было бы весело, я бы проспонсировал 200+ ВК акков хули поржать можно
Аноним 06/03/19 Срд 12:45:49 1360062342
Аноним 06/03/19 Срд 19:49:19 1360305343
>>1324437 (OP)
>Ну короче все языки были хуйней я хотел запилить че-нить для человека, простое, гибкое...
>гуглишь туторы про работку я массивами
>так короче 100500 ненужных прикрученных способов есть
>где тут индексация так такс
>ну короче ВАМ ИНДЕКСАЦИЯ НЕЧАСТО БУДЕТ НУЖНА поэтому ее тут и нет ХАХАХАХХАХА
>..
>втф??
Объясните, рубисты.

Сам хотел подергать необычные языки, чтобы быть более грамотным, открыть что-то новое...
Аноним 06/03/19 Срд 20:13:17 1360321344
>>1360305
Научись нормально выражать свои мысли. Не понятно, о чем ты вообще пишешь и что тебе надо.
Аноним 06/03/19 Срд 20:15:56 1360325345
>>1360321
Что тебе не понятно? Как работать с массивами? Оперировать значениями?

ПС я знаю уже пару способов и все они мне не нравятся
Аноним 06/03/19 Срд 20:36:54 1360335346
>>1360325
>ПС я знаю уже пару способов и все они мне не нравятся

Например?

>ну короче ВАМ ИНДЕКСАЦИЯ НЕЧАСТО БУДЕТ НУЖНА поэтому ее тут и нет ХАХАХАХХАХА

Индексы есть
Аноним 06/03/19 Срд 20:41:08 1360342347
>>1360335
>индекасы есть

Покеж. массив[х]=2 или массив[да]=нет или массив[длина/2]=массив[длина], ну и добавить(добавляемое, массив), до кучи.


>например
Например через step, только я не знаю новомодный ли он, или старый.
Аноним 06/03/19 Срд 21:07:12 1360351348
kavo-valakas.jpg (76Кб, 600x399)
600x399
>>1360342
>массив[х]=2
так есть же array[0] = "value"
>массив[да]=нет
КАВО?
>массив[длина/2]=массив[длина]
НЕПОНЕЛ
>добавить(добавляемое, массив)
array.push(value)
Аноним 06/03/19 Срд 21:12:15 1360356349
>>1360342
>массив[да]=нет
ПХПшник что ли?
Я, кстати, тоже с трудом понял, что ты понаписал.
мимодругойрубист
Аноним 06/03/19 Срд 21:16:28 1360358350
Помню начал чекать руби, но ненавижу динамикодрисню. Как вы можете на ней так писать?
Аноним 06/03/19 Срд 21:19:01 1360360351
>>1360351
>>1360356
Дыа...

А как удалить элемент из массива из любого индекса? array,splice(юю)?
Аноним 06/03/19 Срд 21:21:31 1360361352
Аноним 06/03/19 Срд 21:23:32 1360362353
>>1360360
В руби массив это традиционный массив и у него могут быть только цифровые индексы. Если тебе нужен ассоциативный массив, то он называется Hash.

>А как удалить элемент из массива из любого индекса?
https://devdocs.io/ruby~2.5/array
https://devdocs.io/ruby~2.5/enumerable
Просвещайся.
Аноним 06/03/19 Срд 21:26:07 1360364354
>>1360362
Руби такой медленный, пиздец.
Аноним 06/03/19 Срд 21:27:55 1360366355
>>1360361
>>1360362
Сяяяп, ладно, пойду почекаю. Вероятно, я в прошлое наше с руби знакомство затупил и у меня просто глаза разбежались от странностей.

Как вам сам язык-то? Че-нить прикольное(серьезное) с ним делаете?


>>1360364
>я делаль язык прежде всего для людей
>и што што тормозит, для людей ЖЕ
>пока компилируется можете сходить поссать, или кофе там выпить, круто же! для людей11!!
Аноним 06/03/19 Срд 21:29:01 1360367356
>>1360358
>Помню начал чекать руби, но ненавижу динамикодрисню
>Помню начал чекать еблю в жопу, но ненавижу пидоров

>Как вы можете на ней так писать?
Да, нормально. В большистве статически типизированных язык все типы по-дефолту nullable, что по-сути тоже их делает довольно динамически типизированными и ничего пишут же люди.
Аноним 06/03/19 Срд 21:31:46 1360370357
>>1360366
>
>>1360367
Улучшаете и улучшаете свою ебаную скорость, пока другие языки просто созданы чтобы выигрывать.
Аноним 06/03/19 Срд 21:35:27 1360371358
>>1360366
>Че-нить прикольное(серьезное) с ним делаете?
Ничего особенного. Пишу в меру хуйлоадный проект, плюс на беке куча ебанутой бизнес логики покрытой десятками тысяч тестов. Вообще подход очень неторопливый и интерпрайзный ко всему, я даже удивлен почему когда-то давно взяли руби, а не какую-нибудь джаву.
Аноним 06/03/19 Срд 21:39:05 1360374359
>>1360370
Ну рассказывай для чего тебе скорости руби не хватает. А то видел я таких, у них запрос к базе по полминуты делается, а виноват руби.
Аноним 09/03/19 Суб 03:26:53 1361265360
Помогите ньюфагу. Почему если я размещаю метод edit (редактирование статьи в моём случае) ниже create (создание статьи), то браузер пишет, что значение переменной равно нулю? А если выше, то всё нормально.
Аноним 09/03/19 Суб 16:59:45 1361462361
>>1361265
покажи код контроллера
Аноним 09/03/19 Суб 19:42:21 1361534362
Аноним 09/03/19 Суб 21:42:13 1361631363
>>1361534
35 строка, закрой блок end'ом
Аноним 09/03/19 Суб 22:00:18 1361645364
Аноним 10/03/19 Вск 02:47:42 1361789365
Аноним 10/03/19 Вск 05:10:07 1361802366
>>1361631
Сори анон, скинул работающий код. Совсем кукушка поехала.
Аноним 14/03/19 Чтв 19:27:10 1364341367
Аноним 14/03/19 Чтв 23:38:45 1364513368
Есть ли тут аноны, которые делали что-нибудь с е-коммерсом?

Если коротко, то поясните разницу между: Cart (aka Basket) vs Order vs Invoice vs Payment [vs Checkout]. инбифо, я конечно же понимаю, что это значит, но с точки зрения сущностей мне не понятно, что нужно, а что нет
Я короче не знаю, как правильно смоделировать покупки.
Во-первых, корзина. С одной стороны самостоятельная штука, а с другой это один-в-один таблица заказов. Но при этом корзины могут все-таки забросить и негоже им лежать вместе с заказами. Хотя какая хуй разница.
Во-вторых, что за сущность такая инвойс. Я ее ни в юридическом смысле не понимаю, ни в техническом. Судя по всем это выражение факта оплаты, несмотря на то что инвойсы вроде как выставляют НА оплату.
Чекаут это видимо тоже суть есть оплата.

Посмотрел немного как сделано в Spree. Там походу только две сущности - Order (он же корзина в статусе "cart") и Payment.
Короче, кто работал с этой предметной областью, подскажите, какие сущности нужно выделять. И как все-таки быть с корзиной.

---
Еще вопрос по поводу Spree. Насколько это серьезный движок, в плане архитектуры, масштабируемости и оптимизированности? Стоит ли подглядывать их практики и решения или даже использовать его или это сорт оф Redmine - хорошая, но тяжелая коробка, в которую лучше не лезть.
Аноним 15/03/19 Птн 09:16:52 1364605369
Поясните за колбеки у моделей в Rails. Почему в интернетах пишут что это говно? По-моему очень удобно если например среди полей, которые ты апдейтишь в модели есть определенное поле с определенным значением (status=published например), то можно в колбеке это обработать и сделать какие-то сопутствующие действия, например записать каррент юзера в поле publisher_id.
Аноним 15/03/19 Птн 13:49:52 1364693370
>>1364513
Cart и Order разделяй. В корзине у тебя только товары. В заказе еще и данные покупателя/доставки/оплаты/аллаха.
Не забудь, что товары в корзине - это отдельная сущность (i.e. Line Item), т.к. если в ассортименте на сайте, например, поменяются цены, то в корзине/заказе все должно оставаться так же, как и на момент доавления в корзину/оформления заказа.

Все остальной из другой оперы и тебе особенно не надо.

По Spree смотрел довольно давно, вроде хорошо задокументированно все, но я предпочитаю самопис, т.к. у текущего проекта по ИМ очень специфичная бизнес-логика.


Пользуясь случаем спрошу у местных - готовим перекат на самопис на рельсах с Opencart.
Как по уму настроить 301 переадресацию со старых опенкартовских урлов вида "<domain.ru>/index.php?route=product/search&search=123" на, к примеру, "<domain.ru>/products?search=123" штатными средствами? В routes.rb? Что покурить по этому поводу? Ссылочная масса в поисковиках довольно солидная, не хотелось бы терять.
Аноним 15/03/19 Птн 17:04:25 1364786371
>>1364693
Можно и в routes.rb, но я бы на уровне nginx (или что вы там используете) сделал, будет быстрее работать и не придется захламлять настоящие роуты этим легаси. Если редиректить с http кодом 302, то все приличные поисковики, типа гугла, должны быстро подхватить изменения и начать выдавать новые урлы в результатах поиска.
Аноним 15/03/19 Птн 17:05:47 1364787372
>>1364786
Обосрался. 301, а не 302, конечно.
Аноним 15/03/19 Птн 17:22:28 1364800373
>>1364605
Если у тебя небольшое приложение с парой колбеков на модель, то ничего страшного в них нету. Проблемы начинаются, когда у тебя в моделях по 10+ колбеков, становится важен порядок вызова этих колбеков, эти колбеки начинают сохранять другие модели, что в свою очередь вызывает колбеки из этих моделей и это все растет как снежный ком. Один раз работал над приложением в котором сохранение поста вызывало 100+ колбеков в сумме. Ах да, еще скорость прохождения тестов тоже очень от этого страдает.
Аноним 15/03/19 Птн 18:03:50 1364822374
>>1364800
Поэтому многие визжат, когда видят один единственный колбек в модели. Говно начинается с маленькой ватрушки, поэтому то, что может стать дерьмом, стараются не использовать даже в том контексте, в котором оно еще не дерьмо.
Аноним 15/03/19 Птн 18:28:25 1364838375
>>1364786
О, годно, не думал об этом на уровне nginx. Покурю, пасиб.
Аноним 15/03/19 Птн 23:32:22 1365029376
>>1364693
>Cart и Order разделяй.
>В заказе еще и данные покупателя/доставки/оплаты/аллаха.
Это единственное основание для разделения? Потому что всего перечисленного в заказе быть и близко не должно, это отдельные сущности.

>но я предпочитаю самопис, т.к. у текущего проекта по ИМ очень специфичная бизнес-логика
Ну я посмотрел немного что там есть. И есть там походу очень не мало. И что важнее - это выработанные практикой решения, обобщенные, со стройным понятийным аппаратом. Так что если бы у меня был новый проект, я бы потратил время, чтобы разобраться и вероятно использовать его.
А самописы страдают тем, что реализуют виденье "художника".
Аноним 16/03/19 Суб 01:44:21 1365092377
>>1365029
>Это единственное основание для разделения? Потому что всего перечисленного в заказе быть и близко не должно, это отдельные сущности.

Не единственное. Пользователь набрал товаров в корзину и закрыл вкладку. Зашел на следующий день, решив дооформить заказ. Сессия еще жива, должна быть жива и корзина. Это еще пример на вскидку.

>И что важнее - это выработанные практикой решения, обобщенные, со стройным понятийным аппаратом.

Половина из которых - специфика обработки заказов в штатах, т.е. те же инвойсы, итд. Впрочем, ничего против не имею. Бери комбайн и старайся кастрироваться его под своинужды. Глядишь и получится.
Аноним 16/03/19 Суб 01:50:25 1365100378
>>1365092
>Половина из которых - специфика обработки заказов в штатах, т.е. те же инвойсы, итд
А вот нет их там внезапно. Что подтверждает мою догадку о том, что инвойсы это какая-то квази-хуйня. Да и вообще ничего специфичного я там не нашел. Только вот оплаты заточены сугобо под карточки (как собственно и эктив-мерчант), как-будто других способов не существует. Но в это я не очень верю, видимо, бегло смотрел.
Аноним 16/03/19 Суб 01:53:45 1365104379
>>1365092
>Сессия еще жива, должна быть жива и корзина. Это еще пример на вскидку.
Не понял, и чего, как это относится к разделению сущностей?
Аноним 16/03/19 Суб 11:14:22 1365262380
Аноним 16/03/19 Суб 12:14:42 1365288381
>>1365262
Боже ты мой, лол, у тебя комплексы?
Аноним 16/03/19 Суб 17:17:46 1365473382
А помните был такой сайт ruby-jobs.ru. Что с ним стало? Он же популярный довольно был.
Аноним 16/03/19 Суб 18:16:23 1365513383
>>1365473
Автор теперь держит elixirjob.ru, руби ему не нужен.
Аноним 16/03/19 Суб 18:19:10 1365515384
>>1365513
>elixirjob.ru
Блять, вот пидор! А старый-то зачем было закрывать.
Аноним 16/03/19 Суб 20:29:28 1365563385
В общем надо загрузить много файлов, заатачить к модели, и распарсить содержимое оттуда и создать еще кучу экземляров другой модели. Мне вот непонятно это лучше в ActiveJob дать или реализовать в виде сервисов? Я так понял если сделаю сервисы, то пока файля парситься будут клиент ждать будет, так?
Аноним 16/03/19 Суб 20:38:12 1365570386
>>1365515
Он как бы намекает.
Аноним 16/03/19 Суб 23:45:28 1365744387
>>1365570
Да пошел он нахуй, говнюк этот.
Аноним 16/03/19 Суб 23:49:29 1365750388
>>1365744
Технический прогресс - тот еще говнюк, это да. А гравитация и вовсе бессердечная сука.
Аноним 16/03/19 Суб 23:58:46 1365759389
>>1365750
Да ты тоже иди нахуй вместе с ним тогда.
Аноним 17/03/19 Вск 00:43:24 1365774390
>>1365563
Проспись и переформулируй.
Аноним 17/03/19 Вск 00:45:30 1365776391
>>1365288
Тебе, блятб, дыважды расписали что и как и где могут быть подводные. Если совсем тупенький - то столкнешься с траблами. Изволил хамить - иди на хуй. Все просто.
Аноним 17/03/19 Вск 12:23:33 1365971392
>>1365776
Пиздец ты обиженный жизнью шизик, где ты увидел, что тебе кто-то хамил?

мимо
Аноним 17/03/19 Вск 12:44:02 1365983393
>>1365744
>Да пошел он нахуй, говнюк этот.
Элик это будущее. Мне он так зашел, что я активно его продвигаю в моем круге и челикам он тоже заходит. Пока у меня только пару пет проджектов, если через месяц уговорим заказчика работать с эликом - то и на проде появится. Как раз новый проект начнем.
Аноним 17/03/19 Вск 12:45:21 1365984394
И вообще пора бы уже заводить тред руби & элик.
Аноним 17/03/19 Вск 12:58:19 1365989395
>>1365983
Где можно погуглить вашу контору на предмет вакансий?
Аноним 17/03/19 Вск 14:45:46 1366028396
Аноним 17/03/19 Вск 15:47:43 1366056397
image.png (90Кб, 726x603)
726x603
Оправдывайся, почему ты еще не на элике?
Аноним 17/03/19 Вск 15:53:45 1366061398
>>1366056
unless else блеять, сука.
Вообще ломал бы руки за использование unless в любой ситуации.
Аноним 17/03/19 Вск 16:52:49 1366077399
>>1366056
Полумертвое говно без задач. Я пару лет назад в эликсир тред когда он еще не умер подробно расписывал почему эликсир параша, но сейчас мне лень искать эту пасту. Если тебе не хватает производительности руби (а других причин выбрать эликсир вместо руби почти нету), то просто бери котлин/скалу или ГОвно, в крайнем случае, они хоть живы.
Аноним 17/03/19 Вск 16:54:41 1366079400
>>1366077
Ах да, за ЭЛИК отдельно тебя обоссал.
Аноним 17/03/19 Вск 17:01:20 1366081401
>>1365473
Он в телегу переехал @rubyjob
Аноним 17/03/19 Вск 17:16:32 1366089402
>>1366081
Мда, вот бы теперь еще найти где симку купить, чтобы им пользоваться.
Аноним 17/03/19 Вск 17:27:13 1366095403
>>1366077
>Полумертвое говно без задач.
Чего? По всему миру есть активные конференции и жобы.

>то просто бери котлин/скалу или ГОвно, в крайнем случае, они хоть живы.
котлин только в ведре, скала параша, говно создано чтобы завести аутентификацию на сервер и все. Нет никаких нормальных утилит, чтобы решать задачи.

А феникс спокойно их решает, рельсы же забрызганное говно, к тому же еще и медленное.
Аноним 17/03/19 Вск 17:48:37 1366099404
>>1366095
>Чего? По всему миру есть активные конференции и жобы.
В несколько раз меньше, чем даже на руби. И за последний год похоже падает. Если посмотреть developer survey от SO, то в 2017 эликсир был и в most loved, и в most wanted, в most popular (хоть и не очень высоко), в 2018 его уже нигде нету. Пунктов в рейтингах за оба года одинаковое количество.

>Нет никаких нормальных утилит, чтобы решать задачи
В JVM-мирке у тебя нету никаких утилит? Ну это вообще пушка. Что у тебя там за такие охуительные задачи, которые только эликсир может решить? Только не пиши про 100к коннектов на один сервер.

>к тому же еще и медленное.
Достаточно быстрое для 99% задач.
Аноним 17/03/19 Вск 18:03:38 1366109405
>>1366099
>В JVM-мирке у тебя нету никаких утилит?
жвм мирок я использую не в беке.

>Что у тебя там за такие охуительные задачи, которые только эликсир может решить?
меньше кода пишу

>Достаточно быстрое для 99% задач.
руби отсасывает даже от жвм. И не говори что это не правда.
Аноним 17/03/19 Вск 23:29:18 1366301406
Screenshot 2019[...].png (209Кб, 1492x1156)
1492x1156
>>1366099
>И за последний год похоже падает
look at this bro
Аноним 18/03/19 Пнд 00:20:19 1366311407
>>1366301
Version manager завезли для эликсира или все еще нет? Если нет, но это говно идет нахуй.
Аноним 18/03/19 Пнд 00:34:46 1366313408
Книги по рубену банят в 10 раз быстрее, чем их выкладывают, где их искать?
Аноним 18/03/19 Пнд 05:34:13 1366358409
Аноним 18/03/19 Пнд 19:42:57 1366698410
Аноним 19/03/19 Втр 18:32:32 1367147411
>>1324437 (OP)
Сап, рубиновые, хочу попробовать стать таким же модным как вы, но не хочу читать книжки для совсем начинающих
Есть опыт спринга и жабки, скажите мб кто нить перекатывался с них в руби, как перекатиться проще всего?
Аноним 19/03/19 Втр 21:50:05 1367237412
Аноним 19/03/19 Втр 22:27:43 1367258413
>>1367147
Прочитай Eloquent Ruby (первые главы можно просто пролистывать, смотря только примеры кода), потом RoR Guides от корки до корки (главы про assets pipeline и js в рельсах можно скипнуть). Все, пили пет-проекты, там уж походу разберешься.
Можно еще код какого-нибудь mastodon посмотреть, у них многовато кода в модели напихано, но в целом все довольно прилично.

>>1367237
Уебывай в свой мертвый тред, эликсиродебил.
Аноним 19/03/19 Втр 22:39:37 1367269414
>>1367258
Благодарю анон, сам перекатывался?
Аноним 19/03/19 Втр 22:42:15 1367272415
>>1366311
Нет, только говнину в виде asdf прикрутили.
Аноним 19/03/19 Втр 22:48:31 1367274416
>>1367269
Да, но контора теперь хочет на эликсире писать. Поэтому я бы советовал учить его.
Аноним 19/03/19 Втр 23:22:40 1367291417
>>1367269
Нет. Я как вкатился на руби так и пишу на нем. Но в последние пару лет добавилось в стек много ноды и не очень много котлина (на беке, к счастью, а не на мобилках).
Аноним 20/03/19 Срд 16:08:31 1367553418
>>1367272
>asdf
Ето ж система сборки коммон лиспа!
Аноним 20/03/19 Срд 20:33:22 1367667419
>>1367291
А эликсир используете?
Аноним 20/03/19 Срд 22:33:51 1367811420
Аноним 21/03/19 Чтв 00:45:10 1367878421
Аноним 21/03/19 Чтв 10:03:46 1367938422
>>1367811
Видимо у вас проект рассчитан на посещаймость в 100 человек.
Аноним 21/03/19 Чтв 18:41:37 1368092423
>>1367878
Руби даже название для своей системы сборки самостоятельно придумать не может и тырит его (как и все остальное) у коммон лиспа (и тырит наверняка криво, как и все остальное). Нахуй так жить?
Аноним 21/03/19 Чтв 20:31:06 1368129424
>>1368092
asdf это универсальный менеджер версии с плагинами для кучи языков, написан он на баше и никакого отношения к руби он не имеет. Да и как там что-то называлось в мертволиспе никого не волнует, ты бы еще из-за пересечения названий с какой-нибудь либой на фортране возмущался, дедуль.
Аноним 21/03/19 Чтв 21:57:16 1368163425
>>1368092
>Нахуй так жить?
Перекатываться на эликсир.
Аноним 21/03/19 Чтв 22:01:51 1368165426
Без названия.jpeg (9Кб, 274x184)
274x184
>>1368129
> Да и как там что-то называлось в мертволиспе никого не волнует, ты бы еще из-за пересечения названий с какой-нибудь либой на фортране возмущался, дедуль.
Пикрелейтед ссыт тебе в ротешник.
Аноним 21/03/19 Чтв 22:17:12 1368170427
>>1368165
Даже он понял, что common lisp никому нахуй не нужен и написал clojure.
Аноним 21/03/19 Чтв 22:26:52 1368178428
>>1368170
Молодец, хорошо подъебал.
Аноним 22/03/19 Птн 15:54:07 1368479429
>>1368129
>ы бы еще из-за пересечения названий с какой-нибудь либой на фортране возмущался
asdf появился в 2013 году. Не шаришь - лучше промолчи.

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

Вообще, говнина вместо нормального пекедж менеджера - это отличный аргумент против рубипитонодрисни. С жс еще ладно, там просто альтернатив нет и приходится страдать, но в 2k!9 самостоятельно себя обрекать на еблю с зависимостями, когда эта проблема уже давно решена во всех нормальных языках - это просто верх борщехлебства.
Аноним 22/03/19 Птн 18:26:38 1368531430
>>1368479
>Не шаришь - лучше промолчи
>Вообще, говнина вместо нормального пекедж менеджера - это отличный аргумент против рубипитонодрисни
Тебе самому тогда стоит помолчать. Это не пекедж менеджер. Это менеджер версий рантаймов, то есть он позволяет устанавливать кучу разных версий руби/питона/ноды/рандомнойхуиты. С появлением докера надобности в подобном стало, конечно, по-меньше, но все-равно иногда полезная штука.
Для пекедж менеджмента у руби есть божественный bundler, который наголову выше и npm и pipenv.
Ах да и коммон лисповский asdf появился в 2001.
Аноним 22/03/19 Птн 19:13:57 1368553431
>>1368531
>Это менеджер версий рантаймов
А чем он лучше rvm/rbenv? Или это из другой оперы?
Аноним 22/03/19 Птн 19:18:49 1368554432
>>1368553
Тем что работает для кучи разных языков, а не только для руби. Мне он заменил rvm и nvm.
Аноним 22/03/19 Птн 19:39:32 1368561433
>>1368554
Спс, буду иметь в виду.
Аноним 22/03/19 Птн 19:44:49 1368563434
>>1368531
>Это не пекедж менеджер. Это менеджер версий рантаймов
Ох, так я тебе и говорю о том, что в нормальных языках версией языка в текущем проекте заведует пекедж менеджер (а для системных зависимостей тут конечно докер).

>который наголову выше и npm и pipenv
Наголову выше мочи и говна, ну ок.

>Ах да и коммон лисповский asdf появился в 2001.
Ну тогда это действительно что-то уровня фортрана, извени, я был неправ, это все меняет.
Аноним 25/03/19 Пнд 01:27:04 1369653435
>>1367291
Котлин на бэке? Платон?
Аноним 25/03/19 Пнд 14:32:01 1369814436
>>1366077
Сильное заявление

Можно конкретный пример?

Просто не такой распиаренный как го, в остальном прекрасный инструмент под свои нужды, отличная эволюция эрланга

Ну и фп не для всех
Аноним 25/03/19 Пнд 18:00:41 1369890437
>>1369814
Увы, давно прошло время когда языки без компаний взлетали. Судя по ред монкс элик растет, но его можно щупать лет через 5-10 когда действительно проекты появятся. Руби тоже помирает. А котлин будет жить, потому что жид брейнс вливает колоссальное бабло туда. А в элик кто вливает? Никто.

мимо.
Аноним 25/03/19 Пнд 20:08:11 1369952438
Аноним 28/03/19 Чтв 23:12:55 1371669439
Только начал изучать руби. Есть задача: в метод передается String, в котором есть переходы на новую строку. Мне нужно найти строку, в которой, например, есть слово "foo".
Не знаю как разделить String.
И еще если мне не известно число переходов на новую строку, то надо будет обрезанные строки складывать в массив?
Аноним 28/03/19 Чтв 23:34:33 1371677440
Аноним 29/03/19 Птн 01:07:57 1371712441
>>1371677
Да-да, уже сам дочитал до сплита. Аригато.
foo ищу через include?
Я так понимаю можно же ловить тру типа:
if strs[x].include?('foo') == true do something
Аноним 29/03/19 Птн 03:20:54 1371725442
>>1371712
Решил уже эту задачу и застрял на следующей.
Есть логи формата ip - - [date time] "POST address HTTP/1.1" randomint
Надо переформатировать ее в вид date time FROM ip TO address
Почитал про match, про regexp, попробовал написать свой, берущий date time, т.к. показалось это самым простым, но походу я вообще не одупляю как они пишутся, потому как постоянно ловлю nil.
Аноним 29/03/19 Птн 03:56:37 1371729443
>>1371725
ну так почитай какой-нибудь гайд по регекс епта
Аноним 29/03/19 Птн 09:07:20 1371786444
Аноним 29/03/19 Птн 19:33:57 1372034445
>>1371786
Спасибо, на самом деле классная вещь.

>>1371725
Вроде написал метод, теперь осталось пасснуть проверку рубокопа на дефолтном конфиге, потому как он выдает ABCSize [22.69/15]
Код: https://pastebin.com/GdPXZqHG
Аноним 30/03/19 Суб 05:52:17 1372200446
>>1372034
Все, решил. Подсказали на стаке.
Аноним 01/04/19 Пнд 17:53:42 1373287447
по руби рельсам мало инфы...
Аноним 01/04/19 Пнд 18:31:30 1373295448
>>1373287

В смысле мало? Пол интернета завалено ей.
Аноним 01/04/19 Пнд 20:01:12 1373328449
>>1373295
разжеваной инфы кот наплакал
Аноним 01/04/19 Пнд 21:34:48 1373406450
>>1373328

Разжёванной до какого уровня? Документация и книжки такого уровня как у руби и рельс ещё поискать над.
Аноним 01/04/19 Пнд 21:44:29 1373412451
Пожалуйста посоветуйте, как сделать нормальную авторизацию на Rails + React. Я уже задолбался с девайсом, такая хрень.
Аноним 01/04/19 Пнд 22:52:47 1373461452
Аноним 02/04/19 Втр 02:26:25 1373551453
Аноним 02/04/19 Втр 06:45:26 1373569454
>>1373406
пишут либо в общих чертах.либо сваливают все в месиво,где черт сломит
Аноним 02/04/19 Втр 08:57:12 1373591455
>>1373569

Конкретнее? Что ты хочешь узнать / сделать / выучить?
Аноним 02/04/19 Втр 17:21:08 1373827456
>>1373569
в рельсах нехер делать разбираться
Аноним 02/04/19 Втр 17:43:35 1373838457
>>1373591
регистрация и аутинфикация
Аноним 02/04/19 Втр 18:26:54 1373863458
>>1373838
Бразильцы знатно переусложнили, понимаю. С другой стороны гайдов по Devise оч много.

https://github.com/plataformatec/devise/wiki
https://habr.com/ru/post/208056/
https://www.sitepoint.com/devise-authentication-in-depth/
https://medium.freecodecamp.org/lets-create-an-intermediate-level-ruby-on-rails-application-d7c6e997c63f

Попробуй спуститься на уровень ниже и разобраться как работает Warden.

Если не хочешь девайс попробуй сам сделать с has_secure_password: https://gist.github.com/iscott/4618dc0c85acb3daa5c26641d8be8d0d
Аноним 02/04/19 Втр 18:32:33 1373868459
>>1373295
не сравнится с питоном и пхп ,шоб можно спросить на как дваче
Аноним 04/04/19 Чтв 09:33:54 1374796460
чем рельсы лучше джанги?
Аноним 04/04/19 Чтв 16:49:19 1374991461
>>1373406
не сравниться с джанговской
Аноним 04/04/19 Чтв 18:13:03 1375020462
>>1374796

Ну например в Django гораздо легче отстрелить себе ногу и понаписать говнокода на мой взгляд. Я бы не стал давать его в руки нубов.

Вообще это всё вкусовщина.
Аноним 04/04/19 Чтв 18:31:52 1375026463
Аноним 04/04/19 Чтв 18:43:16 1375033464
самые важные и популярные гемы стабильны на винде?
Аноним 04/04/19 Чтв 18:45:32 1375034465
Аноним 04/04/19 Чтв 18:49:56 1375036466
>>1375034
Что значит какие? А какие тебе нужны?
БОльшая часть гемов работает на всех платформа, но скорее всего понадобится напильник.

Впрочем я бы не советовал чистую винду. Используй докер или WSL.
Аноним 04/04/19 Чтв 18:51:35 1375037467
>>1375036
> докер
что это? только простыми словами
Аноним 04/04/19 Чтв 18:53:54 1375041468
>>1375037

Виртуальная linux машина нет Простыми не получится. Используй винду тогда.
Аноним 04/04/19 Чтв 19:07:26 1375051469
>>1375041
>>1375041
можешь посоветовать легкий дистр для виртуалки?
Аноним 04/04/19 Чтв 19:11:52 1375059470
>>1375051

Если ты про докер, то вообще без разницы. Ты не будешь его видеть;

Если про настоящую виртуалку, то Ubuntu или Mint норм.
Если тебе не нужен интерфейс, то Debian.
Аноним 04/04/19 Чтв 19:13:47 1375061471
>>1375059
я пытался поднять виртуалку на минте-тормаза,а ставить рядом с виндой прроблемы из-за уефи
Аноним 04/04/19 Чтв 19:14:33 1375062472
>>1375059
а в докере все команды вручную?
Аноним 04/04/19 Чтв 19:21:15 1375065473
>>1375062

Не совсем понимаю вопрос. Думаю ответ — да.

Пример из документации

$ docker run -it --rm --name my-running-script -v "$PWD":/usr/src/myapp -w /usr/src/myapp ruby:2.5 ruby your-daemon-or-script.rb


Аноним 04/04/19 Чтв 19:26:44 1375068474
Аноним 04/04/19 Чтв 23:05:56 1375163475
>>1375020
Питон вообще куда более расположен к написанию говнокода, это я как питонист заявляю. Больше фич в языке - больше мест где можно обосраться.
>>1374796
Джаго уже в этом, 2019 году станет асинхронной.
Аноним 05/04/19 Птн 07:19:53 1375268476
>>1375163
зато по питону на дваче всегда быстро ответят,а по руби могут пройти дни...
Аноним 05/04/19 Птн 07:25:29 1375270477
>>1375268

Особенно когда в руби треде меряются писькой питонисты
Аноним 05/04/19 Птн 07:32:46 1375273478
Аноним 05/04/19 Птн 21:56:59 1375656479
>>1375270
потому что руби мертв
Аноним 06/04/19 Суб 01:12:58 1375755480
>>1375273
Поэтому похоронят их рядом как близких
Аноним 06/04/19 Суб 09:19:52 1375837481
>>1375656
Руби мертв
А питон говно
А я пишу на языкнейм
И мне все равно
Аноним 06/04/19 Суб 11:01:31 1375863482
Аноним 06/04/19 Суб 17:55:25 1376056483
зачем нужна переменная класса?
Аноним 06/04/19 Суб 18:10:48 1376059484
и что такое блоки и зачем?
Аноним 06/04/19 Суб 18:20:03 1376066485
>>1376056

Чтобы хранить глобальное состояние класса и всех его потомков. Например там может быть какой-нибудь кэш который требуется всей иерархии классов.

В чистом виде редко используется потому что, как и любое глобальное состояние, требует дисциплины. В Rails есть хелпер class_attribute который делает примерно тоже самое, но не имеет побочек (дочерний класс не может поменять состояние родительского).
Аноним 06/04/19 Суб 18:23:29 1376068486
>>1376059

Блоки это такой синтаксис для передачи анонимного колбека как параметра внутрь другого метода.

В JS:

[1,2,3].map(function(i) { i 2 })

В Ruby:

[1,2,3].map { i
2 }

не совсем, но такое объяснение сойдёт
Аноним 06/04/19 Суб 18:25:11 1376070487
>>1376068
>анонимного колбека
WATF?
Аноним 06/04/19 Суб 18:29:07 1376075488
>>1376068

Проебался с разметкой.

В JS:

`[1,2,3].map(function(i) { i 2 })`

В Ruby:

`[1,2,3].map { i
2 }`
Аноним 06/04/19 Суб 18:30:51 1376077489
>>1376075
а можно пример попрощt?
Аноним 06/04/19 Суб 18:32:44 1376078490
>>1376070

Функция может принимать другую функцию как аргумент. Это аргумент обычно именуется колбеком.

про анонимность не важно
Аноним 06/04/19 Суб 18:33:17 1376079491
>>1376077

Какой язык ты уже знаешь?
Аноним 06/04/19 Суб 18:34:35 1376082492
>>1376079
крайне поверхносто ПХП
Аноним 06/04/19 Суб 18:51:49 1376101493
>>1376082

В PHP ты можешь определить такую функцию:

function modify_array($arr, $callback) {
$result = [];

for ($i = 0; $i < count($arr); $i++) {
$result[$i] = $callback($arr[$i]);
}

return $result;
}

Она принимает 2 аргумента: какой-то произвольный массив ($arr) и какой-то произвольную функцию-обработчик ($callback).
Дальше она создаёт пустой массив $result; затем начинает обходить $arr и каждый элемент исходного массива $arr[$i] передаёт
в функцию-обработчик $callback($arr[$i]). Результат работы обработчика записывается в $result[$i].

В конце работы функции получается, что ты прменил какое преобразование к каждому элементу исходного массива.

Вот как можно использовать:

$my_callback = function($i) {
return $i + 1;
}

modify_array([1, 2, 3], $my_callback);

Вернёт: [2, 3, 4]
Аноним 06/04/19 Суб 18:55:24 1376103494
>>1376101

Я думаю тебе пока рано браться за тему с функциями высшего порядка.

Думай о блоках как о дополнительном синтаксисе для не которых функций.
Аноним 06/04/19 Суб 19:20:32 1376117495
Аноним 06/04/19 Суб 19:34:33 1376124496
Аноним 06/04/19 Суб 20:01:11 1376138497
>>1376124
где можно в сети задать вопрос и получить ответ?только не стековерфлоу-там тупые вопросы морозят
Аноним 06/04/19 Суб 20:05:55 1376142498
>>1376138

Никогда не задумывался об этом.

Здесь можно; я знаю есть телеграмм каналы; есть reddit; есть freecodecamp
Аноним 06/04/19 Суб 20:07:41 1376145499
>>1376142
формат двача мне нравиться,но в этом треде как в склепе.телеграмм заблокирован,а что на реддите?
Аноним 06/04/19 Суб 20:10:27 1376147500
>>1376145

На вскидку /r/CodingHelp/ и /r/AskProgramming/
Аноним 06/04/19 Суб 20:11:50 1376148501
>>1376147

А, ну и forum.vingrad.ru
10 лет назад он был популярным
Аноним 06/04/19 Суб 20:20:36 1376155502
>>1376142
> freecodecamp
там нет руби
Аноним 06/04/19 Суб 20:25:31 1376160503
Аноним 06/04/19 Суб 20:27:49 1376161504
Аноним 06/04/19 Суб 20:30:04 1376163505
>>1376160
у меня есть книги по руби,могу немного в англ шоб читать статьи в инете,но бывает что авторы очень херово объясняют
Аноним 06/04/19 Суб 20:33:35 1376165506
>>1376161
Как ты оцениваешь свои навыки с базовым кодингом (безотносительно языка)?
Аноним 06/04/19 Суб 20:37:57 1376168507
>>1376165
уровень не полный тупица
Аноним 06/04/19 Суб 20:50:20 1376174508
>>1376168

Хорошо! Ты проходил какие-нибудь гайды по рельсам уже? Знаменитый How to build a blog in 15 minutes with Rails?
Аноним 06/04/19 Суб 20:52:03 1376175509
>>1376174
нет,я еще не закончил с руби
Аноним 06/04/19 Суб 20:54:37 1376177510
>>1376175

Тогда придумай себе какую-нибудь цель, типа написать на Ruby калькулятор. Изучать язык в отрыве от производства бессмысленно.
Аноним 07/04/19 Вск 13:46:17 1376659511
>>1375020
> в Django гораздо легче отстрелить себе ногу
что это значит?
Аноним 07/04/19 Вск 18:56:26 1376828512
>>1376659

По виду он не достаточно opinionated и не достаточно форсит правильную архитектуру. В итоге если дать Django новичку, то он превратит всё в цирк c конями и PHP. Я могу ошибаться т.к. никогда не работал плотно с Django, но мой опыт кричит об этом.

Та самая пресловутая "магия" в рельсах отстрелит тебе голову, если ты попытаешься отстрелить себе ногу и отойти от общепринятых норм. Как ни странно в случае с новичками это сильно помогает.
Аноним 07/04/19 Вск 20:28:49 1376861513
>>1376828
блог за 15 минут-не миф?
Аноним 07/04/19 Вск 20:39:13 1376866514
>>1376861

Нет не миф. Но это игрушка. Это как TodoMVC только для бэкэнда.
Аноним 07/04/19 Вск 20:41:25 1376867515
>>1376866
я не понял-релсы только для игрушечных проэктов?
Аноним 07/04/19 Вск 20:43:04 1376868516
>>1376867

Рельсы — нет.
Блог за 15 минут — игрушка дьявола.
Аноним 07/04/19 Вск 20:44:47 1376871517
>>1376868
но это показатель возможностей рельс или нет?
Аноним 07/04/19 Вск 20:47:10 1376873518
>>1376871
Это показатель на сколько развита всякая автоматизация типичных задач в рельсах. Это не показатель насколько релсы хороши и какие возможности они имеют. Просто одна из фич: смотрите я могу сделать простейший CRUD прямо из командной строки.
Аноним 07/04/19 Вск 20:48:28 1376874519
>>1376873
а шаг влево-и пиздец?
Аноним 07/04/19 Вск 20:55:44 1376880520
>>1376874

Нет, не пиздец. Но тебе будет не комфортно, если ты начнёшь класть код не туда куда положено или делать всякие глупости.

Рельсы пассивно-агресивны и с ними нужно сотрудничать иначе они будут тебя саботировать. Это не значит что ты чего-то не можешь сделать (или что ты там удумал?) или как-то ограничен.

https://dhh.dk/2012/rails-is-omakase.html

К чему вообще все эти вопросы? Просто попробуй и посмотри понравится или нет.
Аноним 07/04/19 Вск 21:11:27 1376888521
Аноним 07/04/19 Вск 21:16:13 1376895522
Аноним 07/04/19 Вск 22:22:16 1376934523
Ай нид хелп (я тупой).

Есть проект на актуальных рельсах с актуальным devise.

Как правильно запретить автологин пользователя после успешной регистрации? Гуглил, читал, оверрайдил родный девайсовские контроллеры и так и эдак, вносил соотв. изменения в routes.rb, нихрена не работает.

Кто-нибудь делал такое?
Аноним 07/04/19 Вск 22:25:30 1376936524
Аноним 07/04/19 Вск 22:29:53 1376939525
>>1376936
О, встречал на стэковерфлоу такой момент. там переопределяли как:
def sign_up(resource_name, resource)
sign_up(resource_name, resource)
end
Показалось чем-то слегка фантасмогоричным, но попробую.
Аноним 07/04/19 Вск 22:30:48 1376940526
>>1376861
Это реальность на любом фреймворке любого языка, и до кучи, на половине библиотек.
Аноним 07/04/19 Вск 22:38:24 1376945527
>>1376939

Я думаю тебе надо просто сделать

def sign_up
end
Аноним 07/04/19 Вск 23:03:44 1376958528
>>1376945
Не ну до этого додуматься я в состоянии, уже свою логику нужную вставил и нотис об удачном сайнапе убрал. Благодарствую.
Аноним 07/04/19 Вск 23:22:48 1376966529
>>1376945
И в догонку, если не сложно: я редирекчу пользователя после регистрацию на условную pages/success с информацией о дальнейших действиях. Естественно, эта страница по прямому урлу доступна всем и кждому. А как мне сделать ее достпной только человеку, прошедшему регистрацию, при условии того, что я не логиню его автоматически?
Понимаю, что проще тупо скинуть подтверждение на почту, но хотелось бы и немедленный визуальный фидбек предоставить.
Аноним 07/04/19 Вск 23:30:22 1376972530
>>1376966
А, не-не, я действительно тупой.
И тема с оверрайдамини к чему. Пусть себе логинятся, надо тупо редиректить на страницу с настройками акка, где и прописать все, что нужно, заодно дать возможность разлогиниться.
Ну чтож, опыт - сын ошибок трудных и не всегда вменяемого тз.
Аноним 07/04/19 Вск 23:31:52 1376973531
>>1376966

Ты можешь в сессию что-нибудь писать при регистрации и проверять в контроллере.
Аноним 07/04/19 Вск 23:35:32 1376976532
>>1376936
Вообще, действительно спасибо. Меня не хватило на самое простое, что могло быть - просмотр исходников. Посыпаю голову пеплом.
Аноним 08/04/19 Пнд 09:57:52 1377081533
Стикер (447Кб, 512x512)
512x512
Сап. Подскажите какой итератор может сравнить в блоке элемент со следующим элементом?
Вот я знаю только each_with_index, а следующий элемент потом в блоке arr[index+1], проблема в том что в конце массива возвращает nil, из-за чего надо проверять unless arr[index+1].nil?
Но может есть получше вариант?
Аноним 08/04/19 Пнд 10:18:12 1377093534
Аноним 09/04/19 Втр 05:28:36 1377518535
Создаётся впечатление что в руби больше вакансий и меньше конкуренция. Может хоть туда меня возьмут? Стоит изучать?
Аноним 09/04/19 Втр 05:38:37 1377519536
Аноним 09/04/19 Втр 13:50:06 1377715537
Screen Shot 201[...].png (83Кб, 1676x292)
1676x292
Что это такое на пикрил <<- ?
Смотрю скрипт установки зависимостей для пакета через homebrew, если это важно
Аноним 09/04/19 Втр 14:34:39 1377742538
Аноним 09/04/19 Втр 19:22:25 1377896539
>>1377742
Спасибо, а где можно почитать перечень глобальных классов, переменных, которые доступны с самого начала скрипта?
Вот эти всякие puts, abort(которая как я понял из класса Kernel) и т.д.
Аноним 09/04/19 Втр 21:05:13 1377943540
Аноним 11/04/19 Чтв 20:24:59 1379341541
назовите причины,почему руби и рельcы -дерьмо?
Аноним 12/04/19 Птн 04:13:06 1379518542
image.png (747Кб, 3198x1799)
3198x1799
Аноним 12/04/19 Птн 05:48:26 1379525543
Аноним 13/04/19 Суб 15:29:53 1380309544
какие отличия у руби от питона?
Аноним 13/04/19 Суб 18:33:16 1380362545
Это бот что ли эти вопросы пишет, чтобы тред не утонул?

Мне скучно отвечать на однострочные общие вопросы без контекста.
Аноним 13/04/19 Суб 19:44:11 1380398546
>>1380362
нужно как то поддерживать живой труп
Аноним 18/04/19 Чтв 10:45:56 1383282547
когда он уже сдохнет?
Аноним 18/04/19 Чтв 11:21:12 1383303548
>>1383282
В прошлом году популярность немного назад подросла.
Аноним 18/04/19 Чтв 14:26:03 1383426549
>>1383303
ну легаси говно во времена хайпа надо же поддерживать
Аноним 20/04/19 Суб 04:27:15 1384534550
Возможно я слишком усложняю задачу, у которой должно быть решение проще, но как из класса передать во второй класс объект первого класса?
У меня есть класс, допустим, слушатель, который "подписывается" на класс эвент-мейкер. Когда эвент-мейкер собсна делает эвент мне надо слушателю передать время и значения эвента. Поиск по Notification паттерну нашел лишь вопросы по апишкам всяких фейсбуков и их уведомлений.
Единственное до чего я додумался, это при вызове метода subscribe_to класса Listener записывать в переменную-массив класса Eventmaker текущий объект класса Listener, а при создании эвента в классе Eventmaker проходить по массиву и передавать notification в каждый объект.
Аноним 20/04/19 Суб 17:52:49 1384962551
Аноним 20/04/19 Суб 23:06:07 1385130552
>>1384962
subscribe должен быть в лисенере.

Попробую объяснить на каком-нибудь реальном предмете. Есть у нас телеграм-канал (класс) и пользователь (класс). Пользователь подписывается на телеграм-канал (подписка это метод класса пользователя) и после этого каждый новый пост в телеграм-канале (метод класса телеграм-канал, публикуюищй запись) отправляет всем подписчикам (классам пользователь, которые подписались) уведомление с содержанием поста. Подписчик может получить все уведомления (метод класса пользователь).
Аноним 20/04/19 Суб 23:13:25 1385133553
>>1385130
Нашел паттерн Observer. Вроде то, что мне нужно. Можете закрывать тред
Аноним 25/04/19 Чтв 21:29:16 1388754554
Аноним 26/04/19 Птн 00:38:32 1388870555
>>1388754

Не пиши сюда больше. В морг значит в морг.
Аноним 26/04/19 Птн 10:10:42 1388972556
>>1376940
те охуенность рельс-миф?
Аноним 26/04/19 Птн 23:02:39 1389483557
>>1388972
Нет, не миф, просто ничего уникального в рельсах больше нет.
Аноним 28/04/19 Вск 15:25:08 1390592558
Двач, я заебался. На весь интернет два с половиной примера драй-ром-параши на рельсе, и те успели устареть. Поэтому хочу у тебя спросить: как мне в контрактах провалидировать юзера на предмет его уникальности по логину? По документации, в валидациях обращаются к Users.where, но меня посылают нахуй. Нет такого метода говорят. Без валидаций создание пользователя работает.

---------------
gem 'rom-rails', '~> 2.0.0'
gem 'rom-sql', '~> 3.0.0'

gem "dry-validation", '~> 1.0.0.rc1'
gem 'dry-transaction', '~> 0.13.0'
gem 'dry-monads', '~> 1.2.0'

---------------
require 'dry-validation'

module Api
module V1
class NewUserContract < Dry::Validation::Contract
params do
required(:login).filled(:string)
end

rule(:login) do
key.failure('is already taken') if Users.where(login: values[:login]).count > 0
end
end
end
end
---------------

---------------
module Api
module V1
class Users < ROM::Relation[:sql]
gateway :default

schema(:users, infer: true)
end
end
end
---------------
Аноним 28/04/19 Вск 17:36:00 1391018559
>>1390592

Запросы на аггрегаты пишутся внутри репозиториев. У тебя должно быть что-то типа


class UserRepo < ROM::Repository[:users]
def login_exists?(login)
user.where(login: login).count
end
end

------

key.failure('is already taken') if UserRepo.login_exists?(login: values[:login])
Аноним 28/04/19 Вск 17:36:44 1391021560
>>1391018

key.failure('is already taken') if UserRepo.login_exists?(values[:login])

быстрофикс
Аноним 28/04/19 Вск 17:37:26 1391023561
>>1391018

user.where(login: login).count > 0

второй быстрофикс
Аноним 28/04/19 Вск 21:31:57 1391216562
у меня такое ощущение,что в треде 1 тру рубист и ВСЁ
Аноним 28/04/19 Вск 22:01:31 1391227563
>>1391216

Так и есть.

9 лет опыта с руби-кун
Аноним 29/04/19 Пнд 13:25:24 1391491564
Разыскиваю "Ruby. Объектно-ориентированное проектирование, 2018", в этих ваших интернетах только 2017
Аноним 29/04/19 Пнд 19:08:27 1391691565
>>1391491

Её на русском языке судя по всему ещё не существует в электронном виде. Ищи английский вариант или читай первое издание — разница между первым и вторым минимальна.
Аноним 29/04/19 Пнд 22:39:43 1391824566
>>1391021
> key.failure('is already taken') if UserRepo.login_exists?(values[:login])

Да, сработало, но пришлось в репозитории напердолить что-то типа:

---------
require 'rom-repository'

module Api
module V1
class UserRepository < ROM::Repository[:users]
commands :create

def self.login_exists?(login)
new(ROM.env).users.where(login: login).count > 0
end
end
end
end
---------

Наверняка можно сделать получше, но и так пока сойдет.
Аноним 29/04/19 Пнд 23:18:32 1391835567
>>1391824

Лучше схорони инстанс репозитория куда-нибудь. Методы класса эта так себе решение.
Аноним 01/05/19 Срд 09:14:50 1392422568
где 6 рельсы?
Аноним 01/05/19 Срд 09:47:53 1392431569
Аноним 01/05/19 Срд 10:12:30 1392436570
>>1392431
я про финальную версию,еще вчера должна выйти
Аноним 01/05/19 Срд 11:21:22 1392453571
А может выучить рельсы?
Мимо джангист-штангист. Руби уже знаю и часто использую.
Аноним 01/05/19 Срд 14:35:03 1392552572
Перекатите, заебало вниз крутить.
И без пидорских картинок пожалуйста.
Аноним 01/05/19 Срд 17:47:15 1392667573
>>1392552
когда официально выйдет 6 рельсы
Аноним 03/05/19 Птн 16:32:49 1393466574
Ух, бля, ознакомительный пердолинг с драй-ром окончиль.

В некоторых местах оверинженернутая хуйняша этот ваш драй-sql, конечно. Обджект релейшен маппер над релейшен маппером стоит и погоняет.

Хотя в целом прикольненько. Мне понра
Настройки X
Ответить в тред X
15000 [S]
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов