ejs-patched 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (5) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +20 -0
  3. data/README.md +38 -0
  4. data/lib/ejs.rb +107 -0
  5. metadata +62 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 40bb3022a9e30bcc3169ae6ee99bc8f80da7e89a
4
+ data.tar.gz: 69b8b8eb4ac13eb69833329ae29fdb7a464dfa41
5
+ SHA512:
6
+ metadata.gz: '069fa4e67c8f231ba771c4e96b7329539771316834f29362d6301667a4a4daeb3c14733e10ddf35486b42f45612774c29bcfaedb08d538b64c12b670ddd4f317'
7
+ data.tar.gz: ab936a2407618a204716642cefc8ba5902bbc1d84ab133233cf79a3bdbfee8729a486277ced05d2441648fa6310d855cd0ef0203e8a3378654457ab93f141345
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Sam Stephenson
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,38 @@
1
+ EJS (Embedded JavaScript) template compiler for Ruby
2
+ ====================================================
3
+
4
+ EJS templates embed JavaScript code inside `<% ... %>` tags, much like
5
+ ERB. This library is a port of
6
+ [Underscore.js](http://documentcloud.github.com/underscore/)'s
7
+ [`_.template`
8
+ function](http://documentcloud.github.com/underscore/#template) to
9
+ Ruby, and strives to maintain the same syntax and semantics.
10
+
11
+ Pass an EJS template to `EJS.compile` to generate a JavaScript
12
+ function:
13
+
14
+ EJS.compile("Hello <%= name %>")
15
+ # => "function(obj){...}"
16
+
17
+ Invoke the function in a JavaScript environment to produce a string
18
+ value. You can pass an optional object specifying local variables for
19
+ template evaluation.
20
+
21
+ The EJS tag syntax is as follows:
22
+
23
+ * Unescaped buffering with `<%- code %>`
24
+ * Escapes html by default with `<%= code %>`
25
+ * Unbuffered code for conditionals etc `<% code %>`
26
+
27
+ If you have the [ExecJS](https://github.com/sstephenson/execjs/)
28
+ library and a suitable JavaScript runtime installed, you can pass a
29
+ template and an optional hash of local variables to `EJS.evaluate`:
30
+
31
+ EJS.evaluate("Hello <%= name %>", :name => "world")
32
+ # => "Hello world"
33
+
34
+ -----
35
+
36
+ &copy; 2012 Sam Stephenson
37
+
38
+ Released under the MIT license
data/lib/ejs.rb ADDED
@@ -0,0 +1,107 @@
1
+ # EJS (Embedded JavaScript) template compiler for Ruby
2
+ # This is a port of Underscore.js' `_.template` function:
3
+ # http://documentcloud.github.com/underscore/
4
+
5
+ module EJS
6
+ JS_UNESCAPES = {
7
+ '\\' => '\\',
8
+ "'" => "'",
9
+ 'r' => "\r",
10
+ 'n' => "\n",
11
+ 't' => "\t",
12
+ 'u2028' => "\u2028",
13
+ 'u2029' => "\u2029"
14
+ }
15
+ JS_ESCAPES = JS_UNESCAPES.invert
16
+ JS_ESCAPE_PATTERN = Regexp.union(JS_ESCAPES.keys)
17
+ JS_UNESCAPE_PATTERN = /\\(#{Regexp.union(JS_UNESCAPES.keys)})/
18
+
19
+ class << self
20
+ attr_accessor :escape_pattern
21
+ attr_accessor :evaluation_pattern
22
+ attr_accessor :interpolation_pattern
23
+
24
+ # Compiles an EJS template to a JavaScript function. The compiled
25
+ # function takes an optional argument, an object specifying local
26
+ # variables in the template. You can optionally pass the
27
+ # `:evaluation_pattern` and `:interpolation_pattern` options to
28
+ # `compile` if you want to specify a different tag syntax for the
29
+ # template.
30
+ #
31
+ # EJS.compile("Hello <%= name %>")
32
+ # # => "function(obj){...}"
33
+ #
34
+ def compile(source, options = {})
35
+ source = source.dup
36
+
37
+ js_escape!(source)
38
+ replace_escape_tags!(source, options)
39
+ replace_interpolation_tags!(source, options)
40
+ replace_evaluation_tags!(source, options)
41
+ "function(obj){var __p=[],print=function(){__p.push.apply(__p,arguments);};" +
42
+ "with(obj||{}){__p.push('#{source}');}return __p.join('');}"
43
+ end
44
+
45
+ # Evaluates an EJS template with the given local variables and
46
+ # compiler options. You will need the ExecJS
47
+ # (https://github.com/sstephenson/execjs/) library and a
48
+ # JavaScript runtime available.
49
+ #
50
+ # EJS.evaluate("Hello <%= name %>", :name => "world")
51
+ # # => "Hello world"
52
+ #
53
+ def evaluate(template, locals = {}, options = {})
54
+ require "execjs"
55
+ context = ExecJS.compile("var evaluate = #{compile(template, options)}")
56
+ context.call("evaluate", locals)
57
+ end
58
+
59
+ protected
60
+ def js_escape!(source)
61
+ source.gsub!(JS_ESCAPE_PATTERN) { |match| '\\' + JS_ESCAPES[match] }
62
+ source
63
+ end
64
+
65
+ def js_unescape!(source)
66
+ source.gsub!(JS_UNESCAPE_PATTERN) { |match| JS_UNESCAPES[match[1..-1]] }
67
+ source
68
+ end
69
+
70
+ def replace_escape_tags!(source, options)
71
+ source.gsub!(options[:escape_pattern] || escape_pattern) do
72
+ "',#{coerce_to_string_function}(#{js_unescape!($1)})#{escape_function},'"
73
+ end
74
+ end
75
+
76
+ def replace_evaluation_tags!(source, options)
77
+ source.gsub!(options[:evaluation_pattern] || evaluation_pattern) do
78
+ "'); #{js_unescape!($1)}; __p.push('"
79
+ end
80
+ end
81
+
82
+ def replace_interpolation_tags!(source, options)
83
+ source.gsub!(options[:interpolation_pattern] || interpolation_pattern) do
84
+ "', #{js_unescape!($1)},'"
85
+ end
86
+ end
87
+
88
+ def coerce_to_string_function
89
+ "function(s) {" +
90
+ "return (s === null || typeof(s) === 'undefined') ? '' : ('' + s);" +
91
+ "}"
92
+ end
93
+
94
+ def escape_function
95
+ ".replace(/&/g, '&amp;')" +
96
+ ".replace(/</g, '&lt;')" +
97
+ ".replace(/>/g, '&gt;')" +
98
+ ".replace(/\"/g, '&quot;')" +
99
+ ".replace(/'/g, '&#x27;')" +
100
+ ".replace(/\\//g,'&#x2F;')"
101
+ end
102
+ end
103
+
104
+ self.escape_pattern = /<%=([\s\S]+?)%>/
105
+ self.evaluation_pattern = /<%([\s\S]+?)%>/
106
+ self.interpolation_pattern = /<%-([\s\S]+?)%>/
107
+ end
metadata ADDED
@@ -0,0 +1,62 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ejs-patched
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sam Stephenson
8
+ - Jimmie Elvenmark
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2018-01-08 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: execjs
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - "~>"
19
+ - !ruby/object:Gem::Version
20
+ version: '0.4'
21
+ type: :development
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "~>"
26
+ - !ruby/object:Gem::Version
27
+ version: '0.4'
28
+ description: Compile and evaluate EJS (Embedded JavaScript) templates from Ruby.
29
+ email:
30
+ - sstephenson@gmail.com
31
+ - flugsio@gmail.com
32
+ executables: []
33
+ extensions: []
34
+ extra_rdoc_files: []
35
+ files:
36
+ - LICENSE
37
+ - README.md
38
+ - lib/ejs.rb
39
+ homepage: https://github.com/flugsio/ruby-ejs-patched/
40
+ licenses: []
41
+ metadata: {}
42
+ post_install_message:
43
+ rdoc_options: []
44
+ require_paths:
45
+ - lib
46
+ required_ruby_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ version: '0'
51
+ required_rubygems_version: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ requirements: []
57
+ rubyforge_project:
58
+ rubygems_version: 2.6.14
59
+ signing_key:
60
+ specification_version: 4
61
+ summary: EJS (Embedded JavaScript) template compiler
62
+ test_files: []