Ben*_*enj 9 ruby-on-rails sass coffeescript
在一个code字符串中我存储了一段代码,可以是CSS,SASS,SCSS,JavaScript或CoffeeScript.内容来自用户,我需要在保存到数据库之前验证语法.
我需要检查语法是否正确.目前,我正在使用一个有效的丑陋黑客.你有更好的解决方案吗?
def check_js
if language == 'coffee' # CoffeeScript
CoffeeScript.compile code
else # JavaScript
Uglifier.compile code
end
rescue ExecJS::RuntimeError => e
errors.add :code, e.message
end
def check_css
if language == 'css' # CSS
Sass::CSS.new(code).render
else # SASS, SCSS
Sass.compile code, syntax: language.to_sym
end
rescue Sass::SyntaxError => e
errors.add :code, e.message
end
Run Code Online (Sandbox Code Playgroud)
小智 3
# app/models/user.rb
class User < ActiveRecord::Base
validates_with Validators::SyntaxValidator
end
# app/models/validators/syntax_validator.rb
class Validators::SyntaxValidator < ActiveModel::Validator
def validate(record)
@record = record
case language
when :coffee
CoffeeScript.compile(code)
when :javascript
Uglifier.compile(code)
when :css
Sass::CSS.new(code).render
when :sass
Sass.compile code, syntax: language.to_sym
when :scss
Sass.compile code, syntax: language.to_sym
end
rescue Sass::SyntaxError => e
errors.add :code, e.message
rescue ExecJS::RuntimeError => e
errors.add :code, e.message
end
end
Run Code Online (Sandbox Code Playgroud)
也许是这样的?你认为呢? http://api.rubyonrails.org/classes/ActiveModel/Validator.html
| 归档时间: |
|
| 查看次数: |
444 次 |
| 最近记录: |