forcast 0.0.110

Sign up to get free protection for your applications and to get access to all the features.
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