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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 5843bd2a380e11e802a39d91839e5daa56ed848ebf3f9c1ec8d4c02a5fe96331
4
- data.tar.gz: a1d2955903f75f3b1a5d64cc03cd16b879c7346aab5e5259bdd6a7c376557609
3
+ metadata.gz: 436def6a7f3f7cf576ee57d20432b0f81598d4e8cf203bd399a55016bbebfdb9
4
+ data.tar.gz: 2d306870e9a52bda078216596d734b0bb1b8736d647fcf739c8792b06054ba15
5
5
  SHA512:
6
- metadata.gz: 62f713cb8e3a6047295e8dabf3a2f11d20498e53448dcb2ffa75d5fe1e1b02fd4295b6871aa0a3a28d5910930c5d2202725df36bf3eba77da8d4ab740819e148
7
- data.tar.gz: 23d0dd3ac4e4686756df2f0237997b45db796a4c80e0e665d20a6ad1d019156370da7e207c8b0f5f5bca7c7dd7e9e1f837e37342628197e955aa9967539f49ab
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
- Использование с помощью вызова метода `generate` класса `DocgenAdapter`. Например:
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
- params = {
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` сгенерированного класса.
@@ -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
- @filename
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 @filename, message.force_encoding('utf-8')
121
+ File.write filename, message.force_encoding('utf-8')
110
122
 
111
123
  # сообщение с файлом приходит последним - отписка от канала Redis
112
124
  redis.unsubscribe
@@ -0,0 +1,10 @@
1
+ class DocgenSubject
2
+
3
+ # метод для сбора метаданных
4
+ def self.metadata(options = {})
5
+ # опции кешинга
6
+ class_attribute :metadata_opts
7
+ self.metadata_opts = options
8
+ end
9
+
10
+ end
@@ -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
@@ -0,0 +1,10 @@
1
+ class <%= @doc_type.capitalize %>::Document<%= @file_doc_id %> < DocgenSubject
2
+
3
+ metadata filename: ''
4
+
5
+ def json(params = {})
6
+ {
7
+ }
8
+ end
9
+
10
+ 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.0.0
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-16 00:00:00.000000000 Z
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.4.10
66
+ rubygems_version: 3.0.6
64
67
  signing_key:
65
68
  specification_version: 4
66
69
  summary: Адаптер собственного сервиса генерации документов