qed 2.3.0 → 2.4.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.
- data/History.rdoc +15 -0
- data/eg/hello_world.rdoc +15 -0
- data/eg/view_error.rdoc +21 -0
- data/eg/website.rdoc +12 -0
- data/lib/qed/advice.rb +4 -3
- data/lib/qed/command.rb +2 -3
- data/lib/qed/core_ext/instance_exec.rb +36 -0
- data/lib/qed/demo.rb +0 -1
- data/lib/qed/evaluator.rb +75 -36
- data/lib/qed/extensions/filefixtures.rb +27 -0
- data/lib/qed/extensions/shell_session.rb +2 -0
- data/lib/qed/meta/data.rb +29 -0
- data/lib/qed/meta/gemfile +10 -0
- data/{PROFILE → lib/qed/meta/profile} +0 -0
- data/lib/qed/parser.rb +148 -74
- data/lib/qed/reporter/abstract.rb +175 -25
- data/lib/qed/reporter/bullet.rb +14 -10
- data/lib/qed/reporter/dotprogress.rb +26 -9
- data/lib/qed/reporter/verbatim.rb +36 -15
- data/lib/qed/scope.rb +18 -8
- data/lib/qed/session.rb +2 -2
- data/meta/data.rb +29 -0
- data/meta/gemfile +10 -0
- data/{lib/qed/profile.yml → meta/profile} +0 -0
- data/{demo → qed}/01_demos.rdoc +7 -13
- data/{demo → qed}/02_advice.rdoc +7 -7
- data/{demo → qed}/03_helpers.rdoc +2 -2
- data/{demo → qed}/04_samples.rdoc +0 -0
- data/{demo → qed}/05_quote.rdoc +0 -0
- data/{demo → qed}/07_toplevel.rdoc +0 -0
- data/{demo → qed}/08_cross_script.rdoc +0 -2
- data/{demo → qed}/09_cross_script.rdoc +5 -3
- data/{demo → qed}/10_constant_lookup.rdoc +0 -0
- data/{demo → qed}/applique/constant.rb +0 -0
- data/{demo → qed}/applique/env.rb +0 -0
- data/{demo → qed}/applique/fileutils.rb +0 -0
- data/{demo → qed}/applique/markup.rb +0 -0
- data/{demo → qed}/applique/quote.rb +0 -0
- data/{demo → qed}/applique/toplevel.rb +0 -0
- data/{demo → qed}/helpers/advice.rb +0 -0
- data/{demo → qed}/helpers/sample.rb +0 -0
- data/{demo → qed}/helpers/toplevel.rb +0 -0
- data/{demo → qed}/samples/data.txt +0 -0
- data/{demo → qed}/samples/table.yml +0 -0
- metadata +43 -38
- data/REQUIRE +0 -7
- data/VERSION +0 -5
- data/lib/qed/package.yml +0 -5
- data/script/qedoc +0 -2
- data/script/test +0 -4
data/lib/qed/scope.rb
CHANGED
@@ -5,7 +5,7 @@ module QED
|
|
5
5
|
# Scope is the context in which QED documents are run.
|
6
6
|
#
|
7
7
|
class Scope < Module
|
8
|
-
|
8
|
+
|
9
9
|
#
|
10
10
|
def self.new(applique, file)
|
11
11
|
@_applique = applique
|
@@ -25,6 +25,7 @@ module QED
|
|
25
25
|
|
26
26
|
extend self
|
27
27
|
extend applique # TODO: extend or include applique or none ?
|
28
|
+
include applique
|
28
29
|
#extend DSLi
|
29
30
|
|
30
31
|
# TODO: custom extends?
|
@@ -34,19 +35,29 @@ module QED
|
|
34
35
|
|
35
36
|
# This turns out to be the key to proper scoping.
|
36
37
|
def __create_clean_binding_method__
|
37
|
-
define_method(:__binding__) do
|
38
|
-
|
39
|
-
end
|
38
|
+
#define_method(:__binding__) do
|
39
|
+
# @__binding__ ||= binding
|
40
|
+
#end
|
41
|
+
module_eval %{
|
42
|
+
def __binding__
|
43
|
+
@__binding__ ||= binding
|
44
|
+
end
|
45
|
+
}
|
40
46
|
end
|
41
47
|
|
42
|
-
#
|
43
|
-
|
48
|
+
# Expanded dirname of +file+.
|
49
|
+
def demo_directory
|
50
|
+
@_demo_directory ||= File.expand_path(File.dirname(@_file))
|
51
|
+
end
|
52
|
+
|
53
|
+
# Evaluate code in the context of the scope's special binding.
|
44
54
|
def eval(code, binding=nil)
|
45
|
-
super(code, binding || __binding__)
|
55
|
+
super(code, binding || __binding__, @_file)
|
46
56
|
end
|
47
57
|
|
48
58
|
# Define "when" advice.
|
49
59
|
def When(*patterns, &procedure)
|
60
|
+
patterns = patterns.map{ |pat| pat == :text ? :desc : pat }
|
50
61
|
@_applique.When(*patterns, &procedure)
|
51
62
|
end
|
52
63
|
|
@@ -120,4 +131,3 @@ module QED
|
|
120
131
|
end#class Scope
|
121
132
|
|
122
133
|
end#module QED
|
123
|
-
|
data/lib/qed/session.rb
CHANGED
@@ -123,7 +123,7 @@ module QED
|
|
123
123
|
applique
|
124
124
|
end
|
125
125
|
|
126
|
-
#
|
126
|
+
# SCM: reverse order of applique so topmost directory comes first
|
127
127
|
def applique_scripts
|
128
128
|
locs = []
|
129
129
|
files.each do |file|
|
@@ -135,7 +135,7 @@ module QED
|
|
135
135
|
end
|
136
136
|
end
|
137
137
|
end
|
138
|
-
envs = locs.map{ |loc| Dir[File.join(loc,'**/*.rb')] }
|
138
|
+
envs = locs.reverse.map{ |loc| Dir[File.join(loc,'**/*.rb')] }
|
139
139
|
envs.flatten.compact.uniq
|
140
140
|
end
|
141
141
|
|
data/meta/data.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
Object.__send__(:remove_const, :VERSION) if Object.const_defined?(:VERSION) # becuase Ruby 1.8~ gets in the way
|
2
|
+
|
3
|
+
module QED
|
4
|
+
|
5
|
+
def self.__DIR__
|
6
|
+
File.dirname(__FILE__)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.gemfile
|
10
|
+
@gemfile ||= (
|
11
|
+
require 'yaml'
|
12
|
+
YAML.load(File.new(__DIR__ + '/gemfile'))
|
13
|
+
)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.profile
|
17
|
+
@profile ||= (
|
18
|
+
require 'yaml'
|
19
|
+
YAML.load(File.new(__DIR__ + '/profile'))
|
20
|
+
)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.const_missing(name)
|
24
|
+
key = name.to_s.downcase
|
25
|
+
gemfile[key] || profile[key] || super(name)
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
|
data/meta/gemfile
ADDED
File without changes
|
data/{demo → qed}/01_demos.rdoc
RENAMED
@@ -1,16 +1,16 @@
|
|
1
1
|
= Demonstrations
|
2
2
|
|
3
|
-
==
|
3
|
+
== Steps
|
4
4
|
|
5
5
|
QED demos are light-weight specification documents, highly suitable
|
6
6
|
to interface-driven design. The documents are divided up into
|
7
|
-
|
8
|
-
left margin are always
|
9
|
-
|
7
|
+
steps separated by blank lines. Steps that are flush to the
|
8
|
+
left margin are always explanatory comments. Indented steps are
|
9
|
+
either executable code or plain text samples.
|
10
10
|
|
11
|
-
Each
|
12
|
-
|
13
|
-
|
11
|
+
Each step is executed in order of appearance within a rescue wrapper
|
12
|
+
that captures any failures or errors. If neither a failure or error
|
13
|
+
occur then the step gets a "pass".
|
14
14
|
|
15
15
|
For example, the following passes.
|
16
16
|
|
@@ -29,12 +29,6 @@ And this would have raised a NameError.
|
|
29
29
|
nobody_knows_method
|
30
30
|
end
|
31
31
|
|
32
|
-
== Neutral Code Blocks
|
33
|
-
|
34
|
-
There is no means of specifying that a code clause is neutral code,
|
35
|
-
i.e. that it should be executed but not tested. Thus far, such a
|
36
|
-
feature has proven to be a YAGNI.
|
37
|
-
|
38
32
|
== Defining Custom Assertions
|
39
33
|
|
40
34
|
The context in which the QED code is run is a self-extended module, thus
|
data/{demo → qed}/02_advice.rdoc
RENAMED
@@ -85,12 +85,12 @@ an object just magically appear.
|
|
85
85
|
|
86
86
|
== Event Targets
|
87
87
|
|
88
|
-
There is a small set of advice targets that do not come before
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
88
|
+
There is a small set of advice targets that do not come before or after,
|
89
|
+
rather they occur *upon* a particular event. These include +:load+
|
90
|
+
and +:unload+ for when a new helper is loaded; +:pass+, +:fail+ and +:error+
|
91
|
+
for when a code block passes, fails or raises an error; and +:head+, +:desc:+,
|
92
|
+
+:code+ and +:data:+ which targets the immediate processing of a text block
|
93
|
+
and code excecution.
|
94
94
|
|
95
95
|
These event targets can be advised by calling the +When+ method
|
96
96
|
with the target type as an argument along with the code block
|
@@ -99,7 +99,7 @@ to be run when the event is triggered.
|
|
99
99
|
x = []
|
100
100
|
|
101
101
|
When(:text) do |section|
|
102
|
-
section.
|
102
|
+
section.text.scan(/^\*(.*?)$/) do |m|
|
103
103
|
x << $1.strip
|
104
104
|
end
|
105
105
|
end
|
@@ -30,8 +30,8 @@ No where in the demonstration have we defined +pudding+, but
|
|
30
30
|
it has been defined for us in the advice.rb helper script.
|
31
31
|
|
32
32
|
We can also see that the generic When clause in our advice
|
33
|
-
helper is keeping count of
|
34
|
-
script was loaded two paragraphs
|
33
|
+
helper is keeping count of decriptive paragraphs. Since the
|
34
|
+
helper script was loaded two paragraphs back, the next count
|
35
35
|
will be 3.
|
36
36
|
|
37
37
|
count.assert == 3
|
File without changes
|
data/{demo → qed}/05_quote.rdoc
RENAMED
File without changes
|
File without changes
|
@@ -20,8 +20,10 @@ Method definitions also do not cross QED scripts.
|
|
20
20
|
cross_script_method
|
21
21
|
end
|
22
22
|
|
23
|
-
|
24
|
-
their way across.
|
23
|
+
Since each demo is encapsulated in a separated class scope, constants also
|
24
|
+
do not make their way across.
|
25
25
|
|
26
|
-
|
26
|
+
expect NameError do
|
27
|
+
CROSS_SCRIPT_CONSTANT
|
28
|
+
end
|
27
29
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qed
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 31
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 0
|
10
|
-
version: 2.
|
10
|
+
version: 2.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Thomas Sawyer <transfire@gmail.com>
|
@@ -15,11 +15,11 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-
|
18
|
+
date: 2010-09-02 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
-
name:
|
22
|
+
name: ansi
|
23
23
|
prerelease: false
|
24
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
@@ -33,7 +33,7 @@ dependencies:
|
|
33
33
|
type: :runtime
|
34
34
|
version_requirements: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
name:
|
36
|
+
name: facets
|
37
37
|
prerelease: false
|
38
38
|
requirement: &id002 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
@@ -47,7 +47,7 @@ dependencies:
|
|
47
47
|
type: :runtime
|
48
48
|
version_requirements: *id002
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
50
|
+
name: ae
|
51
51
|
prerelease: false
|
52
52
|
requirement: &id003 !ruby/object:Gem::Requirement
|
53
53
|
none: false
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
segments:
|
59
59
|
- 0
|
60
60
|
version: "0"
|
61
|
-
type: :
|
61
|
+
type: :development
|
62
62
|
version_requirements: *id003
|
63
63
|
- !ruby/object:Gem::Dependency
|
64
64
|
name: syckle
|
@@ -75,7 +75,7 @@ dependencies:
|
|
75
75
|
type: :development
|
76
76
|
version_requirements: *id004
|
77
77
|
description: QED (Quality Ensured Demonstrations) is a TDD/BDD framework utilizing Literate Programming techniques.
|
78
|
-
email:
|
78
|
+
email: ""
|
79
79
|
executables:
|
80
80
|
- qedoc
|
81
81
|
- qed
|
@@ -86,35 +86,22 @@ extra_rdoc_files:
|
|
86
86
|
files:
|
87
87
|
- bin/qed
|
88
88
|
- bin/qedoc
|
89
|
-
-
|
90
|
-
-
|
91
|
-
-
|
92
|
-
- demo/04_samples.rdoc
|
93
|
-
- demo/05_quote.rdoc
|
94
|
-
- demo/07_toplevel.rdoc
|
95
|
-
- demo/08_cross_script.rdoc
|
96
|
-
- demo/09_cross_script.rdoc
|
97
|
-
- demo/10_constant_lookup.rdoc
|
98
|
-
- demo/applique/constant.rb
|
99
|
-
- demo/applique/env.rb
|
100
|
-
- demo/applique/fileutils.rb
|
101
|
-
- demo/applique/markup.rb
|
102
|
-
- demo/applique/quote.rb
|
103
|
-
- demo/applique/toplevel.rb
|
104
|
-
- demo/helpers/advice.rb
|
105
|
-
- demo/helpers/sample.rb
|
106
|
-
- demo/helpers/toplevel.rb
|
107
|
-
- demo/samples/data.txt
|
108
|
-
- demo/samples/table.yml
|
89
|
+
- eg/hello_world.rdoc
|
90
|
+
- eg/view_error.rdoc
|
91
|
+
- eg/website.rdoc
|
109
92
|
- lib/qed/advice.rb
|
110
93
|
- lib/qed/applique.rb
|
111
94
|
- lib/qed/command.rb
|
112
95
|
- lib/qed/config.rb
|
96
|
+
- lib/qed/core_ext/instance_exec.rb
|
113
97
|
- lib/qed/demo.rb
|
114
98
|
- lib/qed/evaluator.rb
|
115
|
-
- lib/qed/
|
99
|
+
- lib/qed/extensions/filefixtures.rb
|
100
|
+
- lib/qed/extensions/shell_session.rb
|
101
|
+
- lib/qed/meta/data.rb
|
102
|
+
- lib/qed/meta/gemfile
|
103
|
+
- lib/qed/meta/profile
|
116
104
|
- lib/qed/parser.rb
|
117
|
-
- lib/qed/profile.yml
|
118
105
|
- lib/qed/reporter/abstract.rb
|
119
106
|
- lib/qed/reporter/bullet.rb
|
120
107
|
- lib/qed/reporter/dotprogress.rb
|
@@ -128,20 +115,38 @@ files:
|
|
128
115
|
- lib/qedoc/document/markup.rb
|
129
116
|
- lib/qedoc/document/template.rhtml
|
130
117
|
- lib/qedoc/document.rb
|
131
|
-
-
|
132
|
-
-
|
118
|
+
- meta/data.rb
|
119
|
+
- meta/gemfile
|
120
|
+
- meta/profile
|
121
|
+
- qed/01_demos.rdoc
|
122
|
+
- qed/02_advice.rdoc
|
123
|
+
- qed/03_helpers.rdoc
|
124
|
+
- qed/04_samples.rdoc
|
125
|
+
- qed/05_quote.rdoc
|
126
|
+
- qed/07_toplevel.rdoc
|
127
|
+
- qed/08_cross_script.rdoc
|
128
|
+
- qed/09_cross_script.rdoc
|
129
|
+
- qed/10_constant_lookup.rdoc
|
130
|
+
- qed/applique/constant.rb
|
131
|
+
- qed/applique/env.rb
|
132
|
+
- qed/applique/fileutils.rb
|
133
|
+
- qed/applique/markup.rb
|
134
|
+
- qed/applique/quote.rb
|
135
|
+
- qed/applique/toplevel.rb
|
136
|
+
- qed/helpers/advice.rb
|
137
|
+
- qed/helpers/sample.rb
|
138
|
+
- qed/helpers/toplevel.rb
|
139
|
+
- qed/samples/data.txt
|
140
|
+
- qed/samples/table.yml
|
133
141
|
- test/integration/topcode.rdoc
|
134
|
-
- PROFILE
|
135
142
|
- LICENSE
|
136
143
|
- Diary.rdoc
|
137
144
|
- README.rdoc
|
138
|
-
- REQUIRE
|
139
|
-
- VERSION
|
140
145
|
- History.rdoc
|
141
146
|
has_rdoc: true
|
142
147
|
homepage: http://proutils.github.com/qed
|
143
|
-
licenses:
|
144
|
-
|
148
|
+
licenses:
|
149
|
+
- ""
|
145
150
|
post_install_message:
|
146
151
|
rdoc_options:
|
147
152
|
- --title
|
data/REQUIRE
DELETED
data/VERSION
DELETED
data/lib/qed/package.yml
DELETED
data/script/qedoc
DELETED
data/script/test
DELETED