docgen-adapter 1.0.0 → 1.1.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 +42 -18
- data/lib/docgen_adapter.rb +19 -7
- data/lib/docgen_subject.rb +10 -0
- data/lib/generators/docgen/document_generator.rb +21 -0
- data/lib/generators/templates/document.rb.tt +10 -0
- metadata +12 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 436def6a7f3f7cf576ee57d20432b0f81598d4e8cf203bd399a55016bbebfdb9
|
4
|
+
data.tar.gz: 2d306870e9a52bda078216596d734b0bb1b8736d647fcf739c8792b06054ba15
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1d79bff9ac3c1d4c846d042a9fb061ea9128a93061346f50a69e4155d4270152830ea77aea7197bd460089e2eb69f99290c11964d2879ab908a037ff5cbd88d
|
7
|
+
data.tar.gz: eeaf82f5f161738451e49cb11c2e5c7c6d0009a12ac3b9f3f282cd7237e1633afa865eb97cc03fec16168f7184a770c021d894bdbc58805479c5afda6f9600cf
|
data/README.md
CHANGED
@@ -33,26 +33,48 @@ end
|
|
33
33
|
|
34
34
|
## Использование
|
35
35
|
|
36
|
-
|
36
|
+
Добавьте класс для документа, вызвав генератор. В качестве аргумента передайте ID документа, в обязательной опции `doc_type` - тип документа (`docx` или `xlsx`).
|
37
|
+
|
38
|
+
Например:
|
39
|
+
|
40
|
+
```bash
|
41
|
+
rails g docgen:document 1 --doc_type=docx
|
42
|
+
```
|
43
|
+
|
44
|
+
Вызванная команда создаст файл `app/documents/docx/document_01.rb`.
|
45
|
+
|
46
|
+
Добавьте тело необходимых параметров в метод `json` сгенерированного класса. Например:
|
47
|
+
|
48
|
+
```ruby
|
49
|
+
def json(params = {})
|
50
|
+
{
|
51
|
+
DocumentNumber: params[:number],
|
52
|
+
Houses: [
|
53
|
+
{
|
54
|
+
HouseAddress: 'г. Калуга',
|
55
|
+
PersonFIO: 'Иванов ИИ',
|
56
|
+
PersonState: 'электромонтер',
|
57
|
+
PersonPhone: '89171234567',
|
58
|
+
OrganizationName: 'Россети',
|
59
|
+
OrganizationAddress: 'г. Обнинск',
|
60
|
+
OrganizationPhone: '1234567',
|
61
|
+
OrganizationCite: 'https://www.rosseti.ru'
|
62
|
+
}
|
63
|
+
]
|
64
|
+
}
|
65
|
+
end
|
66
|
+
```
|
67
|
+
|
68
|
+
Задайте название генерируемого файла в `metadata`. Например:
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
metadata filename: 'контактная информация'
|
72
|
+
```
|
73
|
+
|
74
|
+
Вызовите генерацию с помощью вызова метода `generate` класса `DocgenAdapter`. Например:
|
37
75
|
|
38
76
|
```ruby
|
39
|
-
|
40
|
-
DocumentNumber: 12345678,
|
41
|
-
Houses: [
|
42
|
-
{
|
43
|
-
HouseAddress: 'г. Калуга',
|
44
|
-
PersonFIO: 'Иванов ИИ',
|
45
|
-
PersonState: 'электромонтер',
|
46
|
-
PersonPhone: '89171234567',
|
47
|
-
OrganizationName: 'Россети',
|
48
|
-
OrganizationAddress: 'г. Обнинск',
|
49
|
-
OrganizationPhone: '1234567',
|
50
|
-
OrganizationCite: 'https://www.rosseti.ru'
|
51
|
-
}
|
52
|
-
]
|
53
|
-
}
|
54
|
-
|
55
|
-
DocgenAdapter.new(type: 'docx', doc_id: 1, debug: true).generate(params)
|
77
|
+
DocgenAdapter.new(type: 'docx', doc_id: 1, debug: true).generate(number: 123)
|
56
78
|
```
|
57
79
|
|
58
80
|
Опции:
|
@@ -62,3 +84,5 @@ DocgenAdapter.new(type: 'docx', doc_id: 1, debug: true).generate(params)
|
|
62
84
|
- `doc_id` - ID документа
|
63
85
|
|
64
86
|
- `debug` - необязательная опция для дебага, при передаче `debug: true` при вызове отображаются формируемые параметры
|
87
|
+
|
88
|
+
В качестве аргументов метода `generate` передайте параметры, которые можно подставлять в `json` сгенерированного класса.
|
data/lib/docgen_adapter.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'docgen_adapter/configuration'
|
2
2
|
require 'redis'
|
3
|
+
require 'docgen_subject'
|
3
4
|
|
4
5
|
class DocgenAdapter
|
5
6
|
|
@@ -9,10 +10,6 @@ class DocgenAdapter
|
|
9
10
|
@doc_id = doc_id
|
10
11
|
@debug = Rails.env.development? && debug
|
11
12
|
@task_id = SecureRandom.uuid
|
12
|
-
|
13
|
-
# формирование названия генерируемого файла
|
14
|
-
dir = Dir.mktmpdir
|
15
|
-
@filename = "#{dir}/#{@task_id}_#{@doc_id}.#{@type}"
|
16
13
|
end
|
17
14
|
|
18
15
|
# выполнение генерации документа
|
@@ -32,11 +29,26 @@ class DocgenAdapter
|
|
32
29
|
redis.publish('TASKS', @service_params)
|
33
30
|
|
34
31
|
# путь до сгенерированного файла в ответе
|
35
|
-
|
32
|
+
filename
|
36
33
|
end
|
37
34
|
|
38
35
|
private
|
39
36
|
|
37
|
+
def document_class
|
38
|
+
@document_class ||=
|
39
|
+
case @type
|
40
|
+
when 'docx'
|
41
|
+
"Docx::Document#{format('%02d', @doc_id)}".constantize
|
42
|
+
when 'xlsx'
|
43
|
+
"Xlsx::Document#{format('%02d', @doc_id)}".constantize
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# формирование названия генерируемого файла
|
48
|
+
def filename
|
49
|
+
@filename ||= "#{Dir.mktmpdir}/#{document_class.metadata_opts[:filename]}.#{@type}"
|
50
|
+
end
|
51
|
+
|
40
52
|
# соединение с микросервисом через Redis
|
41
53
|
def redis
|
42
54
|
@redis ||= Redis.new(
|
@@ -71,7 +83,7 @@ class DocgenAdapter
|
|
71
83
|
ИдентификаторДокумента: @doc_id,
|
72
84
|
ТипДокумента: @type,
|
73
85
|
Md5ДополнительныхФайлов: [],
|
74
|
-
ПараметрыДокумента: params
|
86
|
+
ПараметрыДокумента: document_class.new.json(params)
|
75
87
|
}.to_json
|
76
88
|
end
|
77
89
|
|
@@ -106,7 +118,7 @@ class DocgenAdapter
|
|
106
118
|
# обработка бинарных данных файла документа
|
107
119
|
def handle_doc_file(message)
|
108
120
|
# запись бинарных данных в файл
|
109
|
-
File.write
|
121
|
+
File.write filename, message.force_encoding('utf-8')
|
110
122
|
|
111
123
|
# сообщение с файлом приходит последним - отписка от канала Redis
|
112
124
|
redis.unsubscribe
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Docgen
|
2
|
+
module Generators
|
3
|
+
class DocumentGenerator < Rails::Generators::NamedBase
|
4
|
+
|
5
|
+
class_option :doc_type, type: :string
|
6
|
+
|
7
|
+
source_root File.expand_path('../templates', __dir__)
|
8
|
+
|
9
|
+
def create_document_file
|
10
|
+
# добавляем 0 для ИД задания спереди для значений от 1 до 10
|
11
|
+
@file_doc_id = "%02d" % file_name.to_i
|
12
|
+
@doc_type = options['doc_type']
|
13
|
+
dir_name = "app/documents/#{@doc_type}"
|
14
|
+
filename = "document_#{@file_doc_id}.rb"
|
15
|
+
|
16
|
+
template 'document.rb', File.join(dir_name, filename)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,35 +1,35 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docgen-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.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-
|
11
|
+
date: 2024-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redis
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '5.3'
|
20
17
|
- - ">="
|
21
18
|
- !ruby/object:Gem::Version
|
22
19
|
version: 5.3.0
|
20
|
+
- - "~>"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '5.3'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
26
26
|
requirements:
|
27
|
-
- - "~>"
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '5.3'
|
30
27
|
- - ">="
|
31
28
|
- !ruby/object:Gem::Version
|
32
29
|
version: 5.3.0
|
30
|
+
- - "~>"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '5.3'
|
33
33
|
description: Адаптер собственного сервиса генерации документов
|
34
34
|
email: babin359@gmail.com
|
35
35
|
executables: []
|
@@ -40,6 +40,9 @@ files:
|
|
40
40
|
- lib/docgen-adapter.rb
|
41
41
|
- lib/docgen_adapter.rb
|
42
42
|
- lib/docgen_adapter/configuration.rb
|
43
|
+
- lib/docgen_subject.rb
|
44
|
+
- lib/generators/docgen/document_generator.rb
|
45
|
+
- lib/generators/templates/document.rb.tt
|
43
46
|
homepage:
|
44
47
|
licenses:
|
45
48
|
- MIT
|
@@ -60,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
60
63
|
- !ruby/object:Gem::Version
|
61
64
|
version: '0'
|
62
65
|
requirements: []
|
63
|
-
rubygems_version: 3.
|
66
|
+
rubygems_version: 3.0.6
|
64
67
|
signing_key:
|
65
68
|
specification_version: 4
|
66
69
|
summary: Адаптер собственного сервиса генерации документов
|