avmtrf1-tools 0.27.1 → 0.31.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +4 -0
  3. data/lib/avmtrf1/esosti/entities/issue.rb +2 -29
  4. data/lib/avmtrf1/esosti/instance.rb +4 -0
  5. data/lib/avmtrf1/esosti/instance/changed.rb +33 -0
  6. data/lib/avmtrf1/esosti/raw_data_sanitizer.rb +47 -0
  7. data/lib/avmtrf1/forponto/user/month.rb +1 -1
  8. data/lib/avmtrf1/inventario_sistemas.rb +40 -0
  9. data/lib/avmtrf1/inventario_sistemas/parser.rb +42 -0
  10. data/lib/avmtrf1/inventario_sistemas/parser/body.rb +27 -0
  11. data/lib/avmtrf1/inventario_sistemas/parser/body_row.rb +12 -0
  12. data/lib/avmtrf1/inventario_sistemas/parser/header.rb +38 -0
  13. data/lib/avmtrf1/inventario_sistemas/parser/header_column.rb +27 -0
  14. data/lib/avmtrf1/inventario_sistemas/site_build.rb +71 -0
  15. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base.rb +41 -0
  16. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/elements.rb +54 -0
  17. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/layout.rb +55 -0
  18. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/stylesheet.css +57 -0
  19. data/lib/avmtrf1/inventario_sistemas/site_build/index.rb +20 -0
  20. data/lib/avmtrf1/inventario_sistemas/site_build/sistema.rb +62 -0
  21. data/lib/avmtrf1/inventario_sistemas/site_build/sistemas_index.rb +31 -0
  22. data/lib/avmtrf1/oracle/connection/base.rb +1 -0
  23. data/lib/avmtrf1/oracle/oci8.rb +8 -4
  24. data/lib/avmtrf1/patches/eac_launcher/git/base.rb +0 -15
  25. data/lib/avmtrf1/redmine/instance.rb +2 -1
  26. data/lib/avmtrf1/rest_provider/instance.rb +13 -55
  27. data/lib/avmtrf1/rest_provider/instance/issues.rb +30 -0
  28. data/lib/avmtrf1/rest_provider/request.rb +44 -0
  29. data/lib/avmtrf1/rest_provider/response.rb +77 -0
  30. data/lib/avmtrf1/ruby.rb +9 -0
  31. data/lib/avmtrf1/ruby/gems.rb +11 -0
  32. data/lib/avmtrf1/ruby/gems/dependency.rb +20 -0
  33. data/lib/avmtrf1/ruby/gems/not_found_error.rb +17 -0
  34. data/lib/avmtrf1/tools/runner.rb +12 -0
  35. data/lib/avmtrf1/tools/runner/esosti.rb +2 -21
  36. data/lib/avmtrf1/tools/runner/esosti/changed.rb +52 -0
  37. data/lib/avmtrf1/tools/runner/esosti/fetch.rb +52 -0
  38. data/lib/avmtrf1/tools/runner/esosti/request.rb +88 -0
  39. data/lib/avmtrf1/tools/runner/inventario_sistemas.rb +73 -0
  40. data/lib/avmtrf1/tools/runner/trf1_dspace_base0/deploy.rb +2 -2
  41. data/lib/avmtrf1/tools/version.rb +1 -1
  42. data/lib/avmtrf1/trf1_dspace_base0/deploy.rb +3 -3
  43. metadata +70 -40
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bc1590e048bb7bc9796bdd575bc57e925c636861bd4807e5c48542cb9a03b527
4
- data.tar.gz: b1319b639563051687d546b1801053ac00bec9b84e9add31be091f74a94ff815
3
+ metadata.gz: 5eea6615b21d23cf7361e16841a3dec04eb2e3a80e45af7ac1ad0efeb6fecd8d
4
+ data.tar.gz: 1176e3745e69af4fd6fb0958a4931bf14527470ba7ad10bb21085e1abe97226c
5
5
  SHA512:
