hmote 1.4.0 → 1.5.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 855833b547b4d187ff22113c18fe341b5c51d5cb
4
- data.tar.gz: ede1156a3d50af5965e2bf39a5bd9dc550feb767
3
+ metadata.gz: 19990b7d9d7fe577bc7dc27b2557f6ec928d5620
4
+ data.tar.gz: 81433bcbf7ddc6068bd41a75ec4e1df0c69a9833
5
5
  SHA512:
6
- metadata.gz: f8f3e5add70ab91115ffd4c3ec06fccee2527e3a77351aa2d225f7dbf5ee43a4777c70f7c4e54ecbcd598f9b1b7c8f7f9efa48a68d95a48e0b876d16a5d21006
7
- data.tar.gz: d38d472e9bc930879e9261f1ddfa6c4e4a00255c0dbc236a1274489af5c1f8c0524a40bca639ea2f0b65535db23d34e614e0c11655254c6c251f5cd398a4cd9a
6
+ metadata.gz: 67dc3c6016d0f8d3a94bb644f04cf8c1badec0347c70304e8cd3ac4f099f707ee6d5e5a6e3d5a22cb3a9d861096af80a2482487c3ca0a57c3e0cb774149228be
7
+ data.tar.gz: aa7a8f852a4d7220a273ef42f3924cea6155cccf1d834858c82de74cf04e63f126427de0345a415cc471f32b5ae5f665f28be9c9a553fdde8cb3bba2288256b7
data/LICENSE CHANGED
@@ -1,6 +1,5 @@
1
- Copyright (c) 2011-2014 Michel Martens
2
- Copyright (c) 2014-2015 Francesco Rodríguez
3
- Copyright (c) 2014-2015 Mayn Ektvedt Kjær
1
+ Copyright (c) 2014-2016 Francesco Rodríguez
2
+ Copyright (c) 2011-2015 Michel Martens
4
3
 
