forcast 0.0.110
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/COPYRIGHTS +11 -0
- data/Gemfile +22 -0
- data/Gemfile.lock +166 -0
- data/PENDIENTES +39 -0
- data/README.md +35 -0
- data/Rakefile +7 -0
- data/VERSION +1 -0
- data/bin/console +14 -0
- data/bin/rake +28 -0
- data/bin/setup +8 -0
- data/forcast.gemspec +73 -0
- data/lib/forcast.rb +5 -0
- data/lib/forcast/controllers/all.rb +2 -0
- data/lib/forcast/controllers/application/all.rb +12 -0
- data/lib/forcast/controllers/application/crud.rb +91 -0
- data/lib/forcast/controllers/application/database.rb +34 -0
- data/lib/forcast/controllers/application/error.rb +18 -0
- data/lib/forcast/controllers/application/exception_handler.rb +25 -0
- data/lib/forcast/controllers/application/json.rb +83 -0
- data/lib/forcast/controllers/application/locale.rb +30 -0
- data/lib/forcast/controllers/application/log.rb +22 -0
- data/lib/forcast/controllers/application/login.rb +41 -0
- data/lib/forcast/controllers/application/meta.rb +61 -0
- data/lib/forcast/controllers/application/model.rb +17 -0
- data/lib/forcast/controllers/application/permitirtodo.rb +27 -0
- data/lib/forcast/controllers/application/utils.rb +28 -0
- data/lib/forcast/controllers/controller/all.rb +8 -0
- data/lib/forcast/controllers/controller/asociar.rb +121 -0
- data/lib/forcast/controllers/controller/busqueda.rb +151 -0
- data/lib/forcast/controllers/controller/definitor/definitor.rb +322 -0
- data/lib/forcast/controllers/controller/definitor/definitor_page.rb +40 -0
- data/lib/forcast/controllers/controller/definitor_all.rb +2 -0
- data/lib/forcast/controllers/controller/filtro.rb +48 -0
- data/lib/forcast/controllers/controller/login/controllers/base_controller.rb +135 -0
- data/lib/forcast/controllers/controller/login/controllers/login_controller.rb +38 -0
- data/lib/forcast/controllers/controller/login/login.rb +71 -0
- data/lib/forcast/controllers/controller/login_all.rb +1 -0
- data/lib/forcast/controllers/controller/paper_trail/paper_trail.rb +21 -0
- data/lib/forcast/controllers/controller/paper_trail_all.rb +1 -0
- data/lib/forcast/controllers/controller/relacion.rb +157 -0
- data/lib/forcast/controllers/controller/rule_engine/action_engine.rb +92 -0
- data/lib/forcast/controllers/controller/rule_engine/controllers/action_logs_controller.rb +12 -0
- data/lib/forcast/controllers/controller/rule_engine/controllers/actions_controller.rb +10 -0
- data/lib/forcast/controllers/controller/rule_engine/controllers/pollings_controller.rb +13 -0
- data/lib/forcast/controllers/controller/rule_engine/controllers/rule_logs_controller.rb +12 -0
- data/lib/forcast/controllers/controller/rule_engine/controllers/rules_controller.rb +19 -0
- data/lib/forcast/controllers/controller/rule_engine/controllers/webhooks_controller.rb +27 -0
- data/lib/forcast/controllers/controller/rule_engine/polling_engine.rb +76 -0
- data/lib/forcast/controllers/controller/rule_engine/rule_controller.rb +27 -0
- data/lib/forcast/controllers/controller/rule_engine/rule_engine.rb +88 -0
- data/lib/forcast/controllers/controller/rule_engine/webhook_engine.rb +38 -0
- data/lib/forcast/controllers/controller/rule_engine_all.rb +5 -0
- data/lib/forcast/jobs/all.rb +2 -0
- data/lib/forcast/jobs/jobs_assets.rb +25 -0
- data/lib/forcast/jobs/jobs_wrapper.rb +25 -0
- data/lib/forcast/jobs/rule_engine/jobs_actions.rb +73 -0
- data/lib/forcast/jobs/rule_engine/jobs_pollings.rb +77 -0
- data/lib/forcast/jobs/rule_engine/jobs_webhooks.rb +54 -0
- data/lib/forcast/migrations/0_migracion_general.rb +44 -0
- data/lib/forcast/migrations/paper_trail/versions.rb +61 -0
- data/lib/forcast/migrations/rule_engine/action_logs.rb +15 -0
- data/lib/forcast/migrations/rule_engine/actions.rb +15 -0
- data/lib/forcast/migrations/rule_engine/pollings.rb +26 -0
- data/lib/forcast/migrations/rule_engine/rule_logs.rb +22 -0
- data/lib/forcast/migrations/rule_engine/rules.rb +27 -0
- data/lib/forcast/migrations/rule_engine/webhooks.rb +25 -0
- data/lib/forcast/models/all.rb +8 -0
- data/lib/forcast/models/asociar.rb +74 -0
- data/lib/forcast/models/busqueda.rb +17 -0
- data/lib/forcast/models/login/authorization.rb +37 -0
- data/lib/forcast/models/login/json_web_token.rb +15 -0
- data/lib/forcast/models/login/login.rb +26 -0
- data/lib/forcast/models/login_all.rb +2 -0
- data/lib/forcast/models/meta.rb +19 -0
- data/lib/forcast/models/modelo.rb +125 -0
- data/lib/forcast/models/models/meta.rb +6 -0
- data/lib/forcast/models/paper_trail/paper_trail.rb +13 -0
- data/lib/forcast/models/paper_trail_all.rb +1 -0
- data/lib/forcast/models/permitirtodo.rb +57 -0
- data/lib/forcast/models/rule_engine/action_engine.rb +19 -0
- data/lib/forcast/models/rule_engine/models/action.rb +41 -0
- data/lib/forcast/models/rule_engine/models/action_log.rb +40 -0
- data/lib/forcast/models/rule_engine/models/polling.rb +43 -0
- data/lib/forcast/models/rule_engine/models/rule.rb +44 -0
- data/lib/forcast/models/rule_engine/models/rule_log.rb +39 -0
- data/lib/forcast/models/rule_engine/models/webhook.rb +43 -0
- data/lib/forcast/models/rule_engine/polling_engine.rb +113 -0
- data/lib/forcast/models/rule_engine/rule.rb +62 -0
- data/lib/forcast/models/rule_engine/rule_engine.rb +137 -0
- data/lib/forcast/models/rule_engine/rule_scope.rb +35 -0
- data/lib/forcast/models/rule_engine/webhook_engine.rb +55 -0
- data/lib/forcast/models/rule_engine_all.rb +6 -0
- data/lib/forcast/routes/concerns/asociar.rb +15 -0
- data/lib/forcast/routes/concerns/buscar.rb +6 -0
- data/lib/forcast/routes/concerns/definitor.rb +3 -0
- data/lib/forcast/routes/concerns/modelo.rb +6 -0
- data/lib/forcast/routes/database.rb +4 -0
- data/lib/forcast/routes/login.rb +4 -0
- data/lib/forcast/routes/paper_trail/paper_trail.rb +3 -0
- data/lib/forcast/routes/rule_engine/rule.rb +5 -0
- data/lib/forcast/tasks/.giosaveZr0hbs +21 -0
- data/lib/forcast/tasks/.keep +0 -0
- data/lib/forcast/tasks/all.rb +16 -0
- data/lib/forcast/tasks/diagramas.rake +32 -0
- data/lib/forcast/tasks/documentation/documentation.rb +100 -0
- data/lib/forcast/tasks/env.rake +10 -0
- data/lib/forcast/tasks/git.rake +22 -0
- data/lib/forcast/tasks/indy/indy.rb +28 -0
- data/lib/forcast/tasks/logs.rake +13 -0
- data/lib/forcast/tasks/process.rake +18 -0
- data/lib/forcast/tasks/schema.rake +17 -0
- data/lib/forcast/tasks/schema/recips/action.rb +18 -0
- data/lib/forcast/tasks/schema/recips/controller.rb +29 -0
- data/lib/forcast/tasks/schema/recips/definitor.rb +38 -0
- data/lib/forcast/tasks/schema/recips/model.rb +43 -0
- data/lib/forcast/tasks/schema/recips/project.rb +19 -0
- data/lib/forcast/tasks/schema/recips/route.rb +9 -0
- data/lib/forcast/tasks/schema/recips/tmp/controller.rb +0 -0
- data/lib/forcast/tasks/schema/recips/tmp/model.rb +0 -0
- data/lib/forcast/tasks/schema/recips/tmp/model/.keep +0 -0
- data/lib/forcast/tasks/schema/rule_engine/rule_engine.rb +98 -0
- data/lib/forcast/tasks/schema/schema.rb +346 -0
- data/lib/forcast/tasks/test.rake +129 -0
- data/lib/forcast/tasks/utils.rake +68 -0
- data/lib/forcast/tasks/yard.rake +18 -0
- data/lib/forcast/utils/all.rb +4 -0
- data/lib/forcast/utils/email.rb +49 -0
- data/lib/forcast/utils/email/forcast/utils/email/layout/default.html.erb +3 -0
- data/lib/forcast/utils/email/forcast/utils/email/layout/default.text.erb +5 -0
- data/lib/forcast/utils/firebase.rb +60 -0
- data/lib/forcast/utils/firebase_database.rb +117 -0
- data/lib/forcast/utils/measure.rb +44 -0
- data/lib/forcast/utils/qvo.rb +141 -0
- data/lib/forcast/utils/server.rb +296 -0
- data/lib/forcast/utils/telegram.rb +82 -0
- data/lib/forcast/utils/thing.rb +180 -0
- data/lib/forcast/version.rb +15 -0
- data/lib/lib/backup.rb +42 -0
- data/lib/lib/deploy.sh +40 -0
- data/lib/lib/forcast_servidor_rails.sh +11 -0
- data/lib/lib/pg_generator.sh +10 -0
- data/lib/lib/production.rb +66 -0
- data/lib/lib/production/production.rb +30 -0
- data/lib/lib/systemctl_maker.rb +88 -0
- data/lib/lib/update.rb +100 -0
- data/production.rb +31 -0
- metadata +301 -0
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'csv'
|
3
|
+
|
4
|
+
|
5
|
+
namespace :test do
|
6
|
+
|
7
|
+
desc 'Generar los test en base a los archivos del controller y model'
|
8
|
+
task :generator, [:ins] do |task, option|
|
9
|
+
case option[:ins]
|
10
|
+
|
11
|
+
when 'controller'
|
12
|
+
Rake::Task["test:generator_model"].invoke
|
13
|
+
when 'model'
|
14
|
+
Rake::Task["test:generator_controller"].invoke
|
15
|
+
when 'all'
|
16
|
+
Rake::Task["test:generator_controller"].invoke
|
17
|
+
Rake::Task["test:generator_model"].invoke
|
18
|
+
else
|
19
|
+
p "Input no valido [controller,model,all]"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
task :generator_model do
|
23
|
+
|
24
|
+
files = Dir.entries(Rails.root.join("app/models")).select {|f| !File.directory? f}
|
25
|
+
files.each do |file|
|
26
|
+
model = File.basename(file,File.extname(file))
|
27
|
+
sh "rails generate rspec:model #{model}"
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
task :generator_controller do
|
32
|
+
|
33
|
+
files = Dir.entries(Rails.root.join("app/controllers/api")).select {|f| !File.directory? f}
|
34
|
+
files.each do |file|
|
35
|
+
controller = File.basename(file,File.extname(file)).split("_controller")[0]
|
36
|
+
sh "rails generate rspec:controller api::#{controller}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
task :generator_request do
|
40
|
+
sh "rake routes > lib/tasks/tmp/routes.txt "
|
41
|
+
verbs = ["GET", "POST", "PUT", "PATCH", "DELETE"]
|
42
|
+
data = Hash.new { |h, k| h[k] = Array.new }
|
43
|
+
data2 = []
|
44
|
+
file = "lib/tasks/tmp/routes.txt"
|
45
|
+
File.open(file, "r") do |f|
|
46
|
+
f.each_line.with_index do |line, index|
|
47
|
+
next if index == 0
|
48
|
+
l = line.split(" ")
|
49
|
+
l.insert(0, '') if verbs.include?(l[0])
|
50
|
+
l[2] = l[2].split('(.:format)')[0]
|
51
|
+
paso = l[2].split('/')[2]
|
52
|
+
data[paso].push({ruta: l[2], metodo: l[1]})
|
53
|
+
data2.push(l[2]+' '+l[1])
|
54
|
+
end
|
55
|
+
end
|
56
|
+
File.open(file, "w") do |f|
|
57
|
+
data2.each do |l|
|
58
|
+
f.puts(l)
|
59
|
+
end
|
60
|
+
f.close
|
61
|
+
end
|
62
|
+
data.each_with_index do |array,index|
|
63
|
+
key = data.keys[index]
|
64
|
+
next if key == nil
|
65
|
+
sh "rails generate rspec:request #{key}"
|
66
|
+
file = ("spec/requests/tmp/#{key}.rb")
|
67
|
+
File.open(file, "w") do |f|
|
68
|
+
f.write("object = ")
|
69
|
+
f.write(array)
|
70
|
+
f.close
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
desc 'Corre los test del modelo'
|
78
|
+
task :model, [:tasks] do |task, option|
|
79
|
+
|
80
|
+
if option[:tasks]
|
81
|
+
arr = option[:tasks].split(':')
|
82
|
+
arr.each do |ar|
|
83
|
+
sh "rspec spec/models/#{ar}_spec.rb"
|
84
|
+
end
|
85
|
+
else
|
86
|
+
sh "rspec --pattern spec/models/*_spec.rb"
|
87
|
+
#No se cae con los errores
|
88
|
+
# files = Dir.entries(Rails.root.join("spec/models")).select {|f| !File.directory? f}
|
89
|
+
# files.each do |file|
|
90
|
+
# sh "rspec spec/models/#{file}"
|
91
|
+
# end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
desc 'Corre los test del controllador'
|
96
|
+
task :controller, [:tasks, :skip_e] do |task, option|
|
97
|
+
|
98
|
+
if option[:tasks]
|
99
|
+
arr = option[:tasks].split(':')
|
100
|
+
arr.each do |ar|
|
101
|
+
sh "rspec spec/controllers/api/#{ar}_controller_spec.rb"
|
102
|
+
end
|
103
|
+
else
|
104
|
+
sh "rspec --pattern spec/controllers/api/*_spec.rb"
|
105
|
+
#No se cae con los errores
|
106
|
+
# files = Dir.entries(Rails.root.join("spec/controllers/api")).select {|f| !File.directory? f}
|
107
|
+
# files.each do |file|
|
108
|
+
# sh "rspec spec/controllers/api/#{file}"
|
109
|
+
# end
|
110
|
+
end
|
111
|
+
|
112
|
+
end
|
113
|
+
|
114
|
+
desc 'Corre los test de request'
|
115
|
+
task :request, [:tasks, :skip_e] do |task, option|
|
116
|
+
|
117
|
+
if option[:tasks]
|
118
|
+
arr = option[:tasks].split(':')
|
119
|
+
arr.each do |ar|
|
120
|
+
sh "rspec spec/requests/api/#{ar}_spec.rb"
|
121
|
+
end
|
122
|
+
else
|
123
|
+
sh "rspec --pattern spec/requests/api/*_spec.rb"
|
124
|
+
end
|
125
|
+
|
126
|
+
end
|
127
|
+
|
128
|
+
|
129
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'rake'
|
2
|
+
require 'csv'
|
3
|
+
|
4
|
+
namespace :utils do
|
5
|
+
|
6
|
+
task :routes do
|
7
|
+
sh "rake routes > lib/tasks/tmp/routes.xls "
|
8
|
+
verbs = ["GET", "POST", "PATCH","PUT", "DELETE"]
|
9
|
+
data = Hash.new { |h, k| h[k] = Array.new }
|
10
|
+
data2 = []
|
11
|
+
file = "lib/tasks/tmp/routes.xls"
|
12
|
+
File.open(file, "r") do |f|
|
13
|
+
f.each_line.with_index do |line, index|
|
14
|
+
next if index == 0
|
15
|
+
l = line.split(" ")
|
16
|
+
l.insert(0, '') if verbs.include?(l[0])
|
17
|
+
l[2] = l[2].split('(.:format)')[0]
|
18
|
+
paso = l[2].split('/')[2]
|
19
|
+
|
20
|
+
ruta = l[2]
|
21
|
+
metodo = l[1]
|
22
|
+
next if metodo == 'PATCH'
|
23
|
+
#DEFAULT
|
24
|
+
parametros = ['buscar_por', 'contiene', 'dato', 'relacion','limit'] if metodo == 'GET'
|
25
|
+
parametros = ['variables de creación que estan en el modelo'] if metodo == 'POST'
|
26
|
+
parametros = ['variable', 'dato'] if metodo == 'PUT'
|
27
|
+
parametros = [] if metodo == 'DELETE'
|
28
|
+
#Dependiendo de la ruta
|
29
|
+
parametros = ['modelo'] if ruta.include?('/api/login') && metodo == 'POST'
|
30
|
+
parametros = ['modelo', 'modelo_id'] if metodo == 'PUT' &&
|
31
|
+
ruta.include?('asociar_a') ||
|
32
|
+
ruta.include?('agregar_asociado') ||
|
33
|
+
ruta.include?('desasociar_de') ||
|
34
|
+
ruta.include?('quitar_asociado')
|
35
|
+
parametros = [] if ruta.include?('/*path') || ruta.include?('/apidocs')
|
36
|
+
parametros = [] if ruta.include?('modelo_db')
|
37
|
+
|
38
|
+
#DEFAULT
|
39
|
+
respuesta = {'message' => 'Mensaje de respuesta',
|
40
|
+
'object' => '{Objecto de la respuesta}',
|
41
|
+
'status'=> 'Status: 200'}
|
42
|
+
#Dependiendo de la ruta
|
43
|
+
respuesta = 'Documentación API ' if ruta == '/apidocs'
|
44
|
+
respuesta = '' if ruta == '/*path'
|
45
|
+
|
46
|
+
#DEFAULT
|
47
|
+
error = {'message' => 'Mensaje de error',
|
48
|
+
'status'=> 'Status: 400'}
|
49
|
+
#Dependiendo de la ruta
|
50
|
+
error = '' if ruta == '/apidocs'
|
51
|
+
#DEFAULT
|
52
|
+
descripcion = ''
|
53
|
+
#Dependiendo de la ruta
|
54
|
+
descripcion = 'Muestra el esquema del recurso' if ruta.include?('modelo_db')
|
55
|
+
|
56
|
+
data2.push(ruta.to_s+';'+metodo.to_s+';'+parametros.to_s+';'+respuesta.to_s+';'+error.to_s+';'+descripcion.to_s)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
File.open(file, "w") do |f|
|
60
|
+
f.puts('Ruta;Metodo;Parametros;Respuesta;Error;Descripción')
|
61
|
+
data2.each do |l|
|
62
|
+
f.puts(l)
|
63
|
+
end
|
64
|
+
f.close
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'yard'
|
2
|
+
require 'rake'
|
3
|
+
require_relative 'documentation/documentation.rb'
|
4
|
+
|
5
|
+
namespace :yard do
|
6
|
+
desc 'Generar Documentacion Yard'
|
7
|
+
task :doc do
|
8
|
+
init_documentation(Rails.root)
|
9
|
+
Dir.chdir("documentation")
|
10
|
+
system("yard doc")
|
11
|
+
end
|
12
|
+
desc 'Iniciar Servidor Puerto 8808'
|
13
|
+
task :server do
|
14
|
+
Dir.chdir("documentation")
|
15
|
+
system("yard server")
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'action_mailer'
|
2
|
+
|
3
|
+
module Forcast
|
4
|
+
module Utils
|
5
|
+
module Email
|
6
|
+
class DefaultServer
|
7
|
+
attr_accessor :address
|
8
|
+
attr_accessor :port
|
9
|
+
attr_accessor :user_name
|
10
|
+
attr_accessor :password
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
yield(self)
|
14
|
+
ActionMailer::Base.raise_delivery_errors = true
|
15
|
+
ActionMailer::Base.smtp_settings = {
|
16
|
+
address: self.address,
|
17
|
+
port: self.port.to_i,
|
18
|
+
user_name: self.user_name,
|
19
|
+
password: self.password,
|
20
|
+
authentication: "plain",
|
21
|
+
enable_starttls_auto: true
|
22
|
+
}
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
class Layout < ActionMailer::Base
|
27
|
+
append_view_path("#{File.dirname(__FILE__)}/email")
|
28
|
+
|
29
|
+
def default(object:, rule:, obj_identifier:)
|
30
|
+
@obj_identifier = obj_identifier
|
31
|
+
@attr_watched = { name: rule.attr_comparable, value: object.send(rule.attr_comparable) }
|
32
|
+
@fecha = ActiveSupport::TimeZone.new('America/Santiago')
|
33
|
+
.utc_to_local(Time.now)
|
34
|
+
.strftime('Hora: %H:%M:%S - Fecha: %d/%m/%Y')
|
35
|
+
@obj_class = rule.rule_model
|
36
|
+
|
37
|
+
subject = "Gatillada regla #{rule.name} - #{rule.rule_model} #{obj_identifier}"
|
38
|
+
|
39
|
+
mail(to: params[:to], cc: params[:cc], subject: subject,
|
40
|
+
from: ActionMailer::Base.smtp_settings[:user_name]) do |format|
|
41
|
+
format.text(content_type: 'text/plain', charset: 'UTF-8',
|
42
|
+
content_transfer_encoding: '7bit')
|
43
|
+
end
|
44
|
+
# Guardar response en ActionLogs junto con los datos pertinentes. Tabla
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module FORCAST
|
2
|
+
module Firebase
|
3
|
+
class Notificacion
|
4
|
+
attr_accessor :headers
|
5
|
+
attr_accessor :url
|
6
|
+
attr_accessor :json_send
|
7
|
+
attr_accessor :metodo
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
self.headers = {}
|
11
|
+
end
|
12
|
+
|
13
|
+
def enviarNotificacion(token,title,body)
|
14
|
+
json_recived = constructor do
|
15
|
+
self.metodo = :post
|
16
|
+
self.url = "/sendPushNotification/"
|
17
|
+
self.json_send = {:token => token, :title => title, :body => body}
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def constructor
|
22
|
+
yield
|
23
|
+
resp = SERVIDORNOTIFICACION.conexion(self.metodo, self.headers, self.url, self.json_send)
|
24
|
+
return true if resp[1].blank?
|
25
|
+
json_recived = {}
|
26
|
+
puts resp
|
27
|
+
if resp[0] && self.valid_json?(resp[1])
|
28
|
+
json_recived = JSON.parse(resp[1])
|
29
|
+
unless json_recived.is_a?(Array)
|
30
|
+
unless json_recived["error"].nil?
|
31
|
+
logger.info "[FIREBASE] "+json_recived["error"].to_s
|
32
|
+
return false
|
33
|
+
end
|
34
|
+
end
|
35
|
+
return json_recived
|
36
|
+
else
|
37
|
+
return false
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def valid_json?(json)
|
42
|
+
begin
|
43
|
+
JSON.parse(json)
|
44
|
+
return true
|
45
|
+
rescue JSON::ParserError => e
|
46
|
+
puts e
|
47
|
+
return false
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def parser(varible, key1 = '')
|
52
|
+
if key1 == ''
|
53
|
+
return JSON.pretty_generate(FORCAST::Server.response_to_json(varible))
|
54
|
+
else
|
55
|
+
return FORCAST::Server.response_to_json(varible).map {|i| i[key1]}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,117 @@
|
|
1
|
+
require 'firebase'
|
2
|
+
|
3
|
+
module FORCAST
|
4
|
+
module Firebase
|
5
|
+
|
6
|
+
class Database
|
7
|
+
attr_accessor :headers
|
8
|
+
attr_accessor :_method
|
9
|
+
attr_accessor :path
|
10
|
+
attr_accessor :data
|
11
|
+
attr_accessor :query_options
|
12
|
+
|
13
|
+
def initialize
|
14
|
+
self.headers = {}
|
15
|
+
end
|
16
|
+
|
17
|
+
def push(path,data,query_options: {})
|
18
|
+
json_recived = constructor do
|
19
|
+
self._method = :push
|
20
|
+
self.path = path
|
21
|
+
self.data = data
|
22
|
+
self.query_options = query_options
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def set(path,data,query_options: {})
|
27
|
+
json_recived = constructor do
|
28
|
+
self._method = :set
|
29
|
+
self.path = path
|
30
|
+
self.data = data
|
31
|
+
self.query_options = query_options
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def update(path,data,query_options: {})
|
36
|
+
json_recived = constructor do
|
37
|
+
self._method = :update
|
38
|
+
self.path = path
|
39
|
+
self.data = data
|
40
|
+
self.query_options = query_options
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def delete(path,query_options: {})
|
45
|
+
json_recived = constructor do
|
46
|
+
self._method = :delete
|
47
|
+
self.path = path
|
48
|
+
self.query_options = query_options
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def get(path,query_options: {})
|
53
|
+
json_recived = constructor do
|
54
|
+
self._method = :get
|
55
|
+
self.path = path
|
56
|
+
self.query_options = query_options
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def constructor
|
61
|
+
yield
|
62
|
+
if self._method == :get || self._method == :delete
|
63
|
+
resp = SERVER_FIREBASE_DATABASE.send(self._method, self.path)
|
64
|
+
else
|
65
|
+
if self._method == :update
|
66
|
+
self.data.merge!({:updated_at => Time.now.to_i})
|
67
|
+
else
|
68
|
+
self.data.merge!({:created_at => Time.now.to_i})
|
69
|
+
end
|
70
|
+
resp = SERVER_FIREBASE_DATABASE.send(self._method, self.path, self.data, self.query_options)
|
71
|
+
end
|
72
|
+
puts "[FIREBASE] URI:"+resp.response.http_header.request_uri.to_s
|
73
|
+
puts "[FIREBASE] METHOD:"+resp.response.http_header.request_method.to_s
|
74
|
+
puts "[FIREBASE] BODY:"+resp.body.to_s
|
75
|
+
resp = resp.body.to_json
|
76
|
+
if self.valid_json?(resp)
|
77
|
+
json_recived = JSON.parse(resp)
|
78
|
+
return json_recived
|
79
|
+
else
|
80
|
+
return false
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def valid_json?(json)
|
85
|
+
begin
|
86
|
+
JSON.parse(json)
|
87
|
+
return true
|
88
|
+
rescue JSON::ParserError => e
|
89
|
+
puts e
|
90
|
+
return false
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def parser(variable, key1 = '')
|
95
|
+
if key1 == ''
|
96
|
+
return JSON.pretty_generate(FORCAST::Server.response_to_json(variable))
|
97
|
+
else
|
98
|
+
return FORCAST::Server.response_to_json(variable).map {|i| i[key1]}
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
|
107
|
+
firebase_url = 'https://stddbb-duplicada.firebaseio.com/Plant Information'
|
108
|
+
firebase_secret = 'KjcKb7nET0XvovYHW7DdVgtz3bzaUqSzh6nl3gu7'
|
109
|
+
::SERVER_FIREBASE_DATABASE = Firebase::Client.new(firebase_url, firebase_secret)
|
110
|
+
|
111
|
+
FORCAST::Firebase::Database.new.get("")
|
112
|
+
# FORCAST::Firebase::Database.new.push("pruebas", {:name => 'Pick the milk 2',
|
113
|
+
# :priority => 1})
|
114
|
+
# FORCAST::Firebase::Database.new.update("-LjGsjbi7aOfRxG_I62v", {
|
115
|
+
# "Source" => 'asdasda'
|
116
|
+
# })
|
117
|
+
|