opal 0.3.2 → 0.3.6

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 (203) hide show
  1. data/README.md +85 -127
  2. data/bin/opal +3 -3
  3. data/lib/core.rb +114 -0
  4. data/{gems/core/lib → lib}/core/array.rb +68 -187
  5. data/{gems/core/lib → lib}/core/basic_object.rb +22 -5
  6. data/lib/core/class.rb +38 -0
  7. data/{gems/core/lib → lib}/core/dir.rb +1 -1
  8. data/lib/core/enumerable.rb +33 -0
  9. data/{gems/core/lib → lib}/core/error.rb +1 -4
  10. data/{gems/core/lib → lib}/core/false_class.rb +0 -0
  11. data/{gems/core/lib → lib}/core/file.rb +11 -3
  12. data/{gems/core/lib → lib}/core/hash.rb +12 -0
  13. data/{gems/core/lib → lib}/core/kernel.rb +114 -86
  14. data/lib/core/match_data.rb +33 -0
  15. data/lib/core/module.rb +97 -0
  16. data/{gems/core/lib → lib}/core/nil_class.rb +0 -0
  17. data/{gems/core/lib → lib}/core/numeric.rb +5 -0
  18. data/{gems/core/lib → lib}/core/object.rb +0 -0
  19. data/{gems/core/lib → lib}/core/proc.rb +13 -3
  20. data/{gems/core/lib → lib}/core/range.rb +10 -0
  21. data/{gems/core/lib → lib}/core/regexp.rb +33 -1
  22. data/{gems/core/lib → lib}/core/string.rb +25 -10
  23. data/{gems/core/lib → lib}/core/symbol.rb +3 -3
  24. data/{gems/core/lib → lib}/core/top_self.rb +0 -0
  25. data/{gems/core/lib → lib}/core/true_class.rb +0 -0
  26. data/lib/dev.rb +169 -0
  27. data/{gems/ospec/lib → lib}/ospec.rb +1 -0
  28. data/lib/ospec/autorun.rb +8 -0
  29. data/{gems/ospec/lib → lib}/ospec/dsl.rb +2 -2
  30. data/{gems/ospec/lib → lib}/ospec/example.rb +0 -0
  31. data/{gems/ospec/lib → lib}/ospec/example/before_and_after_hooks.rb +0 -0
  32. data/{gems/ospec/lib → lib}/ospec/example/errors.rb +0 -0
  33. data/{gems/ospec/lib → lib}/ospec/example/example_group.rb +0 -0
  34. data/{gems/ospec/lib → lib}/ospec/example/example_group_factory.rb +0 -3
  35. data/{gems/ospec/lib → lib}/ospec/example/example_group_hierarchy.rb +4 -3
  36. data/{gems/ospec/lib → lib}/ospec/example/example_group_methods.rb +1 -1
  37. data/{gems/ospec/lib → lib}/ospec/example/example_group_proxy.rb +3 -2
  38. data/{gems/ospec/lib → lib}/ospec/example/example_methods.rb +1 -1
  39. data/{gems/ospec/lib → lib}/ospec/example/example_proxy.rb +7 -7
  40. data/{gems/ospec/lib → lib}/ospec/expectations.rb +0 -0
  41. data/{gems/ospec/lib → lib}/ospec/expectations/errors.rb +0 -0
  42. data/{gems/ospec/lib → lib}/ospec/expectations/fail_with.rb +4 -3
  43. data/{gems/ospec/lib → lib}/ospec/expectations/handler.rb +6 -0
  44. data/lib/ospec/helpers/scratch.rb +18 -0
  45. data/{gems/ospec/lib → lib}/ospec/matchers.rb +2 -2
  46. data/{gems/ospec/lib → lib}/ospec/matchers/be.rb +0 -0
  47. data/{gems/ospec/lib → lib}/ospec/matchers/generated_descriptions.rb +0 -0
  48. data/{gems/ospec/lib → lib}/ospec/matchers/operator_matcher.rb +2 -0
  49. data/lib/ospec/matchers/raise_error.rb +38 -0
  50. data/lib/ospec/runner.rb +90 -0
  51. data/{gems/ospec/lib → lib}/ospec/runner/example_group_runner.rb +10 -13
  52. data/lib/ospec/runner/formatter/html_formatter.rb +139 -0
  53. data/{gems/ospec/lib → lib}/ospec/runner/formatter/terminal_formatter.rb +0 -0
  54. data/{gems/ospec/lib → lib}/ospec/runner/options.rb +1 -3
  55. data/{gems/ospec/lib → lib}/ospec/runner/reporter.rb +0 -9
  56. data/lib/racc/parser.rb +165 -0
  57. data/lib/strscan.rb +52 -0
  58. data/{lib → opal_lib}/opal.rb +2 -0
  59. data/opal_lib/opal/build_methods.rb +51 -0
  60. data/opal_lib/opal/builder.rb +164 -0
  61. data/opal_lib/opal/bundle.rb +70 -0
  62. data/opal_lib/opal/command.rb +68 -0
  63. data/{lib → opal_lib}/opal/context.rb +21 -9
  64. data/{lib → opal_lib}/opal/context/console.rb +0 -2
  65. data/opal_lib/opal/context/file_system.rb +34 -0
  66. data/{lib → opal_lib}/opal/context/loader.rb +26 -8
  67. data/opal_lib/opal/gem.rb +84 -0
  68. data/{lib → opal_lib}/opal/rake/builder_task.rb +2 -2
  69. data/opal_lib/opal/rake/spec_task.rb +32 -0
  70. data/{lib → opal_lib}/opal/ruby/nodes.rb +730 -109
  71. data/{lib → opal_lib}/opal/ruby/parser.rb +90 -23
  72. data/opal_lib/opal/ruby/ruby_parser.rb +4862 -0
  73. data/opal_lib/opal/ruby/ruby_parser.y +1454 -0
  74. data/opal_lib/opal/version.rb +4 -0
  75. data/runtime/class.js +359 -0
  76. data/runtime/debug.js +84 -0
  77. data/runtime/fs.js +199 -0
  78. data/runtime/init.js +558 -0
  79. data/runtime/loader.js +351 -0
  80. data/runtime/module.js +109 -0
  81. data/runtime/post.js +10 -0
  82. data/runtime/pre.js +7 -0
  83. data/runtime/runtime.js +351 -0
  84. metadata +88 -175
  85. data/.gitignore +0 -7
  86. data/Changelog +0 -31
  87. data/LICENSE +0 -75
  88. data/Rakefile +0 -86
  89. data/gems/core/README.md +0 -14
  90. data/gems/core/Rakefile +0 -8
  91. data/gems/core/core.gemspec +0 -13
  92. data/gems/core/lib/core.rb +0 -34
  93. data/gems/core/lib/core/class.rb +0 -31
  94. data/gems/core/lib/core/module.rb +0 -100
  95. data/gems/core/lib/core/vm.rb +0 -16
  96. data/gems/core/spec/core/array/append_spec.rb +0 -30
  97. data/gems/core/spec/core/array/assoc_spec.rb +0 -29
  98. data/gems/core/spec/core/array/at_spec.rb +0 -37
  99. data/gems/core/spec/core/array/clear_spec.rb +0 -22
  100. data/gems/core/spec/core/array/collect_bang_spec.rb +0 -27
  101. data/gems/core/spec/core/array/collect_spec.rb +0 -27
  102. data/gems/core/spec/core/array/compact_spec.rb +0 -41
  103. data/gems/core/spec/core/array/concat_spec.rb +0 -15
  104. data/gems/core/spec/core/array/constructor_spec.rb +0 -14
  105. data/gems/core/spec/core/array/each_spec.rb +0 -9
  106. data/gems/core/spec/core/array/element_reference_spec.rb +0 -4
  107. data/gems/core/spec/core/array/first_spec.rb +0 -35
  108. data/gems/core/spec/core/array/include_spec.rb +0 -9
  109. data/gems/core/spec/core/array/join_spec.rb +0 -6
  110. data/gems/core/spec/core/array/last_spec.rb +0 -51
  111. data/gems/core/spec/core/array/length_spec.rb +0 -6
  112. data/gems/core/spec/core/array/map_spec.rb +0 -33
  113. data/gems/core/spec/core/array/reverse_spec.rb +0 -6
  114. data/gems/core/spec/core/builtin_constants/builtin_constants_spec.rb +0 -7
  115. data/gems/core/spec/core/false/and_spec.rb +0 -10
  116. data/gems/core/spec/core/false/inspect_spec.rb +0 -6
  117. data/gems/core/spec/core/false/or_spec.rb +0 -10
  118. data/gems/core/spec/core/false/to_s_spec.rb +0 -6
  119. data/gems/core/spec/core/false/xor_spec.rb +0 -10
  120. data/gems/core/spec/core/file/join_spec.rb +0 -19
  121. data/gems/core/spec/core/hash/assoc_spec.rb +0 -32
  122. data/gems/core/spec/core/kernel/instance_eval_spec.rb +0 -0
  123. data/gems/core/spec/core/kernel/loop_spec.rb +0 -24
  124. data/gems/core/spec/core/kernel/raise_spec.rb +0 -0
  125. data/gems/core/spec/core/module/attr_accessor_spec.rb +0 -28
  126. data/gems/core/spec/core/number/lt_spec.rb +0 -12
  127. data/gems/core/spec/core/string/sub_spec.rb +0 -24
  128. data/gems/core/spec/core/true/and_spec.rb +0 -10
  129. data/gems/core/spec/core/true/inspect_spec.rb +0 -6
  130. data/gems/core/spec/core/true/or_spec.rb +0 -10
  131. data/gems/core/spec/core/true/to_s_spec.rb +0 -6
  132. data/gems/core/spec/core/true/xor_spec.rb +0 -10
  133. data/gems/core/spec/language/and_spec.rb +0 -61
  134. data/gems/core/spec/language/array_spec.rb +0 -68
  135. data/gems/core/spec/language/block_spec.rb +0 -38
  136. data/gems/core/spec/language/break_spec.rb +0 -36
  137. data/gems/core/spec/language/case_spec.rb +0 -103
  138. data/gems/core/spec/language/def_spec.rb +0 -21
  139. data/gems/core/spec/language/eigenclass_spec.rb +0 -60
  140. data/gems/core/spec/language/file_spec.rb +0 -13
  141. data/gems/core/spec/language/fixtures/block.rb +0 -21
  142. data/gems/core/spec/language/fixtures/super.rb +0 -293
  143. data/gems/core/spec/language/hash_spec.rb +0 -29
  144. data/gems/core/spec/language/if_spec.rb +0 -54
  145. data/gems/core/spec/language/loop_spec.rb +0 -11
  146. data/gems/core/spec/language/metaclass_spec.rb +0 -21
  147. data/gems/core/spec/language/method_spec.rb +0 -124
  148. data/gems/core/spec/language/next_spec.rb +0 -25
  149. data/gems/core/spec/language/or_spec.rb +0 -34
  150. data/gems/core/spec/language/redo_spec.rb +0 -24
  151. data/gems/core/spec/language/regexp_spec.rb +0 -26
  152. data/gems/core/spec/language/rescue_spec.rb +0 -20
  153. data/gems/core/spec/language/return_spec.rb +0 -47
  154. data/gems/core/spec/language/string_spec.rb +0 -25
  155. data/gems/core/spec/language/super_spec.rb +0 -32
  156. data/gems/core/spec/language/until_spec.rb +0 -157
  157. data/gems/core/spec/language/variables_spec.rb +0 -155
  158. data/gems/core/spec/language/while_spec.rb +0 -163
  159. data/gems/core/spec/spec_helper.rb +0 -5
  160. data/gems/core_fs/README.md +0 -19
  161. data/gems/dev/Rakefile +0 -5
  162. data/gems/dev/lib/dev.js +0 -99
  163. data/gems/dev/lib/dev/generator.js +0 -1264
  164. data/gems/dev/lib/dev/parser.js +0 -979
  165. data/gems/dev/lib/dev/ruby_parser.js +0 -1088
  166. data/gems/dev/lib/dev/ruby_parser.y +0 -1267
  167. data/gems/dev/lib/dev/string_scanner.js +0 -38
  168. data/gems/dev/tools/racc2js/README.md +0 -39
  169. data/gems/dev/tools/racc2js/math_parser.js +0 -222
  170. data/gems/dev/tools/racc2js/math_parser.rb +0 -133
  171. data/gems/dev/tools/racc2js/math_parser.y +0 -28
  172. data/gems/dev/tools/racc2js/parser.js +0 -218
  173. data/gems/dev/tools/racc2js/racc2js.rb +0 -153
  174. data/gems/json/README.md +0 -4
  175. data/gems/json/json.gemspec +0 -14
  176. data/gems/json/lib/json.rb +0 -64
  177. data/gems/json/lib/json/ext.rb +0 -51
  178. data/gems/json/lib/json/json2.js +0 -481
  179. data/gems/ospec/README.md +0 -0
  180. data/gems/ospec/lib/ospec/autorun.rb +0 -3
  181. data/gems/ospec/lib/ospec/runner.rb +0 -40
  182. data/gems/ospec/lib/ospec/runner/formatter/html_formatter.rb +0 -91
  183. data/gems/ospec/ospec.gemspec +0 -0
  184. data/gems/rquery/README.md +0 -9
  185. data/gems/rquery/lib/rquery.rb +0 -10
  186. data/gems/rquery/lib/rquery/ajax.rb +0 -4
  187. data/gems/rquery/lib/rquery/css.rb +0 -96
  188. data/gems/rquery/lib/rquery/document.rb +0 -25
  189. data/gems/rquery/lib/rquery/element.rb +0 -292
  190. data/gems/rquery/lib/rquery/event.rb +0 -108
  191. data/gems/rquery/lib/rquery/jquery.js +0 -8177
  192. data/gems/rquery/lib/rquery/request.rb +0 -138
  193. data/gems/rquery/lib/rquery/response.rb +0 -49
  194. data/gems/rquery/rquery.gemspec +0 -16
  195. data/lib/opal.js +0 -1597
  196. data/lib/opal/builder.rb +0 -117
  197. data/lib/opal/bundle.rb +0 -131
  198. data/lib/opal/command.rb +0 -11
  199. data/lib/opal/context/file_system.rb +0 -19
  200. data/lib/opal/gem.rb +0 -153
  201. data/lib/opal/ruby/ruby_parser.rb +0 -5170
  202. data/lib/opal/ruby/ruby_parser.y +0 -1298
  203. data/opal.gemspec +0 -15
