Спасибо! Возможно, стоит попробовать выступить с похожей темой. Статьи в гугле находятся и про form object, и про nested attrs, но получается следует периодически дописывать новые, чтобы держать технологию на слуху.
и пиарят, как могут
Без грязи бы пиарили, вроде "рельсы мертвы", было бы лучше. Кроме этого, многие не понимают, что этот пиар — часть бизнеса, и Ник просто зарабатывает так деньги, трэилбрэйзер — это его продукт. Он пишет статьи и говорит на конференциях, чтобы зарабатывать деньги (продавать больше консультаций), в отличие от других разработчиков, у которых цель — делиться опытом или подобная. Поэтому он может тратить на это больше времени, чем другие Что он и делает.
Как и других сферах, продукт может быть и не очень хорошим, но маркетинг вытаскивает.
И про операции не совсем понятно. Я допускаю, что в некоторых ситуациях удобно. При этом для простых экшенов вполне достаточно ActiveRecord, а для тех что по-сложнее можно использовать ActiveModel или PORO. Операции выглядят как декларативный способ написания метода call:
class Song::Create < Trailblazer::Operation
extend Contract::DSL
contract do
property :title
validates :title, presence: true
end
step Model( Song, :new )
step :assign_current_user!
step Contract::Build()
step Contract::Validate( )
failure :log_error!
step Contract::Persist( )
end
# вместо простого:
class Song::Create
def call(attrs:, user:)
@model = Song.new(attrs)
@model.current_user = user
@model.save!
rescue => e
log_error!(e)
raise
end
end
При этом наверняка реализован (или нужно реализовывать) свой способ расширения, ведь super/yield так просто не получится использовать.
The thing is: dependencies.rb does not pretend to emulate constant resolution algorithms. It cannot because Ruby does not pass key information, so it does not attempt to.
…
dependencies.rb has to be seen in a positive way: it is a feature that has a contract, if you follow the contract, the feature works.
Ну отключить то можно автолоад, и зла не будет :) Но его отсутствие в приложениях гораздо заметнее, чем в библиотеках, например. По-моему, если понять его тонкости, то он становится очень удобным.
В дополнение к вашему совету.
У меня основное правило — лучше его использовать для top-level констант, а для вложенных добавить require_dependency. Я пользуюсь этим модулем вместо многочисленных require_dependency. Помогает и с STI моделями, когда нужно жадно подгрузить вложенные классы.
Хорошая статья о том, почему автолоад работает именно так.
Наконец-то появился гем для загрузок, в котором все хорошо и все учтено! Читаю ридми и радуюсь, что больше не придется хачить carrierwave: все что сами допиливали тут можно настроить из коробки. Хотя еще не дочитал до конца даже :)
Тут ограничение самого http же — он понятия ни о каких папках не имеет. И вы должны сами решать, как вы их хотите передавать. Каждый файл лучше грузить по-отдельности. Либо соседним параметром имя директории передавать и сохранять файл в эту директорию. Или же разрешить "/" в filename загружаемого файла и отключить их экранирование/замену в либе. В этом случае только надо самим обязательно от path traversal фильтры делать.
Так зарелизьте его на гитхабе под MIT до использования в проекте. Потом просто используете как внешнюю либу, которая случайно оказалось вашей. Даты все сохраняются же — проект написан позже либы, значит все норм. Единственное, если такие отношения с работодателем, то лучше не комитить в либу в рабочее время. На нее права они не поимеют, но смогут доказать, что вы в рабочее время не работали.
git commit -n проще: ничего даже править не надо, сразу есть возможность. Чтобы такого не было, в любом случае надо линтер на ci сервере запускать. Ведь кто-то мог и не настроить хуки вовсе.
Given a user named "Sue" is online # <!!!
And I go to the homepage
When I fill in "Name" with "Bob"
And I submit the new user form
Then I should be on the users page
And Sue should see "Bob has entered the room." # <!!!
Про FCM. Мозилла и гугл, реализуют по-отдельности протокол webpush. В хроме он работает на основе fcm, но разработчик ничего не должен подключать — всё предоставляет браузер, а разработчик получает только урл-эндпоинт для отправки сообщений конкретному подписчику.
Про SW.
Когда сам разбирался с sw — проклял всё. Документации мало, половина имеющейся — устарела. Но я считаю, что это просто шаг вперёд, дальше будет лучше. По моему ощущению в мире фронтенда уже некоторое время все делают по принципу: сейчас релизим как есть, а завтра латаем дыры и смотрим, что получилось. Тут так и вышло.
Ок. Положите в lib. Скорее всего, вы захотите require_dependency 'protocols/adder' вместо require 'protocols/adder', чтобы не перезапускать сервер в деве, при каждой правке. Тут опять будет утечка.
Вы что? В какие модели? Я же написал, что пример точно из ридми. Только убрал module Protocols. Положил в app/models просто в целях тестирования. В нее нельзя положить файл? Нужно чтобы не было релоада, и самому перезапускать сервер при правке протокола? Про то что это в деве на рельсах, это я в самом первом комментарии написал.
А автора/компанию у таких публикаций не показывают? Не могу найти нигде.
Спасибо! Возможно, стоит попробовать выступить с похожей темой. Статьи в гугле находятся и про form object, и про nested attrs, но получается следует периодически дописывать новые, чтобы держать технологию на слуху.
Без грязи бы пиарили, вроде "рельсы мертвы", было бы лучше. Кроме этого, многие не понимают, что этот пиар — часть бизнеса, и Ник просто зарабатывает так деньги, трэилбрэйзер — это его продукт. Он пишет статьи и говорит на конференциях, чтобы зарабатывать деньги (продавать больше консультаций), в отличие от других разработчиков, у которых цель — делиться опытом или подобная. Поэтому он может тратить на это больше времени, чем другие Что он и делает.
Как и других сферах, продукт может быть и не очень хорошим, но маркетинг вытаскивает.
У ActiveModel все атрибуты виртуальные (если виртуальные — те, которые не хранятся в базе). Через delegate можно настроить проброс атрибутов из AR.
Nested forms — это fields_for и подобные? Тоже все работает.
С i18n непонятно. Нашел reform-rails, выглядит редко поддерживаемым, с такими вот комитами https://github.com/trailblazer/reform-rails/commit/5bd93ed1ee825f107f248c9c67e6bb81f0c75e00. В самом reform такого функционала нет.
А чем reform лучше active_model?
И про операции не совсем понятно. Я допускаю, что в некоторых ситуациях удобно. При этом для простых экшенов вполне достаточно ActiveRecord, а для тех что по-сложнее можно использовать ActiveModel или PORO. Операции выглядят как декларативный способ написания метода call:
При этом наверняка реализован (или нужно реализовывать) свой способ расширения, ведь super/yield так просто не получится использовать.
Комментарий из статьи:
Ну отключить то можно автолоад, и зла не будет :) Но его отсутствие в приложениях гораздо заметнее, чем в библиотеках, например. По-моему, если понять его тонкости, то он становится очень удобным.
В дополнение к вашему совету.
У меня основное правило — лучше его использовать для top-level констант, а для вложенных добавить
require_dependency. Я пользуюсь этим модулем вместо многочисленныхrequire_dependency. Помогает и с STI моделями, когда нужно жадно подгрузить вложенные классы.Хорошая статья о том, почему автолоад работает именно так.
Я далек от современного жс. Скажите, пожалуйста, почему в этом примере нельзя без Reflect?
Наконец-то появился гем для загрузок, в котором все хорошо и все учтено! Читаю ридми и радуюсь, что больше не придется хачить carrierwave: все что сами допиливали тут можно настроить из коробки. Хотя еще не дочитал до конца даже :)
Тут ограничение самого http же — он понятия ни о каких папках не имеет. И вы должны сами решать, как вы их хотите передавать. Каждый файл лучше грузить по-отдельности. Либо соседним параметром имя директории передавать и сохранять файл в эту директорию. Или же разрешить "/" в filename загружаемого файла и отключить их экранирование/замену в либе. В этом случае только надо самим обязательно от path traversal фильтры делать.
К 9му:
Что-то поменялось в новом руби?
Так зарелизьте его на гитхабе под MIT до использования в проекте. Потом просто используете как внешнюю либу, которая случайно оказалось вашей. Даты все сохраняются же — проект написан позже либы, значит все норм. Единственное, если такие отношения с работодателем, то лучше не комитить в либу в рабочее время. На нее права они не поимеют, но смогут доказать, что вы в рабочее время не работали.
Ага. Ещё sass сделали из less, sinatra из express, rails из sails и rspec из mocha :)
Можете попробовать предложить ему middleman. Live-reload из коробки может его заинтересовать.
Буду рад, если гем поможет вам запустить несколько классных ботов :)
git commit -nпроще: ничего даже править не надо, сразу есть возможность. Чтобы такого не было, в любом случае надо линтер на ci сервере запускать. Ведь кто-то мог и не настроить хуки вовсе.2 минуты гугления
capybara websocket: https://github.com/tristandunn/cucumber-websocket-example/blob/master/features/user_create.featureПро FCM. Мозилла и гугл, реализуют по-отдельности протокол webpush. В хроме он работает на основе fcm, но разработчик ничего не должен подключать — всё предоставляет браузер, а разработчик получает только урл-эндпоинт для отправки сообщений конкретному подписчику.
Про SW.
Когда сам разбирался с sw — проклял всё. Документации мало, половина имеющейся — устарела. Но я считаю, что это просто шаг вперёд, дальше будет лучше. По моему ощущению в мире фронтенда уже некоторое время все делают по принципу: сейчас релизим как есть, а завтра латаем дыры и смотрим, что получилось. Тут так и вышло.
Ок. Положите в lib. Скорее всего, вы захотите
require_dependency 'protocols/adder'вместоrequire 'protocols/adder', чтобы не перезапускать сервер в деве, при каждой правке. Тут опять будет утечка.Вы что? В какие модели? Я же написал, что пример точно из ридми. Только убрал module Protocols. Положил в app/models просто в целях тестирования. В нее нельзя положить файл? Нужно чтобы не было релоада, и самому перезапускать сервер при правке протокола? Про то что это в деве на рельсах, это я в самом первом комментарии написал.
Adder — пример из ридми, из скоупа Protocols только достал. Кроме .protocols есть еще .implementations.