qed 2.1.1 → 2.2.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.
Files changed (67) hide show
  1. data/COPYING +622 -344
  2. data/DIARY.rdoc +117 -0
  3. data/HISTORY +36 -0
  4. data/PROFILE +16 -0
  5. data/README.rdoc +69 -36
  6. data/REQUIRE +9 -0
  7. data/ROADMAP +12 -0
  8. data/VERSION +5 -0
  9. data/demo/01_demos.rdoc +56 -0
  10. data/demo/02_advice.rdoc +158 -0
  11. data/demo/03_helpers.rdoc +42 -0
  12. data/demo/04_fixtures.rdoc +29 -0
  13. data/demo/05_quote.rdoc +24 -0
  14. data/demo/07_toplevel.rdoc +42 -0
  15. data/demo/08_cross_script.rdoc +27 -0
  16. data/demo/09_cross_script.rdoc +27 -0
  17. data/demo/10_constant_lookup.rdoc +16 -0
  18. data/demo/applique/constant.rb +2 -0
  19. data/demo/applique/env.rb +5 -0
  20. data/demo/applique/fileutils.rb +1 -0
  21. data/demo/applique/markup.rb +10 -0
  22. data/demo/applique/quote.rb +4 -0
  23. data/demo/applique/toplevel.rb +15 -0
  24. data/demo/fixtures/data.txt +1 -0
  25. data/demo/fixtures/table.yml +5 -0
  26. data/demo/helpers/advice.rb +40 -0
  27. data/demo/helpers/sample.rb +4 -0
  28. data/demo/helpers/toplevel.rb +6 -0
  29. data/eg/hello_world.rdoc +15 -0
  30. data/{demo/error.rdoc → eg/view_error.rdoc} +0 -0
  31. data/{demo → eg}/website.rdoc +0 -0
  32. data/lib/qed.rb +20 -1
  33. data/lib/qed/advice.rb +4 -30
  34. data/lib/qed/advice/events.rb +6 -3
  35. data/lib/qed/advice/patterns.rb +37 -19
  36. data/lib/qed/applique.rb +85 -0
  37. data/lib/qed/command.rb +3 -5
  38. data/lib/qed/evaluator.rb +52 -56
  39. data/lib/qed/package.yml +5 -0
  40. data/lib/qed/parser.rb +149 -0
  41. data/lib/qed/profile.yml +16 -0
  42. data/lib/qed/reporter/{base.rb → abstract.rb} +17 -19
  43. data/lib/qed/reporter/bullet.rb +14 -16
  44. data/lib/qed/reporter/dotprogress.rb +7 -6
  45. data/lib/qed/reporter/html.rb +21 -3
  46. data/lib/qed/reporter/verbatim.rb +28 -26
  47. data/lib/qed/scope.rb +98 -82
  48. data/lib/qed/script.rb +21 -69
  49. data/lib/qed/session.rb +44 -3
  50. data/script/qedoc +2 -0
  51. data/script/test +2 -0
  52. metadata +74 -28
  53. data/doc/qedoc/index.html +0 -515
  54. data/doc/qedoc/jquery.js +0 -19
  55. data/meta/authors +0 -1
  56. data/meta/created +0 -1
  57. data/meta/description +0 -2
  58. data/meta/homepage +0 -1
  59. data/meta/name +0 -1
  60. data/meta/released +0 -1
  61. data/meta/repository +0 -1
  62. data/meta/requires +0 -5
  63. data/meta/ruby +0 -2
  64. data/meta/suite +0 -1
  65. data/meta/summary +0 -1
  66. data/meta/title +0 -1
  67. data/meta/version +0 -1
data/lib/qed/script.rb CHANGED
@@ -1,52 +1,48 @@
1
1
  module QED
2
2
  require 'yaml'
3
- require 'tilt'
4
- require 'nokogiri'
5
3
 
6
4
  require 'facets/dir/ascend'
7
5
 
6
+ require 'qed/parser'
8
7
  require 'qed/evaluator'
9
8
 
10
- #Assertion = AE::Assertion
11
- #Expectation = Assertor
12
-
13
9
  # = Script
14
10
  #
15
- # When run current working directory is changed to that of
16
- # the demonstration script's. So any relative file references
17
- # within a demo must take that into account.
18
- #
19
11
  class Script
20
12
 
21
- # Demonstration file.
22
- attr :file
13
+ #
14
+ attr :applique
23
15
 
24
- # Expanded dirname of +file+.
25
- attr :dir
16
+ # Demonstrandum file.
17
+ attr :file
26
18
 