@@ -3,4 +3,5 @@ require 'ospec/expectations'
3
3
  require 'ospec/example'
4
4
  require 'ospec/runner'
5
5
  require 'ospec/dsl'
6
+ require 'ospec/helpers/scratch'
6
7
 
@@ -0,0 +1,8 @@
1
+ require 'ospec'
2
+
3
+ if RUBY_ENGINE == 'opal-browser'
4
+ Spec::Runner.autorun_browser
5
+ else
6
+ Spec::Runner.autorun
7
+ end
8
+
@@ -1,10 +1,10 @@
1
1
  module Spec
2
+
2
3
  module DSL
4
+
3
5
  module Main
4
6
 
5
7
  def describe(name, &block)
6
- puts "describing:"
7
- puts block.inspect
8
8
  Spec::Example::ExampleGroupFactory.create_example_group name, &block
9
9
  end
10
10
  end # Main
File without changes
File without changes
@@ -10,9 +10,6 @@ module Spec
10
10
  end
11
11
 
12
12
  def self.create_example_group(group_name, &block)
13
- puts "creating example group"
14
- puts block
15
- puts self
16
13
  ExampleGroup.describe group_name, &block
17
14
  end
18
15
  end
@@ -6,13 +6,14 @@ module Spec
6
6
  class ExampleGroupHierarchy
