
Dima
29.10.2016
14:33:23
Вообще интересно глядя на данный код: у нас есть блок в нем определяется переменная config - но в тебе блока она не используется.

Alex
29.10.2016
14:33:35
Это кусок кода
require "active_sms"
require "logger"
ActiveSMS.configure do |config|
c.register_backend :my_backend_name,
ActiveSMS::Backend::Logger,
logger: Logger.new(STDOUT),
severity: :info
c.default_backend = :my_backend_name
end
Я пилю гем и периодически спрашиваю советы у других рубистов.

Google

Иван
29.10.2016
14:57:57

Alex
29.10.2016
14:58:11
О, благодарю

Alexander
29.10.2016
17:24:37
Не люблю кстати методы (переменные) классов, они нужны редко, когда в процессе одного выполнения программы действительно меняется, но часто достаточно констант и наследования

Alex
29.10.2016
17:25:08
Наследование зло. Это уже мое имхо.

Alexander
29.10.2016
17:25:10
Но код выше -- rails way, так что всё норм ?

Alex
29.10.2016
17:25:20
Я кстати писал ruby way
т.к гем не под рельсы а под руби. Для рельс будет обертка.

Alexander
29.10.2016
17:25:29
Я кстати писал ruby way
Ruby way, на мой взгляд, это избегать Module.configure do |config|, но многие могут со мной не согласиться

Alex
29.10.2016
17:29:30
а что с ним не так?
я думал это рубишный подход

Alexander
29.10.2016
17:41:06

Alex
29.10.2016
17:41:37
Потому что это синглтон

Google

Alex
29.10.2016
17:41:44
это антипаттерн в 90% случаев.
а вообще твердоботам нраица: https://robots.thoughtbot.com/mygem-configure-block

Alexander
29.10.2016
17:43:10
а что с ним не так?
1. Классовый метод -- это функциональщина, а не ооп
2. Чаще всего, как я говорил, достаточно констант и наследования. Можно просто экземпляр класса создавать и его настраивать, если в наследование не получается
3. Не гибко

Alex
29.10.2016
17:43:40
Это не гибко да.
Но тем кому нужна подобная гибкость могут накатать такое решение за один день.
Плюс так как все смс бэкенды используют один и тот же интерфейс для вызова - они могут написать свой ActiveSMS и все равно использовать уже готовые бэкенды
так что я даже им помогу (в теории)
Я ориентировался на максимальную простоту для конечного юзера. Тот гем который бы я хотел иметь для смс.
Подключил, врубил нужный бэкенд и просто юзаешь.
Кстати что такое тру гемы я так и не понял.

Alexander
29.10.2016
17:46:33
Наследование зло. Это уже мое имхо.
Я фреймворк накатал из чистого наследования, нет никаких классовых бефор и афтер, и это всё замечательно работает. Так что советую тебе не бояться, это всё можно о осознать и с этим работать -- удобно и красиво

Alex
29.10.2016
17:47:02
Я специально пошел путем синглтона чтобы сделать гем максимально простым )
Мне не сложно сделать "наследованием" (кстати не понимаю что ты в это вкладываешь) просто гем уже будет не таким юзер френдли для нубов.

Иван
29.10.2016
17:47:48
почему метод класса это функциональщина?

Alexander
29.10.2016
17:47:50

Alex
29.10.2016
17:48:34
Класс который хранит глобальное состояние - это синглтон, и это антипаттерн.

Alexander
29.10.2016
17:49:23

Alex
29.10.2016
17:51:00
Никто не спорит что это дурной тон и возникает класс проблем.
Например ActiveRecord это тоже приличное сборище антипаттернов
Но он очень удобен.

Google

Alexander
29.10.2016
18:09:45
```
class MySMS < ActiveSMS
BACKEND = SMS_RU
end
```
Я бы поспорил насчёт удобства, не говоря уже про то, что сами бэкенды могут быть наследованы, и наследоваться уже от нужного