5
4
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
5
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- hmote
1
+ HMote [![Build Status](https://travis-ci.org/frodsan/hmote.svg)](https://travis-ci.org/frodsan/hmote)
2
2
  =====
3
3
 
4
4
  Minimal template engine with default escaping.
@@ -9,6 +9,27 @@ Description
9
9
  HMote is a fork of [Mote][mote] that uses [Hache][hache]
10
10
  to auto-escape HTML special characters.
11
11
 
12
+ Installation
13
+ ------------
14
+
15
+ Add this line to your application's Gemfile:
16
+
17
+ ```ruby
18
+ gem "hmote"
19
+ ```
20
+
21
+ And then execute:
22
+
23
+ ```
24
+ $ bundle
25
+ ```
26
+
27
+ Or install it yourself as:
28
+
29
+ ```
30
+ $ gem install hmote
31
+ ```
32
+
12
33
  Basic Usage
13
34
  -----------
14
35
 
@@ -132,14 +153,37 @@ Related projects:
132
153
 
133
154
  - [hmote-render][hmote-render]: HMote plugin for Cuba.
134
155
 
135
- Installation
156
+ Contributing
136
157
  ------------
137
158
 
159
+ Fork the project with:
160
+
138
161
  ```
139
- $ gem install hmote
162
+ $ git clone git@github.com:frodsan/hmote.git
163
+ ```
164
+
165
+ To install dependencies, use:
166
+
167
+ ```
168
+ $ bundle install
140
169
  ```
141
170
 
171
+ To run the test suite, do:
172
+
173
+ ```
174
+ $ rake test
175
+ ```
176
+
177
+ For bug reports and pull requests use [GitHub][issues].
178
+
179
+ License
180
+ -------
181
+
182
+ HMote is released under the [MIT License][mit].
183
+
184
+ [mit]: http://www.opensource.org/licenses/MIT
142
185
  [mote]: https://github.com/soveran/mote
143
186
  [hache]: https://github.com/harmoni/hache
144
187
  [hmote-render]: https://github.com/harmoni/hmote-render
188
+ [issues]: https://github.com/frodsan/hmote/issues
145
189
  [xss]: http://en.wikipedia.org/wiki/Cross-Site_Scripting
data/lib/hmote/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  class HMote
2
- VERSION = "1.4.0"
2
+ VERSION = "1.5.0"
3
3
  end
data/lib/hmote.rb CHANGED
@@ -1,3 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Copyright (c) 2011-2016 Francesco Rodríguez
4
+ # Copyright (c) 2011-2015 Michel Martens
5
+ #
6
+ # Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ # of this software and associated documentation files (the "Software"), to deal
8
+ # in the Software without restriction, including without limitation the rights
9
+ # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ # copies of the Software, and to permit persons to whom the Software is
11
+ # furnished to do so, subject to the following conditions:
12
+ #
13
+ # The above copyright notice and this permission notice shall be included in
14
+ # all copies or substantial portions of the Software.
15
+ #
16
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ # THE SOFTWARE.
23
+
1
24
  require "hache"
2
25
 
3
26
  class HMote
@@ -9,20 +32,12 @@ class HMote
9
32
 
10
33
  def self.parse(template, context = self, vars = [])
11
34
  terms = template.split(PATTERN)
12
- parts = "Proc.new do |params, __o|\n params ||= {}; __o ||= ''\n"
35
+ parts = "Proc.new do |params, __o|\n params ||= {}; __o ||= ''\n".dup
13
36
 
14
- vars.each do |var|
15
- parts << sprintf("%s = params[%p]\n", var, var)
16
- end
37
+ vars.each { |var| parts << format("%s = params[%p]\n", var, var) }
17
38
 
18
39
  while (term = terms.shift)
19
- case term
20
- when "<?" then parts << "#{terms.shift}\n"
21
- when "%" then parts << "#{terms.shift}\n"
22
- when "{{" then parts << "__o << Hache.h((#{terms.shift}).to_s)\n"
23
- when "{{!" then parts << "__o << (#{terms.shift}).to_s\n"
24
- else parts << "__o << #{term.dump}\n"
25
- end
40
+ parts << parse_expression(terms, term)
26
41
  end
27
42
 
28
43
  parts << "__o; end"
@@ -30,6 +45,16 @@ class HMote
30
45
  compile(context, parts)
31
46
  end
32
47
 
48
+ def self.parse_expression(terms, term)
49
+ case term
50
+ when "<?" then terms.shift + "\n"
51
+ when "%" then terms.shift + "\n"
52
+ when "{{" then "__o << Hache.h((" + terms.shift + ").to_s)\n"
53
+ when "{{!" then "__o << (" + terms.shift + ").to_s\n"
54
+ else "__o << " + term.dump + "\n"
55
+ end
56
+ end
57
+
33
58
  def self.compile(context, parts)
34
59
  context.instance_eval(parts)
35
60
  end
data/test/helper.rb CHANGED
@@ -1,2 +1,5 @@
1
- require "cutest"
1
+ require "bundler/setup"
2
+ require "minitest/autorun"
3
+ require "minitest/pride"
4
+ require "minitest/sugar"
2
5
  require_relative "../lib/hmote"
@@ -1,16 +1,14 @@
1
1
  require_relative "helper"
2
2
 
3
- class Cutest::Scope
3
+ class HelpersTest < Minitest::Test
4
4
  include HMote::Helpers
5
5
 
6
- def foo
7
- "foo"
6
+ setup do
7
+ hmote_cache.clear
8
8
  end
9
- end
10
9
 
11
- scope("helpers") do
12
- prepare do
13
- hmote_cache.clear
10
+ def foo
11
+ "foo"
14
12
  end
15
13
 
16
14
  test "using functions in the context" do
@@ -18,7 +16,7 @@ scope("helpers") do
18
16
  end
19
17
 
20
18
  test "passing in a context" do
21
- assert_raise(NameError) do
19
+ assert_raises(NameError) do
22
20
  hmote("test/foo.mote", {}, TOPLEVEL_BINDING)
23
21
  end
24
22
  end
@@ -1,6 +1,6 @@
1
1
  require_relative "helper"
2
2
 
3
- scope("parsing") do
3
+ class ParsingTest < Minitest::Test
4
4
  test "assignment" do
5
5
  template = HMote.parse("{{ 1 + 2 }}")
6
6
 
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hmote
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Francesco Rodríguez
8
- - Mayn Kjær
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2015-10-01 00:00:00.000000000 Z
11
+ date: 2016-01-22 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: hache
@@ -26,52 +25,61 @@ dependencies:
26
25
  - !ruby/object:Gem::Version
27
26
  version: '1.1'
28
27
  - !ruby/object:Gem::Dependency
29
- name: cutest
28
+ name: minitest
30
29
  requirement: !ruby/object:Gem::Requirement
31
30
  requirements:
32
31
  - - "~>"
33
32
  - !ruby/object:Gem::Version
34
- version: '1.2'
33
+ version: '5.8'
35
34
  type: :development
36
35
  prerelease: false
37
36
  version_requirements: !ruby/object:Gem::Requirement
38
37
  requirements:
39
38
  - - "~>"
40
39
  - !ruby/object:Gem::Version
41
- version: '1.2'
42
- description: A minimum operational template that escapes HTML tags by default. Inspired
43
- by mote.
44
- email:
45
- - frodsan@protonmail.ch
46
- - mayn.kjaer@gmail.com
40
+ version: '5.8'
41
+ - !ruby/object:Gem::Dependency
42
+ name: minitest-sugar
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '2.1'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '2.1'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ description: A minimum operational template that escapes HTML tags by default
70
+ email: frodsan@protonmail.ch
47
71
  executables: []
48
72
  extensions: []
49
73
  extra_rdoc_files: []
50
74
  files:
51
- - ".gems"
52
75
  - LICENSE
53
76
  - README.md
54
- - benchmarks/.gems
55
- - benchmarks/escaping.rb
56
- - benchmarks/helpers/helper.rb
57
- - benchmarks/helpers/hmote_helper.rb
58
- - benchmarks/helpers/rails_helper.rb
59
- - benchmarks/memory.rb
60
- - benchmarks/safe.rb
61
- - benchmarks/templates/erb
62
- - benchmarks/templates/mote
63
- - hmote.gemspec
64
77
  - lib/hmote.rb
65
78
  - lib/hmote/version.rb
66
- - makefile
67
- - test/foo.mote
68
79
  - test/helper.rb
69
- - test/helpers.rb
70
- - test/parsing.rb
71
- - test/views/context.mote
72
- - test/views/home.mote
73
- - test/views/layout.mote
74
- homepage: https://github.com/harmoni/hmote
80
+ - test/helpers_test.rb
81
+ - test/parsing_test.rb
82
+ homepage: https://github.com/frodsan/hmote
75
83
  licenses:
76
84
  - MIT
77
85
  metadata: {}
@@ -91,8 +99,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
91
99
  version: '0'
92
100
  requirements: []
93
101
  rubyforge_project:
94
- rubygems_version: 2.4.8
102
+ rubygems_version: 2.5.1
95
103
  signing_key:
96
104
  specification_version: 4
97
- summary: A minimum operational template that escapes HTML tags by default.
98
- test_files: []
105
+ summary: A minimum operational template that escapes HTML tags by default
106
+ test_files:
107
+ - test/helper.rb
108
+ - test/helpers_test.rb
109
+ - test/parsing_test.rb
data/.gems DELETED
@@ -1,2 +0,0 @@
1
- cutest -v 1.2.2
2
- hache -v 1.1.0
data/benchmarks/.gems DELETED
@@ -1,3 +0,0 @@
1
- actionview -v 4.2.3
2
- allocation_stats -v 0.1.5
3
- benchmark-ips -v 2.3.0
@@ -1,11 +0,0 @@
1
- require_relative "helpers/helper"
2
- require_relative "helpers/hmote_helper"
3
- require_relative "helpers/rails_helper"
4
-
5
- text = %q(some < text > inside & these " escapable' characters/1234)
6
-
7
- Benchmark.ips do |x|
8
- x.report("hmote") { hmote(text: text) }
9
- x.report("rails") { rails(text: text) }
10
- x.compare!
11
- end
@@ -1,8 +0,0 @@
1
- require "benchmark/ips"
2
-
3
- def template_path(template)
4
- File.join(File.expand_path("../templates", __dir__), template)
5
- end
6
-
7
- MOTE_TEMPLATE = template_path("mote")
8
- ERB_TEMPLATE = template_path("erb")
@@ -1,7 +0,0 @@
1
- require_relative "../../lib/hmote"
2
-
3
- include HMote::Helpers
4
-
5
- def hmote(params)
6
- super(MOTE_TEMPLATE, params)
7
- end
@@ -1,28 +0,0 @@
1
- require "action_view"
2
-
3
- class Context
4
- class LookupContext
5
- def disable_cache
6
- yield
7
- end
8
-
9
- def find_template(*args)
10
- end
11
- end
12
-
13
- def lookup_context
14
- @lookup_context ||= LookupContext.new
15
- end
16
- end
17
-
18
- ACTIONVIEW_CONTEXT = Context.new
19
- ACTIONVIEW_TEMPLATE = ActionView::Template.new(
20
- File.read(ERB_TEMPLATE), "template",
21
- ActionView::Template::Handlers::ERB.new,
22
- format: :html, virtual_path: "template"
23
- )
24
- ACTIONVIEW_TEMPLATE.locals = [:text]
25
-
26
- def rails(params)
27
- ACTIONVIEW_TEMPLATE.render(ACTIONVIEW_CONTEXT, params)
28
- end
data/benchmarks/memory.rb DELETED
@@ -1,24 +0,0 @@
1
- require_relative "helpers/helper"
2
- require_relative "helpers/hmote_helper"
3
- require "allocation_stats"
4
-
5
- def benchmark(text)
6
- stats = AllocationStats.new(burn: 5).trace do
7
- hmote(text: text)
8
- end
9
-
10
- allocations = stats.allocations.all.size
11
- memsize = stats.allocations.bytes.to_a.inject(&:+)
12
-
13
- puts "total allocations: #{ allocations }"
14
- puts "total memsize: #{ memsize }"
15
- puts stats.allocations(alias_paths: true).to_text
16
- end
17
-
18
- puts "== Unsafe mode\n"
19
-
20
- benchmark(%q(some < text > inside & these " escapable' characters/1234))
21
-
22
- puts "\n== Safe mode\n"
23
-
24
- benchmark(%q(some text without escapable characters))
data/benchmarks/safe.rb DELETED
@@ -1,11 +0,0 @@
1
- require_relative "helpers/helper"
2
- require_relative "helpers/hmote_helper"
3
- require_relative "helpers/rails_helper"
4
-
5
- text = %q(some text without escapable characters).html_safe
6
-
7
- Benchmark.ips do |x|
8
- x.report("hmote") { hmote(text: text) }
9
- x.report("rails") { rails(text: text) }
10
- x.compare!
11
- end
@@ -1 +0,0 @@
1
- <%= text %>
@@ -1 +0,0 @@
1
- {{ text }}
data/hmote.gemspec DELETED
@@ -1,17 +0,0 @@
1
- require_relative "lib/hmote/version"
2
-
3
- Gem::Specification.new do |s|
4
- s.name = "hmote"
5
- s.version = HMote::VERSION
6
- s.summary = "A minimum operational template that escapes HTML tags by default."
7
- s.description = s.summary + " Inspired by mote."
8
- s.authors = ["Francesco Rodríguez", "Mayn Kjær"]
9
- s.email = ["frodsan@protonmail.ch", "mayn.kjaer@gmail.com"]
10
- s.homepage = "https://github.com/harmoni/hmote"
11
- s.license = "MIT"
12
-
13
- s.files = `git ls-files`.split("\n")
14
-
15
- s.add_dependency "hache", "~> 1.1"
16
- s.add_development_dependency "cutest", "~> 1.2"
17
- end
data/makefile DELETED
@@ -1,8 +0,0 @@
1
- .DEFAULT_GOAL := test
2
- .PHONY: test
3
-
4
- gem:
5
- gem build *.gemspec
6
-
7
- test:
8
- cutest test/*.rb
data/test/foo.mote DELETED
@@ -1 +0,0 @@
1
- {{ foo }}
@@ -1 +0,0 @@
1
- {{ app.name }}
data/test/views/home.mote DELETED
@@ -1 +0,0 @@
1
- <h1>Home</h1>
@@ -1,2 +0,0 @@
1
- <title>{{ title }}</title>
2
- {{! content }}