ruote-kit 2.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. data/.document +0 -0
  2. data/.gitignore +8 -0
  3. data/Gemfile +10 -0
  4. data/README.rdoc +132 -0
  5. data/Rakefile +57 -0
  6. data/config.ru +21 -0
  7. data/lib/ruote-kit/application.rb +50 -0
  8. data/lib/ruote-kit/configuration.rb +52 -0
  9. data/lib/ruote-kit/helpers/engine_helpers.rb +24 -0
  10. data/lib/ruote-kit/helpers/form_helpers.rb +11 -0
  11. data/lib/ruote-kit/helpers/launch_item_parser.rb +59 -0
  12. data/lib/ruote-kit/helpers/navigation_helpers.rb +54 -0
  13. data/lib/ruote-kit/helpers/render_helpers.rb +103 -0
  14. data/lib/ruote-kit/helpers.rb +9 -0
  15. data/lib/ruote-kit/public/_ruote/images/bg.gif +0 -0
  16. data/lib/ruote-kit/public/_ruote/images/bg_button_left.gif +0 -0
  17. data/lib/ruote-kit/public/_ruote/images/bg_button_left_cancel.gif +0 -0
  18. data/lib/ruote-kit/public/_ruote/images/bg_button_left_submit.gif +0 -0
  19. data/lib/ruote-kit/public/_ruote/images/bg_button_right.gif +0 -0
  20. data/lib/ruote-kit/public/_ruote/javascripts/SimplyButtons.js +191 -0
  21. data/lib/ruote-kit/public/_ruote/javascripts/fluo-can.js +1111 -0
  22. data/lib/ruote-kit/public/_ruote/javascripts/fluo-dial.js +149 -0
  23. data/lib/ruote-kit/public/_ruote/javascripts/fluo-json.js +183 -0
  24. data/lib/ruote-kit/public/_ruote/javascripts/fluo-tred.js +515 -0
  25. data/lib/ruote-kit/public/_ruote/stylesheets/SimplyButtons.css +226 -0
  26. data/lib/ruote-kit/public/_ruote/stylesheets/base.css +336 -0
  27. data/lib/ruote-kit/public/_ruote/stylesheets/rk.css +30 -0
  28. data/lib/ruote-kit/public/_ruote/stylesheets/style.css +393 -0
  29. data/lib/ruote-kit/resources/expressions.rb +55 -0
  30. data/lib/ruote-kit/resources/processes.rb +52 -0
  31. data/lib/ruote-kit/resources/workitems.rb +64 -0
  32. data/lib/ruote-kit/spec/ruote_helpers.rb +47 -0
  33. data/lib/ruote-kit/vendor/sinatra-respond_to/LICENSE +21 -0
  34. data/lib/ruote-kit/vendor/sinatra-respond_to/README.markdown +102 -0
  35. data/lib/ruote-kit/vendor/sinatra-respond_to/Rakefile +30 -0
  36. data/lib/ruote-kit/vendor/sinatra-respond_to/VERSION.yml +4 -0
  37. data/lib/ruote-kit/vendor/sinatra-respond_to/lib/sinatra/respond_to.rb +206 -0
  38. data/lib/ruote-kit/vendor/sinatra-respond_to/sinatra-respond_to.gemspec +56 -0
  39. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/public/static folder/.keep +0 -0
  40. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/public/static.txt +1 -0
  41. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/test_app.rb +53 -0
  42. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/unreachable_static.txt +1 -0
  43. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/views/layout.html.haml +2 -0
  44. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/views/resource.html.haml +1 -0
  45. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/views/resource.js.erb +3 -0
  46. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/app/views/resource.xml.builder +3 -0
  47. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/extension_spec.rb +403 -0
  48. data/lib/ruote-kit/vendor/sinatra-respond_to/spec/spec_helper.rb +18 -0
  49. data/lib/ruote-kit/views/expression.html.haml +38 -0
  50. data/lib/ruote-kit/views/expressions.html.haml +30 -0
  51. data/lib/ruote-kit/views/index.html.haml +1 -0
  52. data/lib/ruote-kit/views/launch_process.html.haml +19 -0
  53. data/lib/ruote-kit/views/layout.html.haml +46 -0
  54. data/lib/ruote-kit/views/process.html.haml +55 -0
  55. data/lib/ruote-kit/views/processes.html.haml +27 -0
  56. data/lib/ruote-kit/views/resource_not_found.html.haml +7 -0
  57. data/lib/ruote-kit/views/workitem.html.haml +39 -0
  58. data/lib/ruote-kit/views/workitems.html.haml +23 -0
  59. data/lib/ruote-kit.rb +105 -0
  60. data/ruote-kit.gemspec +136 -0
  61. data/spec/helpers/render_helpers_spec.rb +211 -0
  62. data/spec/resources/expressions_spec.rb +179 -0
  63. data/spec/resources/index_spec.rb +46 -0
  64. data/spec/resources/processes_spec.rb +259 -0
  65. data/spec/resources/workitems_spec.rb +308 -0
  66. data/spec/ruote-kit_spec.rb +4 -0
  67. data/spec/spec.opts +2 -0
  68. data/spec/spec_helper.rb +152 -0
  69. data/spec/views/launch_process.html.haml_spec.rb +21 -0
  70. data/spec/views/process.html.haml_spec.rb +16 -0
  71. data/spec/views/processes.html.haml_spec.rb +30 -0
  72. data/spec/views/workitems.html.haml_spec.rb +68 -0
  73. metadata +185 -0
