2016-12-30 2 views
8

В строке code Я сохранил фрагмент кода, который может быть CSS, SASS, SCSS, JavaScript или CoffeeScript. Содержимое поступает от пользователя, и мне нужно проверить синтаксис перед сохранением в базе данных.Rails: как проверить код CSS или код JS из строки?

Мне нужно проверить правильность синтаксиса. В настоящее время я использую уродливый взлом, который работает. У вас есть лучшее решение?

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 
+0

Я думаю, чтобы найти лучшее решение, было бы очень полезно увидеть, где вы это называете, и объяснение того, почему это необходимо. –

+1

Выглядит хорошо для меня –

+0

@ Caffeinated.tech Спасибо за предложение, я добавил эту фразу, надеюсь, что это яснее «Содержимое идет от пользователя, и мне нужно проверить синтаксис перед сохранением в сатабасе». – Benj

ответ

-1
# 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 

Может быть что-то вроде этого? Что ты думаешь? http://api.rubyonrails.org/classes/ActiveModel/Validator.html

Смежные вопросы