pd1_tools 0.43.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.
Files changed (222) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +12 -0
  3. data/exe/pd1 +8 -0
  4. data/lib/avmtrf1/active_directory/user.rb +28 -0
  5. data/lib/avmtrf1/active_directory.rb +8 -0
  6. data/lib/avmtrf1/ad_user.rb +11 -0
  7. data/lib/avmtrf1/check_point/session/login.rb +57 -0
  8. data/lib/avmtrf1/check_point/session.rb +60 -0
  9. data/lib/avmtrf1/check_point.rb +3 -0
  10. data/lib/avmtrf1/default_esosti.rb +20 -0
  11. data/lib/avmtrf1/default_jira.rb +18 -0
  12. data/lib/avmtrf1/default_redmine.rb +16 -0
  13. data/lib/avmtrf1/docker/image.rb +49 -0
  14. data/lib/avmtrf1/docker/image_runner.rb +83 -0
  15. data/lib/avmtrf1/docker.rb +9 -0
  16. data/lib/avmtrf1/esosti/entities/issue.rb +24 -0
  17. data/lib/avmtrf1/esosti/entities.rb +9 -0
  18. data/lib/avmtrf1/esosti/instance/changed.rb +33 -0
  19. data/lib/avmtrf1/esosti/instance.rb +22 -0
  20. data/lib/avmtrf1/esosti/raw_data_sanitizer.rb +47 -0
  21. data/lib/avmtrf1/esosti/session/action_base.rb +34 -0
  22. data/lib/avmtrf1/esosti/session/atividades.rb +35 -0
  23. data/lib/avmtrf1/esosti/session/login.rb +47 -0
  24. data/lib/avmtrf1/esosti/session/solicitacao/main.rb +49 -0
  25. data/lib/avmtrf1/esosti/session/solicitacao.rb +81 -0
  26. data/lib/avmtrf1/esosti/session.rb +36 -0
  27. data/lib/avmtrf1/esosti.rb +8 -0
  28. data/lib/avmtrf1/executables.rb +23 -0
  29. data/lib/avmtrf1/forponto/parsers/day_registers.rb +19 -0
  30. data/lib/avmtrf1/forponto/parsers/espelho/day_node.rb +50 -0
  31. data/lib/avmtrf1/forponto/parsers/espelho/methods_as_fields.rb +21 -0
  32. data/lib/avmtrf1/forponto/parsers/espelho/row_node.rb +34 -0
  33. data/lib/avmtrf1/forponto/parsers/espelho/rows_consumer.rb +71 -0
  34. data/lib/avmtrf1/forponto/parsers/espelho/sub_node.rb +20 -0
  35. data/lib/avmtrf1/forponto/parsers/espelho/summary_node.rb +55 -0
  36. data/lib/avmtrf1/forponto/parsers/espelho/utils.rb +32 -0
  37. data/lib/avmtrf1/forponto/parsers/espelho.rb +26 -0
  38. data/lib/avmtrf1/forponto/session/day_registers.rb +39 -0
  39. data/lib/avmtrf1/forponto/session/interval.rb +27 -0
  40. data/lib/avmtrf1/forponto/session/login.rb +45 -0
  41. data/lib/avmtrf1/forponto/session.rb +32 -0
  42. data/lib/avmtrf1/forponto/user/balance.rb +155 -0
  43. data/lib/avmtrf1/forponto/user/day_registers.rb +32 -0
  44. data/lib/avmtrf1/forponto/user/month.rb +141 -0
  45. data/lib/avmtrf1/forponto/user.rb +22 -0
  46. data/lib/avmtrf1/git/cached_repository.rb +27 -0
  47. data/lib/avmtrf1/git/gitlab.rb +11 -0
  48. data/lib/avmtrf1/git/issue_on_repository.rb +100 -0
  49. data/lib/avmtrf1/git/push_large/_utils.rb +16 -0
  50. data/lib/avmtrf1/git/push_large/lfs_commit/cache.rb +21 -0
  51. data/lib/avmtrf1/git/push_large/lfs_commit/checkout_previous_revision.rb +35 -0
  52. data/lib/avmtrf1/git/push_large/lfs_commit/commit_changes.rb +48 -0
  53. data/lib/avmtrf1/git/push_large/lfs_commit/helpers.rb +29 -0
  54. data/lib/avmtrf1/git/push_large/lfs_commit/pick_source_revision.rb +103 -0
  55. data/lib/avmtrf1/git/push_large/lfs_commit/push.rb +90 -0
  56. data/lib/avmtrf1/git/push_large/lfs_commit/track_large_files.rb +53 -0
  57. data/lib/avmtrf1/git/push_large/lfs_commit.rb +47 -0
  58. data/lib/avmtrf1/git/push_large/source_commit/push.rb +42 -0
  59. data/lib/avmtrf1/git/push_large/source_commit.rb +58 -0
  60. data/lib/avmtrf1/git/push_large.rb +69 -0
  61. data/lib/avmtrf1/git/reference.rb +34 -0
  62. data/lib/avmtrf1/git.rb +10 -0
  63. data/lib/avmtrf1/gitlab/commit.rb +37 -0
  64. data/lib/avmtrf1/gitlab/repository.rb +41 -0
  65. data/lib/avmtrf1/ini/profile.rb +42 -0
  66. data/lib/avmtrf1/ini.rb +55 -0
  67. data/lib/avmtrf1/inventario_sistemas/parser/body.rb +27 -0
  68. data/lib/avmtrf1/inventario_sistemas/parser/body_row.rb +12 -0
  69. data/lib/avmtrf1/inventario_sistemas/parser/header.rb +38 -0
  70. data/lib/avmtrf1/inventario_sistemas/parser/header_column.rb +27 -0
  71. data/lib/avmtrf1/inventario_sistemas/parser.rb +40 -0
  72. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/elements.rb +54 -0
  73. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/layout.rb +55 -0
  74. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base/stylesheet.css +57 -0
  75. data/lib/avmtrf1/inventario_sistemas/site_build/html_page_base.rb +41 -0
  76. data/lib/avmtrf1/inventario_sistemas/site_build/index.rb +20 -0
  77. data/lib/avmtrf1/inventario_sistemas/site_build/sistema.rb +62 -0
  78. data/lib/avmtrf1/inventario_sistemas/site_build/sistemas_index.rb +31 -0
  79. data/lib/avmtrf1/inventario_sistemas/site_build.rb +71 -0
  80. data/lib/avmtrf1/inventario_sistemas.rb +38 -0
  81. data/lib/avmtrf1/issues/factory.rb +22 -0
  82. data/lib/avmtrf1/issues.rb +7 -0
  83. data/lib/avmtrf1/jira/entities/issue.rb +30 -0
  84. data/lib/avmtrf1/jira/entities.rb +9 -0
  85. data/lib/avmtrf1/jira/instance.rb +28 -0
  86. data/lib/avmtrf1/jira.rb +8 -0
  87. data/lib/avmtrf1/node_js/docker_image.rb +14 -0
  88. data/lib/avmtrf1/node_js.rb +9 -0
  89. data/lib/avmtrf1/openvpn/config/builder.rb +59 -0
  90. data/lib/avmtrf1/openvpn/config/parser/builder.rb +62 -0
  91. data/lib/avmtrf1/openvpn/config/parser/line.rb +47 -0
  92. data/lib/avmtrf1/openvpn/config/parser/simple.rb +27 -0
  93. data/lib/avmtrf1/openvpn/config/parser/tag.rb +39 -0
  94. data/lib/avmtrf1/openvpn/config/parser.rb +20 -0
  95. data/lib/avmtrf1/oracle/connection/base.rb +66 -0
  96. data/lib/avmtrf1/oracle/connection/string_builder.rb +44 -0
  97. data/lib/avmtrf1/oracle/connection.rb +12 -0
  98. data/lib/avmtrf1/oracle/object/base.rb +39 -0
  99. data/lib/avmtrf1/oracle/object/table.rb +15 -0
  100. data/lib/avmtrf1/oracle/object/user.rb +15 -0
  101. data/lib/avmtrf1/oracle/object/view.rb +15 -0
  102. data/lib/avmtrf1/oracle/object.rb +25 -0
  103. data/lib/avmtrf1/oracle/objects/relation.rb +23 -0
  104. data/lib/avmtrf1/oracle/objects/sql_builder.rb +64 -0
  105. data/lib/avmtrf1/oracle/objects.rb +53 -0
  106. data/lib/avmtrf1/oracle/oci8.rb +29 -0
  107. data/lib/avmtrf1/oracle.rb +10 -0
  108. data/lib/avmtrf1/patches/avm/git/issue/complete.rb +50 -0
  109. data/lib/avmtrf1/patches/avm/git/issue.rb +4 -0
  110. data/lib/avmtrf1/patches/avm/git/launcher/base.rb +46 -0
  111. data/lib/avmtrf1/patches/avm/git/launcher.rb +4 -0
  112. data/lib/avmtrf1/patches/avm/git.rb +4 -0
  113. data/lib/avmtrf1/patches/avm.rb +4 -0
  114. data/lib/avmtrf1/patches/inifile.rb +13 -0
  115. data/lib/avmtrf1/patches.rb +4 -0
  116. data/lib/avmtrf1/php/docker_images/base.rb +49 -0
  117. data/lib/avmtrf1/php/docker_images/factory.rb +37 -0
  118. data/lib/avmtrf1/php/docker_images/v5.rb +47 -0
  119. data/lib/avmtrf1/php/docker_images/v7.rb +27 -0
  120. data/lib/avmtrf1/php/docker_images/v7_v4.rb +30 -0
  121. data/lib/avmtrf1/php/docker_images/v8.rb +19 -0
  122. data/lib/avmtrf1/php/docker_images.rb +11 -0
  123. data/lib/avmtrf1/php.rb +9 -0
  124. data/lib/avmtrf1/red/client/authorization.xml.erb +4 -0
  125. data/lib/avmtrf1/red/client.rb +38 -0
  126. data/lib/avmtrf1/red/helper.rb +35 -0
  127. data/lib/avmtrf1/red/profile/put_file.xml.erb +19 -0
  128. data/lib/avmtrf1/red/profile.rb +58 -0
  129. data/lib/avmtrf1/red/server.rb +33 -0
  130. data/lib/avmtrf1/red.rb +5 -0
  131. data/lib/avmtrf1/redmine/entities/issue.rb +29 -0
  132. data/lib/avmtrf1/redmine/entities/issue_status.rb +23 -0
  133. data/lib/avmtrf1/redmine/entities.rb +10 -0
  134. data/lib/avmtrf1/redmine/instance.rb +41 -0
  135. data/lib/avmtrf1/redmine.rb +7 -0
  136. data/lib/avmtrf1/rest_provider/entity.rb +18 -0
  137. data/lib/avmtrf1/rest_provider/instance/issues.rb +30 -0
  138. data/lib/avmtrf1/rest_provider/instance.rb +30 -0
  139. data/lib/avmtrf1/rest_provider/request.rb +44 -0
  140. data/lib/avmtrf1/rest_provider/response.rb +73 -0
  141. data/lib/avmtrf1/rest_provider.rb +7 -0
  142. data/lib/avmtrf1/result.rb +44 -0
  143. data/lib/avmtrf1/ruby.rb +9 -0
  144. data/lib/avmtrf1/tools/application.rb +13 -0
  145. data/lib/avmtrf1/tools/core_ext.rb +4 -0
  146. data/lib/avmtrf1/tools/msgraph/api/entity.rb +35 -0
  147. data/lib/avmtrf1/tools/msgraph/api/member.rb +31 -0
  148. data/lib/avmtrf1/tools/msgraph/api/root.rb +27 -0
  149. data/lib/avmtrf1/tools/msgraph/api/team/member_add.rb +36 -0
  150. data/lib/avmtrf1/tools/msgraph/api/team.rb +40 -0
  151. data/lib/avmtrf1/tools/msgraph/api.rb +55 -0
  152. data/lib/avmtrf1/tools/msgraph/error.rb +31 -0
  153. data/lib/avmtrf1/tools/msgraph/request_mixin.rb +18 -0
  154. data/lib/avmtrf1/tools/msgraph/response_mixin.rb +23 -0
  155. data/lib/avmtrf1/tools/msgraph/token_retrieve.rb +42 -0
  156. data/lib/avmtrf1/tools/msgraph.rb +11 -0
  157. data/lib/avmtrf1/tools/rubygems/dependency.rb +20 -0
  158. data/lib/avmtrf1/tools/rubygems/not_found_error.rb +17 -0
  159. data/lib/avmtrf1/tools/rubygems.rb +11 -0
  160. data/lib/avmtrf1/tools/runner/check_point/login.rb +33 -0
  161. data/lib/avmtrf1/tools/runner/check_point.rb +17 -0
  162. data/lib/avmtrf1/tools/runner/esosti/changed.rb +39 -0
  163. data/lib/avmtrf1/tools/runner/esosti/fetch.rb +39 -0
  164. data/lib/avmtrf1/tools/runner/esosti/request.rb +76 -0
  165. data/lib/avmtrf1/tools/runner/esosti.rb +27 -0
  166. data/lib/avmtrf1/tools/runner/forponto/espelho.rb +47 -0
  167. data/lib/avmtrf1/tools/runner/forponto/marcacoes.rb +32 -0
  168. data/lib/avmtrf1/tools/runner/forponto/resumos.rb +87 -0
  169. data/lib/avmtrf1/tools/runner/forponto/saldo.rb +91 -0
  170. data/lib/avmtrf1/tools/runner/forponto.rb +70 -0
  171. data/lib/avmtrf1/tools/runner/git/gitlab/commit_link.rb +81 -0
  172. data/lib/avmtrf1/tools/runner/git/gitlab.rb +20 -0
  173. data/lib/avmtrf1/tools/runner/git/issues_check.rb +59 -0
  174. data/lib/avmtrf1/tools/runner/git/push_large.rb +46 -0
  175. data/lib/avmtrf1/tools/runner/git.rb +14 -0
  176. data/lib/avmtrf1/tools/runner/inventario_sistemas.rb +71 -0
  177. data/lib/avmtrf1/tools/runner/msgraph/joined_teams.rb +39 -0
  178. data/lib/avmtrf1/tools/runner/msgraph/request.rb +45 -0
  179. data/lib/avmtrf1/tools/runner/msgraph/team/member/add.rb +48 -0
  180. data/lib/avmtrf1/tools/runner/msgraph/team/member.rb +25 -0
  181. data/lib/avmtrf1/tools/runner/msgraph/team/members.rb +38 -0
  182. data/lib/avmtrf1/tools/runner/msgraph/team.rb +27 -0
  183. data/lib/avmtrf1/tools/runner/msgraph/token.rb +31 -0
  184. data/lib/avmtrf1/tools/runner/msgraph.rb +43 -0
  185. data/lib/avmtrf1/tools/runner/node_js/docker.rb +15 -0
  186. data/lib/avmtrf1/tools/runner/node_js.rb +18 -0
  187. data/lib/avmtrf1/tools/runner/openvpn.rb +91 -0
  188. data/lib/avmtrf1/tools/runner/oracle/query.rb +71 -0
  189. data/lib/avmtrf1/tools/runner/oracle/source_get.rb +51 -0
  190. data/lib/avmtrf1/tools/runner/oracle/user_clear.rb +59 -0
  191. data/lib/avmtrf1/tools/runner/oracle.rb +37 -0
  192. data/lib/avmtrf1/tools/runner/php/docker.rb +20 -0
  193. data/lib/avmtrf1/tools/runner/php.rb +18 -0
  194. data/lib/avmtrf1/tools/runner/red.rb +83 -0
  195. data/lib/avmtrf1/tools/runner/source.rb +14 -0
  196. data/lib/avmtrf1/tools/runner.rb +43 -0
  197. data/lib/avmtrf1/tools.rb +4 -0
  198. data/lib/pd1_tools/version.rb +5 -0
  199. data/lib/pd1_tools.rb +7 -0
  200. data/template/avmtrf1/node_js/docker_image/Dockerfile.template +25 -0
  201. data/template/avmtrf1/node_js/docker_image/auxiliary/config_banner.sh +15 -0
  202. data/template/avmtrf1/node_js/docker_image/auxiliary/init.sh +18 -0
  203. data/template/avmtrf1/node_js/docker_image/auxiliary/lib.sh +30 -0
  204. data/template/avmtrf1/node_js/docker_image/auxiliary/ng_serve.sh +16 -0
  205. data/template/avmtrf1/node_js/docker_image/auxiliary/npm_install.sh +21 -0
  206. data/template/avmtrf1/node_js/docker_image/auxiliary/start.sh +17 -0
  207. data/template/avmtrf1/php/docker_images/base/Dockerfile.template +104 -0
  208. data/template/avmtrf1/php/docker_images/base/aux/apache_foreground.sh +16 -0
  209. data/template/avmtrf1/php/docker_images/base/aux/apache_user.sh +54 -0
  210. data/template/avmtrf1/php/docker_images/base/aux/app_user_run.sh +17 -0
  211. data/template/avmtrf1/php/docker_images/base/aux/config_banner.sh +20 -0
  212. data/template/avmtrf1/php/docker_images/base/aux/init.sh +39 -0
  213. data/template/avmtrf1/php/docker_images/base/aux/laravel.sh +58 -0
  214. data/template/avmtrf1/php/docker_images/base/aux/lib.sh +70 -0
  215. data/template/avmtrf1/php/docker_images/base/aux/pear.sh +35 -0
  216. data/template/avmtrf1/php/docker_images/base/aux/php_composer.sh +31 -0
  217. data/template/avmtrf1/php/docker_images/base/aux/php_values.sh +41 -0
  218. data/template/avmtrf1/php/docker_images/base/aux/setup_apache_site.sh +16 -0
  219. data/template/avmtrf1/php/docker_images/base/aux/start.sh +26 -0
  220. data/template/avmtrf1/php/docker_images/base/aux/templates/apache_site.conf +12 -0
  221. data/template/avmtrf1/tools/msgraph/token_retrieve/python_retriever.py +85 -0
  222. metadata +460 -0
