
?
30.06.2018
16:48:27
The Art of Unix Programming
www.faqs.org
Back to FAQS.ORG. The Art of Unix Programming. Eric Steven Raymond. Thyrsus Enterprises.
http://www.faqs.org/docs/artu/textualitychapter.html глава про текст

Dima
30.06.2018
17:32:48
кто либо вызывал ruby -e c heredoc?

Pingvin
01.07.2018
00:39:11
Привет. Есть здесь живые люди в такое время?

Google

Ruslan
01.07.2018
00:43:56
есть

Alex
01.07.2018
00:45:50
есть
впрочем живые или нет - тема отдельной дискуссии

Pingvin
01.07.2018
00:56:54
впрочем живые или нет - тема отдельной дискуссии
Я в руби новичок (таки это важно, пока мало понимаю как тут всё устроено). Хочу реализовать систему плагинов в своём скрипте.
Скрипт обрабатывает некоторый список входных данных, csv файл.
Задача - по входным данным (при промощи регулярки заданной в самом плагине) понять что именно этот плагин нужно применить к этим данным (к этой строке).
Потом полученные данные передать в логер который эти данные отформатирует и запишет в файл.
Как систему плагинов для подобных вещей лучше всего реализовать в руби?
На просторах интернета нашёл вот такой кусок кода:
$LOAD_PATH.unshift('plugins')
Dir[File.join(dir, '*.rb')].each do |file|
require File.basename(file)
end
Понимаю что он делает, но как получить например список классов которые будут загружен не понимаю.


Alex
01.07.2018
01:01:35
у тебя есть класс который обрабатывает файл
а то что ты require'ишь может манкипатчить этот класс как вариант
require по сути исполняет код внутри если я ничего не путаю.
вот пускай эти "плагины" сами себя прописывают

Pingvin
01.07.2018
01:06:02
Ну собствеено что бы туда себя записать

Google

Alex
01.07.2018
01:06:35
в свой класс ссылку на основной класс записать и все.
шта
зачем получать доступ к переменной

Pingvin
01.07.2018
01:07:10
Ну вот плагин запустился при помощи require
Я понятия не имею как он назывался
Мне кажется я тебя совсем непонимаю

Alex
01.07.2018
01:11:53
csv_parser.rb
class CsvParser # главный класс
def initialize()
@plugins = []
end
def self.instance
@@instance ||= self.new
end
...
def register_plugin(plugin)
@plugins << plugin
end
end
Dir[File.join(dir, 'plugins/*.rb')].each do |file|
require File.basename(file)
end
———————————-
plugins/parser_plugin.rb:
class ParserPlugin
...
end
CsvParser.instance.register_plugin(ParserPlugin.new)
не тестил само собой
есть вопросы по коду?
как пробрасывать туды сюды и как они между собой общаться будут - зависит от хотелок
сделать можно по разному
ну и непонятно зачем тебе эта плагинная система

Pingvin
01.07.2018
01:15:51

Alex
01.07.2018
01:16:12

Pingvin
01.07.2018
01:16:57

Alex
01.07.2018
01:17:05
зачем тебе плагины?
ты распространяешь свою поделку?

Pingvin
01.07.2018
01:17:35
Эту нет. Но вдруг такая появится)

Alex
01.07.2018
01:18:27

Pingvin
01.07.2018
01:18:54
не появится
Ну с таким подходом можно вообще ничего не учить

Google

Alex
01.07.2018
01:20:14
к моменту когда у тебя реально такая задача встанет - будешь знать как сделать.
а сейчас ты ненужного коня в вакууме делаешь :)

Pingvin
01.07.2018
03:22:15

Dima
01.07.2018
08:07:03


Roman
01.07.2018
08:08:38
или даже до 4

Dima
01.07.2018
08:08:54

Roman
01.07.2018
08:09:10
им на смену пришли engines

Dima
01.07.2018
08:15:42
Эту нет. Но вдруг такая появится)
Валентин, интуитивно вы делаете все абсолютно академически правильно реализуете в своей работе методологию SOLID. Просто используете другие определения для составных частей программы.
https://youtu.be/v-2yFMzxqwU

Alex
01.07.2018
08:26:22
о, умные словечки подкатили

Alex
01.07.2018
08:26:37
причем тут solid интересно

Женя
01.07.2018
21:03:44
кстати о Sandi Metz, что она вообще написала такого в плане софта ?

Alexey
01.07.2018
22:44:52
имхо, те, кто пишет софт, и те, кто пишет книжки о том, как писать софт, - это чаще всего разные люди
но и те, и другие все равно нужны

