docgen-adapter 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +8 -0
- data/lib/docgen_adapter.rb +67 -11
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: afe6bdfcb9c5d9773d369ba750d43c797614ff24f9e9bd4c10eeb645b12e122e
|
4
|
+
data.tar.gz: cfdb37ee53d4d4ead59f99a7f5e1a767211c848c8109ed1f2b71ff84ae8e47d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c9a445451d9637e8c601d9ea4f86fb2748144f4cafb82a9d2ebc08c4092c0b88fec3e0d0b37aaf909ac95ac5fa472d2448a0c8c9c0cb900b95157b0aa949825
|
7
|
+
data.tar.gz: eb0baf8397ce28db7ed2755931458a00168d1ea909b003af73b1de32197d5b95aed75df267050bbc4232eaa4ff3c828916d2f67dee33cfebe796bdbc7475293c
|
data/README.md
CHANGED
@@ -65,6 +65,14 @@ def json(params = {})
|
|
65
65
|
end
|
66
66
|
```
|
67
67
|
|
68
|
+
Добавьте метод `files` для обработки и передачи дополнительных файлов в задание генерации. В ответе метода `files` должен отдаваться массив ссылок (URL) на файлы либо массив локальный путей файлов.
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
def files(params)
|
72
|
+
[]
|
73
|
+
end
|
74
|
+
```
|
75
|
+
|
68
76
|
Задайте название генерируемого файла в `metadata`. Например:
|
69
77
|
|
70
78
|
```ruby
|
data/lib/docgen_adapter.rb
CHANGED
@@ -4,20 +4,22 @@ require 'docgen_subject'
|
|
4
4
|
|
5
5
|
class DocgenAdapter
|
6
6
|
|
7
|
-
def initialize(type:, doc_id:, debug: false)
|
7
|
+
def initialize(type:, doc_id:, debug: false, open: false)
|
8
8
|
# аргументы сервиса
|
9
9
|
@type = type
|
10
10
|
@doc_id = doc_id
|
11
11
|
@debug = Rails.env.development? && debug
|
12
|
+
@open = Rails.env.development? && open
|
12
13
|
@task_id = SecureRandom.uuid
|
13
14
|
end
|
14
15
|
|
15
16
|
# выполнение генерации документа
|
16
17
|
def generate(params = {})
|
17
|
-
@
|
18
|
+
@files = handle_files(params)
|
19
|
+
@task_params = build_task_params(params)
|
18
20
|
|
19
21
|
# отображение параметров для проверки
|
20
|
-
puts JSON.pretty_generate(JSON.parse(@
|
22
|
+
puts JSON.pretty_generate(JSON.parse(@task_params)) if @debug
|
21
23
|
|
22
24
|
# подписка ка канал и ожидание сообщений в другом потоке
|
23
25
|
Thread.new { subscribe_and_listen }
|
@@ -26,7 +28,14 @@ class DocgenAdapter
|
|
26
28
|
sleep(0.5)
|
27
29
|
|
28
30
|
# отправка сообщения с заданием
|
29
|
-
redis.publish('TASKS', @
|
31
|
+
redis.publish('TASKS', @task_params)
|
32
|
+
|
33
|
+
sleep(0.5)
|
34
|
+
|
35
|
+
# отправка файлов при наличии
|
36
|
+
@files.each do |file|
|
37
|
+
redis.publish("files-#{@task_id}", file[:content])
|
38
|
+
end
|
30
39
|
|
31
40
|
# путь до сгенерированного файла в ответе
|
32
41
|
filename
|
@@ -44,6 +53,10 @@ class DocgenAdapter
|
|
44
53
|
end
|
45
54
|
end
|
46
55
|
|
56
|
+
def document_instance
|
57
|
+
@document_instance ||= document_class.new
|
58
|
+
end
|
59
|
+
|
47
60
|
# формирование названия генерируемого файла
|
48
61
|
def filename
|
49
62
|
@filename ||= "#{Dir.mktmpdir}/#{document_class.metadata_opts[:filename]}.#{@type}"
|
@@ -76,15 +89,55 @@ class DocgenAdapter
|
|
76
89
|
end
|
77
90
|
end
|
78
91
|
|
79
|
-
#
|
80
|
-
def
|
81
|
-
|
92
|
+
# обработка доп. файлов для документа
|
93
|
+
def handle_files(params)
|
94
|
+
return [] unless document_class.method_defined?(:files)
|
95
|
+
|
96
|
+
document_instance.files(params).map do |file|
|
97
|
+
# обработка ссылки или локального пути для получения содержимого файла и расширения
|
98
|
+
if file =~ URI::regexp
|
99
|
+
opened = URI.open(file)
|
100
|
+
content = opened.read
|
101
|
+
extension = url_file_extname(opened.meta['content-type'])
|
102
|
+
else
|
103
|
+
content = File.read(file)
|
104
|
+
extension = File.extname(file).gsub('.', '')
|
105
|
+
end
|
106
|
+
|
107
|
+
# MD5 содержимого файла
|
108
|
+
md5 = Digest::MD5.base64digest(content)
|
109
|
+
|
110
|
+
{ content:, extension:, md5: }
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
def url_file_extname(content_type)
|
115
|
+
case content_type
|
116
|
+
when 'image/png'
|
117
|
+
'png'
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# формирование объекта с параметрами задания
|
122
|
+
def build_task_params(params)
|
123
|
+
# базовый объект параметров
|
124
|
+
object = {
|
82
125
|
ИдентификаторЗадачи: @task_id,
|
83
126
|
ИдентификаторДокумента: @doc_id,
|
84
127
|
ТипДокумента: @type,
|
85
|
-
|
86
|
-
|
87
|
-
|
128
|
+
ПараметрыДокумента: document_instance.json(params)
|
129
|
+
}
|
130
|
+
|
131
|
+
# параметры доп. файлов
|
132
|
+
object[:ДополнительныеФайлы] =
|
133
|
+
@files.map do |file|
|
134
|
+
{
|
135
|
+
Md5: file[:md5],
|
136
|
+
Формат: file[:extension]
|
137
|
+
}
|
138
|
+
end
|
139
|
+
|
140
|
+
object.to_json
|
88
141
|
end
|
89
142
|
|
90
143
|
# обработка сообщения пришедшего в канал Redis
|
@@ -122,6 +175,9 @@ class DocgenAdapter
|
|
122
175
|
|
123
176
|
# сообщение с файлом приходит последним - отписка от канала Redis
|
124
177
|
redis.unsubscribe
|
178
|
+
|
179
|
+
# открывать файл для проверки
|
180
|
+
%x(open '#{filename}') if @open
|
125
181
|
end
|
126
182
|
|
127
183
|
def handle_exception(object)
|
@@ -130,7 +186,7 @@ class DocgenAdapter
|
|
130
186
|
if Rails.env.development?
|
131
187
|
puts text
|
132
188
|
else
|
133
|
-
Rollbar.error(text, params: @
|
189
|
+
Rollbar.error(text, params: @task_params)
|
134
190
|
end
|
135
191
|
end
|
136
192
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docgen-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Павел Бабин
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|