lib/bumeran.rb in bumeran-0.1.2 vs lib/bumeran.rb in bumeran-0.2.0
- old
+ new
@@ -35,26 +35,26 @@
@@access_token_updated_at = nil
mattr_accessor :options
@@options = nil
- @@areas = []
- @@subareas = []
- @@paises = []
- @@zonas = []
- @@localidades = []
- @@plan_publicaciones = []
- @@frecuencias_pago = []
- @@idiomas = []
- @@industrias = []
- @@niveles_idiomas = []
- @@tipos_trabajo = []
- @@areas_estudio = []
- @@estados_estudio = []
- @@tipos_estudio = []
- @@direcciones = []
- @@denominaciones = []
+ @@areas = {}
+ @@subareas = {}
+ @@paises = {}
+ @@zonas = {}
+ @@localidades = {}
+ @@plan_publicaciones = {}
+ @@frecuencias_pago = {}
+ @@idiomas = {}
+ @@industrias = {}
+ @@niveles_idiomas = {}
+ @@tipos_trabajo = {}
+ @@areas_estudio = {}
+ @@estados_estudio = {}
+ @@tipos_estudio = {}
+ @@direcciones = {}
+ @@denominaciones = {}
# Default way to setup Bumeran.
def self.setup
@@ -169,232 +169,305 @@
response = self.delete(destroy_publication_path, @@options)
return Parser.parse_response(response)
end
+ # Generation of service helpers
+ SERVICES = {
+ areas: {object: :area},
+ subareas: {object: :subarea, parent: :area},
+ paises: {object: :pais},
+ zonas: {object: :zona, parent: :pais, parent_service: :paises},
+ localidades: {object: :localidad, parent: :zona, parent_service: :zonas},
+ plan_publicaciones: {object: :plan_publicacion, parent: :pais, parent_service: :paises},
+ denominaciones: {object: :denominacion},
+ direcciones: {object: :direccion},
+ frecuencias_pago: {object: :frencuencia_pago},
+ idiomas: {object: :idioma},
+ industrias: {object: :industria},
+ niveles_idiomas: {object: :niveles_idioma},
+ tipos_trabajo: {object: :tipo_trabajo},
+ areas_estudio: {object: :area_estudio},
+ estados_estudio: {object: :estado_estudio},
+ tipos_estudio: {object: :tipo_estudio}
+ }
+
+ # GENERIC HELPER
+ def self.generic_find_by_id(objects_sym, object_id) #def self.pais(pais_id)
+ object = send(objects_sym).select{|id, content| id == object_id} # pais = paises.select{|id, pais| id == pais_id}
+ object ? object[object_id] : nil # pais ? pais[pais_id] : nil
+ end #end
+
+ def self.generic_find_all_in(objects_sym, parent_object_sym, parent_service_sym, parent_object_id)
+ if class_variable_get("@@#{objects_sym}").empty? # if @@zonas.empty?
+ parent_object = send(parent_service_sym)[parent_object_id] # pais = paises[pais_id]
+
+ if parent_object[objects_sym.to_s] # if pais["zonas"]
+ parent_object[objects_sym.to_s].merge!(send("get_#{objects_sym}_in", parent_object_id)) # pais["zonas"].merge!(get_zonas_in(pais_id))
+ else # else
+ parent_object[objects_sym.to_s] = send("get_#{objects_sym}_in", parent_object_id) # pais["zonas"] = get_zonas_in(pais_id)
+ end # end
+ else # else
+ send(parent_object_sym, parent_object_id)[objects_sym.to_s] # pais(pais_id)["zonas"] # pais(pais_id)["zonas"]
+ end # end
+ end
+
+ # Generation of dynamic static methods
+ SERVICES.each do |service_name, service|
+
+ #def self.pais(pais_id)
+ define_singleton_method(service[:object]) do |object_id|
+ generic_find_by_id(service_name, object_id)
+ end
+
+ # def self.zonas_in(pais_id)
+ if service[:parent]
+ define_singleton_method("#{service_name}_in") do |parent_object_id|
+ generic_find_all_in(service_name, service[:parent], service[:parent_service], parent_object_id)
+ end
+ end
+ end
+
+ # Helpers
def self.areas
@@areas.empty? ? get_areas : @@areas
end
def self.subareas
if @@subareas.empty?
- areas.each do |area|
- area["subareas"] = get_subareas_in(area["id"])
- area["subareas"].map{|subarea| @@subareas << subarea}
+ areas.each do |area_id, area|
+ area["subareas"] ? area["subarea"].merge!(get_subareas_in(area_id)) : area["subarea"] = get_subareas_in(area_id)
end
end
@@subareas
end
- # Servicios comunes
- def self.get_areas #jobs areas
- Bumeran.initialize
- areas_path = "/v0/empresas/comunes/areas"
- response = self.get(areas_path, @@options)
-
- @@areas = Parser.parse_response_to_json(response)
- end
-
- def self.get_subareas_in(area_id)
- Bumeran.initialize
- subareas_path = "/v0/empresas/comunes/areas/#{area_id}/subAreas"
- response = self.get(subareas_path, @@options)
-
- Parser.parse_response_to_json(response)
- end
-
def self.paises
@@paises.empty? ? get_paises : @@paises
end
def self.zonas
# zonas by pais
if @@zonas.empty?
- paises.each do |pais|
- pais["zonas"] = get_zonas_in(pais["id"])
- pais["zonas"].map{|zona| @@zonas << zona}
+ paises.each do |pais_id, pais|
+ pais["zonas"] ? pais["zonas"].merge!(get_zonas_in(pais_id)) : pais["zonas"] = get_zonas_in(pais_id)
end
end
@@zonas
end
def self.localidades
if @@localidades.empty?
- zonas.each do |zona|
+ zonas.each do |zona_id, zona|
begin
- zona["localidades"] = get_localidades_in(zona["id"])
- zona["localidades"].map{|localidad| @@localidades << localidad}
+ zona["localidades"] ? zona["localidades"].merge!(get_localidades_in(zona_id)) : zona["localidades"] = get_localidades_in(zona_id)
rescue StandardError => e
pp "Error at get_localidades_in(#{zona["id"]}): #{e}"
end
end
end
@@localidades
end
+ def self.plan_publicaciones
+ if @@plan_publicaciones.empty?
+ paises.each do |pais_id, pais|
+ pais["plan_publicaciones"] ? pais["plan_publicaciones"].merge!(get_plan_publicaciones_in(pais_id)) : pais["plan_publicaciones"] = get_plan_publicaciones_in(pais_id)
+ end
+ end
+ @@plan_publicaciones
+ end
+
+ def self.denominaciones
+ @@denominaciones.empty? ? get_denominaciones : @@denominaciones
+ end
+
+ def self.direcciones
+ @@direcciones.empty? ? get_direcciones : @@direcciones
+ end
+
+ def self.frecuencias_pago
+ @@frecuencias_pago.empty? ? get_frecuencias_pago : @@frecuencias_pago
+ end
+
+ def self.idiomas
+ @@idiomas.empty? ? get_idiomas : @@idiomas
+ end
+
+ def self.industrias
+ @@industrias.empty? ? get_industrias : @@industrias
+ end
+
+ def self.niveles_idiomas
+ @@niveles_idiomas.empty? ? get_niveles_idiomas : @@niveles_idiomas
+ end
+
+ def self.tipos_trabajo
+ @@tipos_trabajo.empty? ? get_tipos_trabajo : @@tipos_trabajo
+ end
+
+ def self.areas_estudio
+ @@areas_estudio.empty? ? get_areas_estudio : @@areas_estudio
+ end
+
+ def self.estados_estudio
+ @@estados_estudio.empty? ? get_estados_estudio : @@estados_estudio
+ end
+
+ def self.tipos_estudio
+ @@tipos_estudio.empty? ? get_tipos_estudio : @@tipos_estudio
+ end
+
+ # Servicios comunes
+ # Getters
+ def self.get_areas #jobs areas
+ Bumeran.initialize
+ areas_path = "/v0/empresas/comunes/areas"
+ response = self.get(areas_path, @@options)
+
+ json = Parser.parse_response_to_json(response)
+ Parser.parse_json_to_hash(json, @@areas)
+ end
+
+ def self.get_subareas_in(area_id)
+ Bumeran.initialize
+ subareas_path = "/v0/empresas/comunes/areas/#{area_id}/subAreas"
+ response = self.get(subareas_path, @@options)
+
+ json = Parser.parse_response_to_json(response)
+ Parser.parse_json_to_hash(json, @@subareas) # to save the subareas in the @@subareas
+ Parser.parse_json_to_hash(json, {}) # to return only the subareas in the area
+ end
+
# Servicios generales asociados a datos de localizaciĆ³n
def self.get_paises
Bumeran.initialize
paises_path = "/v0/empresas/locacion/paises"
response = self.get(paises_path, @@options)
- @@paises = Parser.parse_response_to_json(response)
+ paises_json = Parser.parse_response_to_json(response)
+ Parser.parse_json_to_hash(paises_json, @@paises)
end
def self.get_zonas_in(pais_id)
Bumeran.initialize
zonas_path = "/v0/empresas/locacion/paises/#{pais_id}/zonas"
response = self.get(zonas_path, @@options)
- Parser.parse_response_to_json(response)
+ json_zonas = Parser.parse_response_to_json(response)
+ Parser.parse_json_to_hash(json_zonas, @@zonas) # to save the zone in the zonas hash
+ Parser.parse_json_to_hash(json_zonas, {}) # to return only the zonas from the country
end
def self.get_localidades_in(zona_id)
Bumeran.initialize
localidades_path = "/v0/empresas/locacion/zonas/#{zona_id}/localidades"
response = self.get(localidades_path, @@options)
Parser.parse_response_to_json(response)
end
- def self.plan_publicaciones
- if @@plan_publicaciones.empty?
- paises.each do |pais|
- pais["plan_publicaciones"] = get_plan_publicaciones_in(pais["id"])
- pais["plan_publicaciones"].map{|plan_publicacion| @@plan_publicaciones << plan_publicacion}
- end
- end
- @@plan_publicaciones
- end
-
def self.get_plan_publicaciones_in(pais_id)
Bumeran.initialize
plan_publicaciones_path = "/v0/empresas/planPublicaciones/#{pais_id}"
response = self.get(plan_publicaciones_path, @@options)
- return Parser.parse_response_to_json(response)
+ json = Parser.parse_response_to_json(response)
+ Parser.parse_json_to_hash(json, @@plan_publicaciones) # to save the zone in the zonas hash
+ return Parser.parse_json_to_hash(json, {})
end
- def self.denominaciones
- @@denominaciones.empty? ? get_denominaciones : @@denominaciones
- end
-
+ # Otros servicios
def self.get_denominaciones
Bumeran.initialize
denominaciones_path = "/v0/empresas/denominaciones"
response = self.get(denominaciones_path, @@options)
- @@denominaciones = Parser.parse_response_to_json(response)
+ json = Parser.parse_response_to_json(response)
+ return Parser.parse_json_to_hash(json, @@denominaciones)
end
- def self.direcciones
- @@direcciones.empty? ? get_direcciones : @@direcciones
- end
-
def self.get_direcciones
Bumeran.initialize
direcciones_path = "/v0/empresas/direcciones"
response = self.get(direcciones_path, @@options)
- @@direcciones = Parser.parse_response_to_json(response)
+ json = Parser.parse_response_to_json(response)
+ return Parser.parse_json_to_hash(json, @@direcciones)
end
- def self.frecuencias_pago
- @@frecuencias_pago.empty? ? get_frecuencias_pago : @@frecuencias_pago
- end
-
def self.get_frecuencias_pago
Bumeran.initialize
frecuencias_pago_path = "/v0/empresas/comunes/frecuenciasPago"
response = self.get(frecuencias_pago_path, @@options)
- @@frecuencias_pago = Parser.parse_response_to_json(response)
+ json = Parser.parse_response_to_json(response)
+ return Parser.parse_json_to_hash(json, @@frecuencias_pago)
end
- def self.idiomas
- @@idiomas.empty? ? get_idiomas : @@idiomas
- end
-
def self.get_idiomas
Bumeran.initialize
idiomas_path = "/v0/empresas/comunes/idiomas"
response = self.get(idiomas_path, @@options)
- @@idiomas = Parser.parse_response_to_json(response)
+ json = Parser.parse_response_to_json(response)
+ return Parser.parse_json_to_hash(json, @@idiomas)
end
- def self.industrias
- @@industrias.empty? ? get_industrias : @@industrias
- end
-
def self.get_industrias
Bumeran.initialize
industrias_path = "/v0/empresas/comunes/industrias"
response = self.get(industrias_path, @@options)
- @@industrias = Parser.parse_response_to_json(response)
+ json = Parser.parse_response_to_json(response)
+ return Parser.parse_json_to_hash(json, @@industrias)
end
- def self.niveles_idiomas
- @@niveles_idiomas.empty? ? get_niveles_idiomas : @@niveles_idiomas
- end
-
def self.get_niveles_idiomas
Bumeran.initialize
niveles_idiomas_path = "/v0/empresas/comunes/nivelesIdiomas"
response = self.get(niveles_idiomas_path, @@options)
- @niveles_idiomas = Parser.parse_response_to_json(response)
+ json = Parser.parse_response_to_json(response)
+ return Parser.parse_json_to_hash(json, @@niveles_idiomas)
end
- def self.tipos_trabajo
- @@tipos_trabajo.empty? ? get_tipos_trabajo : @@tipos_trabajo
- end
-
def self.get_tipos_trabajo
Bumeran.initialize
tipos_trabajo_path = "/v0/empresas/comunes/tiposTrabajo"
response = self.get(tipos_trabajo_path, @@options)
- @@tipos_trabajo = Parser.parse_response_to_json(response)
+ json = Parser.parse_response_to_json(response)
+ return Parser.parse_json_to_hash(json, @@tipos_trabajo)
end
- def self.areas_estudio
- @@areas_estudio.empty? ? get_areas_estudio : @@areas_estudio
- end
-
# Servicios de estudios de los postulantes
def self.get_areas_estudio
Bumeran.initialize
areas_estudio_path = "/v0/estudios/areasEstudio"
response = self.get(areas_estudio_path, @@options)
- @@areas_estudio = Parser.parse_response_to_json(response)
+ json = Parser.parse_response_to_json(response)
+ return Parser.parse_json_to_hash(json, @@areas_estudio)
end
- def self.estados_estudio
- @@estados_estudio.empty? ? get_estados_estudio : @@estados_estudio
- end
-
def self.get_estados_estudio
Bumeran.initialize
estados_estudio_path = "/v0/estudios/estadosEstudio"
response = self.get(estados_estudio_path, @@options)
- @@estados_estudio = Parser.parse_response_to_json(response)
+ json = Parser.parse_response_to_json(response)
+ return Parser.parse_json_to_hash(json, @@estados_estudio)
end
- def self.tipos_estudio
- @@tipos_estudio.empty? ? get_tipos_estudio : @@tipos_estudio
- end
-
def self.get_tipos_estudio
Bumeran.initialize
tipos_estudio_path = "/v0/estudios/tiposEstudio"
response = self.get(tipos_estudio_path, @@options)
- @@tipos_estudio = Parser.parse_response_to_json(response)
+ json = Parser.parse_response_to_json(response)
+ return Parser.parse_json_to_hash(json, @@tipos_estudio)
end
def self.get_estudio(estudio_id)
Bumeran.initialize
estudio_path = "/v0/estudios/#{estudio_id}"
@@ -475,9 +548,14 @@
end
end
class Parser
+ def self.parse_json_to_hash(json, hash)
+ json.each{|object| hash[object["id"]] ? hash[object["id"]].merge!(object) : hash[object["id"]] = object}
+ return hash
+ end
+
def self.parse_response(response)
case response.code
when 200..201
# "All good!"
return response.body