7
7
 
8
8
  def initialize(example_group_class)
9
- @example_group_class
9
+ @example_group_class = example_group_class
10
10
  end
11
11
 
12
12
  def run_before_each(example)
13
- # @example_group_class.before_each_parts.each do |part|
13
+ @example_group_class.before_each_parts.each do |part|
14
14
  # puts "in each part before"
15
- # end
15
+ example.instance_eval &part
16
+ end
16
17
  end
17
18
 
18
19
  end
@@ -55,7 +55,7 @@ module Spec
55
55
 
56
56
  def run_examples(success, instance_variables, examples, run_options)
57
57
  examples.each do |example|
58
- example_group_instance = new example,
58
+ example_group_instance = new example,
59
59
  &example_implementations[example]
60
60
 
61
61
  example_group_instance.execute run_options, instance_variables
@@ -2,9 +2,9 @@
2
2
  module Spec
3
3
  module Example
4
4
  class ExampleGroupProxy
5
-
5
+
6
6
  attr_reader :description, :examples
7
-
7
+
8
8
  def initialize(example_group)
9
9
  @description = example_group.description
10
10
  @examples = example_group.example_proxies
@@ -12,3 +12,4 @@ module Spec
12
12
  end
13
13
  end
14
14
  end
15
+
@@ -4,7 +4,7 @@ module Spec
4
4
 
