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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +8 -0
  3. data/lib/docgen_adapter.rb +67 -11
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 436def6a7f3f7cf576ee57d20432b0f81598d4e8cf203bd399a55016bbebfdb9
4
- data.tar.gz: 2d306870e9a52bda078216596d734b0bb1b8736d647fcf739c8792b06054ba15
3
+ metadata.gz: afe6bdfcb9c5d9773d369ba750d43c797614ff24f9e9bd4c10eeb645b12e122e
4
+ data.tar.gz: cfdb37ee53d4d4ead59f99a7f5e1a767211c848c8109ed1f2b71ff84ae8e47d1
5
5
  SHA512:
6
- metadata.gz: a1d79bff9ac3c1d4c846d042a9fb061ea9128a93061346f50a69e4155d4270152830ea77aea7197bd460089e2eb69f99290c11964d2879ab908a037ff5cbd88d
7
- data.tar.gz: eeaf82f5f161738451e49cb11c2e5c7c6d0009a12ac3b9f3f282cd7237e1633afa865eb97cc03fec16168f7184a770c021d894bdbc58805479c5afda6f9600cf
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
@@ -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
- @service_params = build_params(params)
18
+ @files = handle_files(params)
19
+ @task_params = build_task_params(params)
18
20
 
19
21
  # отображение параметров для проверки
20
- puts JSON.pretty_generate(JSON.parse(@service_params)) if @debug
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', @service_params)
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 build_params(params)
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
- Md5ДополнительныхФайлов: [],
86
- ПараметрыДокумента: document_class.new.json(params)
87
- }.to_json
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: @service_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.1.0
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-10-23 00:00:00.000000000 Z
11
+ date: 2024-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: redis