btakita-screw-unit-server 0.3.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. data/CHANGES +44 -1
  2. data/README.markdown +17 -5
  3. data/Rakefile +28 -55
  4. data/VERSION.yml +5 -0
  5. data/bin/screw_unit_server +8 -4
  6. data/core/CHANGES +10 -0
  7. data/core/EXAMPLE.html +4 -4
  8. data/core/README.markdown +7 -7
  9. data/core/example/models/man.js +2 -2
  10. data/core/example/spec/suite.html +1 -1
  11. data/core/lib/jquery-1.3.2.js +4376 -0
  12. data/core/lib/jquery.fn.js +2 -1
  13. data/core/lib/jquery.print.js +13 -12
  14. data/core/lib/screw.behaviors.js +11 -9
  15. data/core/lib/screw.builder.js +26 -11
  16. data/core/lib/screw.css +2 -2
  17. data/core/lib/screw.events.js +11 -4
  18. data/core/lib/screw.matchers.js +192 -13
  19. data/core/spec/behaviors_spec.js +11 -1
  20. data/core/spec/matchers_spec.js +288 -9
  21. data/core/spec/print_spec.js +47 -8
  22. data/core/spec/suite.html +2 -1
  23. data/core/spec/with_screw_context_spec.js +9 -0
  24. data/lib/screw_unit.rb +12 -17
  25. data/spec/functional/functional_spec.rb +15 -4
  26. data/spec/functional/functional_spec_helper.rb +22 -35
  27. data/spec/functional/functional_spec_server_starter.rb +68 -0
  28. data/spec/spec_suite.rb +0 -1
  29. data/standalone.ru +3 -0
  30. data/vendor/js-test-core/CHANGES +22 -0
  31. data/vendor/js-test-core/README +4 -10
  32. data/vendor/js-test-core/Rakefile +2 -1
  33. data/vendor/js-test-core/{spec/example_core/JsTestCore.css → bin/js-test-client} +0 -0
  34. data/vendor/js-test-core/bin/js-test-server +6 -0
  35. data/vendor/js-test-core/lib/js_test_core.rb +27 -19
  36. data/vendor/js-test-core/lib/js_test_core/app.rb +11 -0
  37. data/vendor/js-test-core/lib/js_test_core/client.rb +125 -36
  38. data/vendor/js-test-core/lib/js_test_core/configuration.rb +65 -0
  39. data/vendor/js-test-core/lib/js_test_core/representations.rb +13 -0
  40. data/vendor/js-test-core/lib/js_test_core/representations/dir.html.rb +25 -0
  41. data/vendor/js-test-core/lib/js_test_core/representations/frameworks.rb +3 -0
  42. data/vendor/js-test-core/lib/js_test_core/representations/not_found.html.rb +16 -0
  43. data/vendor/js-test-core/lib/js_test_core/representations/page.html.rb +41 -0
  44. data/vendor/js-test-core/lib/js_test_core/representations/suite.html.rb +57 -0
  45. data/vendor/js-test-core/lib/js_test_core/representations/suites.rb +3 -0
  46. data/vendor/js-test-core/lib/js_test_core/representations/suites/screw_unit.html.rb +81 -0
  47. data/vendor/js-test-core/lib/js_test_core/resources.rb +12 -8
  48. data/vendor/js-test-core/lib/js_test_core/resources/core_file.rb +19 -0
  49. data/vendor/js-test-core/lib/js_test_core/resources/file.rb +43 -13
  50. data/vendor/js-test-core/lib/js_test_core/resources/implementations_deprecation.rb +12 -0
  51. data/vendor/js-test-core/lib/js_test_core/resources/not_found.rb +28 -0
  52. data/vendor/js-test-core/lib/js_test_core/resources/resource.rb +16 -0
  53. data/vendor/js-test-core/lib/js_test_core/resources/spec_file.rb +51 -0
  54. data/vendor/js-test-core/lib/js_test_core/resources/web_root.rb +7 -54
  55. data/vendor/js-test-core/lib/js_test_core/server.rb +65 -92
  56. data/vendor/js-test-core/public/js_test_server.js +541 -0
  57. data/vendor/js-test-core/spec/{example_core/JsTestCore.js → example_framework/JsTestCore.css} +0 -0
  58. data/vendor/js-test-core/spec/{example_public/favicon.ico → example_framework/JsTestCore.js} +0 -0
  59. data/vendor/js-test-core/spec/{example_public/robots.txt → example_framework/subdir/SubDirFile.js} +0 -0
  60. data/vendor/js-test-core/spec/example_root/favicon.ico +0 -0
  61. data/vendor/js-test-core/spec/{example_public → example_root}/javascripts/foo.js +1 -1
  62. data/vendor/js-test-core/spec/example_root/javascripts/large_file.js +59 -0
  63. data/vendor/js-test-core/spec/example_root/javascripts/subdir/bar.js +1 -0
  64. data/vendor/js-test-core/spec/example_root/robots.txt +0 -0
  65. data/vendor/js-test-core/spec/{example_public → example_root}/stylesheets/example.css +0 -0
  66. data/vendor/js-test-core/spec/example_spec/custom_dir_and_suite/passing_spec.js +8 -0
  67. data/vendor/js-test-core/spec/example_spec/custom_suite.html +8 -0
  68. data/vendor/js-test-core/spec/example_spec/failing_spec.js +7 -0
  69. data/vendor/js-test-core/spec/example_spec/foo/failing_spec.js +8 -0
  70. data/vendor/js-test-core/spec/example_spec/foo/passing_spec.js +8 -0
  71. data/vendor/js-test-core/spec/example_spec/passing_spec.js +8 -0
  72. data/vendor/js-test-core/spec/functional/functional_spec.rb +25 -0
  73. data/vendor/js-test-core/spec/functional/functional_spec_helper.rb +42 -0
  74. data/vendor/js-test-core/spec/functional/functional_spec_server_starter.rb +77 -0
  75. data/vendor/js-test-core/spec/functional_suite.rb +10 -0
  76. data/vendor/js-test-core/spec/spec_helpers/be_http.rb +32 -0
  77. data/vendor/js-test-core/spec/spec_helpers/example_group.rb +36 -0
  78. data/vendor/js-test-core/spec/spec_helpers/fake_selenium_driver.rb +16 -0
  79. data/vendor/js-test-core/spec/spec_helpers/show_test_exceptions.rb +22 -0
  80. data/vendor/js-test-core/spec/spec_suite.rb +2 -1
  81. data/vendor/js-test-core/spec/unit/js_test_core/client_spec.rb +153 -94
  82. data/vendor/js-test-core/spec/unit/js_test_core/configuration_spec.rb +50 -0
  83. data/vendor/js-test-core/spec/unit/js_test_core/resources/core_file_spec.rb +60 -0
  84. data/vendor/js-test-core/spec/unit/js_test_core/resources/file_spec.rb +61 -68
  85. data/vendor/js-test-core/spec/unit/js_test_core/resources/implementations_deprecation_spec.rb +18 -0
  86. data/vendor/js-test-core/spec/unit/js_test_core/resources/not_found_spec.rb +51 -0
  87. data/vendor/js-test-core/spec/unit/js_test_core/resources/spec_file_spec.rb +149 -0
  88. data/vendor/js-test-core/spec/unit/js_test_core/resources/web_root_spec.rb +14 -89
  89. data/vendor/js-test-core/spec/unit/js_test_core/server_spec.rb +41 -106
  90. data/vendor/js-test-core/spec/unit/unit_spec_helper.rb +19 -114
  91. data/vendor/js-test-core/standalone.ru +1 -0
  92. data/vendor/js-test-core/vendor/lucky-luciano/README.markdown +77 -0
  93. data/vendor/js-test-core/vendor/lucky-luciano/lib/lucky_luciano.rb +5 -0
  94. data/vendor/js-test-core/vendor/lucky-luciano/lib/lucky_luciano/resource.rb +142 -0
  95. data/vendor/js-test-core/vendor/lucky-luciano/lib/lucky_luciano/resource/path.rb +24 -0
  96. data/vendor/js-test-core/vendor/lucky-luciano/lib/lucky_luciano/rspec.rb +4 -0
  97. data/vendor/js-test-core/vendor/lucky-luciano/lib/lucky_luciano/rspec/be_http.rb +32 -0
  98. data/vendor/js-test-core/vendor/lucky-luciano/spec/lucky_luciano/resource_spec.rb +276 -0
  99. data/vendor/js-test-core/vendor/lucky-luciano/spec/spec_helper.rb +48 -0
  100. data/vendor/js-test-core/vendor/lucky-luciano/spec/spec_suite.rb +4 -0
  101. data/vendor/js-test-core/vendor/lucky-luciano/syntax_ideas.txt +34 -0
  102. metadata +145 -130
  103. data/core/TODO +0 -2
  104. data/core/lib/jquery-1.2.3.js +0 -3408
  105. data/core/lib/screw.assets.js +0 -36
  106. data/core/lib/screw.server.js +0 -21
  107. data/lib/screw_unit/resources.rb +0 -2
  108. data/lib/screw_unit/resources/spec.rb +0 -37
  109. data/spec/unit/js_test_core/specs/spec_dir_spec.rb +0 -43
  110. data/spec/unit/js_test_core/specs/spec_file_spec.rb +0 -43
  111. data/spec/unit/unit_spec_helper.rb +0 -120
  112. data/spec/unit_suite.rb +0 -10
  113. data/vendor/js-test-core/lib/js_test_core/rack.rb +0 -2
  114. data/vendor/js-test-core/lib/js_test_core/rack/commonlogger.rb +0 -5
  115. data/vendor/js-test-core/lib/js_test_core/rails_server.rb +0 -22
  116. data/vendor/js-test-core/lib/js_test_core/resources/dir.rb +0 -52
  117. data/vendor/js-test-core/lib/js_test_core/resources/file_not_found.rb +0 -15
  118. data/vendor/js-test-core/lib/js_test_core/resources/runners.rb +0 -15
  119. data/vendor/js-test-core/lib/js_test_core/resources/runners/firefox_runner.rb +0 -75
  120. data/vendor/js-test-core/lib/js_test_core/resources/specs/spec_dir.rb +0 -50
  121. data/vendor/js-test-core/lib/js_test_core/resources/specs/spec_file.rb +0 -17
  122. data/vendor/js-test-core/lib/js_test_core/resources/suite.rb +0 -24
  123. data/vendor/js-test-core/lib/js_test_core/resources/suite_finish.rb +0 -19
  124. data/vendor/js-test-core/lib/js_test_core/selenium.rb +0 -2
  125. data/vendor/js-test-core/lib/js_test_core/selenium/selenium_driver.rb +0 -5
  126. data/vendor/js-test-core/lib/js_test_core/thin.rb +0 -3
  127. data/vendor/js-test-core/lib/js_test_core/thin/backends/js_test_core_server.rb +0 -9
  128. data/vendor/js-test-core/lib/js_test_core/thin/js_test_core_connection.rb +0 -42
  129. data/vendor/js-test-core/spec/example_specs/failing_spec.js +0 -5
  130. data/vendor/js-test-core/spec/example_specs/foo/failing_spec.js +0 -6
  131. data/vendor/js-test-core/spec/example_specs/foo/passing_spec.js +0 -6
  132. data/vendor/js-test-core/spec/unit/js_test_core/rails_server_spec.rb +0 -45
  133. data/vendor/js-test-core/spec/unit/js_test_core/resources/dir_spec.rb +0 -42
  134. data/vendor/js-test-core/spec/unit/js_test_core/resources/file_not_found_spec.rb +0 -26
  135. data/vendor/js-test-core/spec/unit/js_test_core/resources/runner_spec.rb +0 -24
  136. data/vendor/js-test-core/spec/unit/js_test_core/resources/runners/firefox_runner_spec.rb +0 -197
  137. data/vendor/js-test-core/spec/unit/js_test_core/resources/specs/spec_dir_spec.rb +0 -79
  138. data/vendor/js-test-core/spec/unit/js_test_core/resources/specs/spec_file_spec.rb +0 -42
  139. data/vendor/js-test-core/spec/unit/js_test_core/resources/suite_finish_spec.rb +0 -94
  140. data/vendor/js-test-core/spec/unit/js_test_core/resources/suite_spec.rb +0 -44
  141. data/vendor/js-test-core/spec/unit/thin/js_test_core_connection_spec.rb +0 -92
