nano_template 0.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.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.gitmodules +4 -0
- data/.rspec +3 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/README.md +47 -0
- data/Rakefile +9 -0
- data/lib/nano_template.rb +52 -0
- data/nano_template.gemspec +23 -0
- metadata +137 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d3c645da0d5716d4dd8235fd83bf0d207113c6df
|
4
|
+
data.tar.gz: 6a3d60f74d1cb75a38fcc67b8968d1b1045d35d4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d35499017d9c345d8347b50ebd062721400e597ebcb740056c3415b185bbe2d59503f84056b609c9bdadf2aae24b3cdac9e3896395aa0e56c945f20279f3dea8
|
7
|
+
data.tar.gz: 8f4dc343996f6198e02d3a2a14a4510d680fb5e8789daa88725e5f5fa87a2c8a07f18d9c5076d92b598f5e3c7af98e3191643cc8f55a4cf38c06e0c59b33bc5f
|
data/.gitignore
ADDED
data/.gitmodules
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# [NanoTemplate](https://github.com/Narazaka/nano_template)
|
2
|
+
|
3
|
+
[](https://rubygems.org/gems/nano_template)
|
4
|
+
[](https://rubygems.org/gems/nano_template)
|
5
|
+
[](https://gemnasium.com/Narazaka/nano_template)
|
6
|
+
[](http://inch-ci.org/github/Narazaka/nano_template)
|
7
|
+
[](https://travis-ci.org/Narazaka/nano_template)
|
8
|
+
[](https://codecov.io/github/Narazaka/nano_template?branch=master)
|
9
|
+
[](https://codeclimate.com/github/Narazaka/nano_template)
|
10
|
+
|
11
|
+
text template like erb that can be used with opal
|
12
|
+
|
13
|
+
## Installation
|
14
|
+
|
15
|
+
Add this line to your application's Gemfile:
|
16
|
+
|
17
|
+
```ruby
|
18
|
+
gem 'nano_template'
|
19
|
+
```
|
20
|
+
|
21
|
+
And then execute:
|
22
|
+
|
23
|
+
$ bundle
|
24
|
+
|
25
|
+
Or install it yourself as:
|
26
|
+
|
27
|
+
$ gem install nano_template
|
28
|
+
|
29
|
+
## Usage
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
require 'nano_template'
|
33
|
+
require 'ostruct'
|
34
|
+
|
35
|
+
nano_template = NanoTemplate.new
|
36
|
+
proc = nano_template.template("<%= foo %>bar")
|
37
|
+
stash = OpenStruct.new({foo: 42})
|
38
|
+
p proc.call(stash) # "42bar"
|
39
|
+
```
|
40
|
+
|
41
|
+
## API
|
42
|
+
|
43
|
+
[API Document](http://www.rubydoc.info/github/Narazaka/nano_template)
|
44
|
+
|
45
|
+
## License
|
46
|
+
|
47
|
+
This is released under [MIT License](http://narazaka.net/license/MIT?2016).
|
data/Rakefile
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# text template like erb
|
2
|
+
class NanoTemplate
|
3
|
+
|
4
|
+
# build template
|
5
|
+
# @param [String] value template string
|
6
|
+
# @return [Proc] compiled template Proc
|
7
|
+
# @example NanoTemplate.new.template("<%= foo %>bar").call(OpenStruct.new(\{ foo: 42 })) # 42bar
|
8
|
+
def template(value)
|
9
|
+
begin
|
10
|
+
sub = build_template(value)
|
11
|
+
Proc.new do |stash|
|
12
|
+
stash.instance_eval &sub
|
13
|
+
end
|
14
|
+
rescue => error
|
15
|
+
raise "template compile error:\n#{error}\n--\n#{value}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
# raised if template compile is failed
|
20
|
+
class TemplateCompileError < RuntimeError
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def build_template(value)
|
26
|
+
eval build_template_str(value)
|
27
|
+
rescue => error
|
28
|
+
raise TemplateCompileError.new("template compile error:\n#{error}\n-- in --\n#{value}")
|
29
|
+
end
|
30
|
+
|
31
|
+
# build template
|
32
|
+
def build_template_str(value)
|
33
|
+
"Proc.new do\nbegin\nresult = ''\n" +
|
34
|
+
"result += '" +
|
35
|
+
escape(value)
|
36
|
+
.gsub(/^\s*%=(.*)$/) { "' + (#{unescape($1)}).to_s + '" }
|
37
|
+
.gsub(/^\s*%(.*)$[\r\n]*/) { "'\n#{unescape($1)}\nresult += '" }
|
38
|
+
.gsub(/<%=(.*?)%>/) { "' + (#{unescape($1)}).to_s + '" }
|
39
|
+
.gsub(/<%(.*?)%>/) { "'\n#{unescape($1)}\nresult += '" } +
|
40
|
+
"'\n" + "result\n" +
|
41
|
+
"\nrescue => error\nraise 'template runtime error: ' + error.to_s + %Q{\\n-- in --\\n} + '#{escape(value)}'\nend\nend\n"
|
42
|
+
end
|
43
|
+
|
44
|
+
def escape(str)
|
45
|
+
str.gsub /'/, "\\'"
|
46
|
+
end
|
47
|
+
|
48
|
+
def unescape(str)
|
49
|
+
str.gsub(/\\'/, "'")
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = "nano_template"
|
6
|
+
spec.version = "0.0.1"
|
7
|
+
spec.authors = ["Narazaka"]
|
8
|
+
spec.email = ["info@narazaka.net"]
|
9
|
+
|
10
|
+
spec.summary = %q{text template like erb that can be used with opal}
|
11
|
+
spec.description = %q{text template like erb that can be used with opal}
|
12
|
+
spec.homepage = "https://github.com/Narazaka/nano_template"
|
13
|
+
|
14
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
15
|
+
spec.require_paths = ["lib"]
|
16
|
+
|
17
|
+
spec.add_development_dependency "bundler", ">= 1.7.9"
|
18
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
19
|
+
spec.add_development_dependency "rspec", "~> 3.4"
|
20
|
+
spec.add_development_dependency "yard", "~> 0.8.7"
|
21
|
+
spec.add_development_dependency "simplecov", "~> 0.11"
|
22
|
+
spec.add_development_dependency "codecov", "~>0.1"
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nano_template
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Narazaka
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-02-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.7.9
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.7.9
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.4'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.4'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: yard
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.8.7
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.8.7
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.11'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.11'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: codecov
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.1'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.1'
|
97
|
+
description: text template like erb that can be used with opal
|
98
|
+
email:
|
99
|
+
- info@narazaka.net
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- ".gitignore"
|
105
|
+
- ".gitmodules"
|
106
|
+
- ".rspec"
|
107
|
+
- ".travis.yml"
|
108
|
+
- Gemfile
|
109
|
+
- README.md
|
110
|
+
- Rakefile
|
111
|
+
- lib/nano_template.rb
|
112
|
+
- nano_template.gemspec
|
113
|
+
homepage: https://github.com/Narazaka/nano_template
|
114
|
+
licenses: []
|
115
|
+
metadata: {}
|
116
|
+
post_install_message:
|
117
|
+
rdoc_options: []
|
118
|
+
require_paths:
|
119
|
+
- lib
|
120
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0'
|
130
|
+
requirements: []
|
131
|
+
rubyforge_project:
|
132
|
+
rubygems_version: 2.4.5.1
|
133
|
+
signing_key:
|
134
|
+
specification_version: 4
|
135
|
+
summary: text template like erb that can be used with opal
|
136
|
+
test_files: []
|
137
|
+
has_rdoc:
|