Alex
29.10.2016
18:15:03
Я не очень понимаю как в твоей схеме я могу под одним и тем же именем использовать разные бэкенды

Lupsick
29.10.2016
18:44:27
как можно нормально к рельсам подключить dry-types?

Nikolay
29.10.2016
18:44:50
При чем тут рельсы?
Юзай в обычных poro и все

Alexander
29.10.2016
18:47:51

Lupsick
29.10.2016
18:48:04

Alex
29.10.2016
18:48:14
Затем что на локалке будет один класс за это отвечать, а на проде другой.
А название будет одно и тоже
к пример :main_sms_service или ченить такое.

Alexander
29.10.2016
18:48:40

Alex
29.10.2016
18:48:55
Конфиг yaml для простого рубишного гема ?

Alex
29.10.2016
18:49:00
очень просто и понятно ага.

Alexander
29.10.2016
18:49:10

Alex
29.10.2016
18:49:21
Ну потому что для рубишного гема должно быть достаточно рубикода??

Alexander
29.10.2016
18:49:30

Alex
29.10.2016
18:49:33
серьезно, зачем тут yaml?

Alexander
29.10.2016
18:49:52

Alex
29.10.2016
18:50:44
Почему нельзя рубикдом сконфигурировать?

Google

Alexander
29.10.2016
18:50:46

Alex
29.10.2016
18:51:11
Как ты сделаешь чтобы один и тот же код использовал разный бэкенд каждый со своими настройками в разных средах?

Alexander
29.10.2016
18:52:12

Alex
29.10.2016
18:52:27
подожди подожди. У меня есть руби скрипт рассылки

Alexander
29.10.2016
18:52:28
В руби нет, а вокруг есть

Alex
29.10.2016
18:52:29
он прод или нет?

Admin
ERROR: S client not available

Alex
29.10.2016
18:52:36
так я рубигем пишу )

Alexander
29.10.2016
18:52:52

Alex
29.10.2016
18:53:03
Ямл я как кормить буду?
чем тяжелый yaml лучше легковесного configure?

Alexander
29.10.2016
18:53:27

Alex
29.10.2016
18:53:33
Стоп стоп
как я гему передавать этот ямл буду?
строкой? ?

Alexander
29.10.2016
18:54:00

Alex
29.10.2016
18:54:41
Т.е я сначала из ямла сделаю хэшик, а потом скормлю моей реализации?

Google

Alexander
29.10.2016
18:54:56

Alex
29.10.2016
18:55:19
Тогда причем тут yaml вообще?
если он тут не нужен?
Во вторых - кидать огромный хэшик классу это тоже круто.
Чем он отличается от моего configure правда неясно.

Alexander
29.10.2016
18:56:33
если он тут не нужен?
Да любой формат. Файл с данными для конфигурации, который позволяет не вмешиваться в код для изменения каких-то параметров конфигурации

Alex
29.10.2016
18:57:07
Сторонняя апишка это уже не часть кода? тут разные подходы имхо.
Я обычно придерживаюсь того что апишки на которые жестко завязано приложение - хранятся в коде, кроме секретов разумеется.

Alexander
29.10.2016
18:57:25
Это может быть хоть БД - зависит от задачи

Alex
29.10.2016
18:57:47
Если есть внешняя апишка то как правило у нее жесткий entrypoint
Нет смысла хранить ее в конфигурации потому что она никогда не изменится.

Alexander
29.10.2016
18:58:55

Alex
29.10.2016
18:59:07
Это не совсем так выглядит.
Суть в том что на локалке заглушка, на проде боевой сервис
и при этом ты не меняешь в коде ничего.
Т.е ты как дергал например ActiveSMS.send_sms так и дергаешь в нужном месте кода.

Alexander
29.10.2016
19:00:46

Alex
29.10.2016
19:00:55
о_О
странный у тебя конфиг

Alexander
29.10.2016
19:01:01
То есть я код тоже не меняю