@@ -0,0 +1,65 @@
1
+ module JsTestCore
2
+ class Configuration
3
+ class << self
4
+ attr_accessor :instance
5
+
6
+ def method_missing(method_name, *args, &block)
7
+ if Configuration.instance.respond_to?(method_name)
8
+ Configuration.instance.send(method_name, *args, &block)
9
+ else
10
+ super
11
+ end
12
+ end
13
+ end
14
+
15
+ attr_reader :host, :port, :spec_path, :root_path, :framework_path, :framework_name
16
+ attr_writer :host, :port, :framework_path, :framework_name
17
+
18
+ def initialize(params={})
19
+ params = Server::DEFAULTS.dup.merge(params)
20
+ @spec_path = ::File.expand_path(params[:spec_path])
21
+ @root_path = ::File.expand_path(params[:root_path])
22
+ @host = params[:host]
23
+ @port = params[:port]
24
+ @framework_path = params[:framework_path]
25
+ @framework_name = params[:framework_name]
26
+ end
27
+
28
+ def suite_representation_class
29
+ if framework_name
30
+ JsTestCore::Representations::Suites.const_get(framework_name.gsub("-", "_").camelcase)
31
+ end
32
+ end
33
+
34
+ def spec_path=(path)
35
+ validate_path(path)
36
+ @spec_path = path
37
+ end
38
+
39
+ def root_path=(path)
40
+ validate_path(path)
41
+ @root_path = path
42
+ end
43
+
44
+ def js_test_core_js_path
45
+ "#{library_root_dir}/public/js_test_server.js"
46
+ end
47
+
48
+ def root_url
49
+ "http://#{host}:#{port}"
50
+ end
51
+
52
+ protected
53
+
54
+ def library_root_dir
55
+ dir = File.dirname(__FILE__)
56
+ File.expand_path("#{dir}/../..")
57
+ end
58
+
59
+ def validate_path(path)
60
+ unless File.directory?(path)
61
+ raise ArgumentError, "#{path} must be a directory"
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,13 @@
1
+ dir = File.dirname(__FILE__)
2
+
3
+ module JsTestCore
4
+ module Representations
5
+ end
6
+ end
7
+
8
+ require "#{dir}/representations/page.html"
9
+ require "#{dir}/representations/not_found.html"
10
+ require "#{dir}/representations/suite.html"
11
+ require "#{dir}/representations/dir.html"
12
+ require "#{dir}/representations/frameworks"
13
+ require "#{dir}/representations/suites"
@@ -0,0 +1,25 @@
1
+ module JsTestCore
2
+ module Representations
3
+ class Dir < Page
4
+ attr_reader :relative_path, :absolute_path
5
+ needs :relative_path, :absolute_path
6
+ protected
7
+ def body_content
8
+ ul do
9
+ ::Dir.glob("#{absolute_path}/*").inject("") do |html, file|
10
+ li do
11
+ a(
12
+ ::File.basename(file),
13
+ :href => "#{relative_path}/#{::File.basename(file)}".gsub("//", "/")
14
+ )
15
+ end
16
+ end
17
+ end
18
+ end
19
+
20
+ def title_text
21
+ "Contents of #{relative_path}"
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ Dir["#{File.dirname(__FILE__)}/frameworks/*.html.rb"].each do |file|
2
+ require file
3
+ end
@@ -0,0 +1,16 @@
1
+ module JsTestCore
2
+ module Representations
3
+ class NotFound < Page
4
+ attr_reader :message
5
+ needs :message
6
+ protected
7
+ def body_content
8
+ h1 message
9
+ end
10
+
11
+ def title_text
12
+ message
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,41 @@
1
+ module JsTestCore
2
+ module Representations
3
+ class Page < Erector::Widget
4
+ def content(&block)
5
+ rawtext %Q{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">}
6
+ html :xmlns => "http://www.w3.org/1999/xhtml", :"xml:lang" => "en" do
7
+ head do
8
+ meta :"http-equiv" => "Content-Type", :content => "text/html;charset=UTF-8"
9
+ title title_text
10
+ head_content
11
+ end
12
+ body do
13
+ body_content(&block)
14
+ end
15
+ end
16
+ end
17
+
18
+ protected
19
+ def head_content
20
+ end
21
+
22
+ def title_text
23
+ "Thin Rest"
24
+ end
25
+
26
+ def body_content(&block)
27
+ yield(self)
28
+ end
29
+
30
+ def path
31
+ helpers.rack_request.path_info
32
+ end
33
+
34
+ def script_elements
35
+ end
36
+
37
+ def link_elements
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,57 @@
1
+ module JsTestCore
2
+ module Representations
3
+ class Suite < Page
4
+ class << self
5
+ def project_js_files
6
+ @@project_js_files ||= []
7
+ end
8
+
9
+ def project_js_files=(files)
10
+ @@project_js_files = files
11
+ end
12
+
13
+ def project_css_files
14
+ @@project_css_files ||= []
15
+ end
16
+
17
+ def project_css_files=(files)
18
+ @@project_css_files = files
19
+ end
20
+ end
21
+
22
+ attr_reader :spec_files
23
+ needs :spec_files
24
+ protected
25
+ def title_text
26
+ "Js Test Core Suite"
27
+ end
28
+
29
+ def head_content
30
+ project_js_files
31
+ project_css_files
32
+ spec_script_elements
33
+ end
34
+
35
+ def spec_script_elements
36
+ spec_files.each do |file|
37
+ script :type => "text/javascript", :src => file
38
+ end
39
+ end
40
+
41
+ def project_js_files
42
+ self.class.project_js_files.each do |file|
43
+ script :src => file, :type => "text/javascript"
44
+ end
45
+ end
46
+
47
+ def project_css_files
48
+ self.class.project_css_files.each do |file|
49
+ link :href => file, :type => "text/css", :media => "screen", :rel => "stylesheet"
50
+ end
51
+ end
52
+
53
+ def body_content
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,3 @@
1
+ Dir["#{File.dirname(__FILE__)}/suites/*.html.rb"].each do |file|
2
+ require file
3
+ end
@@ -0,0 +1,81 @@
1
+ module JsTestCore
2
+ module Representations
3
+ module Suites
4
+ class ScrewUnit < JsTestCore::Representations::Suite
5
+ class << self
6
+ def jquery_js_file
7
+ @jquery_js_file ||= "/core/jquery-1.3.2.js"
8
+ end
9
+ attr_writer :jquery_js_file
10
+ end
11
+
12
+ attr_reader :spec_files
13
+ needs :spec_files
14
+ def title_text
15
+ "Screw Unit suite"
16
+ end
17
+
18
+ def head_content
19
+ core_js_files
20
+ script(raw(<<-JS), :type => "text/javascript")
21
+ (function($) {
22
+ var jsTestServerStatus = {"runner_state": "#{Client::RUNNING_RUNNER_STATE}", "console": ""};
23
+
24
+ JsTestServer.status = function() {
25
+ return JsTestServer.JSON.stringify(jsTestServerStatus);
26
+ };
27
+
28
+ $(Screw).bind('after', function() {
29
+ var error_text = $(".error").map(function(i, error_element) {
30
+ var element = $(error_element);
31
+
32
+ var parent_descriptions = element.parents("li.describe");
33
+ var parent_description_text = [];
34
+
35
+ for(var i=parent_descriptions.length-1; i >= 0; i--) {
36
+ parent_description_text.push($(parent_descriptions[i]).find("h1").text());
37
+ }
38
+
39
+ var it_text = element.parents("li.it").find("h2").text();
40
+
41
+ return parent_description_text.join(" ") + " " + it_text + ": " + element.text();
42
+ }).get().join("\\n");
43
+
44
+ jsTestServerStatus["console"] = error_text;
45
+ if(error_text) {
46
+ jsTestServerStatus["runner_state"] = "#{Client::FAILED_RUNNER_STATE}";
47
+ } else {
48
+ jsTestServerStatus["runner_state"] = "#{Client::PASSED_RUNNER_STATE}";
49
+ }
50
+ });
51
+ })(jQuery);
52
+ JS
53
+ project_js_files
54
+ link :rel => "stylesheet", :href => "/core/screw.css"
55
+ project_css_files
56
+
57
+ spec_script_elements
58
+ end
59
+
60
+ def core_js_files
61
+ script :src => jquery_js_file
62
+ script :src => "/js_test_server.js"
63
+ script :src => "/core/jquery.fn.js"
64
+ script :src => "/core/jquery.print.js"
65
+ script :src => "/core/screw.builder.js"
66
+ script :src => "/core/screw.matchers.js"
67
+ script :src => "/core/screw.events.js"
68
+ script :src => "/core/screw.behaviors.js"
69
+ end
70
+
71
+ def jquery_js_file
72
+ self.class.jquery_js_file
73
+ end
74
+
75
+ def body_content
76
+ div :id => "screw_unit_content"
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
@@ -1,11 +1,15 @@
1
1
  dir = File.dirname(__FILE__)
2
- require "#{dir}/resources/runners"
3
- require "#{dir}/resources/runners/firefox_runner"
2
+
3
+ module JsTestCore
4
+ module Resources
5
+ end
6
+ end
7
+
8
+ require "#{dir}/resources/resource"
4
9
  require "#{dir}/resources/file"
5
- require "#{dir}/resources/dir"
6
- require "#{dir}/resources/file_not_found"
7
- require "#{dir}/resources/specs/spec_file"
8
- require "#{dir}/resources/specs/spec_dir"
10
+ require "#{dir}/resources/spec_file"
11
+ require "#{dir}/resources/core_file"
9
12
  require "#{dir}/resources/web_root"
10
- require "#{dir}/resources/suite"
11
- require "#{dir}/resources/suite_finish"
13
+ require "#{dir}/resources/not_found"
14
+
15
+ require "#{dir}/resources/implementations_deprecation"
@@ -0,0 +1,19 @@
1
+ module JsTestCore
2
+ module Resources
3
+ class CoreFile < File
4
+ map "/core"
5
+
6
+ get "/?" do
7
+ do_get
8
+ end
9
+
10
+ get "*" do
11
+ do_get
12
+ end
13
+
14
+ def absolute_path
15
+ @absolute_path ||= ::File.expand_path("#{framework_path}#{relative_path.gsub(%r{^/core}, "")}")
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,7 +1,21 @@
1
1
  module JsTestCore
2
2
  module Resources
3
- class File
3
+ class File < Resource
4
+ def self.render_file(absolute_path)
5
+ extension = ::File.extname(absolute_path)
6
+ content_type = MIME_TYPES[extension] || 'text/html'
7
+ headers = {
8
+ 'Content-Type' => content_type,
9
+ 'Last-Modified' => ::File.mtime(absolute_path).rfc822
10
+ }
11
+ [200, headers, ::File.read(absolute_path)]
12
+ end
13
+
14
+ map "*"
15
+
4
16
  MIME_TYPES = {
17
+ '.html' => 'text/html',
18
+ '.htm' => 'text/html',
5
19
  '.js' => 'text/javascript',
6
20
  '.css' => 'text/css',
7
21
  '.png' => 'image/png',
@@ -10,23 +24,39 @@ module JsTestCore
10
24
  '.gif' => 'image/gif',
11
25
  }
12
26
 
13
- attr_reader :absolute_path, :relative_path
27
+ get "*" do
28
+ do_get
29
+ end
30
+
31
+ def relative_path
32
+ @relative_path ||= request.path_info
33
+ end
34
+
35
+ def absolute_path
36
+ @absolute_path ||= ::File.expand_path("#{root_path}#{relative_path}")
37
+ end
14
38
 
15
- def initialize(absolute_path, relative_path)
16
- @absolute_path = absolute_path
17
- @relative_path = relative_path
39
+ protected
40
+
41
+ def do_get
42
+ if ::File.exists?(absolute_path)
43
+ if ::File.directory?(absolute_path)
44
+ render_dir
45
+ else
46
+ render_file
47
+ end
48
+ else
49
+ pass
50
+ end
18
51
  end
19
52
 
20
- def get(request, response)
21
- extension = ::File.extname(absolute_path)
22
- response.headers['Content-Type'] = MIME_TYPES[extension] || 'text/html'
23
- response.body = ::File.read(absolute_path)
53
+ def render_dir
54
+ Representations::Dir.new(:relative_path => relative_path, :absolute_path => absolute_path).to_s
24
55
  end
25
56
 
26
- def ==(other)
27
- return false unless other.class == self.class
28
- absolute_path == other.absolute_path && relative_path == other.relative_path
57
+ def render_file
58
+ self.class.render_file(absolute_path)
29
59
  end
30
60
  end
31
61
  end
32
- end
62
+ end
@@ -0,0 +1,12 @@
1
+ module JsTestCore
2
+ module Resources
3
+ class ImplementationsDeprecation < Resource
4
+ map "/implementations"
5
+
6
+ get "*" do
7
+ new_path = File.path("javascripts", *params["splat"])
8
+ [301, {'Location' => new_path}, "This page has been moved to #{new_path}"]
9
+ end
10
+ end
11
+ end
12
+ end