scribble 1.0.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 +7 -0
- data/.gitignore +22 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +455 -0
- data/Rakefile +2 -0
- data/lib/scribble.rb +44 -0
- data/lib/scribble/block.rb +25 -0
- data/lib/scribble/converter.rb +10 -0
- data/lib/scribble/errors.rb +24 -0
- data/lib/scribble/method.rb +91 -0
- data/lib/scribble/methods/if.rb +26 -0
- data/lib/scribble/methods/layout.rb +25 -0
- data/lib/scribble/methods/partial.rb +14 -0
- data/lib/scribble/methods/times.rb +11 -0
- data/lib/scribble/nodes/call.rb +55 -0
- data/lib/scribble/nodes/ending.rb +6 -0
- data/lib/scribble/nodes/node.rb +24 -0
- data/lib/scribble/nodes/value.rb +16 -0
- data/lib/scribble/objects/boolean.rb +33 -0
- data/lib/scribble/objects/fixnum.rb +53 -0
- data/lib/scribble/objects/nil.rb +21 -0
- data/lib/scribble/objects/string.rb +62 -0
- data/lib/scribble/parsing/nester.rb +49 -0
- data/lib/scribble/parsing/parser.rb +132 -0
- data/lib/scribble/parsing/reporter.rb +71 -0
- data/lib/scribble/parsing/transform.rb +87 -0
- data/lib/scribble/partial.rb +41 -0
- data/lib/scribble/registry.rb +95 -0
- data/lib/scribble/support/context.rb +98 -0
- data/lib/scribble/support/matcher.rb +74 -0
- data/lib/scribble/support/unmatched.rb +70 -0
- data/lib/scribble/support/utilities.rb +49 -0
- data/lib/scribble/template.rb +61 -0
- data/lib/scribble/version.rb +3 -0
- data/scribble.gemspec +22 -0
- data/test/all.rb +23 -0
- data/test/errors_test.rb +94 -0
- data/test/methods/if_test.rb +49 -0
- data/test/methods/layout_test.rb +71 -0
- data/test/methods/partial_test.rb +85 -0
- data/test/methods/times_test.rb +10 -0
- data/test/objects/boolean_test.rb +162 -0
- data/test/objects/fixnum_test.rb +236 -0
- data/test/objects/nil_test.rb +83 -0
- data/test/objects/string_test.rb +268 -0
- data/test/parsing/parsing_test.rb +234 -0
- data/test/registry_test.rb +264 -0
- data/test/template_test.rb +51 -0
- data/test/test_helper.rb +65 -0
- metadata +127 -0
@@ -0,0 +1,51 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
describe Scribble::Template do
|
4
|
+
|
5
|
+
# Rendering
|
6
|
+
|
7
|
+
it 'can be rendered multiple times' do
|
8
|
+
template = Scribble::Template.new('Hello World')
|
9
|
+
assert_equal 'Hello World', template.render
|
10
|
+
assert_equal 'Hello World', template.render
|
11
|
+
assert_equal 'Hello World', template.render
|
12
|
+
end
|
13
|
+
|
14
|
+
# Partial loading
|
15
|
+
|
16
|
+
it "can't load partials without a loader" do
|
17
|
+
assert_raises_message 'Cannot load partial' do
|
18
|
+
Scribble::Template.new('Hello World').load 'some_partial', nil
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
it "loads partials when it has a loader" do
|
23
|
+
loader = MockLoader.new some_partial: ''
|
24
|
+
assert_instance_of Scribble::Partial::Context, Scribble::Template.new('Hello World', loader: loader).load('some_partial', nil)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Formats
|
28
|
+
|
29
|
+
it "can't render in format without template format" do
|
30
|
+
assert_raises_message 'Cannot convert to' do
|
31
|
+
Scribble::Template.new('Hello World').render format: :render_format
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
it "can't render in format without suitable converter" do
|
36
|
+
assert_raises_message 'No suitable converter' do
|
37
|
+
Scribble::Template.new('Hello World', format: :template_format).render format: :render_format
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
it "won't need converter to render in template format" do
|
42
|
+
assert_scribble_render 'Hello World', 'Hello World',
|
43
|
+
format: :template_format, template: {format: :template_format}
|
44
|
+
end
|
45
|
+
|
46
|
+
it "renders in format when it has a template format and a suitable converter" do
|
47
|
+
converter = MockConverter.new :template_format, :render_format
|
48
|
+
assert_scribble_render 'Hello World', 'template_format > render_format(Hello World)',
|
49
|
+
format: :render_format, template: {format: :template_format, converters: [converter]}
|
50
|
+
end
|
51
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'pry'
|
2
|
+
require 'minitest/autorun'
|
3
|
+
|
4
|
+
require_relative '../lib/scribble'
|
5
|
+
|
6
|
+
module MiniTest::Assertions
|
7
|
+
def assert_scribble_parse source, serialized_transform
|
8
|
+
assert_equal serialized_transform, serialize_transform(Scribble::Template.new(source).nodes)
|
9
|
+
end
|
10
|
+
|
11
|
+
def assert_scribble_render source, render_result, template: {}, **options
|
12
|
+
assert_equal render_result, Scribble::Template.new(source, **template).render(options)
|
13
|
+
end
|
14
|
+
|
15
|
+
def assert_scribble_raises source, exception_class = Scribble::Errors::Undefined, message = nil
|
16
|
+
e = assert_raises exception_class do
|
17
|
+
Scribble::Template.new(source).render
|
18
|
+
end
|
19
|
+
assert_equal message, e.message unless message.nil?
|
20
|
+
end
|
21
|
+
|
22
|
+
def assert_raises_message regex, exception_class = RuntimeError, &block
|
23
|
+
assert_match regex, assert_raises(exception_class, &block).message
|
24
|
+
end
|
25
|
+
|
26
|
+
def serialize_transform node = transform
|
27
|
+
case node
|
28
|
+
when Array then node.map { |node| serialize_transform node }.join(', ')
|
29
|
+
when Scribble::Nodes::Value then node.value.is_a?(String) ? "'#{node.value}'" : node.value.inspect
|
30
|
+
when Scribble::Nodes::Call
|
31
|
+
call = node.name.to_s
|
32
|
+
call = "#{serialize_transform(node.receiver)}.#{call}" if node.receiver
|
33
|
+
call = "#{call}(#{serialize_transform node.args})" unless node.allow_variable
|
34
|
+
call = "#{call} { #{serialize_transform node.nodes} }" if node.nodes
|
35
|
+
call
|
36
|
+
else raise "Unable to serialize transform: #{node.inspect}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class MockLoader
|
42
|
+
def initialize partials
|
43
|
+
@partials = partials
|
44
|
+
end
|
45
|
+
|
46
|
+
def load name
|
47
|
+
source, format = @partials[name.to_sym]
|
48
|
+
Scribble::Partial.new source, format: format
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
MockConverter = Struct.new :from, :to do
|
53
|
+
def convert source
|
54
|
+
"#{from} > #{to}(#{source})"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
class Scribble::Registry
|
59
|
+
def reset
|
60
|
+
class_names, methods = @class_names.dup, @methods.dup
|
61
|
+
yield
|
62
|
+
ensure
|
63
|
+
@class_names, @methods = class_names, methods
|
64
|
+
end
|
65
|
+
end
|
metadata
ADDED
@@ -0,0 +1,127 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: scribble
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Stefan Kroes
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-11-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: parslet
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
description: Scribble is a client facing template language similar to Liquid. Scribble
|
28
|
+
was written in Ruby and can be used in any Ruby or Ruby on Rails project. It takes
|
29
|
+
a template file, consisting of text and Scribble tags and transforms it into text.
|
30
|
+
Scribble can be used to transform any plain text format like HTML, Markdown, JSON,
|
31
|
+
XML, etc. Client facing means that it is safe to use Scribble to run/evaluate user
|
32
|
+
provided templates.
|
33
|
+
email:
|
34
|
+
- stefan.kroes@lab01.nl
|
35
|
+
executables: []
|
36
|
+
extensions: []
|
37
|
+
extra_rdoc_files: []
|
38
|
+
files:
|
39
|
+
- ".gitignore"
|
40
|
+
- Gemfile
|
41
|
+
- LICENSE.txt
|
42
|
+
- README.md
|
43
|
+
- Rakefile
|
44
|
+
- lib/scribble.rb
|
45
|
+
- lib/scribble/block.rb
|
46
|
+
- lib/scribble/converter.rb
|
47
|
+
- lib/scribble/errors.rb
|
48
|
+
- lib/scribble/method.rb
|
49
|
+
- lib/scribble/methods/if.rb
|
50
|
+
- lib/scribble/methods/layout.rb
|
51
|
+
- lib/scribble/methods/partial.rb
|
52
|
+
- lib/scribble/methods/times.rb
|
53
|
+
- lib/scribble/nodes/call.rb
|
54
|
+
- lib/scribble/nodes/ending.rb
|
55
|
+
- lib/scribble/nodes/node.rb
|
56
|
+
- lib/scribble/nodes/value.rb
|
57
|
+
- lib/scribble/objects/boolean.rb
|
58
|
+
- lib/scribble/objects/fixnum.rb
|
59
|
+
- lib/scribble/objects/nil.rb
|
60
|
+
- lib/scribble/objects/string.rb
|
61
|
+
- lib/scribble/parsing/nester.rb
|
62
|
+
- lib/scribble/parsing/parser.rb
|
63
|
+
- lib/scribble/parsing/reporter.rb
|
64
|
+
- lib/scribble/parsing/transform.rb
|
65
|
+
- lib/scribble/partial.rb
|
66
|
+
- lib/scribble/registry.rb
|
67
|
+
- lib/scribble/support/context.rb
|
68
|
+
- lib/scribble/support/matcher.rb
|
69
|
+
- lib/scribble/support/unmatched.rb
|
70
|
+
- lib/scribble/support/utilities.rb
|
71
|
+
- lib/scribble/template.rb
|
72
|
+
- lib/scribble/version.rb
|
73
|
+
- scribble.gemspec
|
74
|
+
- test/all.rb
|
75
|
+
- test/errors_test.rb
|
76
|
+
- test/methods/if_test.rb
|
77
|
+
- test/methods/layout_test.rb
|
78
|
+
- test/methods/partial_test.rb
|
79
|
+
- test/methods/times_test.rb
|
80
|
+
- test/objects/boolean_test.rb
|
81
|
+
- test/objects/fixnum_test.rb
|
82
|
+
- test/objects/nil_test.rb
|
83
|
+
- test/objects/string_test.rb
|
84
|
+
- test/parsing/parsing_test.rb
|
85
|
+
- test/registry_test.rb
|
86
|
+
- test/template_test.rb
|
87
|
+
- test/test_helper.rb
|
88
|
+
homepage: https://github.com/stefankroes/scribble
|
89
|
+
licenses:
|
90
|
+
- MIT
|
91
|
+
metadata: {}
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options: []
|
94
|
+
require_paths:
|
95
|
+
- lib
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ">="
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ">="
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
requirements: []
|
107
|
+
rubyforge_project:
|
108
|
+
rubygems_version: 2.4.2
|
109
|
+
signing_key:
|
110
|
+
specification_version: 4
|
111
|
+
summary: Scribble is a client facing template language similar to Liquid build in
|
112
|
+
Ruby
|
113
|
+
test_files:
|
114
|
+
- test/all.rb
|
115
|
+
- test/errors_test.rb
|
116
|
+
- test/methods/if_test.rb
|
117
|
+
- test/methods/layout_test.rb
|
118
|
+
- test/methods/partial_test.rb
|
119
|
+
- test/methods/times_test.rb
|
120
|
+
- test/objects/boolean_test.rb
|
121
|
+
- test/objects/fixnum_test.rb
|
122
|
+
- test/objects/nil_test.rb
|
123
|
+
- test/objects/string_test.rb
|
124
|
+
- test/parsing/parsing_test.rb
|
125
|
+
- test/registry_test.rb
|
126
|
+
- test/template_test.rb
|
127
|
+
- test/test_helper.rb
|