6
- metadata.gz: 52e4d1ae9b2aba368c6225ae65e9b6548a74c02c2f0d142ab98c90fbd8bc9e542e6be33c24edd8ee68705d6832fb0c6072cc83d98c963e957922a7113a1b14e3
7
- data.tar.gz: e481c6ccc6057b73d84c8ec76837d5c7e34fba19f2090b72f9a9d1ac2afed7ca6b94886e4262a4a7eb18700c123bb94a1c937b45e016f51985bf9b8d91de1347
6
+ metadata.gz: 7bc8584988cbdbfcebe2386499d1062aca2c564e7096062e1935d7a3260970eeddccc68cdf9dd394a5ab49de3be3def73df8a882e4008e745a9bf8b1fe86d617
7
+ data.tar.gz: 8a42a49da565b8feb68bc8652da2c1c407e16943592e62613489de249567c8dbf646b9883d8da63348b6a95c30f00ac88450ed5f5cb929cac843918634021b8e
data/Gemfile CHANGED
@@ -3,3 +3,7 @@
3
3
  source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
+
7
+ group :oracle do
8
+ gem 'ruby-oci8'
9
+ end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'avmtrf1/esosti/raw_data_sanitizer'
3
4
  require 'avmtrf1/rest_provider/entity'
4
5
 
5
6
  module Avmtrf1
@@ -9,37 +10,9 @@ module Avmtrf1
9
10
  class << self
10
11
  def parse_data(data)
11
12
  data.fetch('QueryMS_RMTICKETResponse')['MS_RMTICKETSet'].if_present(nil) do |v|
12
- sanitize_data(v.fetch('TICKET'))
13
+ ::Avmtrf1::Esosti::RawDataSanitizer.sanitize(v.fetch('TICKET'))
13
14
  end
14
15
  end
15
-
16
- def sanitize_data(data)
17
- if data.is_a?(Array)
18
- sanitize_array_data(data)
19
- elsif data.is_a?(Hash)
20
- sanitize_hash_data(data)
21
- else
22
- data
23
- end
24
- end
25
-
26
- private
27
-
28
- def sanitize_array_data(data)
29
- data.map { |v| sanitize_data(v) }
30
- end
31
-
32
- def sanitize_hash_data(data)
33
- if content_hash?(data)
34
- sanitize_data(data.fetch('content'))
35
- else
36
- data.transform_values { |v| sanitize_data(v) }
37
- end
38
- end
39
-
40
- def content_hash?(data)
41
- data.is_a?(Hash) && data.count == 1 && data.key?('content')
42
- end
43
16
  end
44
17
 
45
18
  def initialize(instance, data)
@@ -1,11 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'eac_ruby_utils/core_ext'
3
4
  require 'avmtrf1/esosti/entities/issue'
4
5
  require 'avmtrf1/rest_provider/instance'
5
6
 
6
7
  module Avmtrf1
7
8
  module Esosti
8
9
  class Instance < ::Avmtrf1::RestProvider::Instance
10
+ require_sub __FILE__
11
+ include ::Avmtrf1::Esosti::Instance::Changed
12
+
9
13
  def build_service_url(service_url_suffix)
10
14
  "#{root_url}/maxrest/rest#{service_url_suffix}"
11
15
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/esosti/raw_data_sanitizer'
4
+ require 'eac_ruby_utils/core_ext'
5
+
6
+ module Avmtrf1
7
+ module Esosti
8
+ class Instance < ::Avmtrf1::RestProvider::Instance
9
+ module Changed
10
+ def changed(since)
11
+ changed_request(since).response.body_data_or_raise
12
+ end
13
+
14
+ def changed_request(since)
15
+ request_json(changed_url_suffix(since)) do |data|
16
+ ::Avmtrf1::Esosti::RawDataSanitizer.sanitize(
17
+ data.fetch('TICKETMboSet').fetch('TICKET')
18
+ ).map { |ticket| ticket.fetch('Attributes').fetch('TICKETID').downcase }
19
+ end
20
+ end
21
+
22
+ def changed_url_suffix(since)
23
+ '/mbo/ticket?_includecols=ticketid&changedate=~gt~' +
24
+ ::CGI.escape(formatted_time(since))
25
+ end
26
+
27
+ def formatted_time(time)
28
+ time.strftime('%FT%T%:z')
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avmtrf1
6
+ module Esosti
7
+ class RawDataSanitizer
8
+ class << self
9
+ def sanitize(raw_data)
10
+ new(raw_data).sanitized
11
+ end
12
+ end
13
+
14
+ CONTENT_KEY = 'content'
15
+
16
+ common_constructor :raw_data
17
+
18
+ def sanitized
19
+ if raw_data.is_a?(Array)
20
+ array_sanitized
21
+ elsif raw_data.is_a?(Hash)
22
+ hash_sanitized
23
+ else
24
+ raw_data
25
+ end
26
+ end
27
+
28
+ private
29
+
30
+ def array_sanitized
31
+ raw_data.map { |v| self.class.sanitize(v) }
32
+ end
33
+
34
+ def hash_sanitized
35
+ if content_hash?
36
+ self.class.sanitize(raw_data.fetch(CONTENT_KEY))
37
+ else
38
+ raw_data.transform_values { |v| self.class.sanitize(v) }
39
+ end
40
+ end
41
+
42
+ def content_hash?
43
+ raw_data.is_a?(Hash) && raw_data.count == 1 && raw_data.key?(CONTENT_KEY)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -117,7 +117,7 @@ module Avmtrf1
117
117
  def cached_data
