forcast 0.0.110

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 (149) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/COPYRIGHTS +11 -0
  4. data/Gemfile +22 -0
  5. data/Gemfile.lock +166 -0
  6. data/PENDIENTES +39 -0
  7. data/README.md +35 -0
  8. data/Rakefile +7 -0
  9. data/VERSION +1 -0
  10. data/bin/console +14 -0
  11. data/bin/rake +28 -0
  12. data/bin/setup +8 -0
  13. data/forcast.gemspec +73 -0
  14. data/lib/forcast.rb +5 -0
  15. data/lib/forcast/controllers/all.rb +2 -0
  16. data/lib/forcast/controllers/application/all.rb +12 -0
  17. data/lib/forcast/controllers/application/crud.rb +91 -0
  18. data/lib/forcast/controllers/application/database.rb +34 -0
  19. data/lib/forcast/controllers/application/error.rb +18 -0
  20. data/lib/forcast/controllers/application/exception_handler.rb +25 -0
  21. data/lib/forcast/controllers/application/json.rb +83 -0
  22. data/lib/forcast/controllers/application/locale.rb +30 -0
  23. data/lib/forcast/controllers/application/log.rb +22 -0
  24. data/lib/forcast/controllers/application/login.rb +41 -0
  25. data/lib/forcast/controllers/application/meta.rb +61 -0
  26. data/lib/forcast/controllers/application/model.rb +17 -0
  27. data/lib/forcast/controllers/application/permitirtodo.rb +27 -0
  28. data/lib/forcast/controllers/application/utils.rb +28 -0
  29. data/lib/forcast/controllers/controller/all.rb +8 -0
  30. data/lib/forcast/controllers/controller/asociar.rb +121 -0
  31. data/lib/forcast/controllers/controller/busqueda.rb +151 -0
  32. data/lib/forcast/controllers/controller/definitor/definitor.rb +322 -0
  33. data/lib/forcast/controllers/controller/definitor/definitor_page.rb +40 -0
  34. data/lib/forcast/controllers/controller/definitor_all.rb +2 -0
  35. data/lib/forcast/controllers/controller/filtro.rb +48 -0
  36. data/lib/forcast/controllers/controller/login/controllers/base_controller.rb +135 -0
  37. data/lib/forcast/controllers/controller/login/controllers/login_controller.rb +38 -0
  38. data/lib/forcast/controllers/controller/login/login.rb +71 -0
  39. data/lib/forcast/controllers/controller/login_all.rb +1 -0
  40. data/lib/forcast/controllers/controller/paper_trail/paper_trail.rb +21 -0
  41. data/lib/forcast/controllers/controller/paper_trail_all.rb +1 -0
  42. data/lib/forcast/controllers/controller/relacion.rb +157 -0
  43. data/lib/forcast/controllers/controller/rule_engine/action_engine.rb +92 -0
  44. data/lib/forcast/controllers/controller/rule_engine/controllers/action_logs_controller.rb +12 -0
  45. data/lib/forcast/controllers/controller/rule_engine/controllers/actions_controller.rb +10 -0
  46. data/lib/forcast/controllers/controller/rule_engine/controllers/pollings_controller.rb +13 -0
  47. data/lib/forcast/controllers/controller/rule_engine/controllers/rule_logs_controller.rb +12 -0
  48. data/lib/forcast/controllers/controller/rule_engine/controllers/rules_controller.rb +19 -0
  49. data/lib/forcast/controllers/controller/rule_engine/controllers/webhooks_controller.rb +27 -0
  50. data/lib/forcast/controllers/controller/rule_engine/polling_engine.rb +76 -0
  51. data/lib/forcast/controllers/controller/rule_engine/rule_controller.rb +27 -0
  52. data/lib/forcast/controllers/controller/rule_engine/rule_engine.rb +88 -0
  53. data/lib/forcast/controllers/controller/rule_engine/webhook_engine.rb +38 -0
  54. data/lib/forcast/controllers/controller/rule_engine_all.rb +5 -0
  55. data/lib/forcast/jobs/all.rb +2 -0
  56. data/lib/forcast/jobs/jobs_assets.rb +25 -0
  57. data/lib/forcast/jobs/jobs_wrapper.rb +25 -0
  58. data/lib/forcast/jobs/rule_engine/jobs_actions.rb +73 -0
  59. data/lib/forcast/jobs/rule_engine/jobs_pollings.rb +77 -0
  60. data/lib/forcast/jobs/rule_engine/jobs_webhooks.rb +54 -0
  61. data/lib/forcast/migrations/0_migracion_general.rb +44 -0
  62. data/lib/forcast/migrations/paper_trail/versions.rb +61 -0
  63. data/lib/forcast/migrations/rule_engine/action_logs.rb +15 -0
  64. data/lib/forcast/migrations/rule_engine/actions.rb +15 -0
  65. data/lib/forcast/migrations/rule_engine/pollings.rb +26 -0
  66. data/lib/forcast/migrations/rule_engine/rule_logs.rb +22 -0
  67. data/lib/forcast/migrations/rule_engine/rules.rb +27 -0
  68. data/lib/forcast/migrations/rule_engine/webhooks.rb +25 -0
  69. data/lib/forcast/models/all.rb +8 -0
  70. data/lib/forcast/models/asociar.rb +74 -0
  71. data/lib/forcast/models/busqueda.rb +17 -0
  72. data/lib/forcast/models/login/authorization.rb +37 -0
  73. data/lib/forcast/models/login/json_web_token.rb +15 -0
  74. data/lib/forcast/models/login/login.rb +26 -0
  75. data/lib/forcast/models/login_all.rb +2 -0
  76. data/lib/forcast/models/meta.rb +19 -0
  77. data/lib/forcast/models/modelo.rb +125 -0
  78. data/lib/forcast/models/models/meta.rb +6 -0
  79. data/lib/forcast/models/paper_trail/paper_trail.rb +13 -0
  80. data/lib/forcast/models/paper_trail_all.rb +1 -0
  81. data/lib/forcast/models/permitirtodo.rb +57 -0
  82. data/lib/forcast/models/rule_engine/action_engine.rb +19 -0
  83. data/lib/forcast/models/rule_engine/models/action.rb +41 -0
  84. data/lib/forcast/models/rule_engine/models/action_log.rb +40 -0
  85. data/lib/forcast/models/rule_engine/models/polling.rb +43 -0
  86. data/lib/forcast/models/rule_engine/models/rule.rb +44 -0
  87. data/lib/forcast/models/rule_engine/models/rule_log.rb +39 -0
  88. data/lib/forcast/models/rule_engine/models/webhook.rb +43 -0
  89. data/lib/forcast/models/rule_engine/polling_engine.rb +113 -0
  90. data/lib/forcast/models/rule_engine/rule.rb +62 -0
  91. data/lib/forcast/models/rule_engine/rule_engine.rb +137 -0
  92. data/lib/forcast/models/rule_engine/rule_scope.rb +35 -0
  93. data/lib/forcast/models/rule_engine/webhook_engine.rb +55 -0
  94. data/lib/forcast/models/rule_engine_all.rb +6 -0
  95. data/lib/forcast/routes/concerns/asociar.rb +15 -0
  96. data/lib/forcast/routes/concerns/buscar.rb +6 -0
  97. data/lib/forcast/routes/concerns/definitor.rb +3 -0
  98. data/lib/forcast/routes/concerns/modelo.rb +6 -0
  99. data/lib/forcast/routes/database.rb +4 -0
  100. data/lib/forcast/routes/login.rb +4 -0
  101. data/lib/forcast/routes/paper_trail/paper_trail.rb +3 -0
  102. data/lib/forcast/routes/rule_engine/rule.rb +5 -0
  103. data/lib/forcast/tasks/.giosaveZr0hbs +21 -0
  104. data/lib/forcast/tasks/.keep +0 -0
  105. data/lib/forcast/tasks/all.rb +16 -0
  106. data/lib/forcast/tasks/diagramas.rake +32 -0
  107. data/lib/forcast/tasks/documentation/documentation.rb +100 -0
  108. data/lib/forcast/tasks/env.rake +10 -0
  109. data/lib/forcast/tasks/git.rake +22 -0
  110. data/lib/forcast/tasks/indy/indy.rb +28 -0
  111. data/lib/forcast/tasks/logs.rake +13 -0
  112. data/lib/forcast/tasks/process.rake +18 -0
  113. data/lib/forcast/tasks/schema.rake +17 -0
  114. data/lib/forcast/tasks/schema/recips/action.rb +18 -0
  115. data/lib/forcast/tasks/schema/recips/controller.rb +29 -0
  116. data/lib/forcast/tasks/schema/recips/definitor.rb +38 -0
  117. data/lib/forcast/tasks/schema/recips/model.rb +43 -0
  118. data/lib/forcast/tasks/schema/recips/project.rb +19 -0
  119. data/lib/forcast/tasks/schema/recips/route.rb +9 -0
  120. data/lib/forcast/tasks/schema/recips/tmp/controller.rb +0 -0
  121. data/lib/forcast/tasks/schema/recips/tmp/model.rb +0 -0
  122. data/lib/forcast/tasks/schema/recips/tmp/model/.keep +0 -0
  123. data/lib/forcast/tasks/schema/rule_engine/rule_engine.rb +98 -0
  124. data/lib/forcast/tasks/schema/schema.rb +346 -0
  125. data/lib/forcast/tasks/test.rake +129 -0
  126. data/lib/forcast/tasks/utils.rake +68 -0
  127. data/lib/forcast/tasks/yard.rake +18 -0
  128. data/lib/forcast/utils/all.rb +4 -0
  129. data/lib/forcast/utils/email.rb +49 -0
  130. data/lib/forcast/utils/email/forcast/utils/email/layout/default.html.erb +3 -0
  131. data/lib/forcast/utils/email/forcast/utils/email/layout/default.text.erb +5 -0
  132. data/lib/forcast/utils/firebase.rb +60 -0
  133. data/lib/forcast/utils/firebase_database.rb +117 -0
  134. data/lib/forcast/utils/measure.rb +44 -0
  135. data/lib/forcast/utils/qvo.rb +141 -0
  136. data/lib/forcast/utils/server.rb +296 -0
  137. data/lib/forcast/utils/telegram.rb +82 -0
  138. data/lib/forcast/utils/thing.rb +180 -0
  139. data/lib/forcast/version.rb +15 -0
  140. data/lib/lib/backup.rb +42 -0
  141. data/lib/lib/deploy.sh +40 -0
  142. data/lib/lib/forcast_servidor_rails.sh +11 -0
  143. data/lib/lib/pg_generator.sh +10 -0
  144. data/lib/lib/production.rb +66 -0
  145. data/lib/lib/production/production.rb +30 -0
  146. data/lib/lib/systemctl_maker.rb +88 -0
  147. data/lib/lib/update.rb +100 -0
  148. data/production.rb +31 -0
  149. metadata +301 -0