5
5
  module ExampleMethods
6
6
 
7
- # include Spec::Matchers
7
+ include Spec::Matchers
8
8
 
9
9
  def initialize(example_proxy, &implementation)
10
10
  @example_proxy = example_proxy
@@ -1,18 +1,18 @@
1
1
  module Spec
2
- module Example
2
+ module Example
3
3
  class ExampleProxy
4
-
4
+
5
5
  attr_reader :description
6
-
7
- def initialize(description, options, location)
6
+
7
+ def initialize(description, options = nil, location = nil)
8
8
  @description = description
9
9
  end
10
-
10
+
11
11
  def update(description)
12
12
  @description = description
13
13
  self
14
14
  end
15
-
16
- end
15
+ end # ExampleProxy
17
16
  end
18
17
  end
18
+
File without changes
@@ -1,8 +1,9 @@
1
- module Spec
1
+ module Spec
2
2
  module Expectations
3
-
4
- def self.fail_with(message, expected, target)
3
+
4
+ def self.fail_with(message, expected = nil, target = nil)
5
5
  raise Spec::Expectations::ExpectationNotMetError.new(message)
6
6
  end
7
7
  end
8
8
  end
9
+
@@ -8,6 +8,12 @@ module Spec
8
8
  Spec::Matchers.last_matcher = matcher
