qed 2.1.1 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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