ruby - scss - Importar archivo SASS de la base de datos en lugar de sistema de archivos
sass scss (2)
Como está utilizando Compass para compilar, puede agregar importadores Sass personalizados en el archivo de configuración de Compass. Por ejemplo, al compilar usando compass compile -c config.rb
, incluiría algo como esto en su archivo config.rb
:
require File.join(File.dirname(__FILE__), ''importer.rb'')
Sass.load_paths << Sass::Importers::Custom.new()
Luego, en importer.rb
en el mismo directorio, debe incluir su definición de importador:
module Sass
module Importers
class Custom < Base
def find(name, options)
if name == ''[globals]''
options[:syntax] = :scss
options[:filename] = ''globals''
options[:importer] = self
return Sass::Engine.new("$imported-variable: blue;", options)
else
return nil
end
end
def find_relative(uri, base, options)
nil
end
def key(uri, options)
[self.class.name + ":" + uri, uri]
end
def mtime(uri, options)
nil
end
def to_s
''[custom]''
end
end
end
end
Luego, en su archivo Sass puede usar el importador:
@import ''[globals]'';
p {
color: $imported-variable;
}
Por supuesto, esto es solo una implementación ficticia que solo acepta un URI que coincida con "[globals]"
. Deberá proporcionar su propia implementación que acceda a su base de datos MySQL, ya que no tengo ninguna experiencia con el acceso a la base de datos en Ruby. Sin embargo, con suerte, esto debería acercarlo un poco más, además de los enlaces que @Sean ha proporcionado.
No tengo mucha experiencia con Ruby. Quiero @import sass de la base de datos en lugar de filesystem. No encontré ningún ejemplo en línea. ¿Cómo debo implementar esto? Veo que tengo que extender una clase de importador, pero como no entiendo el rubí, necesito saber en qué lugar de mi clase reside esta clase (solo para verificarlo) y, en general, cuáles son los pasos básicos involucrados.
Más información
La base de datos MySQL contiene contenido sass. Entonces en mi aplicación web acepto sass (como cadena) de usuario que puede contener una declaración de importación, por ejemplo:
@import test.scss
body { color:red }
Ahora en mi base de datos MySQL tendré algo como esto
Table sass_files
column_name filename | content
example row test.scss | p {color:blue;}
Quiero hacer que esta importación funcione, seguro de que puedo hacer una coincidencia de expresiones regulares para obtener el nombre de archivo de la entrada del usuario y luego consultar el DB por ese nombre de archivo y obtener el contenido. Pero leí que hay una buena manera de hacer que Ruby / sass use DB como ruta de carga en lugar de sistema de archivos.
ACTUALIZAR
Así que creé una clase de importación personalizada ficticia con el método de búsqueda como
def find(name, options)
Sass::Engine.new("p { color :blue; }", options)
end
¿Cómo agrego a este importador para cargar las rutas de acceso sin usar ruby, como puedo hacer cambios en los archivos fuente en la carpeta sass gem y agregar este importador a lib / sass / importers?
Gracias
Fuera de la caja, sass solo importará los archivos locales (todo lo demás se compilará en una declaración de CSS @import), pero a medida que los documentos sass explican , puedes escribir tus propios importadores personalizados extendiendo la clase Sass :: Importers :: Base .
Esta respuesta a otra pregunta proporciona un ejemplo de un importador HTTP personalizado. Puede abordar esto en (al menos) dos formas: escriba un importador personalizado para su base de datos o sirva el archivo sass a través de HTTP desde la base de datos (a través de una simple página PHP o algo)