tutorial scss mixin how define compile ruby sass compass-sass

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)