9
9
  if matcher.nil?
10
10
  return Spec::Matchers::PositiveOperatorMatcher.new actual
11
+ else
12
+ match = matcher.matches?(actual, &block)
13
+ return match if match
14
+
15
+ Spec::Expectations.fail_with matcher.failure_message_for_should
16
+ nil
11
17
  end
12
18
  end
13
19
  end
@@ -0,0 +1,18 @@
1
+ module ScratchPad
2
+ def self.clear
3
+ @record = nil
4
+ end
5
+
6
+ def self.record(arg)
7
+ @record = arg
8
+ end
9
+
10
+ def self.<<(arg)
11
+ @record << arg
12
+ end
13
+
14
+ def self.recorded
15
+ @record
16
+ end
17
+ end
18
+
@@ -1,14 +1,14 @@
1
1
  require 'ospec/matchers/operator_matcher'
2
2
  require 'ospec/matchers/be'
3
3
  require 'ospec/matchers/generated_descriptions'
4
+ require 'ospec/matchers/raise_error'
4
5
 
5
6
  module Spec
6
7
 
7
8
  module Matchers
8
9
 
9
10
  class Matcher
10
- # include Spec::Matchers
11
- # extend Spec::Matchers
11
+ include Spec::Matchers
12
12
 
13
13
  # attr_reader :expected, :actual