Yevhen Nakonechnyi
02.07.2018
03:47:17
Дядя Боб вообще красавчек

Anna
02.07.2018
06:16:30

Ēľ Ċāƥīāŋ Ƭīʋȷɍēś
02.07.2018
07:01:54

Dima
02.07.2018
08:35:42
имхо, те, кто пишет софт, и те, кто пишет книжки о том, как писать софт, - это чаще всего разные люди
но и те, и другие все равно нужны
я бы так не сказал, 3 автора с которыми я работаю это программисты с богатейшим практическим опытом.: Sandi Metz, Mike Gancarz, Avdi Grimm. Большинство ИЗВЕСТНЫХ книг написано опытными практиками, взять хотябы Paolo Perrotto, Yukihiro Matsumoto.
я начал гуглить про Paolo Perrotto он оказывается еще и про Git пишет:

Google

Dima
02.07.2018
08:44:24
https://youtu.be/nHkLxts9Mu4
https://vimeo.com/146478456
это интересно. надо бы ознакомиться.

ShadoWalkeR
02.07.2018
09:51:14
Хотите интересный вопрос?
Есть примерно такой код:
options = {:app_name => "Test"}
client = Ari::Client.new(loadConfig("#{options[:app_name]}")) #Подключение к клиенту - просто для понимания где я options использую
Daemons.run_proc(options[:app_name], options) do
# Черная магия
end

Admin
ERROR: S client not available

ShadoWalkeR
02.07.2018
09:52:28
А задача в следующем - Как мне в options добавить :stop_proc который дернет функцию из client при выходе из скрипта? Пока что оно ругается что client не существует независимо от того использую я $/@ или нет
Это как бы понятно почему, но хотелось бы как нибудь почистить за собой там, куда коннекчусь
А - отбой
Все равно на той стороне никто не реализовал чистку - подписаться на все события можно, отписаться нельзя

Roman
02.07.2018
10:38:25
есть at_exit еще

Dima
02.07.2018
13:11:19
кто либо вызывал ruby -e c heredoc?
heredoc он для cat и ftp: https://goo.gl/9EVG6h
Для многолинейныйх ruby -e просто переносить на новую линию строку таким образом:
ruby -e "require 'colorize'
(1..10).each do |x|
x.even? ? puts(x.to_s.green) : puts(x.to_s.red)
end"

Tim
02.07.2018
13:39:29
люди юзают в 2018 composed_of? в rails antipatterns увидел, вроде годнота. Но книжка старенькая, поэтому актуальность её советов ставлю под сомнение иногда

Alex
02.07.2018
13:42:36

Tim
02.07.2018
13:44:27
первое предложение

Alex
02.07.2018
15:46:27
то чуство когда нашел собственный коммент к issue к либе которой пользуешься и решил проблему над которой ты бился несколько месяцев, хотя ты ее уже решал пару лет назад.

Владимир
02.07.2018
15:47:17

Alex
02.07.2018
15:47:39

Владимир
02.07.2018
15:48:33
причем тут рекурсия? ))
ну еще через пару лет будешь решать ту же проблему, задавать тот же вопрос в том же месте и тебя будут посылать "читай выше" с сылкой на твой собственный комент с решением...

Alex
02.07.2018
15:48:46
это будет эпично

Google

Владимир
02.07.2018
15:50:42
это будет эпично
настоятельно рекомендую набить где-то на руках свое полное ФИО, данные регистрации и контактные телефоны родни\знакомых
склероз он такой, внезапный
сначала забыл решение, потом вставные зубы в стакане а потом и кто ты и что здесь делаешь

Alex
02.07.2018
15:51:13
- как ты на него оформил кредит?
- на руках все данные прочел
проблема в том что если у тебя проблемы с головой или памятью то это все.

Roman
02.07.2018
15:51:32
была на баше цитата

Alex
02.07.2018
15:51:32
Ты не сможешь решать задачи.

Владимир
02.07.2018
15:51:43
если параноя то можно на ногах, на той части которой ты можешь увидеть сам

Roman
02.07.2018
15:51:59
что нашел ответ и поблагодарил автора и тут пришло письмо с благодарностью на почту

Владимир
02.07.2018
15:52:14
только будет малость неудобно когда менты тормознут, документов нет но данные ты можешь показать..

Alex
02.07.2018
15:52:48
недостаточно параноишь

Владимир
02.07.2018
15:53:21
нефиг по практологам незнакомым лазить
для самых отбитых можно на внутренней стороне века шпаргалку набить