@@ -0,0 +1,28 @@
1
+ module Forcast
2
+ module Application
3
+ module Utils
4
+
5
+ private
6
+
7
+ def limit_query
8
+
9
+ @limit = nil
10
+ @limit = params[:limit] if params[:limit].present?
11
+ @limit_nested = nil
12
+ @limit_nested = params[:limit_nested] if params[:limit_nested].present?
13
+ end
14
+
15
+ def params_present? (param)
16
+ true if params[param].present?
17
+ end
18
+
19
+ def abstract_controller (model)
20
+
21
+ controller_path.tableize.gsub!(controller_name, model+ "s_controller").classify.constantize
22
+
23
+ end
24
+
25
+
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,8 @@
1
+ require "forcast/controllers/controller/asociar"
2
+ require "forcast/controllers/controller/busqueda"
3
+ require "forcast/controllers/controller/filtro"
4
+ require "forcast/controllers/controller/relacion"
5
+ require "forcast/controllers/controller/definitor_all"
6
+ require "forcast/controllers/controller/rule_engine_all"
7
+ require "forcast/controllers/controller/paper_trail_all"
8
+ require "forcast/controllers/controller/login_all"
@@ -0,0 +1,121 @@
1
+ require 'active_support'
2
+
3
+ module Forcast
4
+ module Controller
5
+ module Asociar
6
+
7
+ extend ActiveSupport::Concern
8
+
9
+ included do
10
+
11
+ before_action :raise_error_asociar, only: [:ver_no_asociados_a, :ver_asociado_a, :asociar_a, :desasociar_de]
12
+ before_action :raise_error_agregar, only: [:agregar_asociado, :quitar_asociado]
13
+ ## Sobre escribre todos los metodos anteriores.... hay que buscar una forma de arreglarlo
14
+ ## Solucion por ahora es cambiar el nombre a los metodos
15
+ before_action :set_model_id_asociar, only: [:ver_asociado_a, :asociar_a, :agregar_asociado, :desasociar_de, :quitar_asociado]
16
+ end
17
+ #Collection
18
+ def ver_no_asociados_a
19
+
20
+ @response = model.no_asociados_a(@modelo + "_id")
21
+ json_response(@response.select(*params_permitidos_enviar),t("ok"))
22
+
23
+ end
24
+ #Member
25
+ def ver_asociado_a
26
+
27
+ @response = @model_id.ver_asociado(@modelo)
28
+ params_permitidos_enviar = abstract_controller(@modelo).new.send (:params_permitidos_enviar)
29
+ json_response(@response.select(*params_permitidos_enviar),t("ok"))
30
+
31
+ end
32
+
33
+ def asociar_a
34
+
35
+ raise Application::Error::General.new(t("error_relation_already_taken", param: params[:modelo])) unless @model_id.asociado_a?(@modelo+'_id', @modelo_id)
36
+ raise Application::Error::General.new(t("error_relation_model_id_doesnt_exist", param: params[:modelo])) unless @model_id.asociado_existe?(@modelo, @modelo_id)
37
+ @model_id.asociar_a(@modelo+'_id', @modelo_id)
38
+ json_response(@model_id.attributes.slice(*params_permitidos_enviar),t("ok"))
39
+
40
+ end
41
+
42
+ def desasociar_de
43
+
44
+ @model_id.desasociar_de(@modelo+'_id')
45
+ json_response(@model_id.attributes.slice(*params_permitidos_enviar),t("ok"))
46
+
47
+ end
48
+
49
+ def agregar_asociado
50
+
51
+ @response = []
52
+ @modelo_id.is_a?(Array) ? @modelo_id : @modelo_id = [@modelo_id]
53
+ @modelo_id.each do |modelo_id|
54
+ #raise Application::Error::General.new(t("error_relation_already_taken", param: [params[:modelo],modelo_id])) unless @model_id.agregar_asociado_a?(@modelo, modelo_id)
55
+ raise Application::Error::General.new(t("error_relation_model_id_doesnt_exist", param: [params[:modelo],modelo_id])) unless @model_id.asociado_existe?(@modelo,modelo_id)
56
+ @model_id.agregar_asociado(@modelo, modelo_id)
57
+ paso = c_to_m(@modelo).find(modelo_id)
58
+ params_permitidos_enviar = abstract_controller(@modelo).new.send (:params_permitidos_enviar)
59
+ @response.push(paso.attributes.slice(*params_permitidos_enviar))
60
+ end
61
+ json_response(@response,t("ok"))
62
+
63
+ end
64
+
65
+ def quitar_asociado
66
+
67
+ @response = []
68
+ @modelo_id.is_a?(Array) ? @modelo_id : @modelo_id = [@modelo_id]
69
+ @modelo_id.each do |modelo_id|
70
+ #raise Application::Error::General.new(t("error_relation_already_taken", param: [params[:modelo],modelo_id])) unless @model_id.agregar_asociado_a?(@modelo, modelo_id)
71
+ raise Application::Error::General.new(t("error_relation_model_id_doesnt_exist", param: [params[:modelo],modelo_id])) unless @model_id.asociado_existe?(@modelo,modelo_id)
72
+ @model_id.quitar_asociado(@modelo, modelo_id)
73
+ paso = c_to_m(@modelo).find(modelo_id)
74
+ params_permitidos_enviar = abstract_controller(@modelo).new.send (:params_permitidos_enviar)
75
+ @response.push(paso.attributes.slice(*params_permitidos_enviar))
76
+ end
77
+ json_response(@response,t("ok"))
78
+
79
+ end
80
+
81
+
82
+ def modelo_db
83
+
84
+ n = []
85
+ nn = []
86
+ model.reflect_on_all_associations(:has_many).each do |x|
87
+ n = n.push(x.name.to_s.classify)
88
+ end
89
+ model.reflect_on_all_associations(:belongs_to).each do |x|
90
+ nn = nn.push(x.name.to_s.classify)
91
+ end
92
+ rep = {model:model.name,belongs_to: nn, has_many: n}
93
+ json_response(rep,t("ok"))
94
+
95
+ end
96
+
97
+
98
+ def raise_error_asociar
99
+
100
+ raise Application::Error::General.new(t("error_relation", param: params[:modelo])) unless comprobar_relacion(:belongs_to, @modelo)
101
+ raise Application::Error::General.new(t("error_relation_not_permitted", param: params[:modelo])) unless model.params_permitidos_asociar.include?(@modelo+'_id')
102
+
103
+ end
104
+
105
+ def raise_error_agregar
106
+
107
+ raise Application::Error::General.new(t("error_relation", param: params[:modelo])) unless comprobar_relacion(:has_many, @modelo)
108
+ raise Application::Error::General.new(t("error_relation_not_permitted", param: params[:modelo])) unless model.params_permitidos_agregar.include?(@modelo+'_id')
109
+
110
+ end
111
+
112
+ def set_model_id_asociar
113
+
114
+ @model_id ||= model.find(params[:id])
115
+ end
116
+
117
+
118
+ end
119
+
120
+ end
121
+ end
@@ -0,0 +1,151 @@
1
+ module Forcast
2
+ module Controller
3
+ module Busqueda
4
+
5
+ def index
6
+ params[:dato] = true if params[:dato] == 'true'
7
+ params[:dato] = false if params[:dato] == 'false'
8
+ params[:contiene] = true if params[:dato] == 'true'
9
+ params[:contiene] = false if params[:dato] == 'false'
10
+
11
+ buscar_relaciones if params_present?('relacion') && !params_present?('buscar_por') && !params_present?('dato')
12
+ es_array_buscar_por_parametro_exacto if params_present?('buscar_por') && params_present?('dato')
13
+ es_array_buscar_por_parametro_contiene if params_present?('buscar_por') && params_present?('contiene')
14
+
15
+ super()
16
+ end
17
+
18
+ def show
19
+ buscar_relaciones if params_present?('relacion') && !params_present?('buscar_por') && !params_present?('dato')
20
+ super()
21
+ end
22
+
23
+ private
24
+
25
+ def es_array_buscar_por_parametro_exacto
26
+
27
+ buscar_por = params[:buscar_por]
28
+ dato = params[:dato]
29
+ buscar_por.is_a?(Array) ? array_buscar_por_parametro_exacto(buscar_por,dato) : buscar_por_parametro_exacto(buscar_por,dato)
30
+
31
+ end
32
+
33
+ def es_array_buscar_por_parametro_contiene
34
+
35
+ buscar_por = params[:buscar_por]
36
+ contiene = params[:contiene]
37
+ buscar_por.is_a?(Array) ? array_buscar_por_parametro_contiene(buscar_por,contiene) : buscar_por_parametro_contiene(buscar_por,contiene)
38
+
39
+ end
40
+
41
+ def array_buscar_por_parametro_exacto (buscar_por, dato)
42
+ raise Application::Error::General.new(t("error_same_length_array")) unless buscar_por.length == dato.length
43
+ response = []
44
+ buscar_por.each_with_index do |b,index|
45
+ response[index] = buscar_por_parametro_exacto(b,dato[index])
46
+ end
47
+ paso = []
48
+ response = response.inject(:&) if params[:join].to_s == 'false'
49
+ response = [response] unless response.is_a?(Array)
50
+ response.each_with_index do |rr,index|
51
+ rr = [rr] unless rr.is_a?(Array)
52
+ rr.each do |r|
53
+ paso.push(r)
54
+ end
55
+ end
56
+ @response = paso.uniq
57
+ end
58
+
59
+ def array_buscar_por_parametro_contiene (buscar_por, contiene)
60
+ raise Application::Error::General.new(t("error_same_length_array")) unless buscar_por.length == contiene.length
61
+ response = []
62
+ buscar_por.each_with_index do |b,index|
63
+ response[index] = buscar_por_parametro_contiene(b,contiene[index])
64
+ end
65
+ paso = []
66
+ response = response.inject(:&) if params[:join].to_s == 'false'
67
+ response = [response] unless response.is_a?(Array)
68
+ response.each do |rr|
69
+ rr = [rr] unless rr.is_a?(Array)
70
+ rr.each do |r|
71
+ paso.push(r)
72
+ end
73
+ end
74
+ @response = paso.uniq
75
+ end
76
+
77
+ def buscar_por_parametro_exacto (buscar_por, dato)
78
+ raise Application::Error::General.new(t("error_search_param", param: buscar_por)) unless params_permitidos_buscar.include?(buscar_por)
79
+ raise Application::Error::General.new(t("error_find_param", param: buscar_por)) unless @model.parametro_existe?(buscar_por,dato)
80
+ resp = @model.buscar_parametro_exacto_scope(buscar_por,dato).limit(@limit).order('id desc').select(*params_permitidos_enviar)
81
+ params_present?('relacion') ? @response = buscar_relacion(resp,params[:relacion]) : @response = resp
82
+ end
83
+
84
+ def buscar_por_parametro_contiene (buscar_por, contiene)
85
+ raise Application::Error::General.new(t("error_search_param", param: buscar_por)) unless params_permitidos_buscar.include?(buscar_por)
86
+ resp = @model.buscar_parametro_contiene_scope(buscar_por,contiene).limit(@limit).order('id desc').select(*params_permitidos_enviar)
87
+ params_present?('relacion') ? @response = buscar_relacion(resp,params[:relacion]) : @response = resp
88
+ end
89
+
90
+ def buscar_relaciones
91
+ resp = @model.all if @model
92
+ resp = [@model_id] if @model_id
93
+ @response = buscar_relacion(resp,params[:relacion])
94
+ end
95
+
96
+ #Ver si es posible mejorar este metodo, se podria realizar una unica consulta
97
+ #a la DB para tener todos los registro de toda la tabla
98
+ def buscar_relacion(resp,rel)
99
+ return buscar_relacion_array(resp,rel) if rel.is_a?(Array)
100
+ #p Api::CamarasController.name.tableize.gsub!('camaras', 'hubs').classify
101
+ comprobar_relacion_buscar(rel)
102
+ array = []
103
+
104
+ resp.each do |x|
105
+ array.push(
106
+ {
107
+ controller_name.classify => [x.attributes.slice(*params_permitidos_enviar)],
108
+ rel.classify => x.send(rel).limit(@limit_nested).select(*@params_permitidos_enviar)
109
+ }
110
+ )
111
+ end
112
+ return array
113
+ end
114
+
115
+ def buscar_relacion_array(resp,rels)
116
+
117
+ array = [Hash.new]
118
+ rels.each do |rel|
119
+ i = 0
120
+ comprobar_relacion_buscar(rel)
121
+ resp.each_with_index do |x,index|
122
+ array[index] = {} if array[index].nil?
123
+ array[index].merge!({controller_name.classify => [x.attributes.slice(*params_permitidos_enviar)]}) if i == 0
124
+ array[index].merge!({
125
+ rel.classify => x.send(rel)
126
+ .limit(@limit_nested)
127
+ .select(*@params_permitidos_enviar)
128
+ })
129
+
130
+ end
131
+ i += 1
132
+
133
+ end
134
+
135
+ return array
136
+
137
+ end
138
+
139
+ def comprobar_relacion_buscar (rel)
140
+ begin
141
+ @params_permitidos_enviar = abstract_controller(rel).new.send (:params_permitidos_enviar)
142
+ rescue NameError => e
143
+ raise Application::Error::General.new(t("error_relation_param", param: rel))
144
+ end
145
+ raise Application::Error::General.new(t("error_relation_param", param: rel)) unless comprobar_relacion(:has_many, rel)
146
+
147
+ end
148
+
149
+ end
150
+ end
151
+ end
@@ -0,0 +1,322 @@
1
+ module Forcast
2
+ module Controller
3
+ module Definitor
4
+ def definitor
5
+ raise Application::Error::General.new(t("operation_notValid")) unless permitted_definition.include?(@operation)
6
+ if @operation == 'put' || @operation == 'patch' || @operation == 'edit'
7
+ @operation = 'put_or_patch'
8
+ end
9
+ @response = send("#{@operation}_view_definitor")
10
+ json_response(@response, 'ok')
11
+ end
12
+
13
+ def permitted_definition
14
+ %w[create show put patch edit delete wizard info info_table card association webhook]
15
+ end
16
+
17
+ def selected_definitions(*selected)
18
+ all_definitions.slice(*selected)
19
+ end
20
+
21
+ def excluded_definitions(*selected)
22
+ all_definitions.except(*selected)
23
+ end
24
+
25
+ def selected_serializer_definitions(*selected)
26
+ serializer(all_definitions.slice(*selected))
27
+ end
28
+
29
+ def selected_serializer_definitions_mongo(*selected)
30
+ serializer_mongo(all_definitions.slice(*selected))
31
+ end
32
+
33
+
34
+ def excluded_serializer_definitions(*selected)
35
+ serializer(all_definitions.except(*selected))
36
+ end
37
+
38
+ def all_serializer_definitions
39
+ serializer(all_definitions)
40
+ end
41
+
42
+ def all_definitions(name_controller = nil)
43
+ name_controller = controller_name if name_controller.nil?
44
+ model = name_controller.classify.constantize
45
+ attrs = model.attribute_names.map { |n| [n.to_sym, model.type_for_attribute(n).type] }.to_h
46
+ model.reflect_on_all_associations(:belongs_to).each do |relation|
47
+ relation = relation.name.to_s + '_id'
48
+ attrs[relation.to_sym] = 'relation'
49
+ end
50
+ attrs
51
+ end
52
+
53
+ def selected_info_serializer_definitions(*selected)
54
+ serializer_info(all_definitions.slice(*selected))
55
+ end
56
+
57
+ def serializer_info(object)
58
+ definitor = []
59
+ keys = object.keys
60
+ keys.each do |key|
61
+ type = object[key]
62
+ result = send("definitor_#{type}", key.to_s, type)
63
+ sender = {key: key, type: result[:typeAttribute], label: result[:label]}
64
+ definitor.push(sender)
65
+ end
66
+ definitor
67
+ end
68
+
69
+ def selected_association_serializer_definitions(*selected)
70
+ serializer_association(all_definitions.slice(*selected))
71
+ end
72
+
73
+ def serializer_association(object)
74
+ definitor = []
75
+ keys = object.keys.map {|e| e.to_s.gsub('_id', 's')}
76
+ sender = {type: "select", label: "Resource",
77
+ name: "resource", required: false, disabled: false,
78
+ options: keys
79
+ }
80
+ definitor.push(sender)
81
+ keys.each do |key|
82
+ model = key[0...-1].classify.constantize
83
+ args =[:id]
84
+ if model.attribute_names.include?('name')
85
+ args.push(:name)
86
+ elsif model.attribute_names.include?('serie')
87
+ args.push(:serie)
88
+ elsif model.attribute_names.include?('model')
89
+ args.push(:model)
90
+ end
91
+ options = model.all.pluck(*args).map { |e| e.size == 2 ? {id: e[0], label: e[1]} : {id: e} }
92
+ sender = {type: "dataselect", label: "ID",
93
+ name: key[0...-1]+'_id', required: false, disabled: true,
94
+ options: options
95
+ }
96
+ definitor.push(sender)
97
+ end
98
+ definitor
99
+ end
100
+
101
+ def selected_association_serializer_definitions_mongo(*selected)
102
+ serializer_association_mongo(all_definitions.slice(*selected))
103
+ end
104
+
105
+ def serializer_association_mongo(object)
106
+ definitor = []
107
+ keys = object.keys.map {|e| e.to_s.gsub('_id', 's')}
108
+ sender = {type: "select", label: "Resource",
109
+ name: "resource", required: false, disabled: false,
110
+ options: keys
111
+ }
112
+ definitor.push(sender)
113
+ keys.each do |key|
114
+ model = (key[0...-1]+'_mongo').classify.constantize
115
+ args =[:_id]
116
+ if model.attribute_names.include?('name')
117
+ args.push(:name)
118
+ elsif model.attribute_names.include?('serie')
119
+ args.push(:serie)
120
+ elsif model.attribute_names.include?('model')
121
+ args.push(:model)
122
+ end
123
+ options = model.all.pluck(*args).map { |e| e.is_a?(Array) ? {id: e[0].to_s, label: e[0].to_s.last(5)+' - '+e[1].to_s} : {id: e.to_s, label: e.to_s.last(5)+' - '+model.to_s } }
124
+ sender = {type: "dataselect", label: "ID",
125
+ name: key[0...-1]+'_id', required: false, disabled: true,
126
+ options: options
127
+ }
128
+ definitor.push(sender)
129
+ end
130
+ definitor
131
+ end
132
+
133
+ def serializer(object)
134
+ definitor = []
135
+ object.delete(:id) if params[:operation] == 'create'
136
+ keys = object.keys
137
+ keys.each do |key|
138
+ type = object[key]
139
+ result = send("definitor_#{type}", key.to_s, type)
140
+ definitor.push(result)
141
+ end
142
+ definitor
143
+ end
144
+
145
+ def serializer_mongo(object)
146
+ definitor = []
147
+ object.delete(:id) if params[:operation] == 'create'
148
+ keys = object.keys
149
+ keys.each do |key|
150
+ type = object[key]
151
+ result = send("definitor_#{type}", key.to_s, type)
152
+ result = send("definitor_#{type}_mongo", key.to_s, type) if type == 'relation'
153
+ definitor.push(result)
154
+ end
155
+ definitor
156
+ end
157
+
158
+ def constructor(key, type)
159
+ result = Hash.new
160
+ result[:label] = key.titleize
161
+ result[:typeAttribute] = type
162
+ result[:name] = key
163
+ result[:required] = model.parametros_necesario_create.include?(key)
164
+ yield(result)
165
+ result
166
+ end
167
+
168
+ def definitor_datetime(key, type)
169
+ constructor(key, type) do |result|
170
+ result[:type] = 'date'
171
+ end
172
+ end
173
+
174
+ def definitor_decimal(key, type)
175
+ constructor(key, type) do |result|
176
+ result[:type] = 'input'
177
+ result[:inputType] = 'number'
178
+ end
179
+ end
180
+
181
+ def definitor_relation(key, type)
182
+ constructor(key, type) do |result|
183
+ controller_name = key.gsub('_id', '')
184
+ model = controller_name.singularize.classify.constantize
185
+ args =[:id]
186
+ if model.attribute_names.include?('name')
187
+ args.push(:name)
188
+ elsif model.attribute_names.include?('serie')
189
+ args.push(:serie)
190
+ elsif model.attribute_names.include?('model')
191
+ args.push(:model)
192
+ end
193
+ options = model.all.pluck(*args).map { |e| e.size == 2 ? {id: e[0], label: e[1]} : {id: e, label: controller_name.singularize.classify } }
194
+ result[:type] = "dataselect"
195
+ result[:label] = controller_name.singularize.classify
196
+ result[:disabled] = true
197
+ result[:options] = options
198
+ result[:typeAttribute] = "string"
199
+ end
200
+ end
201
+
202
+ def definitor_relation_mongo(key, type)
203
+ constructor(key, type) do |result|
204
+ controller_name = key.gsub('_id', '') + '_mongo'
205
+ model = (controller_name).singularize.classify.constantize
206
+ args =[:id]
207
+ if model.attribute_names.include?('name')
208
+ args.push(:name)
209
+ elsif model.attribute_names.include?('serie')
210
+ args.push(:serie)
211
+ elsif model.attribute_names.include?('model')
212
+ args.push(:model)
213
+ end
214
+ options = model.all.pluck(*args).map { |e| e.is_a?(Array) ? {id: e[0].to_s, label: e[0].to_s.last(5)+' - '+e[1].to_s} : {id: e.to_s, label: e.to_s.last(5)+' - '+model.to_s } }
215
+ result[:type] = "dataselect"
216
+ result[:label] = key.singularize.classify
217
+ result[:disabled] = true
218
+ result[:options] = options
219
+ end
220
+ end
221
+
222
+ def definitor_integer(key, type)
223
+ constructor(key, type) do |result|
224
+ result[:type] = 'input'
225
+ result[:inputType] = 'number'
226
+ end
227
+ end
228
+
229
+ def definitor_password(key, type)
230
+ constructor(key, type) do |result|
231
+ result[:type] = 'input'
232
+ result[:inputType] = 'password'
233
+ end
234
+ end
235
+
236
+ def definitor_random_string(key, type)
237
+ constructor(key, type) do |result|
238
+ random_string_type(result)
239
+ end
240
+ end
241
+
242
+ def definitor_string(key, type)
243
+ constructor(key, type) do |result|
244
+ input_type(result)
245
+ end
246
+ end
247
+
248
+ def definitor_text(key, type)
249
+ constructor(key, type) do |result|
250
+ input_type(result)
251
+ end
252
+ end
253
+
254
+ def definitor_boolean(key, type)
255
+ constructor(key, type) do |result|
256
+ result[:type] = 'checkbutton'
257
+ end
258
+ end
259
+
260
+ def definitor_json(key, type)
261
+ constructor(key, type) do |result|
262
+ result[:key] = key
263
+ result[:type] = 'json'
264
+ result[:inputType] = 'text'
265
+ result[:label] = key.classify
266
+ result[:typeAttribute] = 'string'
267
+ result[:name] = key.to_s
268
+ result[:meta] = {
269
+ selectItem: {
270
+ type: 'select',
271
+ label: key.classify,
272
+ name: key.to_s+'Key',
273
+ required: false,
274
+ options: []
275
+ },
276
+ areaItem: {
277
+ type: 'input',
278
+ inputType: 'text',
279
+ label: key.classify,
280
+ typeAttribute: 'string',
281
+ name: key.to_s+'Value',
282
+ required: false,
283
+ }
284
+ }
285
+ end
286
+ end
287
+
288
+ def definitor_with_options(type, object, array, value)
289
+ object = all_definitions.slice(object)
290
+ key = object.keys.first.to_s
291
+ definition_result = constructor(key, object[key]) do |result|
292
+ send("#{type}_type", result, array, value)
293
+ end
294
+ [definition_result]
295
+ end
296
+
297
+ def random_string_type(result)
298
+ list = ['radiobutton','input','select']
299
+ number = rand(0...3)
300
+ type = list[number]
301
+ send("#{type}_type", result, ['Opt1', 'Opt2'], 'Opt1')
302
+ end
303
+
304
+ def select_type(result, array, value)
305
+ result[:type] = 'select'
306
+ result[:options] = array
307
+ result[:value] = value
308
+ end
309
+
310
+ def input_type(result, array='', value='')
311
+ result[:type] = 'input'
312
+ result[:inputType] = 'text'
313
+ end
314
+
315
+ def radiobutton_type(result, array, value)
316
+ result[:type] = 'radiobutton'
317
+ result[:options] = array
318
+ result[:value] = value
319
+ end
320
+ end
321
+ end
322
+ end