2016-12-30 9 views
8

code स्ट्रिंग में मैंने कोड का एक टुकड़ा संग्रहित किया है, सीएसएस, एसएएसएस, एससीएसएस, जावास्क्रिप्ट या कॉफीस्क्रिप्ट हो सकता है। सामग्री उपयोगकर्ता से आ रही है, और मुझे डेटाबेस में सहेजने से पहले वाक्यविन्यास को सत्यापित करने की आवश्यकता है।रेल: एक स्ट्रिंग से सीएसएस या जेएस कोड कोड कैसे जांचें?

मुझे यह जांचना होगा कि वाक्यविन्यास सही है या नहीं। वर्तमान में, मैं काम करता हूं एक बदसूरत हैक का उपयोग कर रहा हूँ। क्या आपके पास एक बेहतर समाधान है?

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 सुझाव के लिए धन्यवाद, मैंने यह वाक्यांश जोड़ा, उम्मीद है कि यह स्पष्ट है "सामग्री उपयोगकर्ता से आ रही है, और मुझे satabase में सहेजने से पहले वाक्यविन्यास को सत्यापित करने की आवश्यकता है।" – 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

संबंधित मुद्दे