<commit_before># encoding: UTF-8

#-- Cargar ruta actual en la ruta de carga de fuentes. #++
$LOAD_PATH << File.dirname(__FILE__) + "\n"

# Mejorar funcionamiento
require 'oj'
require 'oj_mimic_json'

require 'sinatra'
require 'neo4j'

require 'thread'

if development?
  require 'sinatra/reloader'
  require 'ruby-prof'
  require 'irb'

  puts "--------------------------------------"
  puts "**   Starting in development mode   **"
  puts "--------------------------------------"
  
  # Variable de desarrollo
  DEV = true
end

# Módulo Sinatra (predefinido).
module Sinatra
  
  # Aplicación principal (servidor).
  #
  # Funciona como contenedor de una aplicación Ruby Sinatra.
  class ProgrezzServer < Sinatra::Base

    # Getter de la sesión de la aplicación.
    #
    # @return Sesión actual (objeto session).
    def self.get_session()
      return self.session
    end
  end
  
  # Módulo de páginas webs. Usado para definir los métodos get y post
  # de las distintas páginas webs del servidor.
  module Pages
    
    # Helpers o métodos de ayuda para las peticiones http.
    module WebHelpers
      
      # Comprobar si la página dada es la actual.
      # @param path [String] Ruta dada para saber si se corresponde con la actual
      # @return [String, nil] Si es la misma, retorna "current". En otro caso, retorna nil. 
      def current?(path='/')
        (request.path==path || request.path==path+'/') ? "current" : nil
      end
    end
    
    # Registrar páginas web elementales.
    # @param app [Sinatra::Application] Aplicación sinatra.
    def self.registered(app)
      app.helpers Pages::WebHelpers
      
      # Configuación 
      app.configure do
        # Asignar servidor
        app.set :server, 'thin'
              
        # Activar sesiones del servidor web
        app.set :sessions, true
        
        # Añadir secreto.
        app.set :session_secret, ENV['progrezz_secret']
        
        # Añadir multihilos. 
        app.set :threaded, true # TODO: Probar con Thin y no con rackup.
      end
      
      # Ruta principal del servidor.
      app.get '/' do
        redirect to("/dev")
      end
      
      # Página no encontrada (error 404).
      # 
      # Redirecciona a "/".
      app.not_found do
        redirect to("/")
      end
      
      # Página dev principal (home).
      app.get '/dev' do
        erb :"dev/home", :locals => { :session => session }, :layout => :"dev/layout"
      end
      
      # Página de información (about).
      app.get '/dev/about' do
        erb :"dev/about", :locals => { :session => session }, :layout => :"dev/layout"
      end
      
      # Página de documentación (doc).<commit_msg>Añadido sistema de loggin para guardar información de rutas de acceso.<commit_after># encoding: UTF-8

#-- Cargar ruta actual en la ruta de carga de fuentes. #++
$LOAD_PATH << File.dirname(__FILE__) + "\n"

# Mejorar funcionamiento
require 'oj'
require 'oj_mimic_json'

require 'sinatra'
require 'neo4j'
require 'logger'

require 'thread'

if development?
  require 'sinatra/reloader'
  require 'ruby-prof'
  require 'irb'

  puts "--------------------------------------"
  puts "**   Starting in development mode   **"
  puts "--------------------------------------"
  
  # Variable de desarrollo
  DEV = true
end

# Módulo Sinatra (predefinido).
module Sinatra
  
  # Aplicación principal (servidor).
  #
  # Funciona como contenedor de una aplicación Ruby Sinatra.
  class ProgrezzServer < Sinatra::Base

    # Getter de la sesión de la aplicación.
    #
    # @return Sesión actual (objeto session).
    def self.get_session()
      return self.session
    end
  end
  
  # Módulo de páginas webs. Usado para definir los métodos get y post
  # de las distintas páginas webs del servidor.
  module Pages
    
    # Helpers o métodos de ayuda para las peticiones http.
    module WebHelpers
      
      # Comprobar si la página dada es la actual.
      # @param path [String] Ruta dada para saber si se corresponde con la actual
      # @return [String, nil] Si es la misma, retorna "current". En otro caso, retorna nil. 
      def current?(path='/')
        (request.path==path || request.path==path+'/') ? "current" : nil
      end
    end
    
    # Registrar páginas web elementales.
    # @param app [Sinatra::Application] Aplicación sinatra.
    def self.registered(app)
      app.helpers Pages::WebHelpers
      
      # Configuación 
      app.configure do
        # Asignar servidor
        app.set :server, 'thin'
              
        # Activar sesiones del servidor web
        app.set :sessions, true
        
        # Añadir secreto.
        app.set :session_secret, ENV['progrezz_secret']
        
        # Añadir multihilos. 
        app.set :threaded, true # TODO: Probar con Thin y no con rackup.
        
        # Activar loggin
        app.enable :loggin
        app.use Rack::CommonLogger, Logger.new("tmp/app.log")
      end
      
      # Ruta principal del servidor.
      app.get '/' do
        redirect to("/dev")
      end
      
      # Página no encontrada (error 404).
      # 
      # Redirecciona a "/".
      app.not_found do
        redirect to("/")
      end
      
      # Página dev principal (home).
      app.get '/dev' do
        erb :"dev/home", :locals => { :session => session }, :layout => :"dev/layout"
      end
      
      # Página de información (about).
      app.get '/dev/about' do
        erb :"dev/about", :locals => { :session => session }, :layout => :"dev/layout"
      end
      
      # Página de documentación (doc).
{'fraction_non_alphanumeric': 0.124797988866942, 'fraction_numerical': 0.001795654516071108, 'mean_word_length': 1.9978471474703983, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 15, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '541819', 'n_tokens_mistral': 1801, 'n_tokens_neox': 1768, 'n_words': 546}