qed 2.9.0 → 2.9.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.
- data/.index +69 -0
- data/.yardopts +3 -2
- data/{HISTORY.rdoc → HISTORY.md} +44 -32
- data/LICENSE.txt +25 -0
- data/{README.rdoc → README.md} +60 -51
- data/{qed/01_demos.rdoc → demo/01_demos.md} +3 -3
- data/{qed/02_advice.rdoc → demo/02_advice.md} +17 -17
- data/{qed/03_helpers.rdoc → demo/03_helpers.md} +10 -10
- data/{qed/04_samples.rdoc → demo/04_samples.md} +5 -5
- data/{qed/05_quote.rdoc → demo/05_quote.md} +7 -7
- data/{qed/07_toplevel.rdoc → demo/07_toplevel.md} +11 -11
- data/{qed/08_cross_script.rdoc → demo/08_cross_script.md} +9 -9
- data/{qed/09_cross_script.rdoc → demo/09_cross_script.md} +13 -14
- data/demo/10_constant_lookup.md +16 -0
- data/{qed/11_embedded_rules.rdoc → demo/11_embedded_rules.md} +13 -13
- data/{qed/99_issues/02_topcode.rdoc → demo/99_issues/02_topcode.md} +0 -0
- data/{qed → demo}/applique/ae.rb +0 -0
- data/{qed → demo}/applique/constant.rb +0 -0
- data/{qed → demo}/applique/env.rb +0 -0
- data/{qed → demo}/applique/fileutils.rb +0 -0
- data/{qed → demo}/applique/markup.rb +0 -0
- data/demo/applique/quote.md +8 -0
- data/{qed → demo}/applique/toplevel.rb +0 -0
- data/{qed → demo}/helpers/advice.rb +0 -0
- data/{qed → demo}/helpers/toplevel.rb +0 -0
- data/{qed → demo}/samples/data.txt +0 -0
- data/{qed → demo}/samples/table.yml +0 -0
- data/lib/qed.yml +41 -42
- data/lib/qed/cli.rb +2 -4
- data/lib/qed/cli/qed.rb +30 -3
- data/lib/qed/evaluator.rb +4 -1
- data/lib/qed/reporter/abstract.rb +1 -1
- data/lib/qed/session.rb +9 -2
- data/lib/qed/settings.rb +6 -122
- data/lib/qed/utils.rb +125 -0
- metadata +80 -56
- data/.config.rb +0 -24
- data/.ruby +0 -70
- data/COPYING.rdoc +0 -31
- data/lib/qed/rc.rb +0 -12
- data/qed/10_constant_lookup.rdoc +0 -16
- data/qed/applique/quote.rdoc +0 -8
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
data/lib/qed.yml
CHANGED
@@ -1,70 +1,69 @@
|
|
1
1
|
---
|
2
|
-
|
2
|
+
revision: 2013
|
3
|
+
type: ruby
|
4
|
+
sources:
|
3
5
|
- var
|
4
6
|
authors:
|
5
7
|
- name: Trans
|
6
8
|
email: transfire@gmail.com
|
7
|
-
|
8
|
-
- holder: Thomas Sawyer, Rubyworks
|
9
|
-
year: '2006'
|
10
|
-
license: BSD-2-Clause
|
9
|
+
organizations: []
|
11
10
|
requirements:
|
12
11
|
- name: ansi
|
13
12
|
- name: brass
|
14
|
-
-
|
15
|
-
|
16
|
-
-
|
17
|
-
groups:
|
18
|
-
- optional
|
19
|
-
development: true
|
20
|
-
- name: blankslate
|
21
|
-
groups:
|
13
|
+
- version: 2.8+
|
14
|
+
name: facets
|
15
|
+
- groups:
|
22
16
|
- optional
|
23
17
|
- test
|
24
18
|
development: true
|
25
|
-
|
26
|
-
|
19
|
+
name: blankslate
|
20
|
+
- groups:
|
27
21
|
- test
|
28
22
|
development: true
|
29
|
-
|
30
|
-
|
23
|
+
name: ae
|
24
|
+
- groups:
|
31
25
|
- build
|
32
26
|
development: true
|
33
|
-
|
34
|
-
|
27
|
+
name: detroit
|
28
|
+
- groups:
|
35
29
|
- build
|
36
30
|
development: true
|
37
|
-
|
38
|
-
alternatives: []
|
31
|
+
name: ergo
|
39
32
|
conflicts: []
|
33
|
+
alternatives: []
|
34
|
+
resources:
|
35
|
+
- type: home
|
36
|
+
uri: http://rubyworks.github.com/qed
|
37
|
+
label: Homepage
|
38
|
+
- type: code
|
39
|
+
uri: http://github.com/rubyworks/qed
|
40
|
+
label: Source Code
|
41
|
+
- type: mail
|
42
|
+
uri: http://groups.google.com/groups/rubyworks-mailinglist
|
43
|
+
label: Mailing List
|
44
|
+
- type: bugs
|
45
|
+
uri: http://github.com/rubyworks/qed/issues
|
46
|
+
label: Issue Tracker
|
40
47
|
repositories:
|
41
|
-
-
|
48
|
+
- name: upstream
|
42
49
|
scm: git
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
type: mail
|
54
|
-
- uri: http://github.com/rubyworks/qed/issues
|
55
|
-
name: bugs
|
56
|
-
type: bugs
|
57
|
-
extra: {}
|
58
|
-
load_path:
|
59
|
-
- lib
|
60
|
-
revision: 0
|
50
|
+
uri: git://github.com/rubyworks/qed.git
|
51
|
+
categories: []
|
52
|
+
copyrights:
|
53
|
+
- holder: Thomas Sawyer, Rubyworks
|
54
|
+
year: '2006'
|
55
|
+
license: BSD-2-Clause
|
56
|
+
customs: []
|
57
|
+
paths:
|
58
|
+
lib:
|
59
|
+
- lib
|
61
60
|
created: '2009-06-16'
|
62
61
|
summary: Quod Erat Demonstrandum
|
63
62
|
title: QED
|
64
|
-
version: 2.9.
|
63
|
+
version: 2.9.1
|
65
64
|
name: qed
|
66
65
|
webcvs: http://github.com/rubyworks/qed/blob/master/
|
67
66
|
description: ! 'QED (Quality Ensured Demonstrations) is a TDD/BDD framework
|
68
67
|
|
69
68
|
utilizing Literate Programming techniques.'
|
70
|
-
date: '
|
69
|
+
date: '2013-02-18'
|
data/lib/qed/cli.rb
CHANGED
@@ -1,12 +1,10 @@
|
|
1
1
|
if RUBY_VERSION < '1.9'
|
2
|
-
require 'qed/rc' unless ENV['norc']
|
3
2
|
require 'qed/configure'
|
4
3
|
require 'qed/cli/qed'
|
5
4
|
require 'qed/cli/qedoc'
|
6
5
|
else
|
7
|
-
require_relative 'rc' unless ENV['norc']
|
8
6
|
require_relative 'configure'
|
9
|
-
require_relative
|
10
|
-
require_relative
|
7
|
+
require_relative 'cli/qed'
|
8
|
+
require_relative 'cli/qedoc'
|
11
9
|
end
|
12
10
|
|
data/lib/qed/cli/qed.rb
CHANGED
@@ -17,6 +17,33 @@ module QED
|
|
17
17
|
#
|
18
18
|
# Command line interface for running demos.
|
19
19
|
#
|
20
|
+
# When running `qed` on the command line tool, QED can use
|
21
|
+
# either a automatic configuration file, via the RC library,
|
22
|
+
# or setup configuration via an explicitly required file.
|
23
|
+
#
|
24
|
+
# Using a master configuraiton file, add a `config :qed` entry.
|
25
|
+
# For example:
|
26
|
+
#
|
27
|
+
# config :qed, :profile=>:simplecov do
|
28
|
+
# require 'simplecov'
|
29
|
+
# SimpleCov.start do
|
30
|
+
# coverage_dir 'log/coverage'
|
31
|
+
# end
|
32
|
+
# end
|
33
|
+
#
|
34
|
+
# To not use RC, just create a requirable file such as `config/qed-coverage.rb`
|
35
|
+
#
|
36
|
+
# QED.configure do |qed|
|
37
|
+
# require 'simplecov'
|
38
|
+
# SimpleCov.start do
|
39
|
+
# coverage_dir 'log/coverage'
|
40
|
+
# end
|
41
|
+
# end
|
42
|
+
#
|
43
|
+
# Then when running qed use:
|
44
|
+
#
|
45
|
+
# $ qed -r ./config/qed-coverage.rb
|
46
|
+
#
|
20
47
|
def self.cli(*argv)
|
21
48
|
require 'optparse'
|
22
49
|
require 'shellwords'
|
@@ -25,12 +52,12 @@ module QED
|
|
25
52
|
# (actually, this is really not a problem anymore, but we'll leave it for now)
|
26
53
|
require 'qed/session'
|
27
54
|
|
28
|
-
|
29
|
-
#RC.commit_configuration
|
55
|
+
Utils.load_config
|
30
56
|
|
31
57
|
options = cli_parse(argv)
|
32
58
|
|
33
|
-
|
59
|
+
settings = Settings.new(options)
|
60
|
+
session = Session.new(settings)
|
34
61
|
success = session.run
|
35
62
|
|
36
63
|
exit -1 unless success
|
data/lib/qed/evaluator.rb
CHANGED
@@ -105,6 +105,9 @@ module QED
|
|
105
105
|
advise!(:after_step, step)
|
106
106
|
end
|
107
107
|
|
108
|
+
# TODO: We may deprecate link helpers --it's probably not a good idea
|
109
|
+
# to have per-demo rules any way.
|
110
|
+
|
108
111
|
# TODO: Not sure how to handle loading links in --comment runner mode.
|
109
112
|
|
110
113
|
# TODO: Should scope be reused by imported demo ?
|
@@ -114,7 +117,7 @@ module QED
|
|
114
117
|
#
|
115
118
|
# @macro step
|
116
119
|
def evaluate_links(step)
|
117
|
-
step.text.scan(
|
120
|
+
step.text.scan(/(?:\(|\[)qed:\/\/(.*?)(?:\)|\])/) do |match|
|
118
121
|
file = $1
|
119
122
|
# relative to demo demo
|
120
123
|
if File.exist?(File.join(@demo.directory,file))
|
data/lib/qed/session.rb
CHANGED
@@ -3,6 +3,13 @@ module QED
|
|
3
3
|
require 'qed/settings'
|
4
4
|
require 'qed/demo'
|
5
5
|
|
6
|
+
def self.run!(name=nil, &block)
|
7
|
+
configure(name, &block) if block
|
8
|
+
session = Session.new(:profile=>name)
|
9
|
+
success = session.run
|
10
|
+
exit -1 unless success
|
11
|
+
end
|
12
|
+
|
6
13
|
# The Session class encapsulates a set of demonstrations
|
7
14
|
# and the procedure for looping through them and running
|
8
15
|
# each in turn.
|
@@ -85,7 +92,7 @@ module QED
|
|
85
92
|
# QED.config
|
86
93
|
#end
|
87
94
|
|
88
|
-
# TODO: Ultimately use
|
95
|
+
# TODO: Ultimately use a plugin library to support custom reporters?
|
89
96
|
|
90
97
|
# Require all reporters.
|
91
98
|
def require_reporters
|
@@ -158,7 +165,7 @@ module QED
|
|
158
165
|
|
159
166
|
# Set $ASSERTION_COUNTS to zero point.
|
160
167
|
def reset_assertion_counts
|
161
|
-
$ASSERTION_COUNTS = Hash.new{|h,k| h[k] = 0 }
|
168
|
+
$ASSERTION_COUNTS = Hash.new{ |h,k| h[k] = 0 }
|
162
169
|
end
|
163
170
|
|
164
171
|
# Add to load path (from -I option).
|
data/lib/qed/settings.rb
CHANGED
@@ -1,36 +1,10 @@
|
|
1
1
|
require 'qed/configure'
|
2
|
+
require 'qed/utils'
|
2
3
|
|
3
4
|
module QED
|
4
5
|
|
5
6
|
# Settings ecapsulates setup configuration for running QED.
|
6
7
|
#
|
7
|
-
# When running `qed` on the command line tool, QED can use
|
8
|
-
# either a automatic configuration file, via the RC library,
|
9
|
-
# or setup configuration via an explicitly required file.
|
10
|
-
#
|
11
|
-
# Using a master configuraiton file, add a `config :qed` entry.
|
12
|
-
# For example:
|
13
|
-
#
|
14
|
-
# config :qed, :simplecov, :preset=>true do
|
15
|
-
# require 'simplecov'
|
16
|
-
# SimpleCov.start do
|
17
|
-
# coverage_dir 'log/coverage'
|
18
|
-
# end
|
19
|
-
# end
|
20
|
-
#
|
21
|
-
# To not use RC, just create a requirable file such as `config/qed-coverage.rb`
|
22
|
-
#
|
23
|
-
# QED.configure do |qed|
|
24
|
-
# require 'simplecov'
|
25
|
-
# SimpleCov.start do
|
26
|
-
# coverage_dir 'log/coverage'
|
27
|
-
# end
|
28
|
-
# end
|
29
|
-
#
|
30
|
-
# Then when running qed use:
|
31
|
-
#
|
32
|
-
# $ qed -r ./config/qed-coverage.rb
|
33
|
-
#
|
34
8
|
class Settings
|
35
9
|
|
36
10
|
require 'tmpdir'
|
@@ -40,24 +14,18 @@ module QED
|
|
40
14
|
# will be searched.
|
41
15
|
DEFAULT_FILES = ['qed', 'demo', 'spec']
|
42
16
|
|
43
|
-
# Glob pattern used to search for project's root directory.
|
44
|
-
ROOT_PATTERN = '{.map,.ruby,.git/,.hg/,_darcs/}'
|
45
|
-
|
46
|
-
# Home directory.
|
47
|
-
HOME = File.expand_path('~')
|
48
|
-
|
49
17
|
# Directory names to omit from automatic selection.
|
50
18
|
OMIT_PATHS = %w{applique helpers support sample samples fixture fixtures}
|
51
19
|
|
52
20
|
#
|
53
21
|
# Initialize new Settings instance.
|
54
22
|
#
|
55
|
-
def initialize(options={})
|
23
|
+
def initialize(options={}, &block)
|
56
24
|
initialize_defaults
|
57
25
|
|
58
26
|
@profile = (options.delete(:profile) || default_profile).to_s
|
59
27
|
|
60
|
-
load_profile
|
28
|
+
load_profile(&block)
|
61
29
|
|
62
30
|
options.each do |key, val|
|
63
31
|
send("#{key}=", val) if val
|
@@ -131,7 +99,7 @@ module QED
|
|
131
99
|
# a Proc object in a hash b/c different configuration systems
|
132
100
|
# can be used.
|
133
101
|
#
|
134
|
-
def load_profile
|
102
|
+
def load_profile(&block)
|
135
103
|
config = QED.profiles[@profile]
|
136
104
|
config.call(self) if config
|
137
105
|
end
|
@@ -155,7 +123,7 @@ module QED
|
|
155
123
|
# Project's root directory.
|
156
124
|
#
|
157
125
|
def root
|
158
|
-
|
126
|
+
Utils.root
|
159
127
|
end
|
160
128
|
|
161
129
|
#
|
@@ -171,7 +139,7 @@ module QED
|
|
171
139
|
def temporary_directory
|
172
140
|
@temporary_directory ||= (
|
173
141
|
if rootless?
|
174
|
-
system_tmpdir
|
142
|
+
Utils.system_tmpdir
|
175
143
|
else
|
176
144
|
File.join(root_directory, 'tmp', 'qed')
|
177
145
|
end
|
@@ -214,81 +182,6 @@ module QED
|
|
214
182
|
|
215
183
|
private
|
216
184
|
|
217
|
-
# TODO: find a way to not need $ROOT global.
|
218
|
-
|
219
|
-
#
|
220
|
-
# Locate project's root directory. This is done by searching upward
|
221
|
-
# in the file heirarchy for the existence of one of the following:
|
222
|
-
#
|
223
|
-
# .ruby
|
224
|
-
# .git/
|
225
|
-
# .hg/
|
226
|
-
# _darcs/
|
227
|
-
# .qed
|
228
|
-
# .qed.rb
|
229
|
-
# qed.rb
|
230
|
-
#
|
231
|
-
# Failing to find any of these locations, resort to the fallback:
|
232
|
-
#
|
233
|
-
# lib/
|
234
|
-
#
|
235
|
-
# If that isn't found, then returns a temporary system location.
|
236
|
-
# and sets `rootless` to true.
|
237
|
-
#
|
238
|
-
def find_root(path=nil)
|
239
|
-
return ($ROOT = system_tmpdir) if @rootless
|
240
|
-
|
241
|
-
path = File.expand_path(path || Dir.pwd)
|
242
|
-
path = File.dirname(path) unless File.directory?(path)
|
243
|
-
|
244
|
-
root = lookup(ROOT_PATTERN, path) || lookup(CONFIG_PATTERN, path)
|
245
|
-
return root if root
|
246
|
-
|
247
|
-
#root = lookup(path, '{qed,demo,spec}/')
|
248
|
-
#return root if root
|
249
|
-
|
250
|
-
root = lookup('lib/', path)
|
251
|
-
|
252
|
-
if !root
|
253
|
-
warn "QED is running rootless."
|
254
|
-
system_tmpdir
|
255
|
-
@rootless = true
|
256
|
-
else
|
257
|
-
root
|
258
|
-
end
|
259
|
-
|
260
|
-
$ROOT = root
|
261
|
-
|
262
|
-
#abort "QED failed to resolve project's root location.\n" +
|
263
|
-
# "QED looks for following entries to identify the root:\n" +
|
264
|
-
# ROOT_PATTERN +
|
265
|
-
# "Please add one of them to your project to proceed."
|
266
|
-
end
|
267
|
-
|
268
|
-
# TODO: Use Dir.ascend from Ruby Facets ?
|
269
|
-
|
270
|
-
#
|
271
|
-
# Lookup path +glob+, searching each higher directory
|
272
|
-
# in turn until just before the users home directory
|
273
|
-
# is reached or just before the system's root directory.
|
274
|
-
#
|
275
|
-
def lookup(glob, path=Dir.pwd)
|
276
|
-
until path == HOME or path == '/' # until home or root
|
277
|
-
mark = Dir.glob(File.join(path,glob), File::FNM_CASEFOLD).first
|
278
|
-
return path if mark
|
279
|
-
path = File.dirname(path)
|
280
|
-
end
|
281
|
-
end
|
282
|
-
|
283
|
-
#
|
284
|
-
# System-wide temporary directory for QED executation.
|
285
|
-
#
|
286
|
-
def system_tmpdir
|
287
|
-
@system_tmpdir ||= (
|
288
|
-
File.join(Dir.tmpdir, 'qed', File.basename(Dir.pwd), Time.new.strftime("%Y%m%d%H%M%S"))
|
289
|
-
)
|
290
|
-
end
|
291
|
-
|
292
185
|
# TODO: Support .map in future ?
|
293
186
|
|
294
187
|
##
|
@@ -317,15 +210,6 @@ module QED
|
|
317
210
|
# config.exec
|
318
211
|
#end
|
319
212
|
|
320
|
-
#
|
321
|
-
#def load_profile_from_file(file)
|
322
|
-
# if File.exist?(file)
|
323
|
-
# instance_eval(File.read(file), file)
|
324
|
-
# else
|
325
|
-
# # raise "no profile -- #{profile}"
|
326
|
-
# end
|
327
|
-
#end
|
328
|
-
|
329
213
|
end
|
330
214
|
|
331
215
|
end
|
data/lib/qed/utils.rb
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
module QED
|
2
|
+
|
3
|
+
# Glob pattern used to search for project's root directory.
|
4
|
+
ROOT_PATTERN = '{.ruby*,.git/,.hg/,_darcs/}'
|
5
|
+
|
6
|
+
# Glob pattern for standard config file.
|
7
|
+
CONFIG_PATTERN = '{etc/qed.rb,config/qed.rb,Qedfile,.qed}'
|
8
|
+
|
9
|
+
# Home directory.
|
10
|
+
HOME = File.expand_path('~')
|
11
|
+
|
12
|
+
#
|
13
|
+
module Utils
|
14
|
+
extend self
|
15
|
+
|
16
|
+
#
|
17
|
+
def load_config
|
18
|
+
load_etc unless ENV['noetc']
|
19
|
+
load_rc unless ENV['norc']
|
20
|
+
end
|
21
|
+
|
22
|
+
#
|
23
|
+
def load_rc
|
24
|
+
rc_file= File.join(root, '.rubyrc')
|
25
|
+
if File.exist?(rc_file)
|
26
|
+
begin
|
27
|
+
require 'rc/api'
|
28
|
+
RC.profile_switch 'qed', '-p', '--profile'
|
29
|
+
RC.configure 'qed' do |config|
|
30
|
+
QED.configure(config.profile, &config)
|
31
|
+
end
|
32
|
+
rescue LoadError
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
#
|
38
|
+
def load_etc
|
39
|
+
file = Dir.glob(File.join(root, CONFIG_PATTERN)).first
|
40
|
+
if file
|
41
|
+
load file
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
#
|
46
|
+
def root
|
47
|
+
@root ||= find_root
|
48
|
+
end
|
49
|
+
|
50
|
+
# TODO: find a way to not need $ROOT global.
|
51
|
+
|
52
|
+
#
|
53
|
+
# Locate project's root directory. This is done by searching upward
|
54
|
+
# in the file heirarchy for the existence of one of the following:
|
55
|
+
#
|
56
|
+
# .ruby
|
57
|
+
# .git/
|
58
|
+
# .hg/
|
59
|
+
# _darcs/
|
60
|
+
# .qed
|
61
|
+
# .qed.rb
|
62
|
+
# qed.rb
|
63
|
+
#
|
64
|
+
# Failing to find any of these locations, resort to the fallback:
|
65
|
+
#
|
66
|
+
# lib/
|
67
|
+
#
|
68
|
+
# If that isn't found, then returns a temporary system location.
|
69
|
+
# and sets `rootless` to true.
|
70
|
+
#
|
71
|
+
def find_root(path=nil)
|
72
|
+
return ($ROOT = system_tmpdir) if @rootless
|
73
|
+
|
74
|
+
path = File.expand_path(path || Dir.pwd)
|
75
|
+
path = File.dirname(path) unless File.directory?(path)
|
76
|
+
|
77
|
+
root = lookup(ROOT_PATTERN, path) || lookup(CONFIG_PATTERN, path)
|
78
|
+
return root if root
|
79
|
+
|
80
|
+
#root = lookup(path, '{qed,demo,spec}/')
|
81
|
+
#return root if root
|
82
|
+
|
83
|
+
root = lookup('lib/', path)
|
84
|
+
|
85
|
+
if !root
|
86
|
+
warn "QED is running rootless."
|
87
|
+
system_tmpdir
|
88
|
+
@rootless = true
|
89
|
+
else
|
90
|
+
root
|
91
|
+
end
|
92
|
+
|
93
|
+
$ROOT = root
|
94
|
+
|
95
|
+
#abort "QED failed to resolve project's root location.\n" +
|
96
|
+
# "QED looks for following entries to identify the root:\n" +
|
97
|
+
# ROOT_PATTERN +
|
98
|
+
# "Please add one of them to your project to proceed."
|
99
|
+
end
|
100
|
+
|
101
|
+
#
|
102
|
+
# Lookup path +glob+, searching each higher directory
|
103
|
+
# in turn until just before the users home directory
|
104
|
+
# is reached or just before the system's root directory.
|
105
|
+
#
|
106
|
+
def lookup(glob, path=Dir.pwd)
|
107
|
+
until path == HOME or path == '/' # until home or root
|
108
|
+
mark = Dir.glob(File.join(path,glob), File::FNM_CASEFOLD).first
|
109
|
+
return path if mark
|
110
|
+
path = File.dirname(path)
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
#
|
115
|
+
# System-wide temporary directory for QED executation.
|
116
|
+
#
|
117
|
+
def system_tmpdir
|
118
|
+
@system_tmpdir ||= (
|
119
|
+
File.join(Dir.tmpdir, 'qed', File.basename(Dir.pwd), Time.new.strftime("%Y%m%d%H%M%S"))
|
120
|
+
)
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
124
|
+
|
125
|
+
end
|