27
19
  #
28
20
  attr :scope
29
21
 
30
22
  # New Script
31
- def initialize(file, scope=nil)
23
+ def initialize(applique, file, scope=nil)
24
+ @applique = applique.dup # localize copy of applique
32
25
  @file = file
33
- @scope = scope || Scope.new
34
- apply_environment
26
+ @scope = scope || Scope.new(applique)
27
+ @binding = @scope.__binding__
28
+ #@loadlist = []
29
+ #apply_environment
35
30
  end
36
31
 
37
32
  # One binding per script.
38
33
  def binding
39
- @binding ||= @scope.__binding__
34
+ @binding #||= @scope.__binding__
40
35
  end
41
36
 
42
37
  #
43
38
  def advice
44
- @scope.__advice__
39
+ #@scope.__advice__
40
+ @applique.__advice__
45
41
  end
46
42
 
47
- #
48
- def dir
49
- @dir ||= File.expand_path(File.dirname(file))
43
+ # Expanded dirname of +file+.
44
+ def directory
45
+ @directory ||= File.expand_path(File.dirname(file))
50
46
  end
51
47
 
52
48
  # File basename less extension.
@@ -54,36 +50,6 @@ module QED
54
50
  @name ||= File.basename(file).chomp(File.extname(file))
55
51
  end
56
52
 
57
- # Nokogiri HTML document.
58
- def document
59
- @document ||= Nokogiri::HTML(to_html)
60
- end
61
-
62
- # Root node of the html document.
63
- def root
64
- document.root
65
- end
66
-
67
- # Open file and translate template into HTML text.
68
- def to_html
69
- #case file
70
- #when /^http/
71
- # ext = File.extname(file).sub('.','')
72
- # Tilt[ext].new{ source }
73
- #else
74
- #end
75
- if File.extname(file) == '.html'
76
- File.read(file)
77
- else
78
- Tilt.new(file).render
79
- end
80
- end
81
-
82
- # Open, convert to HTML and cache.
83
- def html
84
- @html ||= to_html
85
- end
86
-
87
53
  #
88
54
  #def source
89
55
  # @source ||= (
@@ -97,30 +63,16 @@ module QED
97
63
  # )
98
64
  #end
99
65
 
66
+ def parse
67
+ Parser.new(file).parse
68
+ end
69
+
100
70
  #
101
71
  def run(*observers)
102
72
  evaluator = Evaluator.new(self, *observers)
103
73
  evaluator.run
104
74
  end
105
75
 
106
- #
107
- def environment
108
- glob = File.join(dir, '{environment,common,shared}', '*')
109
- Dir[glob]
110
- end
111
-
112
- #
113
- def apply_environment
114
- environment.each do |file|
115
- case File.extname(file)
116
- when '.rb'
117
- eval(File.read(file), scope.__binding__, file)
118
- else
119
- Script.new(file, scope).run
120
- end
121
- end
122
- end
123
-
124
76
  end
125
77
 
126
78
  end
data/lib/qed/session.rb CHANGED
@@ -1,9 +1,10 @@
1
1
  module QED
2
2
 
3
3
  #require 'qed/config'
4
+ require 'qed/applique'
4
5
  require 'qed/script'
5
6
 
6
- # = Demonstration Run-time Session
7
+ # = Runtime Session
7
8
  #
8
9
  # The Session class encapsulates a set of demonstrations
9
10
  # and the procedure for looping through them and running
@@ -32,6 +33,8 @@ module QED
32
33
  options.each do |k,v|
33
34
  __send__("#{k}=", v) if v
34
35
  end
36
+
37
+ @applique = create_applique
35
38
  end
36
39
 
37
40
  # Top-level configuration.
@@ -61,7 +64,7 @@ module QED
61
64
 
62
65
  #
63
66
  def scripts
64
- @scripts ||= demos.map{ |demo| Script.new(demo) }
67
+ @scripts ||= demos.map{ |demo| Script.new(@applique, demo) }
65
68
  end
66
69
 
67
70
  #
@@ -77,7 +80,9 @@ module QED
77
80
  # script = Script.new(demo, report)
78
81
  scripts.each do |script|
79
82
  script.run(*observers)
80
- end
83
+ #pid = fork { script.run(*observers) }
84
+ #Process.detach(pid)
85
+ end
81
86
  reporter.after_session(self)
82
87
  #profile.after_session(self)
83
88
  end
@@ -89,6 +94,42 @@ module QED
89
94
  # end
