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 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: Адаптер собственного сервиса генерации документов