@@ -0,0 +1,102 @@
1
+ ## About
2
+
3
+
4
+ ## Examples
5
+
6
+ require 'sinatra'
7
+ require 'sinatra/respond_to'
8
+
9
+ get '/posts' do
10
+ @posts = Post.recent
11
+
12
+ respond_to do |wants|
13
+ wants.html { haml :posts } # => views/posts.html.haml, also sets content_type to text/html
14
+ wants.rss { haml :posts } # => views/posts.rss.haml, also sets content_type to application/rss+xml
15
+ wants.atom { haml :posts } # => views/posts.atom.haml, also sets content_type to appliation/atom+xml
16
+ end
17
+ end
18
+
19
+ get '/post/:id' do
20
+ @post = Post.find(params[:id])
21
+
22
+ respond_to do |wants|
23
+ wants.html { haml :post } # => views/post.html.haml, also sets content_type to text/html
24
+ wants.xhtml { haml :post } # => views/post.xhtml.haml, also sets content_type to application/xhtml+xml
25
+ wants.xml { @post.to_xml } # => sets content_type to application/xml
26
+ wants.js { erb :post } # => views/post.js.erb, also sets content_type to application/javascript
27
+ end
28
+ end
29
+
30
+ get '/comments/:id' do
31
+ @comment = Comment.find(params[:id])
32
+
33
+ respond_to do |wants|
34
+ wants.html { haml :comment } # => views/comment.html.haml, also sets content_type to text/html
35
+ wants.json { @comment.to_json } # => sets content_type to application/json
36
+ wants.js { erb :comment } # => views/comment.js.erb, also sets content_type to application/javascript
37
+ end
38
+ end
39
+
40
+ To change the character set of the response, there is a <tt>charset</tt> helper. For example
41
+
42
+ get '/iso-8859-1' do
43
+ charset 'iso-8859-1'
44
+ "This is now sent using iso-8859-1 character set"
45
+ end
46
+
47
+ get '/respond_to-mixed' do
48
+ respond_to do |wants|
49
+ wants.html { charset 'iso-8859-1'; "Some html in iso-8859-1" }
50
+ wants.xml { builder :utf-8-xml } # => this is returned in the default character set
51
+ end
52
+ end
53
+
54
+ ## Configuration
55
+
56
+ There a few options available for configuring the default behavior of respond_to using Sinatra's
57
+ <tt>set</tt> utility.
58
+
59
+ * <tt>default\_charset - utf-8</tt><br />
60
+ Assumes all text documents are encoded using this character set.
61
+ This can be overridden within the respond_to block for the appropriate format
62
+ * <tt>default\_content - :html</tt><br />
63
+ When a user vists a url without an extension, for example /post this will be
64
+ the assumed content to serve first. Expects a symbol as used in setting content_type.
65
+ * <tt>assume\_xhr\_is\_js - true</tt><br />
66
+ To avoid headaches with accept headers, and appending .js to urls, this will
67
+ cause the default format for all XmlHttpRequests to be classified as wanting Javascript
68
+ in the response.
69
+
70
+ ## Installing
71
+ sudo gem install cehoffman-sinatra-respond_to --source=http://gems.github.com
72
+
73
+ ## Cavaets
74
+ Due to the way respond\_to works, all incoming requests have the extension striped from the request.path\_info.
75
+ This causes routes like the following to fail.
76
+
77
+ get '/style.css' do
78
+ content_type :css, :charset => 'utf-8'
79
+ sass :style # => renders views/style.sass
80
+ end
81
+
82
+ They need to be changed to the following. Note that you no longer have to set the content\_type or charset.
83
+
84
+ get '/style' do
85
+ sass :style # => renders views/style.css.sass
86
+ end
87
+
88
+ If you want to ensure the route only gets called for css requests try this. This will use sinatra's built in accept header matching.
89
+
90
+ get '/style', :provides => :css do
91
+ sass :style
92
+ end
93
+
94
+ ## Issues
95
+
96
+ Sinatra has a bug that affects Classic style applications and extensions see [#215][215] and [#180][180].
97
+ I have worked around this by explicitly registering RespondTo with the top level Sinatra::Application when
98
+ requiring sinatra/respond\_to.
99
+
100
+ [215]: https://sinatra.lighthouseapp.com/projects/9779/tickets/215-extensions-cannot-define-before-filters-for-classic-apps "Extensions cannot define before filters for classic apps"
101
+ [180]: https://sinatra.lighthouseapp.com/projects/9779/tickets/180-better-route-inheritence "Better route inheritence"
102
+
@@ -0,0 +1,30 @@
1
+ begin
2
+ require 'jeweler'
3
+ Jeweler::Tasks.new do |spec|
4
+ spec.name = 'sinatra-respond_to'
5
+ spec.summary = 'A respond_to style Rails block for baked-in web service support in Sinatra'
6
+ spec.email = 'cehoffman@gmail.com'
7
+ spec.homepage = 'http://github.com/cehoffman/sinatra-respond_to'
8
+ spec.description = spec.summary
9
+ spec.authors = ["Chris Hoffman"]
10
+ spec.add_dependency('sinatra-sinatra', '>= 0.9.1.3')
11
+ end
12
+ rescue LoadError
13
+ puts "Jewler not available. Install it with sugo gem install technicalpickles-jeweler -s http://gems.github.com"
14
+ end
15
+
16
+ begin
17
+ require 'spec/rake/spectask'
18
+ desc "Run specs"
19
+ Spec::Rake::SpecTask.new do |t|
20
+ t.spec_files = FileList['spec/*_spec.rb']
21
+ t.spec_opts = %w(-fp --color)
22
+
23
+ t.rcov = true
24
+ t.rcov_opts << '--text-summary'
25
+ t.rcov_opts << '--sort' << 'coverage' << '--sort-reverse'
26
+ t.rcov_opts << '--exclude' << '.gem,pkg,spec'
27
+ end
28
+ rescue LoadError
29
+ puts "RSpec not available. Install it with sudo gem install rspec."
30
+ end
@@ -0,0 +1,4 @@
1
+ ---
2
+ :patch: 6
3
+ :major: 0
4
+ :minor: 3
@@ -0,0 +1,206 @@
1
+ require 'sinatra/base'
2
+
3
+ # Accept header parsing was looked at but deemed
4
+ # too much of an irregularity to deal with. Problems with the header
5
+ # differences from IE, Firefox, Safari, and every other UA causes
6
+ # problems with the expected output. The general expected behavior
7
+ # would be serve html when no extension provided, but most UAs say
8
+ # they will accept application/xml with out a quality indicator, meaning
9
+ # you'd get the xml block served insead. Just plain retarded, use the
10
+ # extension and you'll never be suprised.
11
+
12
+ module Sinatra
13
+ module RespondTo
14
+ class UnhandledFormat < Sinatra::NotFound; end
15
+ class MissingTemplate < Sinatra::NotFound
16
+ def code; 500 end
17
+ end
18
+
19
+ TEXT_MIME_TYPES = [:txt, :html, :js, :json, :xml, :rss, :atom, :css, :asm, :c, :cc, :conf,
20
+ :csv, :cxx, :diff, :dtd, :f, :f77, :f90, :for, :gemspec, :h, :hh, :htm,
21
+ :log, :mathml, :mml, :p, :pas, :pl, :pm, :py, :rake, :rb, :rdf, :rtf, :ru,
22
+ :s, :sgm, :sgml, :sh, :svg, :svgz, :text, :wsdl, :xhtml, :xsl, :xslt, :yaml,
23
+ :yml, :ics]
24
+
25
+ def self.registered(app)
26
+ app.helpers RespondTo::Helpers
27
+
28
+ app.set :default_charset, 'utf-8'
29
+ app.set :default_content, :html
30
+ app.set :assume_xhr_is_js, true
31
+
32
+ # We remove the trailing extension so routes
33
+ # don't have to be of the style
34
+ #
35
+ # get '/resouce.:format'
36
+ #
37
+ # They can instead be of the style
38
+ #
39
+ # get '/resource'
40
+ #
41
+ # and the format will automatically be available in <tt>format</tt>
42
+ app.before do
43
+ unless options.static? && options.public? && (request.get? || request.head?) && static_file?(request.path_info)
44
+ request.path_info.sub! %r{\.([^\./]+)$}, ''
45
+
46
+ format request.xhr? && options.assume_xhr_is_js? ? :js : $1 || options.default_content
47
+
48
+ charset options.default_charset if Sinatra::RespondTo::TEXT_MIME_TYPES.include? format
49
+ end
50
+ end
51
+
52
+ app.configure :development do |dev|
53
+ # Very, very, very hackish but only for development at least
54
+ # Modifies the regex matching /__sinatra__/:image.png to not have the extension
55
+ ["GET", "HEAD"].each do |verb|
56
+ dev.routes[verb][1][0] = Regexp.new(dev.routes[verb][1][0].source.gsub(/\\\.[^\.\/]+\$$/, '$'))
57
+ end
58
+
59
+ dev.error UnhandledFormat do
60
+ content_type :html, :charset => 'utf-8'
61
+
62
+ (<<-HTML).gsub(/^ {10}/, '')
63
+ <!DOCTYPE html>
64
+ <html>
65
+ <head>
66
+ <style type="text/css">
67
+ body { text-align:center;font-family:helvetica,arial;font-size:22px;
68
+ color:#888;margin:20px}
69
+ #c {margin:0 auto;width:500px;text-align:left}
70
+ </style>
71
+ </head>
72
+ <body>
73
+ <h2>Sinatra doesn't know this ditty.</h2>
74
+ <img src='/__sinatra__/404.png'>
75
+ <div id="c">
76
+ Try this:
77
+ <pre>#{request.request_method.downcase} '#{request.path_info}' do\n respond_to do |wants|\n wants.#{format} { "Hello World" }\n end\nend</pre>
78
+ </div>
79
+ </body>
80
+ </html>
81
+ HTML
82
+ end
83
+
84
+ dev.error MissingTemplate do
85
+ content_type :html, :charset => 'utf-8'
86
+ response.status = request.env['sinatra.error'].code
87
+
88
+ engine = request.env['sinatra.error'].message.split('.').last
89
+ engine = 'haml' unless ['haml', 'builder', 'erb'].include? engine
90
+
91
+ path = File.basename(request.path_info)
92
+ path = "root" if path.nil? || path.empty?
93
+
94
+ format = engine == 'builder' ? 'xml' : 'html'
95
+
96
+ layout = case engine
97
+ when 'haml' then "!!!\n%html\n %body= yield"
98
+ when 'erb' then "<html>\n <body>\n <%= yield %>\n </body>\n</html>"
99
+ when 'builder' then "builder do |xml|\n xml << yield\nend"
100
+ end
101
+
102
+ layout = "<small>app.#{format}.#{engine}</small>\n<pre>#{escape_html(layout)}</pre>"
103
+
104
+ (<<-HTML).gsub(/^ {10}/, '')
105
+ <!DOCTYPE html>
106
+ <html>
107
+ <head>
108
+ <style type="text/css">
109
+ body { text-align:center;font-family:helvetica,arial;font-size:22px;
110
+ color:#888;margin:20px}
111
+ #c {margin:0 auto;width:500px;text-align:left;}
112
+ small {float:right;clear:both;}
113
+ pre {clear:both;}
114
+ </style>
115
+ </head>
116
+ <body>
117
+ <h2>Sinatra can't find #{request.env['sinatra.error'].message}</h2>
118
+ <img src='/__sinatra__/500.png'>
119
+ <div id="c">
120
+ Try this:<br />
121
+ #{layout}
122
+ <small>#{path}.#{format}.#{engine}</small>
123
+ <pre>Hello World!</pre>
124
+ <small>application.rb</small>
125
+ <pre>#{request.request_method.downcase} '#{request.path_info}' do\n respond_to do |wants|\n wants.#{engine == 'builder' ? 'xml' : 'html'} { #{engine} :#{path}#{",\n#{' '*32}layout => :app" if layout} }\n end\nend</pre>
126
+ </div>
127
+ </body>
128
+ </html>
129
+ HTML
130
+ end
131
+
132
+ end
133
+
134
+ app.class_eval do
135
+ private
136
+ def render_with_format(*args)
137
+ args[1] = "#{args[1]}.#{format}".to_sym if args[1].is_a?(::Symbol)
138
+ render_without_format *args
139
+ rescue Errno::ENOENT
140
+ raise MissingTemplate, "#{args[1]}.#{args[0]}"
141
+ end
142
+ alias_method :render_without_format, :render
143
+ alias_method :render, :render_with_format
144
+
145
+ def lookup_layout_with_format(*args)
146
+ args[1] = "#{args[1]}.#{format}".to_sym if args[1].is_a?(::Symbol)
147
+ lookup_layout_without_format *args
148
+ end
149
+ alias_method :lookup_layout_without_format, :lookup_layout
150
+ alias_method :lookup_layout, :lookup_layout_with_format
151
+ end
152
+ end
153
+
154
+ module Helpers
155
+ def format(val=nil)
156
+ unless val.nil?
157
+ mime_type = media_type(val)
158
+ fail "Unknown media type #{val}\nTry registering the extension with a mime type" if mime_type.nil?
159
+
160
+ @format = val.to_sym
161
+ response['Content-Type'].sub!(/^[^;]+/, mime_type)
162
+ end
163
+
164
+ @format
165
+ end
166
+
167
+ # This is mostly just a helper so request.path_info isn't changed when
168
+ # serving files from the public directory
169
+ def static_file?(path)
170
+ public_dir = File.expand_path(options.public)
171
+ path = File.expand_path(File.join(public_dir, unescape(path)))
172
+
173
+ path[0, public_dir.length] == public_dir && File.file?(path)
174
+ end
175
+
176
+ def charset(val=nil)
177
+ fail "Content-Type must be set in order to specify a charset" if response['Content-Type'].nil?
178
+
179
+ if response['Content-Type'] =~ /charset=[^;]+/
180
+ response['Content-Type'].sub!(/charset=[^;]+/, (val == '' && '') || "charset=#{val}")
181
+ else
182
+ response['Content-Type'] += ";charset=#{val}"
183
+ end unless val.nil?
184
+
185
+ response['Content-Type'][/charset=([^;]+)/, 1]
186
+ end
187
+
188
+ def respond_to(&block)
189
+ wants = {}
190
+ def wants.method_missing(type, *args, &handler)
191
+ Sinatra::Base.send(:fail, "Unknown media type for respond_to: #{type}\nTry registering the extension with a mime type") if Sinatra::Base.media_type(type).nil?
192
+ self[type] = handler
193
+ end
194
+
195
+ yield wants
196
+
197
+ raise UnhandledFormat if wants[format].nil?
198
+ wants[format].call
199
+ end
200
+ end
201
+ end
202
+
203
+ # Get around before filter problem for classic applications by registering
204
+ # with the context they are run in explicitly instead of Sinatra::Default
205
+ Sinatra::Base.register RespondTo
206
+ end
@@ -0,0 +1,56 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{sinatra-respond_to}
5
+ s.version = "0.3.6"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Chris Hoffman"]
9
+ s.date = %q{2009-08-02}
10
+ s.description = %q{A respond_to style Rails block for baked-in web service support in Sinatra}
11
+ s.email = %q{cehoffman@gmail.com}
12
+ s.extra_rdoc_files = [
13
+ "LICENSE",
14
+ "README.markdown"
15
+ ]
16
+ s.files = [
17
+ "LICENSE",
18
+ "README.markdown",
19
+ "Rakefile",
20
+ "VERSION.yml",
21
+ "lib/sinatra/respond_to.rb",
22
+ "spec/app/public/static.txt",
23
+ "spec/app/test_app.rb",
24
+ "spec/app/unreachable_static.txt",
25
+ "spec/app/views/layout.html.haml",
26
+ "spec/app/views/resource.html.haml",
27
+ "spec/app/views/resource.js.erb",
28
+ "spec/app/views/resource.xml.builder",
29
+ "spec/extension_spec.rb",
30
+ "spec/spec_helper.rb"
31
+ ]
32
+ s.has_rdoc = true
33
+ s.homepage = %q{http://github.com/cehoffman/sinatra-respond_to}
34
+ s.rdoc_options = ["--charset=UTF-8"]
35
+ s.require_paths = ["lib"]
36
+ s.rubygems_version = %q{1.3.1}
37
+ s.summary = %q{A respond_to style Rails block for baked-in web service support in Sinatra}
38
+ s.test_files = [
39
+ "spec/app/test_app.rb",
40
+ "spec/extension_spec.rb",
41
+ "spec/spec_helper.rb"
42
+ ]
43
+
44
+ if s.respond_to? :specification_version then
45
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
46
+ s.specification_version = 2
47
+
48
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
49
+ s.add_runtime_dependency(%q<sinatra-sinatra>, [">= 0.9.1.3"])
50
+ else
51
+ s.add_dependency(%q<sinatra-sinatra>, [">= 0.9.1.3"])
52
+ end
53
+ else
54
+ s.add_dependency(%q<sinatra-sinatra>, [">= 0.9.1.3"])
55
+ end
56
+ end
@@ -0,0 +1,53 @@
1
+ require 'sinatra/base'
2
+ require 'erb'
3
+ require 'haml'
4
+ require 'builder'
5
+
6
+ class TestApp < Sinatra::Base
7
+ register Sinatra::RespondTo
8
+
9
+ set :views, File.join(File.dirname(__FILE__), 'views')
10
+ set :public, File.join(File.dirname(__FILE__), 'public')
11
+
12
+ get '/resource' do
13
+ respond_to do |wants|
14
+ wants.html { haml :resource }
15
+ wants.json { "We got some json" }
16
+ wants.xml { builder :resource }
17
+ wants.js { erb :resource }
18
+ wants.png { }
19
+ end
20
+ end
21
+
22
+ get '/default_charset' do
23
+ respond_to do |wants|
24
+ wants.html { "Should set charcter set to default_charset" }
25
+ end
26
+ end
27
+
28
+ get '/iso-8859-1' do
29
+ respond_to do |wants|
30
+ wants.html { charset 'iso-8859-1'; "Should have character set of iso-8859-1" }
31
+ end
32
+ end
33
+
34
+ get '/normal-no-respond_to' do
35
+ "Just some plain old text"
36
+ end
37
+
38
+ get '/style.css' do
39
+ "This route should fail"
40
+ end
41
+
42
+ get '/style-no-extension', :provides => :css do
43
+ "Should succeed only when browser accepts text/css"
44
+ end
45
+
46
+ get '/missing-template' do
47
+ respond_to do |wants|
48
+ wants.html { haml :missing }
49
+ wants.xml { builder :missing }
50
+ wants.js { erb :missing }
51
+ end
52
+ end
53
+ end
@@ -0,0 +1 @@
1
+ Unreachable static file
@@ -0,0 +1,3 @@
1
+ $(function () {
2
+ return '<%= "Hiya from javascript" %>'
3
+ });
@@ -0,0 +1,3 @@
1
+ builder do |xml|
2
+ xml.root "Some XML"
3
+ end