14
14
 
File without changes
@@ -50,3 +50,5 @@ module Spec
50
50
 
51
51
  end
52
52
  end
53
+
54
+
@@ -0,0 +1,38 @@
1
+ module Spec
2
+
3
+ module Matchers
4
+
5
+ class RaiseError
6
+
7
+ def initialize(expected_error_or_message = Exception, expected_message = nil, &block)
8
+ @block = block
9
+ @actual_error = nil
10
+ @expected_exception = Exception
11
+ end
12
+
13
+ def matches?(given_proc)
14
+ @raised_expected_exception = false
15
+ @with_expected_message = false
16
+
17
+ begin
18
+ given_proc.call
19
+ rescue => e
20
+ @raised_expected_exception = true
21
+ end
22
+
23
+ @raised_expected_exception
24
+ end
25
+
26
+ def failure_message_for_should
27
+ "expected #{@expected_exception}, but nothing was raised"
28
+ end
29
+ end # RaiseError
30
+
31
+ def raise_error(error = Exception, message = nil, &block)
32
+ Spec::Matchers::RaiseError.new error, message, &block
33
+ end
34
+
35
+ alias_method :raise_exception, :raise_error
36
+ end
37
+ end
38
+
@@ -0,0 +1,90 @@
1
+ require 'ospec/runner/options'
2
+ require 'ospec/runner/reporter'
3
+ require 'ospec/runner/example_group_runner'
4
+
5
+ require 'ospec/runner/formatter/html_formatter'
6
+ require 'ospec/runner/formatter/terminal_formatter'
7
+
8
+ module Spec
9
+ module Runner
10
+
11
+ def self.run
12
+ options.run_examples
13
+ end
14
+
15
+ def self.options
16
+ @options ||= Options.new
17
+ @options
18
+ end
19
+
20
+ # Autorun for the browser. This differs from {.autorun} because it wraps
21
+ # itself in a setTimeout call to make sure the browser is ready as we
22
+ # start adding to the DOM as we run. This won't use rquery because its
23
+ # nice to keep everything independant, and someone might write a better
24
+ # DOM library. All the dom interactions are simply inline javascript.
25
+ def self.autorun_browser
26
+ `setTimeout(function() {`
27
+ specs = Dir["spec/**/*.{rb,js}"]
28
+
29
+ if specs.length == 0
30
+ puts "ospec: no input files given"
31
+ else
32
+ if File.exist? "spec/spec_helper.js"
33
+ require File.expand_path("spec/spec_helper.js")
34
+ end
35
+
36
+ specs.each do |spec|
37
+ require spec
38
+ end
39
+ # require specs[0]
40
+ # idx = 49
41
+ # puts idx
42
+ # `console.log(specs[idx]);`
43
+ # puts specs[idx]
44
+ # puts specs[idx]
45
+ # require specs[idx]
46
+ end
47
+
48
+ Spec::Runner.run
49
+ puts Spec::Runner.options.formatters
50
+ `}, 0);`
51
+ nil
52
+ end
53
+
54
+ # Autorun gem/node context
55
+ def self.autorun
56
+ puts "in here"
57
+ puts ARGV.inspect
58
+ if ARGV.length == 0
59
+ specs = Dir["spec/**/*.{rb,js}"]
60
+
61
+ if specs.length == 0
62
+ puts "ospec: no input files given"
63
+ else
64
+
65
+ if File.exist? "spec/spec_helper.rb"
66
+ require File.expand_path "spec/spec_helper.rb"
67
+ end
68
+
69
+ specs.each do |spec|
70
+ require spec
71
+ end
72
+ end
73
+ # return
74
+ end
75
+
76
+ ARGV.each do |spec|
77
+ puts "should try and load #{spec}"
78
+ if File.exist? spec
79
+ puts "loading: " + File.expand_path(spec)
80
+ require File.expand_path(spec)
81
+ else
82
+ raise "Bad spec to load (does not exist): #{spec}"
83
+ end
84
+ end
85
+
86
+ Spec::Runner.run
87
+ end
88
+
89
+ end # Runner
90
+ end
@@ -1,44 +1,41 @@
1
- module Spec
1
+ module Spec
2
2
  module Runner