@@ -0,0 +1,155 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avmtrf1
4
+ module Forponto
5
+ class User
6
+ class Balance
7
+ include ::EacRubyUtils::SimpleCache
8
+
9
+ attr_reader :user
10
+
11
+ def initialize(user)
12
+ @user = user
13
+ build_balances
14
+ end
15
+
16
+ def months_balances_uncached
17
+ sorted_months.map { |m| MyBalance.new(m) }
18
+ end
19
+
20
+ def sorted_months_uncached
21
+ r = []
22
+ current = head_month
23
+ while current.present?
24
+ r << current
25
+ current = current.parent_month
26
+ end
27
+ r.reverse
28
+ end
29
+
30
+ def head_month
31
+ today = ::Date.today # rubocop:disable Rails/Date
32
+ date = ::Date.civil(today.year, today.month, 1)
33
+ user.month(date.year, date.month)
34
+ end
35
+
36
+ def debito_left
37
+ months_balances.inject(0) { |a, e| a + e.debito.left }
38
+ end
39
+
40
+ def credito_left
41
+ months_balances.inject(0) { |a, e| a + e.credito.left }
42
+ end
43
+
44
+ def saldo_left
45
+ credito_left - debito_left
46
+ end
47
+
48
+ private
49
+
50
+ def build_balances
51
+ previous = []
52
+ months_balances.each do |current|
53
+ current.consume(previous)
54
+ previous << current
55
+ if previous.count > 3
56
+ removed = previous.shift
57
+ removed.mark_lost
58
+ end
59
+ end
60
+ end
61
+
62
+ class MyBalance
63
+ attr_accessor :debito, :credito, :month, :lost
64
+
65
+ def initialize(month)
66
+ @month = month
67
+ @debito = AttrConsumer.new(self, false, month.debito)
68
+ @credito = AttrConsumer.new(self, true, month.credito)
69
+ @lost = false
70
+ end
71
+
72
+ def after_trigger
73
+ credito.after_trigger - debito.after_trigger
74
+ end
75
+
76
+ def after_trigger_acum
77
+ credito.after_trigger_acum - debito.after_trigger_acum
78
+ end
79
+
80
+ def mark_lost
81
+ @lost = true
82
+ end
83
+
84
+ delegate :to_s, to: :month
85
+
86
+ def consume(previous)
87
+ debito.consume_from_months(previous)
88
+ credito.consume_from_months(previous)
89
+ end
90
+
91
+ class AttrConsumer
92
+ attr_reader :owner_month, :initial_value, :left, :unconsumed, :withdrawals, :requests,
93
+ :after_trigger, :after_trigger_acum
94
+
95
+ def initialize(owner_month, credito, initial_value)
96
+ @owner_month = owner_month
97
+ @credito = credito
98
+ @left = initial_value
99
+ @initial_value = initial_value
100
+ @withdrawals = []
101
+ @requests = []
102
+ @after_trigger = nil
103
+ end
104
+
105
+ def to_s
106
+ "[#{owner_month}|#{attr}]"
107
+ end
108
+
109
+ def consume_from_months(months)
110
+ (months + [owner_month]).each do |month|
111
+ break unless left.positive?
112
+
113
+ consume_from_month(month)
114
+ end
115
+ @after_trigger = left
116
+ @after_trigger_acum = months.inject(0) { |a, e| a + e.send(attr).left } + left
117
+ end
118
+
119
+ def withdrawal(month, value)
120
+ month.assert_argument(MyBalance, :month)
121
+ raise "Value is not positive: #{value} (Month: #{month})" unless value.positive?
122
+
123
+ self.left -= value
124
+ raise "Left less than zero: #{left} (Value: #{value})" if left.negative?
125
+
126
+ @withdrawals << OpenStruct.new(month: month, value: value) # rubocop:disable Style/OpenStructUse
127
+ end
128
+
129
+ private
130
+
131
+ attr_writer :left, :unconsumed
132
+
133
+ def consume_from_month(month)
134
+ month_attr = month.send(reverse_attr)
135
+ return unless month_attr.left.positive?
136
+
137
+ value = [left, month_attr.left].min
138
+ self.left -= value
139
+ month_attr.withdrawal(owner_month, value)
140
+ @requests << OpenStruct.new(month: month, value: value) # rubocop:disable Style/OpenStructUse
141
+ end
142
+
143
+ def attr
144
+ @credito ? :credito : :debito
145
+ end
146
+
147
+ def reverse_attr
148
+ @credito ? :debito : :credito
149
+ end
150
+ end
151
+ end
152
+ end
153
+ end
154
+ end
155
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/core_ext'
4
+
5
+ module Avmtrf1
6
+ module Forponto
7
+ class User
8
+ class DayRegisters
9
+ enable_simple_cache
10
+ common_constructor :user
11
+
12
+ def date
13
+ fresh_data
14
+ @date
15
+ end
16
+
17
+ def times
18
+ fresh_data.map { |r| r[:hora] }
19
+ end
20
+
21
+ private
22
+
23
+ def fresh_data_uncached
24
+ r = ::Avmtrf1::Forponto::Session.new(user.url, user.matricula, user.codigo)
25
+ .day_registers_data
26
+ @date = ::Date.today # rubocop:disable Rails/Date
27
+ r
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,141 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/json'
4
+ require 'eac_ruby_utils/core_ext'
5
+ require 'eac_ruby_utils/yaml'
6
+ require 'recursive-open-struct'
7
+ require 'avmtrf1/forponto/parsers/espelho'
8
+ require 'avmtrf1/forponto/session'
9
+
10
+ module Avmtrf1
11
+ module Forponto
12
+ class User
13
+ class Month
14
+ enable_simple_cache
15
+
16
+ DEBITO_CODE = 66
17
+ CREDITO_CODE = 72
18
+
19
+ attr_reader :user, :year, :month
20
+
21
+ def initialize(user, year, month)
22
+ @user = user
23
+ @year = year
24
+ @month = month
25
+ end
26
+
27
+ def data_uncached
28
+ if recache?
29
+ r = fresh_data
30
+ data_cache.write(r.to_yaml)
31
+ r
32
+ else
33
+ cached_data
34
+ end
35
+ end
36
+
37
+ def to_s
38
+ month.to_s.rjust(2, '0') + '/' + year.to_s # rubocop:disable Style/StringConcatenation
39
+ end
40
+
41
+ def empty?
42
+ os_data.summaries.empty?
43
+ end
44
+
45
+ def debito_acumulado; end
46
+
47
+ def debito
48
+ summary_minutes(DEBITO_CODE)
49
+ end
50
+
51
+ def debito_acum
52
+ debito + (parent_month ? parent_month.debito_acum : 0)
53
+ end
54
+
55
+ def credito_acum
56
+ credito + (parent_month ? parent_month.credito_acum : 0)
57
+ end
58
+
59
+ def saldo
60
+ credito - debito
61
+ end
62
+
63
+ def saldo_acum
64
+ credito_acum - debito_acum
65
+ end
66
+
67
+ def credito
68
+ summary_minutes(CREDITO_CODE)
69
+ end
70
+
71
+ private
72
+
73
+ def summary_minutes(code)
74
+ summary = os_data.summaries.find { |s| s.code == code }
75
+ summary ? summary.minutes : 0
76
+ end
77
+
78
+ def parent_month_uncached
79
+ date = Date.civil(year, month, 1) - 1.month
80
+ r = user.month(date.year, date.month)
81
+ r.empty? ? nil : r
82
+ end
83
+
84
+ def os_data_uncached
85
+ ::RecursiveOpenStruct.new(data, recurse_over_arrays: true)
86
+ end
87
+
88
+ def recache?
89
+ !data_cache.stored? || yesterday_uncached?
90
+ end
91
+
92
+ def yesterday_uncached?
93
+ last_cached_day < end_date && last_cached_day < (::Date.today - 1.day) # rubocop:disable Rails/Date
94
+ end
95
+
96
+ def last_cached_day_uncached
97
+ cached_data.fetch('days').map { |day| day.fetch('date') }.max
98
+ end
99
+
100
+ def data_cache_uncached
101
+ ::Avmtrf1.fs_cache.child('forponto', user.matricula, year.to_s, month.to_s.rjust(2, '0'))
102
+ end
103
+
104
+ def date(day)
105
+ ::Date.civil(year, month, day)
106
+ end
107
+
108
+ def start_date_uncached
109
+ date(1)
110
+ end
111
+
112
+ def end_date_uncached
113
+ date(-1)
114
+ end
115
+
116
+ def cached_data
117
+ raise 'There is no data cached' unless data_cache.stored?
118
+
119
+ ::EacRubyUtils::Yaml.load(data_cache.read)
120
+ end
121
+
122
+ def fresh_data
123
+ session = new_session
124
+ begin
125
+ session.interval_data(start_date, end_date).merge(fetch_data)
126
+ ensure
127
+ session.sub.close
128
+ end
129
+ end
130
+
131
+ def fetch_data
132
+ { year: year, month: month, url: user.url, matricula: user.matricula }
133
+ end
134
+
135
+ def new_session
136
+ ::Avmtrf1::Forponto::Session.new(user.url, user.matricula, user.codigo)
137
+ end
138
+ end
139
+ end
140
+ end
141
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/require_sub'
4
+ EacRubyUtils.require_sub(__FILE__)
5
+
6
+ module Avmtrf1
7
+ module Forponto
8
+ class User
9
+ attr_reader :url, :matricula, :codigo
10
+
11
+ def initialize(url, matricula, codigo)
12
+ @url = url
13
+ @matricula = matricula
14
+ @codigo = codigo
15
+ end
16
+
17
+ def month(year, month)
18
+ ::Avmtrf1::Forponto::User::Month.new(self, year, month)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avm/git/launcher/base'
4
+
5
+ module Avmtrf1
6
+ module Git
7
+ class CachedRepository < ::Avm::Git::Launcher::Base
8
+ attr_reader :url
9
+
10
+ def initialize(url)
11
+ @url = url
12
+ super(local_path)
13
+ init
14
+ assert_remote_url('origin', url)
15
+ system!('fetch', 'origin', '-pPt')
16
+ end
17
+
18
+ private
19
+
20
+ def local_path
21
+ r = ::File.join(ENV.fetch('HOME', nil), '.cache', 'git_cached_repositories', url.parameterize) # rubocop:disable Style/EnvHome, Layout/LineLength
22
+ ::FileUtils.mkdir_p(::File.dirname(r))
23
+ r
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'avmtrf1/tools/core_ext'
4
+
5
+ module Avmtrf1
6
+ module Git
7
+ module Gitlab
8
+ require_sub __FILE__
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,100 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'eac_ruby_utils/patches/module/speaker'
4
+ require 'eac_ruby_utils/simple_cache'
5
+ require 'avmtrf1/result'
6
+
7
+ module Avmtrf1
8
+ module Git
9
+ class IssueOnRepository
10
+ enable_speaker
11
+ include ::EacRubyUtils::SimpleCache
12
+
13
+ CHECKS = %w[no_branch_nor_tag branch_and_tag issue_not_found issue_closed_git_open
14
+ issue_open_git_closed issue_open_git_open issue_closed_git_closed].freeze
15
+
16
+ def initialize(issue_id, refs)
17
+ @issue_id = issue_id
18
+ @refs = refs
19
+ end
20
+
21
+ def check
22
+ infov issue_id, "#{result.label} [#{issue ? issue.status_name : '-'}]"
23
+ end
24
+
25
+ private
26
+
27
+ attr_reader :issue_id, :refs
28
+
29
+ def result_uncached
30
+ CHECKS.each do |check|
31
+ result = send("#{check}_check")
32
+ return result if result
33
+ end
34
+ ::Avmtrf1::Result.error('condição não encontrada')
35
+ end
36
+
37
+ def no_branch_nor_tag_check
38
+ return nil unless branch_ref.blank? && tag_ref.blank?
39
+
40
+ ::Avmtrf1::Result.error("nem branch nem tag encontrado com o nome \"#{issue_id}\"")
41
+ end
42
+
43
+ def branch_and_tag_check
44
+ return nil unless branch_ref.present? && tag_ref.present?
45
+
46
+ ::Avmtrf1::Result.error("há uma branch e uma tag com o nome \"#{issue_id}\"")
47
+ end
48
+
49
+ def issue_not_found_check
50
+ return nil if issue.present?
51
+
52
+ if tag_ref.present?
53
+ ::Avmtrf1::Result.neutral('demanda não encontrada e Git fechado')
54
+ else
55
+ ::Avmtrf1::Result.neutral('demanda não encontrada e Git aberto')
56
+ end
57
+ end
58
+
59
+ def issue_closed_git_open_check
60
+ return nil unless issue.closed? && !git_closed?
61
+
62
+ ::Avmtrf1::Result.error('demanda fechada e Git aberto')
63
+ end
64
+
65
+ def issue_open_git_closed_check
66
+ return nil unless !issue.closed? && git_closed?
67
+
68
+ ::Avmtrf1::Result.error('demanda aberta e Git fechado')
69
+ end
70
+
71
+ def issue_open_git_open_check
72
+ return nil unless !issue.closed? && !git_closed?
73
+
74
+ ::Avmtrf1::Result.success('demanda aberta e Git aberto')
75
+ end
76
+
77
+ def issue_closed_git_closed_check
78
+ return nil unless issue.closed? && git_closed?
79
+
80
+ ::Avmtrf1::Result.success('demanda fechada e Git fechado')
81
+ end
82
+
83
+ def git_closed?
84
+ tag_ref.present?
85
+ end
86
+
87
+ def branch_ref_uncached
88
+ refs.find { |ref| ref.type == 'head' }
89
+ end
90
+
91
+ def tag_ref_uncached
92
+ refs.find { |ref| ref.type == 'tag' }
93
+ end
94
+
95
+ def issue_uncached
96
+ ::Avmtrf1::IssueFactory.find(issue_id)
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avmtrf1
4
+ module Git
5
+ class PushLarge
6
+ class << self
7
+ def bytes_size(size)
8
+ return 'NONE' if size.blank?
9
+
10
+ b = "#{size} B"
11
+ "#{::Filesize.from(b).pretty} (#{b})"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avmtrf1
4
+ module Git
5
+ class PushLarge
6
+ class LfsCommit
7
+ module Cache
8
+ def fs_cache
9
+ @fs_cache ||= source_commit.fs_cache.child(
10
+ lfs_file_min_size.presence || 'nil'
11
+ )
12
+ end
13
+
14
+ %w[sha1 files_size push_pack_error].each do |attr|
15
+ define_method("#{attr}_cache_uncached") { fs_cache.child(attr) }
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avmtrf1
4
+ module Git
5
+ class PushLarge
6
+ class LfsCommit
7
+ module CheckoutPreviousRevision
8
+ private
9
+
10
+ def checkout_base_uncached
11
+ if previous_revision.blank?
12
+ checkout_orphan
13
+ else
14
+ checkout_previous_revision
15
+ end
16
+ end
17
+
18
+ def checkout_orphan
19
+ infom message('Checkout orphan')
20
+ git.execute!('reset', '--hard')
21
+ git.execute!('clean', '-df')
22
+ git.execute!('checkout', source_commit.sha1)
23
+ end
24
+
25
+ def checkout_previous_revision
26
+ infom message("Checkout previous revision #{previous_revision}")
27
+ git.execute!('reset', '--hard')
28
+ git.execute!('clean', '-df')
29
+ git.execute!('checkout', previous_revision)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avmtrf1
4
+ module Git
5
+ class PushLarge
6
+ class LfsCommit
7
+ module CommitChanges
8
+ # @return [Avm::Git::Commit]
9
+ def commit
10
+ commit_changes
11
+ @commit
12
+ end
13
+
14
+ private
15
+
16
+ def commit_changes_uncached
17
+ if sha1_cache.read.present?
18
+ @commit = ::Avm::Git::Commit.new(git, sha1_cache.read)
19
+ return
20
+ end
21
+ track_large_files
22
+ add_files
23
+ commit_amend
24
+ store_commit
25
+ end
26
+
27
+ def add_files
28
+ infom ' * Adding files'
29
+ git.system!('add', '.')
30
+ end
31
+
32
+ def commit_amend
33
+ infom message('Commiting')
34
+ git.command('commit', '--amend', '--allow-empty', '--allow-empty-message')
35
+ .envvar('GIT_EDITOR', true).execute!
36
+ end
37
+
38
+ def store_commit
39
+ @commit = ::Avm::Git::Commit.new(git, git.rev_parse('HEAD'))
40
+ infov message('Commited (SHA1)'), @commit.sha1
41
+ sha1_cache.write(@commit.sha1)
42
+ files_size_cache.write(@commit.files_size)
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avmtrf1
4
+ module Git
5
+ class PushLarge
6
+ class LfsCommit
7
+ module Helpers
8
+ private
9
+
10
+ def message(suffix, padding = 0)
11
+ "#{' ' * (padding + 2)}* #{suffix}"
12
+ end
13
+
14
+ def git
15
+ source_commit.git
16
+ end
17
+
18
+ def push_large
19
+ source_commit.push_large
20
+ end
21
+
22
+ def previous_revision
23
+ push_large.last_pushed_revision
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end