scribble 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,236 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
describe 'scribble fixnum' do
|
4
|
+
it 'can be used as a literal' do
|
5
|
+
assert_scribble_render '{{ 3 }}', '3'
|
6
|
+
assert_scribble_render '{{ 322 }}', '322'
|
7
|
+
assert_scribble_render '{{ 3243232 }}', '3243232'
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'knows if is odd' do
|
11
|
+
assert_scribble_render '{{ 3.odd }}', 'true'
|
12
|
+
assert_scribble_render '{{ 4.odd }}', 'false'
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'knows if is even' do
|
16
|
+
assert_scribble_render '{{ 3.even }}', 'false'
|
17
|
+
assert_scribble_render '{{ 4.even }}', 'true'
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'knows if is zero' do
|
21
|
+
assert_scribble_render '{{ -5.zero }}', 'false'
|
22
|
+
assert_scribble_render '{{ 0.zero }}', 'true'
|
23
|
+
assert_scribble_render '{{ 5.zero }}', 'false'
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'knows if is nonzero' do
|
27
|
+
assert_scribble_render '{{ -5.nonzero }}', 'true'
|
28
|
+
assert_scribble_render '{{ 0.nonzero}}', 'false'
|
29
|
+
assert_scribble_render '{{ 5.nonzero}}', 'true'
|
30
|
+
end
|
31
|
+
|
32
|
+
it 'supports method and operator for logical or' do
|
33
|
+
assert_scribble_render '{{ 0.or true }}', 'true'
|
34
|
+
assert_scribble_render '{{ 3.or true }}', 'true'
|
35
|
+
assert_scribble_render '{{ 0.or false }}', 'false'
|
36
|
+
assert_scribble_render '{{ 3.or false }}', 'true'
|
37
|
+
assert_scribble_render '{{ 0.or 2 }}', 'true'
|
38
|
+
assert_scribble_render '{{ 3.or 2 }}', 'true'
|
39
|
+
assert_scribble_render '{{ 0.or 0 }}', 'false'
|
40
|
+
assert_scribble_render '{{ 3.or 0 }}', 'true'
|
41
|
+
assert_scribble_render "{{ 0.or 'foo' }}", 'true'
|
42
|
+
assert_scribble_render "{{ 3.or 'foo' }}", 'true'
|
43
|
+
assert_scribble_render "{{ 0.or '' }}", 'false'
|
44
|
+
assert_scribble_render "{{ 3.or '' }}", 'true'
|
45
|
+
assert_scribble_render '{{ 0 | true }}', 'true'
|
46
|
+
assert_scribble_render '{{ 3 | true }}', 'true'
|
47
|
+
assert_scribble_render '{{ 0 | false }}', 'false'
|
48
|
+
assert_scribble_render '{{ 3 | false }}', 'true'
|
49
|
+
assert_scribble_render '{{ 0 | 2 }}', 'true'
|
50
|
+
assert_scribble_render '{{ 3 | 2 }}', 'true'
|
51
|
+
assert_scribble_render '{{ 0 | 0 }}', 'false'
|
52
|
+
assert_scribble_render '{{ 3 | 0 }}', 'true'
|
53
|
+
assert_scribble_render "{{ 0 | 'foo' }}", 'true'
|
54
|
+
assert_scribble_render "{{ 3 | 'foo' }}", 'true'
|
55
|
+
assert_scribble_render "{{ 0 | '' }}", 'false'
|
56
|
+
assert_scribble_render "{{ 3 | '' }}", 'true'
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'supports method and operator for logical and' do
|
60
|
+
assert_scribble_render '{{ 0.and true }}', 'false'
|
61
|
+
assert_scribble_render '{{ 3.and true }}', 'true'
|
62
|
+
assert_scribble_render '{{ 0.and false }}', 'false'
|
63
|
+
assert_scribble_render '{{ 3.and false }}', 'false'
|
64
|
+
assert_scribble_render '{{ 0.and 2 }}', 'false'
|
65
|
+
assert_scribble_render '{{ 3.and 2 }}', 'true'
|
66
|
+
assert_scribble_render '{{ 0.and 0 }}', 'false'
|
67
|
+
assert_scribble_render '{{ 3.and 0 }}', 'false'
|
68
|
+
assert_scribble_render "{{ 0.and 'foo' }}", 'false'
|
69
|
+
assert_scribble_render "{{ 3.and 'foo' }}", 'true'
|
70
|
+
assert_scribble_render "{{ 0.and '' }}", 'false'
|
71
|
+
assert_scribble_render "{{ 3.and '' }}", 'false'
|
72
|
+
assert_scribble_render '{{ 0 & true }}', 'false'
|
73
|
+
assert_scribble_render '{{ 3 & true }}', 'true'
|
74
|
+
assert_scribble_render '{{ 0 & false }}', 'false'
|
75
|
+
assert_scribble_render '{{ 3 & false }}', 'false'
|
76
|
+
assert_scribble_render '{{ 0 & 2 }}', 'false'
|
77
|
+
assert_scribble_render '{{ 3 & 2 }}', 'true'
|
78
|
+
assert_scribble_render '{{ 0 & 0 }}', 'false'
|
79
|
+
assert_scribble_render '{{ 3 & 0 }}', 'false'
|
80
|
+
assert_scribble_render "{{ 0 & 'foo' }}", 'false'
|
81
|
+
assert_scribble_render "{{ 3 & 'foo' }}", 'true'
|
82
|
+
assert_scribble_render "{{ 0 & '' }}", 'false'
|
83
|
+
assert_scribble_render "{{ 3 & '' }}", 'false'
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'can equal another integer' do
|
87
|
+
assert_scribble_render '{{ 3.equals 3 }}', 'true'
|
88
|
+
assert_scribble_render '{{ 3.equals 4 }}', 'false'
|
89
|
+
assert_scribble_render '{{ 3 = 3 }}', 'true'
|
90
|
+
assert_scribble_render '{{ 3 = 4 }}', 'false'
|
91
|
+
end
|
92
|
+
|
93
|
+
it 'does not equal another type' do
|
94
|
+
assert_scribble_render "{{ 3.equals 'foo' }}", 'false'
|
95
|
+
assert_scribble_render '{{ 3.equals true }}', 'false'
|
96
|
+
assert_scribble_render "{{ 3 = 'foo' }}", 'false'
|
97
|
+
assert_scribble_render '{{ 3 = true }}', 'false'
|
98
|
+
end
|
99
|
+
|
100
|
+
it 'can differ from another integer' do
|
101
|
+
assert_scribble_render '{{ 3.differs 3 }}', 'false'
|
102
|
+
assert_scribble_render '{{ 3.differs 4 }}', 'true'
|
103
|
+
assert_scribble_render '{{ 3 != 3 }}', 'false'
|
104
|
+
assert_scribble_render '{{ 3 != 4 }}', 'true'
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'differs from another type' do
|
108
|
+
assert_scribble_render "{{ 3.differs 'foo' }}", 'true'
|
109
|
+
assert_scribble_render '{{ 3.differs true }}', 'true'
|
110
|
+
assert_scribble_render "{{ 3 != 'foo' }}", 'true'
|
111
|
+
assert_scribble_render '{{ 3 != true }}', 'true'
|
112
|
+
end
|
113
|
+
|
114
|
+
it 'can be compared to another integer' do
|
115
|
+
assert_scribble_render '{{ 2.greater 1 }}', 'true'
|
116
|
+
assert_scribble_render '{{ 2.greater 2 }}', 'false'
|
117
|
+
assert_scribble_render '{{ 2.greater 3 }}', 'false'
|
118
|
+
assert_scribble_render '{{ 2 > 1 }}', 'true'
|
119
|
+
assert_scribble_render '{{ 2 > 2 }}', 'false'
|
120
|
+
assert_scribble_render '{{ 2 > 3 }}', 'false'
|
121
|
+
assert_scribble_render '{{ 2.less 1 }}', 'false'
|
122
|
+
assert_scribble_render '{{ 2.less 2 }}', 'false'
|
123
|
+
assert_scribble_render '{{ 2.less 3 }}', 'true'
|
124
|
+
assert_scribble_render '{{ 2 < 1 }}', 'false'
|
125
|
+
assert_scribble_render '{{ 2 < 2 }}', 'false'
|
126
|
+
assert_scribble_render '{{ 2 < 3 }}', 'true'
|
127
|
+
assert_scribble_render '{{ 2.greater_or_equal 1 }}', 'true'
|
128
|
+
assert_scribble_render '{{ 2.greater_or_equal 2 }}', 'true'
|
129
|
+
assert_scribble_render '{{ 2.greater_or_equal 3 }}', 'false'
|
130
|
+
assert_scribble_render '{{ 2 >= 1 }}', 'true'
|
131
|
+
assert_scribble_render '{{ 2 >= 2 }}', 'true'
|
132
|
+
assert_scribble_render '{{ 2 >= 3 }}', 'false'
|
133
|
+
assert_scribble_render '{{ 2.less_or_equal 1 }}', 'false'
|
134
|
+
assert_scribble_render '{{ 2.less_or_equal 2 }}', 'true'
|
135
|
+
assert_scribble_render '{{ 2.less_or_equal 3 }}', 'true'
|
136
|
+
assert_scribble_render '{{ 2 <= 1 }}', 'false'
|
137
|
+
assert_scribble_render '{{ 2 <= 2 }}', 'true'
|
138
|
+
assert_scribble_render '{{ 2 <= 3 }}', 'true'
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'can not be compared to another type' do
|
142
|
+
assert_scribble_raises "{{ 2.greater 'foo' }}", Scribble::Errors::Argument
|
143
|
+
assert_scribble_raises '{{ 2.greater true }}', Scribble::Errors::Argument
|
144
|
+
assert_scribble_raises "{{ 2 > 'foo' }}", Scribble::Errors::Argument
|
145
|
+
assert_scribble_raises '{{ 2 > true }}', Scribble::Errors::Argument
|
146
|
+
assert_scribble_raises "{{ 2.less 'foo' }}", Scribble::Errors::Argument
|
147
|
+
assert_scribble_raises '{{ 2.less true }}', Scribble::Errors::Argument
|
148
|
+
assert_scribble_raises "{{ 2 < 'foo' }}", Scribble::Errors::Argument
|
149
|
+
assert_scribble_raises '{{ 2 < true }}', Scribble::Errors::Argument
|
150
|
+
assert_scribble_raises "{{ 2.greater_or_equal 'foo' }}", Scribble::Errors::Argument
|
151
|
+
assert_scribble_raises '{{ 2.greater_or_equal true }}', Scribble::Errors::Argument
|
152
|
+
assert_scribble_raises "{{ 2 >= 'foo' }}", Scribble::Errors::Argument
|
153
|
+
assert_scribble_raises '{{ 2 >= true }}', Scribble::Errors::Argument
|
154
|
+
assert_scribble_raises "{{ 2.less_or_equal 'foo' }}", Scribble::Errors::Argument
|
155
|
+
assert_scribble_raises '{{ 2.less_or_equal true }}', Scribble::Errors::Argument
|
156
|
+
assert_scribble_raises "{{ 2 <= 'foo' }}", Scribble::Errors::Argument
|
157
|
+
assert_scribble_raises '{{ 2 <= true }}', Scribble::Errors::Argument
|
158
|
+
end
|
159
|
+
|
160
|
+
it 'can have integers and strings added to it but not booleans' do
|
161
|
+
assert_scribble_render '{{ 3.add 2 }}', '5'
|
162
|
+
assert_scribble_render '{{ 3.add(-2) }}', '1'
|
163
|
+
assert_scribble_render "{{ 3.add 'foo' }}", '3foo'
|
164
|
+
assert_scribble_raises '{{ 3.add true }}', Scribble::Errors::Argument
|
165
|
+
assert_scribble_render '{{ 3 + 2 }}', '5'
|
166
|
+
assert_scribble_render '{{ 3 + -2 }}', '1'
|
167
|
+
assert_scribble_render "{{ 3 + 'foo' }}", '3foo'
|
168
|
+
assert_scribble_raises '{{ 3 + true }}', Scribble::Errors::Argument
|
169
|
+
end
|
170
|
+
|
171
|
+
it 'can only have integers subtracted from it' do
|
172
|
+
assert_scribble_render '{{ 3.subtract 2 }}', '1'
|
173
|
+
assert_scribble_render '{{ 3.subtract(-2) }}', '5'
|
174
|
+
assert_scribble_raises "{{ 3.subtract 'foo' }}", Scribble::Errors::Argument
|
175
|
+
assert_scribble_raises '{{ 3.subtract true }}', Scribble::Errors::Argument
|
176
|
+
assert_scribble_render '{{ 3 - 2 }}', '1'
|
177
|
+
assert_scribble_render '{{ 3 - -2 }}', '5'
|
178
|
+
assert_scribble_raises "{{ 3 - 'foo' }}", Scribble::Errors::Argument
|
179
|
+
assert_scribble_raises '{{ 3 - true }}', Scribble::Errors::Argument
|
180
|
+
end
|
181
|
+
|
182
|
+
it 'can be multiplied by integers and strings but not booleans' do
|
183
|
+
assert_scribble_render '{{ 3.multiply 2 }}', '6'
|
184
|
+
assert_scribble_render '{{ 3.multiply(-2) }}', '-6'
|
185
|
+
assert_scribble_render "{{ 3.multiply 'foo' }}", 'foofoofoo'
|
186
|
+
assert_scribble_raises "{{ -3.multiply 'foo' }}", Scribble::Errors::Argument
|
187
|
+
assert_scribble_raises '{{ 3.multiply true }}', Scribble::Errors::Argument
|
188
|
+
assert_scribble_render '{{ 3 * 2 }}', '6'
|
189
|
+
assert_scribble_render '{{ 3 * -2 }}', '-6'
|
190
|
+
assert_scribble_render "{{ 3 * 'foo' }}", 'foofoofoo'
|
191
|
+
assert_scribble_raises "{{ -3 * 'foo' }}", Scribble::Errors::Argument
|
192
|
+
assert_scribble_raises '{{ 3 * true }}', Scribble::Errors::Argument
|
193
|
+
end
|
194
|
+
|
195
|
+
it 'can only be divided by integers' do
|
196
|
+
assert_scribble_render '{{ 10.divide 2 }}', '5'
|
197
|
+
assert_scribble_render '{{ 10.divide(-2) }}', '-5'
|
198
|
+
assert_scribble_raises "{{ 10.divide 'foo' }}", Scribble::Errors::Argument
|
199
|
+
assert_scribble_raises '{{ 10.divide true }}', Scribble::Errors::Argument
|
200
|
+
assert_scribble_render '{{ 10 / 2 }}', '5'
|
201
|
+
assert_scribble_render '{{ 10 / -2 }}', '-5'
|
202
|
+
assert_scribble_raises "{{ 10 / 'foo' }}", Scribble::Errors::Argument
|
203
|
+
assert_scribble_raises '{{ 10 / true }}', Scribble::Errors::Argument
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'can only have its remainder taken by integers' do
|
207
|
+
assert_scribble_render '{{ 10.remainder 3 }}', '1'
|
208
|
+
assert_scribble_render '{{ 10.remainder(-3) }}', '-2'
|
209
|
+
assert_scribble_raises "{{ 10.remainder 'foo' }}", Scribble::Errors::Argument
|
210
|
+
assert_scribble_raises '{{ 10.remainder true }}', Scribble::Errors::Argument
|
211
|
+
assert_scribble_render '{{ 10 % 3 }}', '1'
|
212
|
+
assert_scribble_render '{{ 10 % -3 }}', '-2'
|
213
|
+
assert_scribble_raises "{{ 10 % 'foo' }}", Scribble::Errors::Argument
|
214
|
+
assert_scribble_raises '{{ 10 % true }}', Scribble::Errors::Argument
|
215
|
+
end
|
216
|
+
|
217
|
+
it 'can be negated' do
|
218
|
+
assert_scribble_render "{{ 3.negative }}", '-3'
|
219
|
+
assert_scribble_render "{{ -3 }}", '-3'
|
220
|
+
end
|
221
|
+
|
222
|
+
it 'can be logically negated' do
|
223
|
+
assert_scribble_render '{{ 3.not }}', 'false'
|
224
|
+
assert_scribble_render '{{ -3.not }}', 'false'
|
225
|
+
assert_scribble_render '{{ 0.not }}', 'true'
|
226
|
+
assert_scribble_render '{{ !3 }}', 'false'
|
227
|
+
assert_scribble_render '{{ !-3 }}', 'false'
|
228
|
+
assert_scribble_render '{{ !0 }}', 'true'
|
229
|
+
end
|
230
|
+
|
231
|
+
it 'returns an absolute value' do
|
232
|
+
assert_scribble_render '{{ 3.abs }}', '3'
|
233
|
+
assert_scribble_render '{{ -3.abs }}', '3'
|
234
|
+
assert_scribble_render '{{ 0.abs }}', '0'
|
235
|
+
end
|
236
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
describe 'scribble nil' do
|
4
|
+
def with_nil
|
5
|
+
Scribble::Registry.reset do
|
6
|
+
Scribble::Registry.for Scribble::Template::Context do
|
7
|
+
method :nil, to: -> { nil }
|
8
|
+
end
|
9
|
+
|
10
|
+
yield
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'supports method and operator for logical or' do
|
15
|
+
with_nil do
|
16
|
+
assert_scribble_render '{{ nil.or true }}', 'true'
|
17
|
+
assert_scribble_render '{{ nil.or false }}', 'false'
|
18
|
+
assert_scribble_render '{{ nil.or 2 }}', 'true'
|
19
|
+
assert_scribble_render '{{ nil.or 0 }}', 'false'
|
20
|
+
assert_scribble_render "{{ nil.or 'foo' }}", 'true'
|
21
|
+
assert_scribble_render "{{ nil.or '' }}", 'false'
|
22
|
+
assert_scribble_render '{{ nil | true }}', 'true'
|
23
|
+
assert_scribble_render '{{ nil | false }}', 'false'
|
24
|
+
assert_scribble_render '{{ nil | 2 }}', 'true'
|
25
|
+
assert_scribble_render '{{ nil | 0 }}', 'false'
|
26
|
+
assert_scribble_render "{{ nil | 'foo' }}", 'true'
|
27
|
+
assert_scribble_render "{{ nil | '' }}", 'false'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'supports method and operator for logical and' do
|
32
|
+
with_nil do
|
33
|
+
assert_scribble_render '{{ nil.and true }}', 'false'
|
34
|
+
assert_scribble_render '{{ nil.and false }}', 'false'
|
35
|
+
assert_scribble_render '{{ nil.and 2 }}', 'false'
|
36
|
+
assert_scribble_render '{{ nil.and 0 }}', 'false'
|
37
|
+
assert_scribble_render "{{ nil.and 'foo' }}", 'false'
|
38
|
+
assert_scribble_render "{{ nil.and '' }}", 'false'
|
39
|
+
assert_scribble_render '{{ nil & true }}', 'false'
|
40
|
+
assert_scribble_render '{{ nil & false }}', 'false'
|
41
|
+
assert_scribble_render '{{ nil & 2 }}', 'false'
|
42
|
+
assert_scribble_render '{{ nil & 0 }}', 'false'
|
43
|
+
assert_scribble_render "{{ nil & 'foo' }}", 'false'
|
44
|
+
assert_scribble_render "{{ nil & '' }}", 'false'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
it 'equals only nil' do
|
49
|
+
with_nil do
|
50
|
+
assert_scribble_render '{{ nil.equals nil }}', 'true'
|
51
|
+
assert_scribble_render "{{ nil.equals 'bar' }}", 'false'
|
52
|
+
assert_scribble_render '{{ nil.equals 1 }}', 'false'
|
53
|
+
assert_scribble_render '{{ nil.equals true }}', 'false'
|
54
|
+
assert_scribble_render '{{ nil.equals false }}', 'false'
|
55
|
+
assert_scribble_render '{{ nil = nil }}', 'true'
|
56
|
+
assert_scribble_render "{{ nil = 'bar' }}", 'false'
|
57
|
+
assert_scribble_render '{{ nil = 1 }}', 'false'
|
58
|
+
assert_scribble_render '{{ nil = true }}', 'false'
|
59
|
+
assert_scribble_render '{{ nil = false }}', 'false'
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'differs everything but nil' do
|
64
|
+
with_nil do
|
65
|
+
assert_scribble_render '{{ nil.differs nil }}', 'false'
|
66
|
+
assert_scribble_render "{{ nil.differs 'bar' }}", 'true'
|
67
|
+
assert_scribble_render '{{ nil.differs 1 }}', 'true'
|
68
|
+
assert_scribble_render '{{ nil.differs true }}', 'true'
|
69
|
+
assert_scribble_render '{{ nil.differs false }}', 'true'
|
70
|
+
assert_scribble_render '{{ nil != nil }}', 'false'
|
71
|
+
assert_scribble_render "{{ nil != 'bar' }}", 'true'
|
72
|
+
assert_scribble_render '{{ nil != 1 }}', 'true'
|
73
|
+
assert_scribble_render '{{ nil != true }}', 'true'
|
74
|
+
assert_scribble_render '{{ nil != false }}', 'true'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'renders as an empty string' do
|
79
|
+
with_nil do
|
80
|
+
assert_scribble_render '{{ nil }}', ''
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,268 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
describe 'scribble string' do
|
4
|
+
it 'can be used as a literal' do
|
5
|
+
assert_scribble_render "{{ 'Foo bar baz' }}", 'Foo bar baz'
|
6
|
+
assert_scribble_render "{{ '%${^$%T#%##' }}", '%${^$%T#%##'
|
7
|
+
end
|
8
|
+
|
9
|
+
it 'supports escape characters' do
|
10
|
+
assert_scribble_render "{{ 'Foo \\' bar \\\\ \\a' }}", "Foo ' bar \\ a"
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'can be capitalized' do
|
14
|
+
assert_scribble_render "{{ 'foo'.capitalize }}", 'Foo'
|
15
|
+
assert_scribble_render "{{ 'BAR'.capitalize }}", 'Bar'
|
16
|
+
assert_scribble_render "{{ 'Baz'.capitalize }}", 'Baz'
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'can be upcased' do
|
20
|
+
assert_scribble_render "{{ 'foo'.upcase }}", 'FOO'
|
21
|
+
assert_scribble_render "{{ 'BAR'.upcase }}", 'BAR'
|
22
|
+
assert_scribble_render "{{ 'Baz'.upcase }}", 'BAZ'
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'can be downcased' do
|
26
|
+
assert_scribble_render "{{ 'foo'.downcase }}", 'foo'
|
27
|
+
assert_scribble_render "{{ 'BAR'.downcase }}", 'bar'
|
28
|
+
assert_scribble_render "{{ 'Baz'.downcase }}", 'baz'
|
29
|
+
end
|
30
|
+
|
31
|
+
it 'can be reversed' do
|
32
|
+
assert_scribble_render "{{ 'foo'.reverse }}", 'oof'
|
33
|
+
assert_scribble_render "{{ 'bar'.reverse }}", 'rab'
|
34
|
+
assert_scribble_render "{{ 'baz'.reverse }}", 'zab'
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'returns its size, length and wether it is empty' do
|
38
|
+
assert_scribble_render "{{ 'foo'.size }}", '3'
|
39
|
+
assert_scribble_render "{{ 'foo bar baz'.size }}", '11'
|
40
|
+
assert_scribble_render "{{ 'foo'.length }}", '3'
|
41
|
+
assert_scribble_render "{{ 'foo bar baz'.length }}", '11'
|
42
|
+
assert_scribble_render "{{ 'foo'.empty }}", 'false'
|
43
|
+
assert_scribble_render "{{ ''.empty }}", 'true'
|
44
|
+
end
|
45
|
+
|
46
|
+
it 'supports a replace method' do
|
47
|
+
assert_scribble_render "{{ 'foo'.replace('f', 'b').replace 'oo', 'ar' }}", 'bar'
|
48
|
+
assert_scribble_render "{{ 'foo bar bar baz'.replace 'bar', 'foo' }}", 'foo foo foo baz'
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'supports a remove method' do
|
52
|
+
assert_scribble_render "{{ 'foo'.remove('f').remove 'oo' }}", ''
|
53
|
+
assert_scribble_render "{{ 'foo bar bar baz'.remove 'bar' }}", 'foo baz'
|
54
|
+
end
|
55
|
+
|
56
|
+
it 'supports a replace_first method' do
|
57
|
+
assert_scribble_render "{{ 'foo'.replace('f', 'b').replace_first 'oo', 'ar' }}", 'bar'
|
58
|
+
assert_scribble_render "{{ 'foo bar bar baz'.replace_first 'bar', 'foo' }}", 'foo foo bar baz'
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'supports a remove_first method' do
|
62
|
+
assert_scribble_render "{{ 'foo'.remove('f').remove_first 'oo' }}", ''
|
63
|
+
assert_scribble_render "{{ 'foo bar bar baz'.remove_first 'bar' }}", 'foo bar baz'
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'supports a append method' do
|
67
|
+
assert_scribble_render "{{ 'foo'.append(' bar').append ' baz' }}", 'foo bar baz'
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'supports a prepend method' do
|
71
|
+
assert_scribble_render "{{ 'foo'.prepend(' bar').prepend ' baz' }}", ' baz barfoo'
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'supports a truncate method' do
|
75
|
+
assert_scribble_render "{{ ' foo bar baz'.truncate 8 }}", ' foo bar ...'
|
76
|
+
assert_scribble_render "{{ ' foo bar baz'.truncate 8, 'aaa' }}", ' foo baraaa'
|
77
|
+
assert_scribble_render "{{ ' foo bar baz'.truncate 12 }}", ' foo bar baz'
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'supports a truncate words method' do
|
81
|
+
assert_scribble_render "{{ ' foo bar baz'.truncate_words 2 }}", ' foo bar ...'
|
82
|
+
assert_scribble_render "{{ ' foo bar baz'.truncate_words 2, 'aaa' }}", ' foo baraaa'
|
83
|
+
assert_scribble_render "{{ ' foo bar baz'.truncate_words 3 }}", ' foo bar baz'
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'supports strip methods' do
|
87
|
+
assert_scribble_render "{{ ' foo bar '.strip }}", 'foo bar'
|
88
|
+
assert_scribble_render "{{ ' foo bar '.strip_left }}", 'foo bar '
|
89
|
+
assert_scribble_render "{{ ' foo bar '.strip_right }}", ' foo bar'
|
90
|
+
end
|
91
|
+
|
92
|
+
it 'supports a repeat method' do
|
93
|
+
assert_scribble_render "{{ 'foo'.repeat 3 }}", 'foofoofoo'
|
94
|
+
assert_scribble_render "{{ 'foo'.repeat(3).repeat 2 }}", 'foofoofoofoofoofoo'
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'supports method and operator for logical or' do
|
98
|
+
assert_scribble_render "{{ ''.or true }}", 'true'
|
99
|
+
assert_scribble_render "{{ 'foo'.or true }}", 'true'
|
100
|
+
assert_scribble_render "{{ ''.or false }}", 'false'
|
101
|
+
assert_scribble_render "{{ 'foo'.or false }}", 'true'
|
102
|
+
assert_scribble_render "{{ ''.or 2 }}", 'true'
|
103
|
+
assert_scribble_render "{{ 'foo'.or 2 }}", 'true'
|
104
|
+
assert_scribble_render "{{ ''.or 0 }}", 'false'
|
105
|
+
assert_scribble_render "{{ 'foo'.or 0 }}", 'true'
|
106
|
+
assert_scribble_render "{{ ''.or 'foo' }}", 'true'
|
107
|
+
assert_scribble_render "{{ 'foo'.or 'foo' }}", 'true'
|
108
|
+
assert_scribble_render "{{ ''.or '' }}", 'false'
|
109
|
+
assert_scribble_render "{{ 'foo'.or '' }}", 'true'
|
110
|
+
assert_scribble_render "{{ '' | true }}", 'true'
|
111
|
+
assert_scribble_render "{{ 'foo' | true }}", 'true'
|
112
|
+
assert_scribble_render "{{ '' | false }}", 'false'
|
113
|
+
assert_scribble_render "{{ 'foo' | false }}", 'true'
|
114
|
+
assert_scribble_render "{{ '' | 2 }}", 'true'
|
115
|
+
assert_scribble_render "{{ 'foo' | 2 }}", 'true'
|
116
|
+
assert_scribble_render "{{ '' | 0 }}", 'false'
|
117
|
+
assert_scribble_render "{{ 'foo' | 0 }}", 'true'
|
118
|
+
assert_scribble_render "{{ '' | 'foo' }}", 'true'
|
119
|
+
assert_scribble_render "{{ 'foo' | 'foo' }}", 'true'
|
120
|
+
assert_scribble_render "{{ '' | '' }}", 'false'
|
121
|
+
assert_scribble_render "{{ 'foo' | '' }}", 'true'
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'supports method and operator for logical and' do
|
125
|
+
assert_scribble_render "{{ ''.and true }}", 'false'
|
126
|
+
assert_scribble_render "{{ 'foo'.and true }}", 'true'
|
127
|
+
assert_scribble_render "{{ ''.and false }}", 'false'
|
128
|
+
assert_scribble_render "{{ 'foo'.and false }}", 'false'
|
129
|
+
assert_scribble_render "{{ ''.and 2 }}", 'false'
|
130
|
+
assert_scribble_render "{{ 'foo'.and 2 }}", 'true'
|
131
|
+
assert_scribble_render "{{ ''.and 0 }}", 'false'
|
132
|
+
assert_scribble_render "{{ 'foo'.and 0 }}", 'false'
|
133
|
+
assert_scribble_render "{{ ''.and 'foo' }}", 'false'
|
134
|
+
assert_scribble_render "{{ 'foo'.and 'foo' }}", 'true'
|
135
|
+
assert_scribble_render "{{ ''.and '' }}", 'false'
|
136
|
+
assert_scribble_render "{{ 'foo'.and '' }}", 'false'
|
137
|
+
assert_scribble_render "{{ '' & true }}", 'false'
|
138
|
+
assert_scribble_render "{{ 'foo' & true }}", 'true'
|
139
|
+
assert_scribble_render "{{ '' & false }}", 'false'
|
140
|
+
assert_scribble_render "{{ 'foo' & false }}", 'false'
|
141
|
+
assert_scribble_render "{{ '' & 2 }}", 'false'
|
142
|
+
assert_scribble_render "{{ 'foo' & 2 }}", 'true'
|
143
|
+
assert_scribble_render "{{ '' & 0 }}", 'false'
|
144
|
+
assert_scribble_render "{{ 'foo' & 0 }}", 'false'
|
145
|
+
assert_scribble_render "{{ '' & 'foo' }}", 'false'
|
146
|
+
assert_scribble_render "{{ 'foo' & 'foo' }}", 'true'
|
147
|
+
assert_scribble_render "{{ '' & '' }}", 'false'
|
148
|
+
assert_scribble_render "{{ 'foo' & '' }}", 'false'
|
149
|
+
end
|
150
|
+
|
151
|
+
it 'can equal another string' do
|
152
|
+
assert_scribble_render "{{ 'foo'.equals 'foo' }}", 'true'
|
153
|
+
assert_scribble_render "{{ 'foo'.equals 'bar' }}", 'false'
|
154
|
+
assert_scribble_render "{{ 'foo' = 'foo' }}", 'true'
|
155
|
+
assert_scribble_render "{{ 'foo' = 'bar' }}", 'false'
|
156
|
+
end
|
157
|
+
|
158
|
+
it 'does not equal another type' do
|
159
|
+
assert_scribble_render "{{ 'foo'.equals 3 }}", 'false'
|
160
|
+
assert_scribble_render "{{ 'foo'.equals true }}", 'false'
|
161
|
+
assert_scribble_render "{{ 'foo' = 3 }}", 'false'
|
162
|
+
assert_scribble_render "{{ 'foo' = true }}", 'false'
|
163
|
+
end
|
164
|
+
|
165
|
+
it 'can differ from another integer' do
|
166
|
+
assert_scribble_render "{{ 'foo'.differs 'foo' }}", 'false'
|
167
|
+
assert_scribble_render "{{ 'foo'.differs 'bar' }}", 'true'
|
168
|
+
assert_scribble_render "{{ 'foo' != 'foo' }}", 'false'
|
169
|
+
assert_scribble_render "{{ 'foo' != 'bar' }}", 'true'
|
170
|
+
end
|
171
|
+
|
172
|
+
it 'differs from another type' do
|
173
|
+
assert_scribble_render "{{ 'foo'.differs 3 }}", 'true'
|
174
|
+
assert_scribble_render "{{ 'foo'.differs true }}", 'true'
|
175
|
+
assert_scribble_render "{{ 'foo' != 3 }}", 'true'
|
176
|
+
assert_scribble_render "{{ 'foo' != true }}", 'true'
|
177
|
+
end
|
178
|
+
|
179
|
+
it 'can not be compared' do
|
180
|
+
assert_scribble_raises "{{ 'foo'.greater 'foo' }}"
|
181
|
+
assert_scribble_raises "{{ 'foo'.greater 3 }}"
|
182
|
+
assert_scribble_raises "{{ 'foo'.greater true }}"
|
183
|
+
assert_scribble_raises "{{ 'foo' > 'foo' }}"
|
184
|
+
assert_scribble_raises "{{ 'foo' > 3 }}"
|
185
|
+
assert_scribble_raises "{{ 'foo' > true }}"
|
186
|
+
assert_scribble_raises "{{ 'foo'.less 'foo' }}"
|
187
|
+
assert_scribble_raises "{{ 'foo'.less 3 }}"
|
188
|
+
assert_scribble_raises "{{ 'foo'.less true }}"
|
189
|
+
assert_scribble_raises "{{ 'foo' < 'foo' }}"
|
190
|
+
assert_scribble_raises "{{ 'foo' < 3 }}"
|
191
|
+
assert_scribble_raises "{{ 'foo' < true }}"
|
192
|
+
assert_scribble_raises "{{ 'foo'.greater_or_equal 'foo' }}"
|
193
|
+
assert_scribble_raises "{{ 'foo'.greater_or_equal 3 }}"
|
194
|
+
assert_scribble_raises "{{ 'foo'.greater_or_equal true }}"
|
195
|
+
assert_scribble_raises "{{ 'foo' >= 'foo' }}"
|
196
|
+
assert_scribble_raises "{{ 'foo' >= 3 }}"
|
197
|
+
assert_scribble_raises "{{ 'foo' >= true }}"
|
198
|
+
assert_scribble_raises "{{ 'foo'.less_or_equal 'foo' }}"
|
199
|
+
assert_scribble_raises "{{ 'foo'.less_or_equal 3 }}"
|
200
|
+
assert_scribble_raises "{{ 'foo'.less_or_equal true }}"
|
201
|
+
assert_scribble_raises "{{ 'foo' <= 'foo' }}"
|
202
|
+
assert_scribble_raises "{{ 'foo' <= 3 }}"
|
203
|
+
assert_scribble_raises "{{ 'foo' <= true }}"
|
204
|
+
end
|
205
|
+
|
206
|
+
it 'can have integers and strings added to it but not booleans' do
|
207
|
+
assert_scribble_render "{{ 'foo'.add 2 }}", 'foo2'
|
208
|
+
assert_scribble_render "{{ 'foo'.add 'bar' }}", 'foobar'
|
209
|
+
assert_scribble_raises "{{ 'foo'.add true }}", Scribble::Errors::Argument
|
210
|
+
assert_scribble_render "{{ 'foo' + 2 }}", 'foo2'
|
211
|
+
assert_scribble_render "{{ 'foo' + 'bar' }}", 'foobar'
|
212
|
+
assert_scribble_raises "{{ 'foo' + true }}", Scribble::Errors::Argument
|
213
|
+
end
|
214
|
+
|
215
|
+
it 'can only have string subtracted from it' do
|
216
|
+
assert_scribble_render "{{ 'foobarbaz foo'.subtract 'foo' }}", 'barbaz '
|
217
|
+
assert_scribble_render "{{ 'foobarbaz foo'.subtract 'bar' }}", 'foobaz foo'
|
218
|
+
assert_scribble_raises "{{ 'foobarbaz foo'.subtract 2 }}", Scribble::Errors::Argument
|
219
|
+
assert_scribble_raises "{{ 'foobarbaz foo'.subtract true }}", Scribble::Errors::Argument
|
220
|
+
assert_scribble_render "{{ 'foobarbaz foo' - 'foo' }}", 'barbaz '
|
221
|
+
assert_scribble_render "{{ 'foobarbaz foo' - 'bar' }}", 'foobaz foo'
|
222
|
+
assert_scribble_raises "{{ 'foobarbaz foo' - 2 }}", Scribble::Errors::Argument
|
223
|
+
assert_scribble_raises "{{ 'foobarbaz foo' - true }}", Scribble::Errors::Argument
|
224
|
+
end
|
225
|
+
|
226
|
+
it 'can only be multiplied by positive integers' do
|
227
|
+
assert_scribble_render "{{ 'foo'.multiply 2 }}", 'foofoo'
|
228
|
+
assert_scribble_render "{{ 'foo'.multiply 5 }}", 'foofoofoofoofoo'
|
229
|
+
assert_scribble_raises "{{ 'foo'.multiply 'foo' }}", Scribble::Errors::Argument
|
230
|
+
assert_scribble_raises "{{ 'foo'.multiply true }}", Scribble::Errors::Argument
|
231
|
+
assert_scribble_raises "{{ 'foo'.multiply(-2) }}", Scribble::Errors::Argument
|
232
|
+
assert_scribble_render "{{ 'foo' * 2 }}", 'foofoo'
|
233
|
+
assert_scribble_render "{{ 'foo' * 5 }}", 'foofoofoofoofoo'
|
234
|
+
assert_scribble_raises "{{ 'foo' * 'foo' }}", Scribble::Errors::Argument
|
235
|
+
assert_scribble_raises "{{ 'foo' * true }}", Scribble::Errors::Argument
|
236
|
+
assert_scribble_raises "{{ 'foo' * -2 }}", Scribble::Errors::Argument
|
237
|
+
end
|
238
|
+
|
239
|
+
it 'can not be divided' do
|
240
|
+
assert_scribble_raises "{{ 'foo'.divide 5 }}"
|
241
|
+
assert_scribble_raises "{{ 'foo'.divide 'foo' }}"
|
242
|
+
assert_scribble_raises "{{ 'foo'.divide true }}"
|
243
|
+
assert_scribble_raises "{{ 'foo' / 5 }}"
|
244
|
+
assert_scribble_raises "{{ 'foo' / 'foo' }}"
|
245
|
+
assert_scribble_raises "{{ 'foo' / true }}"
|
246
|
+
end
|
247
|
+
|
248
|
+
it 'can not be have its remainder taken' do
|
249
|
+
assert_scribble_raises "{{ 'foo'.remainder 5 }}"
|
250
|
+
assert_scribble_raises "{{ 'foo'.remainder 'foo' }}"
|
251
|
+
assert_scribble_raises "{{ 'foo'.remainder true }}"
|
252
|
+
assert_scribble_raises "{{ 'foo' % 5 }}"
|
253
|
+
assert_scribble_raises "{{ 'foo' % 'foo' }}"
|
254
|
+
assert_scribble_raises "{{ 'foo' % true }}"
|
255
|
+
end
|
256
|
+
|
257
|
+
it 'can not be negated' do
|
258
|
+
assert_scribble_raises "{{ 'foo'.negative }}"
|
259
|
+
assert_scribble_raises "{{ -'foo' }}"
|
260
|
+
end
|
261
|
+
|
262
|
+
it 'can be logically negated' do
|
263
|
+
assert_scribble_render "{{ 'foo'.not }}", 'false'
|
264
|
+
assert_scribble_render "{{ ''.not }}", 'true'
|
265
|
+
assert_scribble_render "{{ !'foo' }}", 'false'
|
266
|
+
assert_scribble_render "{{ !'' }}", 'true'
|
267
|
+
end
|
268
|
+
end
|