118
118
  raise 'There is no data cached' unless data_cache.cached?
119
119
 
120
- ::EacRubyUtils::Yaml.load_common(data_cache.read)
120
+ ::EacRubyUtils::Yaml.load(data_cache.read)
121
121
  end
122
122
 
123
123
  def fresh_data
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'roo'
5
+
6
+ module Avmtrf1
7
+ class InventarioSistemas
8
+ require_sub __FILE__, include_modules: true
9
+
10
+ SHEET_NAME = 'TRF1'
11
+ UNUSED_OFFSET = 1
12
+ UNUSED_SIZE = 2
13
+ HEADER_OFFSET = UNUSED_OFFSET + UNUSED_SIZE
14
+ HEADER_SIZE = 2
15
+ BODY_OFFSET = HEADER_OFFSET + HEADER_SIZE
16
+
17
+ enable_simple_cache
18
+ common_constructor :path do
19
+ self.path = path.to_pathname
20
+ end
21
+
22
+ def to_s
23
+ path.to_s
24
+ end
25
+
26
+ private
27
+
28
+ def roo_uncached
29
+ ::Roo::Spreadsheet.open(path.to_path)
30
+ end
31
+
32
+ def sheet_uncached
33
+ roo.sheet(SHEET_NAME) || raise("Sheet not found: \"#{SHEET_NAME}\"")
34
+ end
35
+
36
+ def sheet_row_count
37
+ sheet.last_row
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+ require 'roo'
5
+
6
+ module Avmtrf1
7
+ class InventarioSistemas
8
+ class Parser
9
+ require_sub __FILE__, include_modules: true
10
+
11
+ SHEET_NAME = 'TRF1'
12
+ UNUSED_OFFSET = 1
13
+ UNUSED_SIZE = 2
14
+ HEADER_OFFSET = UNUSED_OFFSET + UNUSED_SIZE
15
+ HEADER_SIZE = 2
16
+ BODY_OFFSET = HEADER_OFFSET + HEADER_SIZE
17
+
18
+ enable_simple_cache
19
+ common_constructor :path do
20
+ self.path = path.to_pathname
21
+ end
22
+
23
+ def to_s
24
+ path.to_s
25
+ end
26
+
27
+ private
28
+
29
+ def roo_uncached
30
+ ::Roo::Spreadsheet.open(path.to_path)
31
+ end
32
+
33
+ def sheet_uncached
34
+ roo.sheet(SHEET_NAME) || raise("Sheet not found: \"#{SHEET_NAME}\"")
35
+ end
36
+
37
+ def sheet_row_count
38
+ sheet.last_row
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avmtrf1
6
+ class InventarioSistemas
7
+ class Parser
8
+ module Body
9
+ def body_rows_uncached
10
+ index = 0
11
+ r = []
12
+ loop do
13
+ raw_row_i = BODY_OFFSET + index
14
+ return r if raw_row_i > sheet.last_row
15
+
16
+ r << sheet.row(raw_row_i).map { |v| v.to_s.strip }
17
+ index += 1
18
+ end
19
+ end
20
+
21
+ def body_rows_offset
22
+ Header::HEADER_ROW_OFFSET + Header::HEADER_ROWS_SIZE
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avmtrf1
6
+ class InventarioSistemas
7
+ class Parser
8
+ class BodyRow
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avmtrf1
6
+ class InventarioSistemas
7
+ class Parser
8
+ module Header
9
+ HEADER_ROW_OFFSET = 3
10
+ HEADER_ROWS_SIZE = 2
11
+
12
+ private
13
+
14
+ def header_columns_uncached
15
+ r = []
16
+ last_main = nil
17
+ main_row.each_with_index do |main, index|
18
+ sub = sub_row[index]
19
+ main ||= last_main
20
+ raise "[main] is blank (Index: #{index}, Sub: #{sub})" if main.blank?
21
+
22
+ r << HeaderColumn.new(index, main, sub)
23
+ last_main = main if main.present?
24
+ end
25
+ r
26
+ end
27
+
28
+ def main_row_uncached
29
+ sheet.row(HEADER_ROW_OFFSET)
30
+ end
31
+
32
+ def sub_row_uncached
33
+ sheet.row(HEADER_ROW_OFFSET + 1)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avmtrf1
6
+ class InventarioSistemas
7
+ class Parser
8
+ class HeaderColumn
9
+ class << self
10
+ def build_id(main, sub)
11
+ "#{main}_#{sub || 'nil'}".downcase.parameterize
12
+ end
13
+ end
14
+
15
+ common_constructor :index, :main, :sub
16
+
17
+ def id
18
+ self.class.build_id(main, sub)
19
+ end
20
+
21
+ def key
22
+ main + sub.if_present('') { |v| "/#{v}" }
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avmtrf1
6
+ class InventarioSistemas
7
+ class SiteBuild
8
+ require_sub __FILE__
9
+ enable_simple_cache
10
+ common_constructor :input_file, :output_directory
11
+
12
+ UNIQUES = %w[index sistemas_index].freeze
13
+
14
+ def run
15
+ create_output_directory
16
+ build_uniques
17
+ build_sistemas
18
+ end
19
+
20
+ def column(main, sub)
21
+ indexed_columns.fetch(
22
+ ::Avmtrf1::InventarioSistemas::Parser::HeaderColumn.build_id(main, sub)
23
+ )
24
+ end
25
+
26
+ private
27
+
28
+ def build_uniques
29
+ UNIQUES.each { |unique| send(unique).build }
30
+ end
31
+
32
+ def build_sistemas
33
+ sistemas.each(&:build)
34
+ end
35
+
36
+ def create_output_directory
37
+ output_directory.mkpath
38
+ end
39
+
40
+ def parser_uncached
41
+ ::Avmtrf1::InventarioSistemas::Parser.new(input_file)
42
+ end
43
+
44
+ def sistemas_uncached
45
+ parser.body_rows
46
+ .map { |body_row| new_sistema(body_row) }
47
+ .sort_by { |sistema| [sistema.title.downcase] }
48
+ end
49
+
50
+ def indexed_columns_uncached
51
+ parser.header_columns.map do |c|
52
+ [c.id, c]
53
+ end.to_h
54
+ end
55
+
56
+ def index_uncached
57
+ ::Avmtrf1::InventarioSistemas::SiteBuild::Index.new(self, nil)
58
+ end
59
+
60
+ def sistemas_index_uncached
61
+ ::Avmtrf1::InventarioSistemas::SiteBuild::SistemasIndex.new(self, index)
62
+ end
63
+
64
+ def new_sistema(body_row)
65
+ ::Avmtrf1::InventarioSistemas::SiteBuild::Sistema.new(
66
+ self, sistemas_index, body_row
67
+ )
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avmtrf1
6
+ class InventarioSistemas
7
+ class SiteBuild
8
+ class HtmlPageBase
9
+ require_sub __FILE__, include_modules: true
10
+ enable_console_speaker
11
+ common_constructor :site, :parent
12
+
13
+ SITE_TITLE = 'Inventário de Sistemas'
14
+ NAVBAR_SEPARATOR = ' > '
15
+
16
+ def build
17
+ infom "Building #{href}..."
18
+ output_path.write(output_content)
19
+ end
20
+
21
+ def href
22
+ "#{uid}.html"
23
+ end
24
+
25
+ def output_path
26
+ site.output_directory.join(href)
27
+ end
28
+
29
+ def uid
30
+ r = self.class.name.demodulize
31
+ r += "_#{id}" if respond_to?(:id)
32
+ r.parameterize
33
+ end
34
+
35
+ def site_title
36
+ SITE_TITLE.to_s
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end