90
95
  #end
91
96
 
97
+ # TODO: associate scripts to there applique
98
+ def create_applique
99
+ applique = Applique.new
100
+ #eval "include QED::DomainLanguage", TOPLEVEL_BINDING
101
+ applique_scripts.each do |file|
102
+ #next if @loadlist.include?(file)
103
+ #case File.extname(file)
104
+ #when '.rb'
105
+ # since scope is just TOPLEVEL now
106
+ #require(file)
107
+ applique.module_eval(File.read(file), file)
108
+ #eval(File.read(file), scope.__binding__, file) # TODO: for each script!? Nay.
109
+ #else
110
+ # Script.new(file, scope).run
111
+ #end
112
+ #@loadlist << file
113
+ end
114
+ applique
115
+ end
116
+
117
+ #
118
+ def applique_scripts
119
+ locs = []
120
+ demos.each do |demo|
121
+ Dir.ascend(File.dirname(demo)) do |path|
122
+ break if path == Dir.pwd
123
+ dir = File.join(path, 'applique')
124
+ if File.directory?(dir)
125
+ locs << dir
126
+ end
127
+ end
128
+ end
129
+ envs = locs.map{ |loc| Dir[File.join(loc,'**/*.rb')] }
130
+ envs.flatten.compact.uniq
131
+ end
132
+
92
133
  end#class Session
93
134
 
94
135
  end#module QED