3
3
  class ExampleGroupRunner
4
-
4
+
5
5
  def initialize(options)
6
6
  @options = options
7
7
  end
8
-
8
+
9
9
  def run
10
10
  prepare
11
- # puts "RUNNING"
12
- #`console.log(#{example_groups})`
13
11
  example_groups.each do |group|
14
- # puts "running group!"
15
- #puts group
16
12
  group.run @options
17
13
  end
18
14
  finish
19
15
  end
20
-
16
+
21
17
  def example_groups
22
18
  @options.example_groups
23
19
  end
24
-
20
+
25
21
  def prepare
26
22
  rep = reporter
27
23
  rep.start number_of_examples
28
24
  end
29
-
25
+
30
26
  def finish
31
27
 
32
28
  end
33
-
29
+
34
30
  def reporter
35
31
  @options.reporter
36
32
  end
37
-
33
+
38
34
  def number_of_examples
39
35
  0
40
36
  end
41
-
37
+
42
38
  end # ExampleGroupRunner
43
39
  end
44
40
  end
41
+
@@ -0,0 +1,139 @@
1
+ module Spec
2
+ module Runner
3
+ module Formatter
4
+ class HtmlFormatter
5
+
6
+ attr_reader :example_group, :example_group_number
7
+
8
+ def initialize(options)
9
+ @options = options
10
+ @example_group_number = 0
11
+ @example_number = 0
12
+ @header_red = nil
13
+
14
+ setup_page_dom
15
+ end
16
+
17
+ ##
18
+ # Get the DOM ready for output
19
+ #
20
+ def setup_page_dom
21
+ content = [
22
+ "<style>#{css_content}</style>",
23
+ '<div class="rspec-report">',
24
+ '<div id="rspec-header">',
25
+ '<div id="label">',
26
+ '<h1>Rspec Code Examples</h1>',
27
+ '</div>',
28
+
29
+ '<div id="summary">',
30
+ '<p id="totals">0</p>',
31
+ '<p id="duration">0</p>',
32
+ '</div>',
33
+ '</div>',
34
+ '<div id="results">',
35
+ '</div>',
36
+ '</div>'
37
+ ].join ''
38
+ `var wrapper = document.createElement('div');
39
+ wrapper.id = "rspec-wrapper";
40
+ wrapper.innerHTML = content;
41
+ document.getElementsByTagName('body')[0].appendChild(wrapper);`
42
+ `self.$results = document.getElementById('results');`
43
+ nil
44
+ end
45
+
46
+ def css_content
47
+ 'body{ margin:0px; padding:0px; background:white; font-size:80%}#rspec-header{ background:#65C400;color:#fff;height:4em}.rspec-report h1{ margin:0px 10px 0px 10px; padding:10px; font-family:"Lucida Grande",Helvetica,sans-serif; font-size:1.8em; position:absolute}#summary{ margin:0;padding:5px 10px; font-family:"Lucida Grande",Helvetica,sans-serif; text-align:right; top:0px; right:0px; float:right}#summary p{ margin:0 0 0 2px}#summary #totals{ font-size:1.2em}#results{}.example_group{ margin:0 10px 5px; background:#fff}dl{ margin:0;padding:0 0 5px; font:normal 11px "Lucida Grande",Helvetica,sans-serif}dt{ padding:3px; background:#65C400; color:#fff; font-weight:bold}dd{ margin:5px 0 5px 5px; padding:3px 3px 3px 18px}dd.spec.passed{ border-left:5px solid #65C400; border-bottom:1px solid #65C400; background:#DBFFB4;color:#3D7700}dd.spec.failed{ border-left:5px solid #C20000; border-bottom:1px solid #C20000; color:#C20000;background:#FFFBD3}dd.spec.not_implemented{ border-left:5px solid #FAF834; border-bottom:1px solid #FAF834; background:#FCFB98;color:#131313}dd.spec.pending_fixed{ border-left:5px solid #0000C2; border-bottom:1px solid #0000C2; color:#0000C2;background:#D3FBFF}.backtrace{ color:#000; font-size:12px}a{ color:#BE5C00}.ruby{ font-size:12px; font-family:monospace; color:white; background-color:black; padding:0.1em 0 0.2em 0}.ruby .keyword{color:#F60}.ruby .constant{color:#399}.ruby .attribute{color:white}.ruby .global{color:white}.ruby .module{color:white}.ruby .class{color:white}.ruby .string{color:#6F0}.ruby .ident{color:white}.ruby .method{color:#FC0}.ruby .number{color:white}.ruby .char{color:white}.ruby .comment{color:#93C}.ruby .symbol{color:white}.ruby .regex{color:#44B4CC}.ruby .punct{color:white}.ruby .escape{color:white}.ruby .interp{color:white}.ruby .expr{color:white}.ruby .offending{background-color:gray}.ruby .linenum{ width:75px; padding:0.1em 1em 0.2em 0; color:#000; background-color:#FFFBD3}'
48
+ end
49
+
50
+
51
+ def start(number_of_examples)
52
+
53
+ end
54
+
55
+ def end
56
+ @end_time = Time.now
57
+ end
58
+
59
+ def example_group_started(example_group)
60
+ @example_group = example_group
61
+ @example_group_red = false
62
+ @example_group_number += 1
63
+
64
+ # @example_group_div = results_output.div :class_name => "example_group"
65
+ # @example_group_dl = @example_group_div.dl
66
+ # @example_group_dt = @example_group_dl.dt :content => example_group.description, :id => "example_group_#{example_group_number}"
67
+
68
+ `var div = self.$example_div = document.createElement('div');
69
+ div.className = 'example_group';
70
+
71
+ var dl = self.$example_dl = document.createElement('dl');
72
+ div.appendChild(dl);
73
+
74
+ var dt = self.$example_dt = document.createElement('dt');
75
+ dt.innerHTML = #{example_group.description};
76
+ dt.id = "element_group_" + #{@element_group_number.to_s};
77
+ dl.appendChild(dt);
78
+
79
+ self.$results.appendChild(div);`
80
+
81
+ end
82
+
83
+ def example_started(example)
84
+
85
+ end
86
+
87
+ def example_failed(example, counter, failure)
88
+ @header_red = true
89
+ @example_group_red = true
90
+
91
+ `var dd = document.createElement('dd');
92
+ dd.className = "spec failed";
93
+
94
+ var span = document.createElement('span');
95
+ span.innerHTML = #{example.description};
96
+ span.className = "failed_spec_name";
97
+ dd.appendChild(span);
98
+
99
+ self.$example_dl.appendChild(dd);
100
+
101
+ var failure_div = document.createElement('div');
102
+ failure_div.className = "failure";
103
+
104
+ var msg = document.createElement('div');
105
+ msg.className = "message";
106
+
107
+ var pre = document.createElement('pre');
108
+ pre.innerHTML = #{failure.exception.message};
109
+ msg.appendChild(pre);
110
+
111
+ failure_div.appendChild(msg);
112
+ dd.appendChild(failure_div);`
113
+
114
+ nil
115
+ end
116
+
117
+ def example_passed(example)
118
+ `var dl = self.$example_dl;
119
+
120
+ var dd = document.createElement('dd');
121
+ dd.className = "spec passed";
122
+
123
+ var span = document.createElement('span');
124
+ dd.appendChild(span);
125
+ span.innerHTML = #{example.description.to_s};
126
+ span.className = "passed_spec_name";
127
+
128
+ dl.appendChild(dd);`
129
+ nil
130
+ end
131
+
132
+ def example_pending(example, message)
133
+ # @example_group_dl.dd(:class_name => "spec not_implemented").span(:content => "#{example.description} (PENDING: #{message})", :class_name => "not_implemented_spec_name")
134
+ end
135
+ end
136
+ end
137
+ end
138
+ end
139
+