docgen-adapter 1.0.0 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: Адаптер собственного сервиса генерации документов
|