data/script/qedoc ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env sh
2
+ qedoc -o doc/qedoc/ -t "QED Demonstrandum" qed/*.rdoc
data/script/test ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/ruby
2
+ system "ruby -Ilib -- bin/qed demo/*.rdoc"
metadata CHANGED
@@ -1,12 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qed
3
3
  version: !ruby/object:Gem::Version
4
+ hash: 7
4
5
  prerelease: false
5
6
  segments:
6
7
  - 2
7
- - 1
8
- - 1
9
- version: 2.1.1
8
+ - 2
9
+ - 0
10
+ version: 2.2.0
10
11
  platform: ruby
11
12
  authors:
12
13
  - Thomas Sawyer <transfire@gmail.com>
@@ -14,16 +15,18 @@ autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []
16
17
 
17
- date: 2010-04-08 00:00:00 -04:00
18
+ date: 2010-06-19 00:00:00 -04:00
18
19
  default_executable:
19
20
  dependencies:
20
21
  - !ruby/object:Gem::Dependency
21
22
  name: ae
22
23
  prerelease: false
23
24
  requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
24
26
  requirements:
25
27
  - - ">="
26
28
  - !ruby/object:Gem::Version
29
+ hash: 3
27
30
  segments:
28
31
  - 0
29
32
  version: "0"
@@ -33,9 +36,11 @@ dependencies:
33
36
  name: ansi
34
37
  prerelease: false
35
38
  requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
36
40
  requirements:
37
41
  - - ">="
38
42
  - !ruby/object:Gem::Version
43
+ hash: 3
39
44
  segments:
40
45
  - 0
41
46
  version: "0"
@@ -45,9 +50,11 @@ dependencies:
45
50
  name: facets
46
51
  prerelease: false
47
52
  requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
48
54
  requirements:
49
55
  - - ">="
50
56
  - !ruby/object:Gem::Version
57
+ hash: 3
51
58
  segments:
52
59
  - 0
53
60
  version: "0"
@@ -57,9 +64,11 @@ dependencies:
57
64
  name: tilt
58
65
  prerelease: false
59
66
  requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
60
68
  requirements:
61
69
  - - ">="
62
70
  - !ruby/object:Gem::Version
71
+ hash: 3
63
72
  segments:
64
73
  - 0
65
74
  version: "0"
@@ -69,39 +78,76 @@ dependencies:
69
78
  name: nokogiri
70
79
  prerelease: false
71
80
  requirement: &id005 !ruby/object:Gem::Requirement
81
+ none: false
72
82
  requirements:
73
83
  - - ">="
74
84
  - !ruby/object:Gem::Version
85
+ hash: 3
75
86
  segments:
76
87
  - 0
77
88
  version: "0"
78
89
  type: :runtime
79
90
  version_requirements: *id005
80
- description: |-
81
- QED (Quality Ensured Demonstrations) is a TDD/BDD framework
82
- utilizing Literate Programming techniques.
91
+ - !ruby/object:Gem::Dependency
92
+ name: syckle
93
+ prerelease: false
94
+ requirement: &id006 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ type: :development
104
+ version_requirements: *id006
105
+ description: QED (Quality Ensured Demonstrations) is a TDD/BDD framework utilizing Literate Programming techniques.
83
106
  email:
84
107
  executables:
85
108
  - qedoc
86
109
  - qed
87
110
  extensions: []
88
111
 
89
- extra_rdoc_files: []
90
-
112
+ extra_rdoc_files:
113
+ - README.rdoc
91
114
  files:
92
115
  - bin/qed
93
116
  - bin/qedoc
94
- - demo/error.rdoc
95
- - demo/website.rdoc
96
- - doc/qedoc/index.html
97
- - doc/qedoc/jquery.js
117
+ - demo/01_demos.rdoc
118
+ - demo/02_advice.rdoc
119
+ - demo/03_helpers.rdoc
120
+ - demo/04_fixtures.rdoc
121
+ - demo/05_quote.rdoc
122
+ - demo/07_toplevel.rdoc
123
+ - demo/08_cross_script.rdoc
124
+ - demo/09_cross_script.rdoc
125
+ - demo/10_constant_lookup.rdoc
126
+ - demo/applique/constant.rb
127
+ - demo/applique/env.rb
128
+ - demo/applique/fileutils.rb
129
+ - demo/applique/markup.rb
130
+ - demo/applique/quote.rb
131
+ - demo/applique/toplevel.rb
132
+ - demo/fixtures/data.txt
133
+ - demo/fixtures/table.yml
134
+ - demo/helpers/advice.rb
135
+ - demo/helpers/sample.rb
136
+ - demo/helpers/toplevel.rb
137
+ - eg/hello_world.rdoc
138
+ - eg/view_error.rdoc
139
+ - eg/website.rdoc
98
140
  - lib/qed/advice/events.rb
99
141
  - lib/qed/advice/patterns.rb
100
142
  - lib/qed/advice.rb
143
+ - lib/qed/applique.rb
101
144
  - lib/qed/command.rb
102
145
  - lib/qed/config.rb
103
146
  - lib/qed/evaluator.rb
104
- - lib/qed/reporter/base.rb
147
+ - lib/qed/package.yml
148
+ - lib/qed/parser.rb
149
+ - lib/qed/profile.yml
150
+ - lib/qed/reporter/abstract.rb
105
151
  - lib/qed/reporter/bullet.rb
106
152
  - lib/qed/reporter/dotprogress.rb
107
153
  - lib/qed/reporter/html.rb
@@ -115,21 +161,15 @@ files:
115
161
  - lib/qedoc/document/markup.rb
116
162
  - lib/qedoc/document/template.rhtml
117
163
  - lib/qedoc/document.rb
118
- - meta/authors
119
- - meta/created
120
- - meta/description
121
- - meta/homepage
122
- - meta/name
123
- - meta/released
124
- - meta/repository
125
- - meta/requires
126
- - meta/ruby
127
- - meta/suite
128
- - meta/summary
129
- - meta/title
130
- - meta/version
164
+ - script/qedoc
165
+ - script/test
166
+ - PROFILE
131
167
  - README.rdoc
132
168
  - HISTORY
169
+ - REQUIRE
170
+ - ROADMAP
171
+ - DIARY.rdoc
172
+ - VERSION
133
173
  - COPYING
134
174
  has_rdoc: true
135
175
  homepage: http://proutils.github.com/qed
@@ -139,26 +179,32 @@ post_install_message:
139
179
  rdoc_options:
140
180
  - --title
141
181
  - QED API
182
+ - --main
183
+ - README.rdoc
142
184
  require_paths:
143
185
  - lib
144
186
  required_ruby_version: !ruby/object:Gem::Requirement
187
+ none: false
145
188
  requirements:
146
189
  - - ">="
147
190
  - !ruby/object:Gem::Version
191
+ hash: 3
148
192
  segments:
149
193
  - 0
150
194
  version: "0"
151
195
  required_rubygems_version: !ruby/object:Gem::Requirement
196
+ none: false
152
197
  requirements:
153
198
  - - ">="
154
199
  - !ruby/object:Gem::Version
200
+ hash: 3
155
201
  segments:
156
202
  - 0
157
203
  version: "0"
158
204
  requirements: []
159
205
 
160
206
  rubyforge_project: qed
161
- rubygems_version: 1.3.6
207
+ rubygems_version: 1.3.7
162
208
  signing_key:
163
209
  specification_version: 3
164
210
  summary: Quod Erat Demonstrandum