general 1.5.0 → 2.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 +4 -4
- data/README.md +166 -20
- data/Rakefile +11 -2
- data/exp/expected/applied1.txt +1 -0
- data/exp/expected/applied2.txt +3 -0
- data/exp/expected/applied3.txt +9 -0
- data/exp/expected/default1.txt +1 -0
- data/exp/expected/default2.txt +3 -0
- data/exp/expected/default3.txt +9 -0
- data/exp/out/sample1.txt +1 -0
- data/exp/out/sample2.txt +3 -0
- data/exp/out/sample3.txt +9 -0
- data/exp/templates/sample0.general +7 -0
- data/exp/templates/sample1.general +1 -0
- data/exp/templates/sample2.general +3 -0
- data/exp/templates/sample3.general +4 -0
- data/exp/templates/sampleE0.general +7 -0
- data/exp/templates/sampleE1.general +3 -0
- data/exp/templates/sampleE2.general +3 -0
- data/exp/templates/sampleE3.general +7 -0
- data/lib/general.rb +3 -3
- data/lib/gerror.rb +33 -0
- data/lib/goperations.rb +95 -27
- data/lib/gpartials/garrayplaceholder.rb +87 -0
- data/lib/gpartials/gfullplaceholder.rb +63 -0
- data/lib/gpartials/gpartial.rb +11 -1
- data/lib/gpartials/gplaceholder.rb +1 -52
- data/lib/gpartials/gspecial.rb +81 -0
- data/lib/gpartials/gtext.rb +5 -33
- data/lib/gprepartials/gextend.rb +42 -0
- data/lib/gprepartials/ginclude.rb +47 -0
- data/lib/gprepartials/gprepartial.rb +45 -0
- data/lib/gprepartials/gpretext.rb +33 -0
- data/lib/gprepartials/gyield.rb +33 -0
- data/lib/{templates → gtemplates}/gbasetemplate.rb +46 -3
- data/lib/gtemplates/gio.rb +143 -0
- data/lib/gtemplates/gmeta.rb +106 -0
- data/lib/{templates → gtemplates}/gtemplate.rb +10 -30
- data/lib/{templates → gtemplates}/gtimeformat.rb +6 -12
- data/spec/gdothash_spec.rb +6 -10
- data/spec/goperations_spec.rb +112 -82
- data/spec/gpartial_garrayplaceholder_spec.rb +165 -0
- data/spec/gpartial_gfullplaceholder_spec.rb +82 -0
- data/spec/gpartial_gplaceholder_spec.rb +237 -0
- data/spec/gpartial_gspecial_spec.rb +88 -0
- data/spec/gpartial_gtext_spec.rb +87 -0
- data/spec/gtamplate_gtemplate_spec.rb +266 -0
- data/spec/gtemplate_gio_spec.rb +147 -0
- data/spec/gtemplate_gtimeformat_spec.rb +77 -0
- data/spec/spec_require.rb +7 -4
- metadata +41 -13
- data/exp/future.general +0 -11
- data/exp/out.txt +0 -1
- data/exp/sample.general +0 -1
- data/lib/templates/gio.rb +0 -68
- data/spec/garrayplaceholder_spec.rb +0 -163
- data/spec/gplaceholder_spec.rb +0 -300
- data/spec/gtemplates_spec.rb +0 -480
- data/spec/gtext_spec.rb +0 -150
data/spec/gtemplates_spec.rb
DELETED
@@ -1,480 +0,0 @@
|
|
1
|
-
# General is a templating system in ruby
|
2
|
-
# Copyright (C) 2016 Anshul Kharbanda
|
3
|
-
#
|
4
|
-
# This program is free software: you can redistribute it and/or modify
|
5
|
-
# it under the terms of the GNU General Public License as published by
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
-
|
17
|
-
require "spec_require"
|
18
|
-
|
19
|
-
# Describe General Templates
|
20
|
-
#
|
21
|
-
# The system of templates in General
|
22
|
-
#
|
23
|
-
# Author: Anshul Kharbanda
|
24
|
-
# Created: 3 - 4 - 2016
|
25
|
-
describe 'General Templates' do
|
26
|
-
# Describe General::GTemplate
|
27
|
-
#
|
28
|
-
# Implements the general templating system for strings
|
29
|
-
#
|
30
|
-
# Author: Anshul Kharbanda
|
31
|
-
# Created: 3 - 4 - 2016
|
32
|
-
describe General::GTemplate do
|
33
|
-
# Before all
|
34
|
-
before :all do
|
35
|
-
@template1 = General::GTemplate.new "There once was a man named @(name: Gordon Ramsay). @(name) loved @(food: Cat Food)!"
|
36
|
-
@template2 = General::GTemplate.new "@(user)@at;@(domain)"
|
37
|
-
@template3 = General::GTemplate.new "@[greetings] Hello, @(name)! How is the @(pet)? @[\n]"
|
38
|
-
@template4 = General::GTemplate.new "@(film: The Dark Knight)\nCrew:\n@[crew] \t@(name): @(role) @[\n]\nScore: @(score)/10"
|
39
|
-
@template5 = General::GTemplate.new "There once was a dog named @(name: dog -> capitalize). @(name -> capitalize) earned @(amount -> money) last week."
|
40
|
-
@template6 = General::GTemplate.new "There once was a cat named @(name -> capitalize all)."
|
41
|
-
@template7 = General::GTemplate.new "The time is @(time -> time)"
|
42
|
-
@template8 = General::GTemplate.new "The time is @(time -> time '@SS <- @MM <- @HH')"
|
43
|
-
@template9 = General::GTemplate.new "The name's @(name.last)... @(name.first) @(name.last)."
|
44
|
-
end
|
45
|
-
|
46
|
-
# Describe General::GTemplate::new
|
47
|
-
#
|
48
|
-
# Creates a GTemplate with the given template string
|
49
|
-
#
|
50
|
-
# Parameter: string - the string being converted to a template
|
51
|
-
describe "::new" do
|
52
|
-
it "creates a new GTemplate with the given template string" do
|
53
|
-
[@template1, @template2, @template3,
|
54
|
-
@template4, @template5, @template6,
|
55
|
-
@template7, @template8, @template9]
|
56
|
-
.each do |template|
|
57
|
-
expect(template).to be_an_instance_of General::GTemplate
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
# Describe General::GTemplate#apply
|
63
|
-
#
|
64
|
-
# Applies the given data to the template and returns the generated string
|
65
|
-
#
|
66
|
-
# Parameter: data - the data to be applied (as a hash. merges with defaults)
|
67
|
-
#
|
68
|
-
# Return: string of the template with the given data applied
|
69
|
-
describe "#apply" do
|
70
|
-
# ------------------------------------BASIC PLACEHOLDER------------------------------------
|
71
|
-
|
72
|
-
# Test basic @(name: default) placeholder
|
73
|
-
context 'with a general template' do
|
74
|
-
# --------------------------------DATA--------------------------------
|
75
|
-
|
76
|
-
before :all do
|
77
|
-
@data1 = {name: "Joe", food: "Joe's Shmoes"}
|
78
|
-
@name = "Dog"
|
79
|
-
@food = "Denny's Fennies"
|
80
|
-
|
81
|
-
@default_text = "There once was a man named Gordon Ramsay. Gordon Ramsay loved Cat Food!"
|
82
|
-
@name_text = "There once was a man named Dog. Dog loved Cat Food!"
|
83
|
-
@food_text = "There once was a man named Gordon Ramsay. Gordon Ramsay loved Denny's Fennies!"
|
84
|
-
@all_text = "There once was a man named Joe. Joe loved Joe's Shmoes!"
|
85
|
-
end
|
86
|
-
|
87
|
-
# --------------------------------TEST--------------------------------
|
88
|
-
|
89
|
-
context "with no data" do
|
90
|
-
it "returns the template with the default data applied" do
|
91
|
-
expect(@template1.apply).to eql @default_text
|
92
|
-
end
|
93
|
-
end
|
94
|
-
|
95
|
-
context "with partial data" do
|
96
|
-
it "returns the template with the given data applied to corresponding placeholders and default data applied to the rest" do
|
97
|
-
expect(@template1.apply name: @name).to eql @name_text
|
98
|
-
expect(@template1.apply food: @food).to eql @food_text
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
context "with all data" do
|
103
|
-
it "returns the template with the given data applied" do
|
104
|
-
expect(@template1.apply @data1).to eql @all_text
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
# ------------------------------------SPECIAL CHARACTERS------------------------------------
|
110
|
-
|
111
|
-
# Test special characters
|
112
|
-
context 'with general special characters' do
|
113
|
-
# --------------------------------DATA--------------------------------
|
114
|
-
|
115
|
-
before :all do
|
116
|
-
@data2 = { user: "hillary", domain: "clinton.org" }
|
117
|
-
@text2 = "hillary@clinton.org"
|
118
|
-
end
|
119
|
-
|
120
|
-
# --------------------------------TEST--------------------------------
|
121
|
-
|
122
|
-
it 'returns the templae with the given data applied (including the @ character)' do
|
123
|
-
expect(@template2.apply @data2).to eql @text2
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
# ------------------------------------ARRAY TEMPLATE------------------------------------
|
128
|
-
|
129
|
-
# Test array template
|
130
|
-
context "with array template" do
|
131
|
-
# --------------------------------DATA--------------------------------
|
132
|
-
before :all do
|
133
|
-
@data3 = {
|
134
|
-
greetings: [
|
135
|
-
{name: "Ben", pet: "dog"},
|
136
|
-
{name: "Jen", pet: "cat"},
|
137
|
-
{name: "Ken", pet: "plant"}
|
138
|
-
]
|
139
|
-
}
|
140
|
-
@text3 = "Hello, Ben! How is the dog?\nHello, Jen! How is the cat?\nHello, Ken! How is the plant?"
|
141
|
-
|
142
|
-
@data4 = {
|
143
|
-
film: 'Batman Begins',
|
144
|
-
crew: [
|
145
|
-
{name: 'David S. Goyer', role: 'Writer'},
|
146
|
-
{name: 'Chris Nolan', role: 'Director'},
|
147
|
-
{name: 'Wally Pfister', role: 'Director of Photography'},
|
148
|
-
{name: 'Michael Caine', role: 'Alfred Pennyworth'},
|
149
|
-
{name: 'Christian Bale', role: 'Bruce Wayne/Batman'}
|
150
|
-
],
|
151
|
-
score: 10
|
152
|
-
}
|
153
|
-
@text4 = "Batman Begins\nCrew:\n\tDavid S. Goyer: Writer\n\tChris Nolan: Director\n\tWally Pfister: Director of Photography" \
|
154
|
-
"\n\tMichael Caine: Alfred Pennyworth\n\tChristian Bale: Bruce Wayne/Batman\nScore: 10/10"
|
155
|
-
end
|
156
|
-
|
157
|
-
# --------------------------------TEST--------------------------------
|
158
|
-
|
159
|
-
context 'with no placeholder' do
|
160
|
-
it "returns the template with the given array data applied and formatted according to the template" do
|
161
|
-
expect(@template3.apply @data3).to eql @text3
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
context 'with regular placeholder' do
|
166
|
-
it "returns the template with the given data applied (including array data) and formatted according to the template" do
|
167
|
-
expect(@template4.apply @data4).to eql @text4
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
# ------------------------------------OPERATIONS------------------------------------
|
173
|
-
|
174
|
-
context "with placeholder operation" do
|
175
|
-
# --------------------------------DATA--------------------------------
|
176
|
-
|
177
|
-
before :all do
|
178
|
-
@data5 = {name: "cat", amount: 19999}
|
179
|
-
@text5 = "There once was a dog named Cat. Cat earned $199.99 last week."
|
180
|
-
|
181
|
-
@data6 = {name: "joe schmoe"}
|
182
|
-
@text6 = "There once was a cat named Joe Schmoe."
|
183
|
-
|
184
|
-
hrs = 3
|
185
|
-
min = 14
|
186
|
-
sec = 12
|
187
|
-
pm = true
|
188
|
-
|
189
|
-
@data78 = {
|
190
|
-
time: ( ((pm ? 11 : 0) + hrs)*3600 + min*60 + sec )
|
191
|
-
}
|
192
|
-
|
193
|
-
@text7 = "The time is #{hrs}:#{min.to_s.rjust(2,'0')}:#{sec.to_s.rjust(2,'0')} #{pm ? 'PM' : 'AM'}"
|
194
|
-
@text8 = "The time is #{sec.to_s.rjust(2,'0')} <- #{min.to_s.rjust(2,'0')} <- #{((pm ? 11 : 0) + hrs).to_s.rjust(2,'0')}"
|
195
|
-
end
|
196
|
-
|
197
|
-
# --------------------------------TEST--------------------------------
|
198
|
-
|
199
|
-
context 'with no arguments' do
|
200
|
-
it "returns the template with the given data applied and formatted according to the format operations" do
|
201
|
-
expect(@template5.apply @data5).to eql @text5
|
202
|
-
expect(@template7.apply @data78).to eql @text7
|
203
|
-
end
|
204
|
-
end
|
205
|
-
|
206
|
-
context 'with arguments' do
|
207
|
-
it 'returns the template with the given data applied and formatted according to the format operations and arguments' do
|
208
|
-
expect(@template6.apply @data6).to eql @text6
|
209
|
-
expect(@template8.apply @data78).to eql @text8
|
210
|
-
end
|
211
|
-
end
|
212
|
-
end
|
213
|
-
|
214
|
-
# ------------------------------------DOT NOTATION------------------------------------
|
215
|
-
|
216
|
-
context "with dot notation" do
|
217
|
-
# --------------------------------DATA--------------------------------
|
218
|
-
|
219
|
-
before :all do
|
220
|
-
@data9 = General::GDotHash.new name: {first: "Gordon", last: "Ramsay"}
|
221
|
-
@text9 = "The name's Ramsay... Gordon Ramsay."
|
222
|
-
end
|
223
|
-
|
224
|
-
# --------------------------------TEST--------------------------------
|
225
|
-
|
226
|
-
it "returns the template with the given data applied appropriately" do
|
227
|
-
expect(@template9.apply @data9).to eql @text9
|
228
|
-
end
|
229
|
-
end
|
230
|
-
end
|
231
|
-
|
232
|
-
# Describe General::GTemplate#apply_all
|
233
|
-
#
|
234
|
-
# Applies each data structure in the array independently to the template
|
235
|
-
# and returns an array of the generated strings
|
236
|
-
#
|
237
|
-
# Parameter: array - the array of data to be applied
|
238
|
-
# (each data hash will be merged with defaults)
|
239
|
-
#
|
240
|
-
# Return: array of strings generated from the template with the given
|
241
|
-
# data applied
|
242
|
-
describe '#apply_all' do
|
243
|
-
before :all do
|
244
|
-
@data5 = [
|
245
|
-
{name: "Joe", food: "Joe's Schmoes"},
|
246
|
-
{name: "Jane", food: "Jane's Danes"},
|
247
|
-
{name: "Denny", food: "Denny's Fennies"}
|
248
|
-
]
|
249
|
-
|
250
|
-
@text5 = [
|
251
|
-
"There once was a man named Joe. Joe loved Joe's Schmoes!",
|
252
|
-
"There once was a man named Jane. Jane loved Jane's Danes!",
|
253
|
-
"There once was a man named Denny. Denny loved Denny's Fennies!"
|
254
|
-
]
|
255
|
-
end
|
256
|
-
|
257
|
-
it 'applies all the values in the data array individually' do
|
258
|
-
expect(@template1.apply_all @data5).to eql @text5
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
# Describe General::GTemplate#regex
|
263
|
-
#
|
264
|
-
# Returns the string as a regex
|
265
|
-
#
|
266
|
-
# Parameter: sub - true if the template is part of array template
|
267
|
-
#
|
268
|
-
# Returns: the string as a regex
|
269
|
-
describe '#regex' do
|
270
|
-
before :all do
|
271
|
-
@regex1 = /\AThere once was a man named (?<name>.*)\. \k<name> loved (?<food>.*)!\z/
|
272
|
-
@sub_regex1 = "There once was a man named (?<name>.*)\\. \\k<name> loved (?<food>.*)!"
|
273
|
-
end
|
274
|
-
|
275
|
-
context 'if template is not part of array template' do
|
276
|
-
it 'returns the regex created from the GTemplate' do
|
277
|
-
expect(@template1.regex).to eql @regex1
|
278
|
-
end
|
279
|
-
end
|
280
|
-
|
281
|
-
context 'if template is part of array template' do
|
282
|
-
it 'returns the sub regex string created from the GTemplate' do
|
283
|
-
expect(@template1.regex true).to eql @sub_regex1
|
284
|
-
end
|
285
|
-
end
|
286
|
-
end
|
287
|
-
|
288
|
-
# Describe General::GTemplate#match
|
289
|
-
#
|
290
|
-
# Matches the given string against the template and returns the
|
291
|
-
# collected information. Returns nil if the given string does
|
292
|
-
# not match.
|
293
|
-
#
|
294
|
-
# If a block is given, it will be run with the generated hash
|
295
|
-
# if the string matches. Alias for:
|
296
|
-
#
|
297
|
-
# if m = template.match(string)
|
298
|
-
# # Run block
|
299
|
-
# end
|
300
|
-
#
|
301
|
-
# Parameter: string the string to match
|
302
|
-
#
|
303
|
-
# Return: Information matched from the string or nil
|
304
|
-
describe '#match' do
|
305
|
-
context 'when the given string matches the template regex' do
|
306
|
-
it 'returns the data generated from the string' do
|
307
|
-
expect(@template1.match @all_text).to eql @data1
|
308
|
-
end
|
309
|
-
end
|
310
|
-
|
311
|
-
context 'when the given string does not match the template regex' do
|
312
|
-
it 'returns nil' do
|
313
|
-
expect(@template1.match "").to be_nil
|
314
|
-
end
|
315
|
-
end
|
316
|
-
|
317
|
-
context 'with a block given' do
|
318
|
-
it 'passes the hash to the given block' do
|
319
|
-
expect {
|
320
|
-
@template1.match @all_text do |hash|
|
321
|
-
expect(hash).to eql @data1
|
322
|
-
end
|
323
|
-
}.not_to raise_error
|
324
|
-
end
|
325
|
-
end
|
326
|
-
end
|
327
|
-
end
|
328
|
-
|
329
|
-
# Describe General::GIO
|
330
|
-
#
|
331
|
-
# Implements the general IO writer template
|
332
|
-
#
|
333
|
-
# Author: Anshul Kharbanda
|
334
|
-
# Created: 3 - 4 - 2016
|
335
|
-
describe General::GIO do
|
336
|
-
before :all do
|
337
|
-
@gio = General::GIO.load("exp/sample" + General::GIO::EXTENSION)
|
338
|
-
@out = "exp/out.txt"
|
339
|
-
@phony = 3
|
340
|
-
@default_data = {place: "virginia"}
|
341
|
-
@applied_data = {name: "joe", food: "Joe's Schmoes", place: "kentucky"}
|
342
|
-
@default_text = "There once was a chef name Gordon Ramsay, and he loved eating carrots. He went to Virginia."
|
343
|
-
@applied_text = "There once was a chef name Joe, and he loved eating Joe's Schmoes. He went to Kentucky."
|
344
|
-
end
|
345
|
-
|
346
|
-
# Describe General::GIO::load
|
347
|
-
#
|
348
|
-
# Loads a GIO from a file with the given path
|
349
|
-
#
|
350
|
-
# Parameter: path - the path of the file to load
|
351
|
-
#
|
352
|
-
# Return: GIO loaded from the file
|
353
|
-
describe "::load" do
|
354
|
-
it "creates a new GIO with the given template string" do
|
355
|
-
expect(@gio).to be_an_instance_of General::GIO
|
356
|
-
end
|
357
|
-
end
|
358
|
-
|
359
|
-
# Describe General::GIO#write
|
360
|
-
#
|
361
|
-
# Writes the template with the given data applied to the target stream
|
362
|
-
#
|
363
|
-
# Parameter: ios - if String, is the name of the file to write to
|
364
|
-
# if IO, is the stream to write to
|
365
|
-
# Parameter: data - the data to be applied (merges with defaults)
|
366
|
-
describe "#write" do
|
367
|
-
# -------------------------------------------DEFAULT-------------------------------------------
|
368
|
-
|
369
|
-
context "with target and default data" do
|
370
|
-
context 'if target is string' do
|
371
|
-
it "writes the default data to the file with the given filename (the target string)" do
|
372
|
-
@gio.write @out, @default_data
|
373
|
-
expect(IO.read(@out)).to eql @default_text
|
374
|
-
end
|
375
|
-
end
|
376
|
-
|
377
|
-
context 'if target is io' do
|
378
|
-
it "writes the default data to the target io" do
|
379
|
-
File.open(@out, "w+") { |ios| @gio.write ios, @default_data }
|
380
|
-
expect(IO.read(@out)).to eql @default_text
|
381
|
-
end
|
382
|
-
end
|
383
|
-
|
384
|
-
context 'if target is not string or io' do
|
385
|
-
it "raises TypeError" do
|
386
|
-
expect{ @gio.write @phony, @default_data }.to raise_error TypeError
|
387
|
-
end
|
388
|
-
end
|
389
|
-
end
|
390
|
-
|
391
|
-
# --------------------------------------------DATA---------------------------------------------
|
392
|
-
|
393
|
-
context "with target and given data" do
|
394
|
-
context 'if target is string' do
|
395
|
-
it "writes the given data to the file with the given filename (the target string)" do
|
396
|
-
@gio.write @out, @applied_data
|
397
|
-
expect(IO.read(@out)).to eql @applied_text
|
398
|
-
end
|
399
|
-
end
|
400
|
-
|
401
|
-
context 'if target is io' do
|
402
|
-
it "writes the given data to the target io" do
|
403
|
-
File.open(@out, "w+") { |ios| @gio.write ios, @applied_data }
|
404
|
-
expect(IO.read(@out)).to eql @applied_text
|
405
|
-
end
|
406
|
-
end
|
407
|
-
|
408
|
-
context 'if target is not string or io' do
|
409
|
-
it "raises TypeError" do
|
410
|
-
expect{ @gio.write @phony, @applied_data }.to raise_error TypeError
|
411
|
-
end
|
412
|
-
end
|
413
|
-
end
|
414
|
-
end
|
415
|
-
end
|
416
|
-
|
417
|
-
# Describe General::GTimeFormat
|
418
|
-
#
|
419
|
-
# A special template used for formatting time strings
|
420
|
-
#
|
421
|
-
# Author: Anshul Kharbanda
|
422
|
-
# Created: 7 - 2 - 2016
|
423
|
-
describe General::GTimeFormat do
|
424
|
-
before :all do
|
425
|
-
# Time value
|
426
|
-
@time = (11 + 3)*3600 + 42*60 + 9
|
427
|
-
|
428
|
-
# Phony value
|
429
|
-
@phony = {data: "Time, Yo!"}
|
430
|
-
|
431
|
-
# Formats
|
432
|
-
@format1 = General::GTimeFormat.new "@HH:@MM:@SS"
|
433
|
-
@format2 = General::GTimeFormat.new "@I:@MM:@S @A"
|
434
|
-
@format3 = General::GTimeFormat.new "@SS - @M - @H (@I @A)"
|
435
|
-
|
436
|
-
# Applied values
|
437
|
-
@applied1 = "14:42:09"
|
438
|
-
@applied2 = "3:42:9 PM"
|
439
|
-
@applied3 = "09 - 42 - 14 (3 PM)"
|
440
|
-
end
|
441
|
-
|
442
|
-
# Describe General::GTimeFormat::new
|
443
|
-
#
|
444
|
-
# Creates the GTimeFormat with the given string
|
445
|
-
#
|
446
|
-
# Parameter: string - the template string
|
447
|
-
describe "::new" do
|
448
|
-
it "creates a new GTimeFormat with the given format string" do
|
449
|
-
expect(@format1).to be_an_instance_of General::GTimeFormat
|
450
|
-
expect(@format2).to be_an_instance_of General::GTimeFormat
|
451
|
-
expect(@format3).to be_an_instance_of General::GTimeFormat
|
452
|
-
end
|
453
|
-
end
|
454
|
-
|
455
|
-
# Describe General::GTimeFormat#apply
|
456
|
-
#
|
457
|
-
# Applies the given integer value to the template and returns the generated string
|
458
|
-
#
|
459
|
-
# Parameter: value - the value to be applied (as a hash. merges with defaults)
|
460
|
-
#
|
461
|
-
# Return: string of the template with the given value applied
|
462
|
-
describe "#apply" do
|
463
|
-
context "with integer time value given" do
|
464
|
-
it "returns the given value formatted according to the time format" do
|
465
|
-
expect(@format1.apply(@time)).to eql @applied1
|
466
|
-
expect(@format2.apply(@time)).to eql @applied2
|
467
|
-
expect(@format3.apply(@time)).to eql @applied3
|
468
|
-
end
|
469
|
-
end
|
470
|
-
|
471
|
-
context "if value given is not integer" do
|
472
|
-
it "raises TypeError" do
|
473
|
-
expect{ @format1.apply(@phony) }.to raise_error TypeError
|
474
|
-
expect{ @format2.apply(@phony) }.to raise_error TypeError
|
475
|
-
expect{ @format3.apply(@phony) }.to raise_error TypeError
|
476
|
-
end
|
477
|
-
end
|
478
|
-
end
|
479
|
-
end
|
480
|
-
end
|
data/spec/gtext_spec.rb
DELETED
@@ -1,150 +0,0 @@
|
|
1
|
-
# General is a templating system in ruby
|
2
|
-
# Copyright (C) 2016 Anshul Kharbanda
|
3
|
-
#
|
4
|
-
# This program is free software: you can redistribute it and/or modify
|
5
|
-
# it under the terms of the GNU General Public License as published by
|
6
|
-
# the Free Software Foundation, either version 3 of the License, or
|
7
|
-
# (at your option) any later version.
|
8
|
-
#
|
9
|
-
# This program is distributed in the hope that it will be useful,
|
10
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
11
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
12
|
-
# GNU General Public License for more details.
|
13
|
-
#
|
14
|
-
# You should have received a copy of the GNU General Public License
|
15
|
-
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
16
|
-
|
17
|
-
require_relative "spec_require"
|
18
|
-
|
19
|
-
# Describe General Text Partials
|
20
|
-
#
|
21
|
-
# Regular text parts of a General Template
|
22
|
-
#
|
23
|
-
# Author: Anshul Kharbanda
|
24
|
-
# Created: 7 - 29 - 2016
|
25
|
-
describe 'General Text Partials' do
|
26
|
-
# Describe General::GText
|
27
|
-
#
|
28
|
-
# Represents a plain text partial in a GTemplate
|
29
|
-
#
|
30
|
-
# Author: Anshul Kharbanda
|
31
|
-
# Created: 7 - 1 - 2016
|
32
|
-
describe General::GText do
|
33
|
-
before :all do
|
34
|
-
@text = "foobar"
|
35
|
-
@regex = "foobar"
|
36
|
-
@partial = General::GText.new @text
|
37
|
-
end
|
38
|
-
|
39
|
-
# Describe General::GText::new
|
40
|
-
#
|
41
|
-
# Creates the GText with the given match
|
42
|
-
#
|
43
|
-
# Parameter: match - the match object of the GText
|
44
|
-
describe '::new' do
|
45
|
-
it 'creates the GText with the given to_s representable object' do
|
46
|
-
expect(@partial).to be_an_instance_of General::GText
|
47
|
-
expect(@partial.name).to eql General::GText::PTNAME
|
48
|
-
expect(@partial.instance_variable_get :@text).to eql @text
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
# Describe General::GText#apply
|
53
|
-
#
|
54
|
-
# Returns the text
|
55
|
-
#
|
56
|
-
# Parameter: data - the data to apply to the partial
|
57
|
-
#
|
58
|
-
# Returns: the text
|
59
|
-
describe '#apply' do
|
60
|
-
it 'returns the GText string, given a hash of data' do
|
61
|
-
expect(@partial.apply @hash).to eql @text
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
# Describe General::GText#string
|
66
|
-
#
|
67
|
-
# Returns the text as a string
|
68
|
-
#
|
69
|
-
# Parameter: first - true if this partial is the first of it's kind in a GTemplate
|
70
|
-
#
|
71
|
-
# Returns: the text as a string
|
72
|
-
describe '#string' do
|
73
|
-
context 'with no first argument given' do
|
74
|
-
it 'returns the string' do
|
75
|
-
expect(@partial.string).to eql @text
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
context 'with first argument given' do
|
80
|
-
context 'if first argument is true' do
|
81
|
-
it 'returns the string' do
|
82
|
-
expect(@partial.string true).to eql @text
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
|
-
context 'if first argument is false' do
|
87
|
-
it 'returns the string' do
|
88
|
-
expect(@partial.string false).to eql @text
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
# Describe General::GText#regex
|
95
|
-
#
|
96
|
-
# Returns the text as a regex
|
97
|
-
#
|
98
|
-
# Parameter: first - true if this partial is the first of it's kind in a GTemplate
|
99
|
-
#
|
100
|
-
# Returns: the text as a regex
|
101
|
-
describe '#regex' do
|
102
|
-
context 'with no first argument given' do
|
103
|
-
it 'returns the regex' do
|
104
|
-
expect(@partial.regex).to eql @regex
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
context 'with first argument given' do
|
109
|
-
context 'if first argument is true' do
|
110
|
-
it 'returns the regex' do
|
111
|
-
expect(@partial.regex true).to eql @regex
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
context 'if first argument is false' do
|
116
|
-
it 'returns the regex' do
|
117
|
-
expect(@partial.regex false).to eql @regex
|
118
|
-
end
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
|
-
end
|
123
|
-
|
124
|
-
# Describe General::GSpecial
|
125
|
-
#
|
126
|
-
# Represents a special character in a GTemplate
|
127
|
-
#
|
128
|
-
# Author: Anshul Kharbanda
|
129
|
-
# Created: 7 - 1 - 2016
|
130
|
-
describe General::GSpecial do
|
131
|
-
before :all do
|
132
|
-
@text = "@"
|
133
|
-
@regex = "@"
|
134
|
-
@partial = General::GSpecial.new key: "at"
|
135
|
-
end
|
136
|
-
|
137
|
-
# Describe General::GSpecial::new
|
138
|
-
#
|
139
|
-
# Creates the GSpecial with the given match
|
140
|
-
#
|
141
|
-
# Parameter: match - the match object of the GSpecial
|
142
|
-
describe '::new' do
|
143
|
-
it 'creates the GSpecial with the given match object' do
|
144
|
-
expect(@partial).to be_an_instance_of General::GSpecial
|
145
|
-
expect(@partial.name).to eql General::GSpecial::PTNAME
|
146
|
-
expect(@partial.instance_variable_get :@text).to eql @text
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|