nik*_*hil 5 ruby sass compass-sass
我对Ruby没有多少经验.我想从数据库而不是文件系统@import sass.我没有在网上找到任何例子.我该怎么做呢?我看到我必须扩展一个导入器类,但由于我不了解ruby,我需要知道我的文件系统中该类所在的位置(只是检查它)以及一般涉及的基本步骤是什么.
更多信息
MySQL数据库包含sass内容.因此,在我的Web应用程序中,我接受来自用户的sass(作为字符串),其中可能包含import语句,例如:
@import test.scss
body { color:red }
Run Code Online (Sandbox Code Playgroud)
现在在我的MySQL DB中,我会有类似的东西
Table sass_files
column_name filename | content
example row test.scss | p {color:blue;}
Run Code Online (Sandbox Code Playgroud)
我想让这个导入工作,确保我可以只是进行正则表达式匹配从用户输入获取文件名,然后通过该文件名查询数据库并获取内容.但我读到有一种很好的方法可以让ruby/sass使用DB作为加载路径而不是文件系统.
UPDATE
所以我用find方法创建了一个虚拟自定义导入器类
def find(name, options)
Sass::Engine.new("p { color :blue; }", options)
end
Run Code Online (Sandbox Code Playgroud)
如何使用ruby将此导入程序添加到sass加载路径中,就像我可以更改sass gem文件夹中的源文件并将此导入程序添加到lib/sass/importers中?
谢谢
由于您使用 Compass 进行编译,因此您可以在 Compass 配置文件中添加自定义 Sass 导入器。例如,使用 进行编译compass compile -c config.rb,您将在文件中包含类似以下内容config.rb:
require File.join(File.dirname(__FILE__), 'importer.rb')
Sass.load_paths << Sass::Importers::Custom.new()
Run Code Online (Sandbox Code Playgroud)
然后在importer.rb同一目录中,您将包含导入器定义:
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
Run Code Online (Sandbox Code Playgroud)
然后在您的 Sass 文件中您可以使用导入器:
require File.join(File.dirname(__FILE__), 'importer.rb')
Sass.load_paths << Sass::Importers::Custom.new()
Run Code Online (Sandbox Code Playgroud)
当然,这只是一个仅接受 URI 匹配的虚拟实现"[globals]"。您需要提供自己的实现来访问 MySQL 数据库,因为我没有任何 Ruby 数据库访问经验。不过,除了 @Sean 提供的链接之外,希望这能让您更接近一些。
| 归档时间: |
|
| 查看次数: |
1156 次 |
| 最近记录: |