Class: JsTextRails::TextTransformer

Inherits:
Object
  • Object
show all
Defined in:
lib/js-text-rails/text_transformer.rb

Direct Known Subclasses

SvgTransformer

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ TextTransformer

Returns a new instance of TextTransformer.



7
8
9
# File 'lib/js-text-rails/text_transformer.rb', line 7

def initialize(options = {})
  @namespace = options[:namespace] || self.class.default_namespace
end

Class Method Details

.default_namespaceObject



3
4
5
# File 'lib/js-text-rails/text_transformer.rb', line 3

def self.default_namespace
  'this.TEXT'
end

Instance Method Details

#escape_js_string(text) ⇒ Object

Make text content safe and correct when evaluated in JS.



27
28
29
30
31
32
33
34
35
36
37
# File 'lib/js-text-rails/text_transformer.rb', line 27

def escape_js_string(text)
  text
    .gsub(/(['\\])/, "\\\\\\1")
    .gsub(/[\f]/, '\f')
    .gsub(/[\b]/, '\b')
    .gsub(/[\n]/, '\n')
    .gsub(/[\t]/, '\t')
    .gsub(/[\r]/, '\r')
    .gsub(/[\u2028]/, '\u2028')
    .gsub(/[\u2029]/, '\u2029')
end

#sanitize_js_string(text) ⇒ Object

Can be overridden by subclasses.



22
23
24
# File 'lib/js-text-rails/text_transformer.rb', line 22

def sanitize_js_string(text)
  escape_js_string(text)
end

#transform(key, data) ⇒ Object

Take ‘data` and store it at a `key` in a JS namespace.



12
13
14
15
16
17
18
19
# File 'lib/js-text-rails/text_transformer.rb', line 12

def transform(key, data)
  key = sanitize_js_string(key)
  data = sanitize_js_string(data)
  "(function() { \#{@namespace} || (\#{@namespace} = {}); \#{@namespace}['\#{key}'] = '\#{data}';\n}).call(this);\n  TEXT\nend\n"