merb-gen 0.9.2
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.
- data/LICENSE +20 -0
- data/README +10 -0
- data/Rakefile +47 -0
- data/TODO +4 -0
- data/app_generators/merb/USAGE +0 -0
- data/app_generators/merb/merb_generator.rb +36 -0
- data/app_generators/merb/templates/Rakefile +126 -0
- data/app_generators/merb/templates/app/controllers/application.rb +2 -0
- data/app_generators/merb/templates/app/controllers/exceptions.rb +13 -0
- data/app_generators/merb/templates/app/helpers/global_helpers.rb +5 -0
- data/app_generators/merb/templates/app/views/exceptions/internal_server_error.html.erb +216 -0
- data/app_generators/merb/templates/app/views/exceptions/not_acceptable.html.erb +55 -0
- data/app_generators/merb/templates/app/views/exceptions/not_found.html.erb +39 -0
- data/app_generators/merb/templates/app/views/layout/application.html.erb +11 -0
- data/app_generators/merb/templates/autotest/discover.rb +1 -0
- data/app_generators/merb/templates/autotest/merb.rb +149 -0
- data/app_generators/merb/templates/autotest/merb_rspec.rb +202 -0
- data/app_generators/merb/templates/config/environments/development.rb +6 -0
- data/app_generators/merb/templates/config/environments/production.rb +5 -0
- data/app_generators/merb/templates/config/environments/rake.rb +7 -0
- data/app_generators/merb/templates/config/environments/test.rb +5 -0
- data/app_generators/merb/templates/config/init.rb +58 -0
- data/app_generators/merb/templates/config/rack.rb +1 -0
- data/app_generators/merb/templates/config/router.rb +35 -0
- data/app_generators/merb/templates/public/images/merb.jpg +0 -0
- data/app_generators/merb/templates/public/merb.fcgi +22 -0
- data/app_generators/merb/templates/public/stylesheets/master.css +119 -0
- data/app_generators/merb/templates/spec/spec.opts +0 -0
- data/app_generators/merb/templates/spec/spec_helper.rb +11 -0
- data/app_generators/merb/templates/test/test_helper.rb +14 -0
- data/app_generators/merb_flat/merb_flat_generator.rb +22 -0
- data/app_generators/merb_flat/templates/README.txt +10 -0
- data/app_generators/merb_flat/templates/application.rb +15 -0
- data/app_generators/merb_flat/templates/config/framework.rb +5 -0
- data/app_generators/merb_flat/templates/config/init.rb +19 -0
- data/app_generators/merb_flat/templates/views/foo.html.erb +3 -0
- data/app_generators/merb_plugin/merb_plugin_generator.rb +22 -0
- data/app_generators/merb_plugin/templates/LICENSE +20 -0
- data/app_generators/merb_plugin/templates/README +4 -0
- data/app_generators/merb_plugin/templates/Rakefile +44 -0
- data/app_generators/merb_plugin/templates/TODO +5 -0
- data/app_generators/merb_plugin/templates/lib/%base_name%.rb +18 -0
- data/app_generators/merb_plugin/templates/lib/%base_name%/merbtasks.rb +6 -0
- data/app_generators/merb_plugin/templates/spec/%base_name%_spec.rb +7 -0
- data/app_generators/merb_plugin/templates/spec/spec_helper.rb +2 -0
- data/app_generators/merb_plugin/templates/test/%base_name%_test.rb +0 -0
- data/app_generators/merb_plugin/templates/test/test_helper.rb +2 -0
- data/app_generators/merb_very_flat/merb_very_flat_generator.rb +37 -0
- data/app_generators/merb_very_flat/templates/%app_file_name%.rb +15 -0
- data/app_generators/merb_very_flat/templates/README.txt +9 -0
- data/bin/merb-gen +103 -0
- data/lib/merb-gen.rb +38 -0
- data/lib/merb-gen/base.rb +62 -0
- data/lib/merb-gen/helpers.rb +108 -0
- data/merb_default_generators/model/USAGE +0 -0
- data/merb_default_generators/model/model_generator.rb +40 -0
- data/merb_default_generators/model/templates/app/models/%model_file_name%.rb +5 -0
- data/merb_default_generators/resource_controller/USAGE +0 -0
- data/merb_default_generators/resource_controller/resource_controller_generator.rb +74 -0
- data/merb_default_generators/resource_controller/templates/app/controllers/%controller_file_name%.rb +46 -0
- data/merb_default_generators/resource_controller/templates/app/helpers/%controller_file_name%_helper.rb +16 -0
- data/merb_default_generators/resource_controller/templates/app/views/%controller_file_name%/delete.html.erb +3 -0
- data/merb_default_generators/resource_controller/templates/app/views/%controller_file_name%/edit.html.erb +3 -0
- data/merb_default_generators/resource_controller/templates/app/views/%controller_file_name%/index.html.erb +3 -0
- data/merb_default_generators/resource_controller/templates/app/views/%controller_file_name%/new.html.erb +3 -0
- data/merb_default_generators/resource_controller/templates/app/views/%controller_file_name%/show.html.erb +3 -0
- data/merb_generators/controller/USAGE +0 -0
- data/merb_generators/controller/controller_generator.rb +59 -0
- data/merb_generators/controller/templates/app/controllers/%controller_file_name%.rb +18 -0
- data/merb_generators/controller/templates/app/helpers/%controller_file_name%_helper.rb +16 -0
- data/merb_generators/controller/templates/app/views/%controller_file_name%/index.html.erb +1 -0
- data/merb_generators/freezer/USAGE +0 -0
- data/merb_generators/freezer/freezer_generator.rb +25 -0
- data/merb_generators/freezer/templates/script/frozen-merb +43 -0
- data/merb_generators/part_controller/USAGE +0 -0
- data/merb_generators/part_controller/part_controller_generator.rb +58 -0
- data/merb_generators/part_controller/templates/app/helpers/%controller_file_name%_part_helper.rb +16 -0
- data/merb_generators/part_controller/templates/app/parts/%controller_file_name%_part.rb +18 -0
- data/merb_generators/part_controller/templates/app/parts/views/%controller_file_name%_part/index.html.erb +3 -0
- data/merb_generators/resource/USAGE +0 -0
- data/merb_generators/resource/resource_generator.rb +48 -0
- data/rspec_generators/merb_controller_test/merb_controller_test_generator.rb +49 -0
- data/rspec_generators/merb_controller_test/templates/spec/controllers/%controller_full_file_path%_spec.rb +7 -0
- data/rspec_generators/merb_controller_test/templates/spec/helpers/%controller_full_file_path%_helper_spec.rb +5 -0
- data/rspec_generators/merb_model_test/merb_model_test_generator.rb +35 -0
- data/rspec_generators/merb_model_test/templates/spec/models/%model_file_name%_spec.rb +7 -0
- data/rspec_generators/merb_resource_controller_test/merb_resource_controller_test_generator.rb +49 -0
- data/rspec_generators/merb_resource_controller_test/templates/spec/controllers/%controller_full_file_path%_spec.rb +7 -0
- data/rspec_generators/merb_resource_controller_test/templates/spec/helpers/%controller_full_file_path%_helpers.rb +5 -0
- data/rspec_generators/merb_resource_controller_test/templates/spec/views/%controller_full_file_path%/delete.html.erb_spec.rb +1 -0
- data/rspec_generators/merb_resource_controller_test/templates/spec/views/%controller_full_file_path%/edit.html.erb_spec.rb +1 -0
- data/rspec_generators/merb_resource_controller_test/templates/spec/views/%controller_full_file_path%/index.html.erb_spec.rb +1 -0
- data/rspec_generators/merb_resource_controller_test/templates/spec/views/%controller_full_file_path%/new.html.erb_spec.rb +1 -0
- data/rspec_generators/merb_resource_controller_test/templates/spec/views/%controller_full_file_path%/show.html.erb_spec.rb +1 -0
- data/test_unit_generators/merb_controller_test/merb_controller_test_generator.rb +47 -0
- data/test_unit_generators/merb_controller_test/templates/test/functional/%controller_full_file_path%_test.rb +17 -0
- data/test_unit_generators/merb_model_test/merb_model_test_generator.rb +34 -0
- data/test_unit_generators/merb_model_test/templates/test/unit/%model_file_name%_test.rb +9 -0
- data/test_unit_generators/merb_resource_controller_test/merb_resource_controller_test_generator.rb +31 -0
- metadata +253 -0
data/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2007 Yehuda Katz
|
|
2
|
+
|
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
4
|
+
a copy of this software and associated documentation files (the
|
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
|
9
|
+
the following conditions:
|
|
10
|
+
|
|
11
|
+
The above copyright notice and this permission notice shall be
|
|
12
|
+
included in all copies or substantial portions of the Software.
|
|
13
|
+
|
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
==== merb-gen
|
|
2
|
+
|
|
3
|
+
merb-gen is a part of the Merb More package. It provides application and plugin generators for Merb.
|
|
4
|
+
|
|
5
|
+
==== Usage
|
|
6
|
+
|
|
7
|
+
To generate a new merb app, run merb-gen <path>. For instance, <tt>merb-gen foo</tt> would create
|
|
8
|
+
a new merb app inside of the foo directory.
|
|
9
|
+
|
|
10
|
+
To generate a new merb plugin, run merb-gen plugin <path>.
|
data/Rakefile
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
require 'rake/gempackagetask'
|
|
3
|
+
|
|
4
|
+
GEM = "merb-gen"
|
|
5
|
+
VERSION = "0.9.2"
|
|
6
|
+
AUTHOR = "Yehuda Katz"
|
|
7
|
+
EMAIL = "wycats@gmail.com"
|
|
8
|
+
HOMEPAGE = "http://www.merbivore.com"
|
|
9
|
+
SUMMARY = "Merb More: Merb's Application and Plugin Generators"
|
|
10
|
+
|
|
11
|
+
spec = Gem::Specification.new do |s|
|
|
12
|
+
s.name = GEM
|
|
13
|
+
s.version = VERSION
|
|
14
|
+
s.platform = Gem::Platform::RUBY
|
|
15
|
+
s.has_rdoc = true
|
|
16
|
+
s.extra_rdoc_files = ["README", "LICENSE", 'TODO']
|
|
17
|
+
s.summary = SUMMARY
|
|
18
|
+
s.description = s.summary
|
|
19
|
+
s.author = AUTHOR
|
|
20
|
+
s.email = EMAIL
|
|
21
|
+
s.homepage = HOMEPAGE
|
|
22
|
+
s.bindir = "bin"
|
|
23
|
+
s.executables = %w( merb-gen )
|
|
24
|
+
|
|
25
|
+
# Uncomment this to add a dependency
|
|
26
|
+
s.add_dependency "merb-core", ">= 0.9.2"
|
|
27
|
+
s.add_dependency "rubigen", ">= 1.2.4"
|
|
28
|
+
|
|
29
|
+
s.require_path = 'lib'
|
|
30
|
+
s.autorequire = GEM
|
|
31
|
+
s.files = %w(LICENSE README Rakefile TODO) +
|
|
32
|
+
Dir.glob("{lib,bin,spec,app_generators,merb_default_generators,merb_generators,rspec_generators,test_unit_generators}/**/*")
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
|
36
|
+
pkg.gem_spec = spec
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
namespace :jruby do
|
|
40
|
+
task :install do
|
|
41
|
+
sh %{sudo jruby -S gem install pkg/#{GEM}-#{VERSION} --no-update-sources}
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
task :install => [:package] do
|
|
46
|
+
sh %{sudo gem install pkg/#{GEM}-#{VERSION} --no-update-sources}
|
|
47
|
+
end
|
data/TODO
ADDED
|
File without changes
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
require "merb-gen/helpers"
|
|
2
|
+
require "merb-gen/base"
|
|
3
|
+
|
|
4
|
+
class MerbGenerator < Merb::GeneratorBase
|
|
5
|
+
|
|
6
|
+
def initialize(args, runtime_options = {})
|
|
7
|
+
@base = File.dirname(__FILE__)
|
|
8
|
+
@name = args.first
|
|
9
|
+
super
|
|
10
|
+
@destination_root = @name
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
protected
|
|
14
|
+
def banner
|
|
15
|
+
<<-EOS.split("\n").map{|x| x.strip}.join("\n")
|
|
16
|
+
Creates a Merb application stub.
|
|
17
|
+
|
|
18
|
+
USAGE: #{spec.name} -g path
|
|
19
|
+
|
|
20
|
+
Set environment variable MERB_ORM=[activerecord|datamapper|sequel]
|
|
21
|
+
to pre-enabled an ORM.
|
|
22
|
+
EOS
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def default_orm?(orm)
|
|
26
|
+
ENV['MERB_ORM'] == orm.to_s
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def default_test_suite?(suite)
|
|
30
|
+
return ENV['MERB_TEST_SUITE'] == suite.to_s if ENV['MERB_TEST_SUITE']
|
|
31
|
+
options[suite]
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def display_framework_selections
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
require 'rubygems'
|
|
2
|
+
Gem.clear_paths
|
|
3
|
+
Gem.path.unshift(File.join(File.dirname(__FILE__), "gems"))
|
|
4
|
+
|
|
5
|
+
require 'rake'
|
|
6
|
+
require 'rake/rdoctask'
|
|
7
|
+
require 'rake/testtask'
|
|
8
|
+
require 'spec/rake/spectask'
|
|
9
|
+
require 'fileutils'
|
|
10
|
+
require 'merb-core'
|
|
11
|
+
require 'rubigen'
|
|
12
|
+
include FileUtils
|
|
13
|
+
|
|
14
|
+
# Load the basic runtime dependencies; this will include
|
|
15
|
+
# any plugins and therefore plugin rake tasks.
|
|
16
|
+
init_env = ENV['MERB_ENV'] || 'rake'
|
|
17
|
+
Merb.load_dependencies(:environment => init_env)
|
|
18
|
+
|
|
19
|
+
# Get Merb plugins and dependencies
|
|
20
|
+
Merb::Plugins.rakefiles.each { |r| require r }
|
|
21
|
+
|
|
22
|
+
desc "start runner environment"
|
|
23
|
+
task :merb_env do
|
|
24
|
+
Merb.start_environment(:environment => init_env, :adapter => 'runner')
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
##############################################################################
|
|
28
|
+
# ADD YOUR CUSTOM TASKS BELOW
|
|
29
|
+
##############################################################################
|
|
30
|
+
|
|
31
|
+
desc "Add new files to subversion"
|
|
32
|
+
task :svn_add do
|
|
33
|
+
system "svn status | grep '^\?' | sed -e 's/? *//' | sed -e 's/ /\ /g' | xargs svn add"
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class Freezer
|
|
38
|
+
|
|
39
|
+
class << self
|
|
40
|
+
|
|
41
|
+
def components
|
|
42
|
+
{
|
|
43
|
+
"core" => "git://github.com/wycats/merb-core.git",
|
|
44
|
+
"more" => "git://github.com/wycats/merb-more.git",
|
|
45
|
+
"plugins" => "git://github.com/wycats/merb-plugins.git"
|
|
46
|
+
}
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def framework_dir
|
|
50
|
+
# Should allow customization of this directory's location?
|
|
51
|
+
File.join(File.dirname(__FILE__), "framework")
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def gitmodules
|
|
55
|
+
File.join(File.dirname(__FILE__), ".gitmodules")
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
def freeze(component, update = false)
|
|
59
|
+
new(component, update).freeze
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def initialize(component, update)
|
|
65
|
+
@component = "merb-" + component
|
|
66
|
+
@update = update
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def freeze
|
|
70
|
+
# Ensure that required git commands are available
|
|
71
|
+
%w(git-pull git-submodule).each do |bin|
|
|
72
|
+
next if in_path?(bin)
|
|
73
|
+
$stderr.puts "ERROR: #{bin} must be avaible in PATH"
|
|
74
|
+
exit 1
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
unless File.directory?(framework_dir)
|
|
78
|
+
puts "Creating framework directory ..."
|
|
79
|
+
FileUtils.mkdir_p(framework_dir)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
if managed?
|
|
83
|
+
puts "#{@component} seems to be already managed by git-submodule."
|
|
84
|
+
if @update
|
|
85
|
+
puts "Trying to update #{@component} ..."
|
|
86
|
+
sh "cd #{framework_dir}/#{@component} && git-pull"
|
|
87
|
+
end
|
|
88
|
+
else
|
|
89
|
+
puts "Creating submodule for #{@component} ..."
|
|
90
|
+
sh "git-submodule --quiet add #{components[@component.gsub("merb-", '')]} #{File.basename(framework_dir)}/#{@component}"
|
|
91
|
+
if $?.success?
|
|
92
|
+
sh("git-submodule init")
|
|
93
|
+
else
|
|
94
|
+
# Should this instead be a raise?
|
|
95
|
+
$stderr.puts("ERROR: unable to create submodule for #{@component}")
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
protected
|
|
101
|
+
|
|
102
|
+
def in_submodule?
|
|
103
|
+
return false unless File.exists?(gitmodules)
|
|
104
|
+
File.read(gitmodules) =~ %r![submodule "#{framework_dir}/#{@component}"]!
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def managed?
|
|
108
|
+
File.directory?(File.join(framework_dir, @component)) || in_submodule?
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
def in_path?(bin)
|
|
112
|
+
`which #{bin}`
|
|
113
|
+
!$?.nil? && $?.success?
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
task :freeze => Freezer.components.keys.map { |component| "freeze:#{component}" }
|
|
119
|
+
namespace :freeze do
|
|
120
|
+
Freezer.components.each do |component, git_repository|
|
|
121
|
+
desc "Freeze #{component} from #{git_repository}"
|
|
122
|
+
task component do
|
|
123
|
+
Freezer.freeze(component, ENV["UPDATE"])
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
<html>
|
|
2
|
+
<head>
|
|
3
|
+
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
|
|
4
|
+
<title><%%= @exception_name %></title>
|
|
5
|
+
<style type="text/css" media="screen">
|
|
6
|
+
body {
|
|
7
|
+
font-family:arial;
|
|
8
|
+
font-size:11px;
|
|
9
|
+
}
|
|
10
|
+
h1 {
|
|
11
|
+
font-size:48px;
|
|
12
|
+
letter-spacing:-4px;
|
|
13
|
+
margin:0;
|
|
14
|
+
line-height:36px;
|
|
15
|
+
color:#333;
|
|
16
|
+
}
|
|
17
|
+
h1 sup {
|
|
18
|
+
font-size: 0.5em;
|
|
19
|
+
}
|
|
20
|
+
h1 sup.error_500, h1 sup.error_400 {
|
|
21
|
+
color:#990E05;
|
|
22
|
+
}
|
|
23
|
+
h1 sup.error_100, h1 sup.error_200 {
|
|
24
|
+
color:#00BF10;
|
|
25
|
+
}
|
|
26
|
+
h1 sup.error_300 {
|
|
27
|
+
/* pretty sure you cant 'see' status 300
|
|
28
|
+
errors but if you could I think they
|
|
29
|
+
would be blue */
|
|
30
|
+
color:#1B2099;
|
|
31
|
+
}
|
|
32
|
+
h2 {
|
|
33
|
+
font-size:36px;
|
|
34
|
+
letter-spacing:-3px;
|
|
35
|
+
margin:0;
|
|
36
|
+
line-height:28px;
|
|
37
|
+
color:#444;
|
|
38
|
+
}
|
|
39
|
+
a, a:visited {
|
|
40
|
+
color:#00BF10;
|
|
41
|
+
}
|
|
42
|
+
.internalError {
|
|
43
|
+
width:800px;
|
|
44
|
+
margin:50px auto;
|
|
45
|
+
}
|
|
46
|
+
.header {
|
|
47
|
+
border-bottom:10px solid #333;
|
|
48
|
+
margin-bottom:1px;
|
|
49
|
+
background-image: url("data:image/gif;base64,R0lGODlhAwADAIAAAP///8zMzCH5BAAAAAAALAAAAAADAAMAAAIEBHIJBQA7");
|
|
50
|
+
padding:20px;
|
|
51
|
+
}
|
|
52
|
+
table.trace {
|
|
53
|
+
width:100%;
|
|
54
|
+
font-family:courier, monospace;
|
|
55
|
+
letter-spacing:-1px;
|
|
56
|
+
border-collapse: collapse;
|
|
57
|
+
border-spacing:0;
|
|
58
|
+
}
|
|
59
|
+
table.trace tr td{
|
|
60
|
+
padding:0;
|
|
61
|
+
height:26px;
|
|
62
|
+
font-size:13px;
|
|
63
|
+
vertical-align:middle;
|
|
64
|
+
}
|
|
65
|
+
table.trace tr.file{
|
|
66
|
+
border-top:2px solid #fff;
|
|
67
|
+
background-color:#F3F3F3;
|
|
68
|
+
}
|
|
69
|
+
table.trace tr.source {
|
|
70
|
+
background-color:#F8F8F8;
|
|
71
|
+
display:none;
|
|
72
|
+
}
|
|
73
|
+
table.trace .open tr.source {
|
|
74
|
+
display:table-row;
|
|
75
|
+
}
|
|
76
|
+
table.trace tr.file td.expand {
|
|
77
|
+
width:23px;
|
|
78
|
+
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAXCAIAAABvSEP3AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAdVJREFUeNqMVL+TwUAYxaRIOlEhlZHGDAUzzOQ61+AqXMV1lJSU7q/QRqm8KFUcJTNn5qJkaPyoKKVz7y4mF8na5Kt29tt9+/Z97/u81+vVQ4r9frdarS6Xi7ETDIZisRjxMGPfmk4niNPpZE+xLAugbPaZ53nzvtfMBe/3+/3dbuehBrAKhZdUKkVAWa9Xsiybv0CPZDJZLr/qa5/BwgwRjYqOKIvFYjQa/aNommZh0Ww2K5UqzwfoQOPxaLPZ3FAmk0+7lplMpt1u53J5OpBOR0eZEE9wHJfP5zud93g88QhluwWbjW+5VOmKBgKBer3eaDTDYeGBQF8+x7rqIYoiPgixWJazpA6HA+MSxRArkUgMh0M409g8Ho8+9wYxxCqVSq1W26EDHGM2m4HOHQrEc38f/Yn7cLmlIRhBENzcx8cVRZnPZ/YUep2BWkjTIfA+PKVpZAXR5QxsjiqCKvGEqqp443w+0dvy17swqD0HB3S73V5PpkNg1qBqt8kwGCjmPkinM0QJbIoEa7U6UG6ToVgs4V9G2g0ESoP5Aoi7KYX5oCgf8IKbkvn9/mr1LRQKESamzgJy0g0tSZIuB3nuGqRU9Vv9C4sKkUhEkp4soxvxI8AAhWrrtXa3X8EAAAAASUVORK5CYII=);
|
|
79
|
+
background-position:top left;
|
|
80
|
+
background-repeat:no-repeat;
|
|
81
|
+
}
|
|
82
|
+
table.trace .open tr.file td.expand {
|
|
83
|
+
width:19px;
|
|
84
|
+
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAB1CAIAAAAqdO2mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXZJREFUeNrslK1ywkAUhcMOBomEOiSdqLxEBJX0NaijOsjyHGGmCGyQQYaiiiw4gktkcOmZbpsuuzQ/M5XnqJ2d3S/n3nM3rTzPLUP7/Tt0+pLcGQwG3W53OLyHzPMtjYL7q9UqSRLrD4E1Gj1orCvKYuFHUWTVkOM44/HjDcp8/lL4r6NerzeZPMm1KFw0QkDn83m5fP2lHA4fNQvRtNvtjsfDd0WzmSfb2e/fdTqdOvdh/HLJZLOn0+d2HJ+KRGzbdl23EpFlmed5cp2maRzHQq1lvQ5KMi6EUZBGfup6E1pTfd+vrGW7jbQ2C9hTt9BpqNyIWaAwAy6xg2eBz5iRC/NomiZhGN5sqmnkauo0BUGgVQoBjQ80oCACgNQdZHfTYBkF2mxCtWWAqunWpahxIDUt3QYUxIFQpJHyIWpXjinabKbbwItMHT+NyjchrP8QKaSQQgoppJBCCimkkEIKKaSQQgoppJBCCimkkEIKKaSo+hRgAEFD17X08O2NAAAAAElFTkSuQmCC);
|
|
85
|
+
background-position:top left;
|
|
86
|
+
background-repeat:no-repeat;
|
|
87
|
+
}
|
|
88
|
+
table.trace tr.source td.collapse {
|
|
89
|
+
width:19px;
|
|
90
|
+
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAB1CAIAAAAqdO2mAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAVxJREFUeNrs0zFygkAUBmBlUkgJHdABlQwVkVJKKUxBYWbkALTxMJwhltyDFkss03IF8pudIcwaDaDl/6pd2P327b7d+eHwMXs4lNkzggoVKlSoUKFChQoVKlSoUKFChQoVKlSoUKFChQqVEYqm6ft9+qiSJEkYho7jTlcw2fd9NOI4nq4gEdFwXXe1Cqco63VkWVbXRTqLhTpOwQRpF7quR1E0TgGhqvLKUFCyoQqG/rks3O6kZKW/eRFpevOCoGTXVTcMQ5EyxyDEkML1c5RzuZOICIyXqn7JBVez6282MWrx731HOv2qB8Hri2lamNk0DfpVVdV1Peodappmmua8bdvzuc7zfNprzrLMth1FnGh/X8MjCAIQv/cFz/+65PcDh7rbvYv2ZUfdj+PxsyzLgVl0hKwgTqeqKApx2LeOc7t98zyv/1FWOgvx9RPii23bmL9cetJ8Ed8CDAC6aFW8bCzFhwAAAABJRU5ErkJggg==);
|
|
91
|
+
background-position:bottom left;
|
|
92
|
+
background-repeat:no-repeat;
|
|
93
|
+
background-color:#6F706F;
|
|
94
|
+
}
|
|
95
|
+
table.trace tr td.path {
|
|
96
|
+
padding-left:10px;
|
|
97
|
+
}
|
|
98
|
+
table.trace tr td.code {
|
|
99
|
+
padding-left:35px;
|
|
100
|
+
white-space: pre;
|
|
101
|
+
line-height:9px;
|
|
102
|
+
padding-bottom:10px;
|
|
103
|
+
}
|
|
104
|
+
table.trace tr td.code em {
|
|
105
|
+
font-weight:bold;
|
|
106
|
+
color:#00BF10;
|
|
107
|
+
}
|
|
108
|
+
table.trace tr td.code a {
|
|
109
|
+
width: 20px;
|
|
110
|
+
float: left;
|
|
111
|
+
}
|
|
112
|
+
table.trace tr td.code .more {
|
|
113
|
+
color:#666;
|
|
114
|
+
}
|
|
115
|
+
table.trace tr td.line {
|
|
116
|
+
width:30px;
|
|
117
|
+
text-align:right;
|
|
118
|
+
padding-right:4px;
|
|
119
|
+
}
|
|
120
|
+
.footer {
|
|
121
|
+
margin-top:5px;
|
|
122
|
+
font-size:11px;
|
|
123
|
+
color:#444;
|
|
124
|
+
text-align:right;
|
|
125
|
+
}
|
|
126
|
+
</style>
|
|
127
|
+
</head>
|
|
128
|
+
<body>
|
|
129
|
+
<div class="internalError">
|
|
130
|
+
|
|
131
|
+
<div class="header">
|
|
132
|
+
<h1><%%= @exception_name %> <sup class="error_<%%= @exception.class::STATUS %>"><%%= @exception.class::STATUS %></sup></h1>
|
|
133
|
+
<%% if show_details = ::Merb::Config[:exception_details] -%>
|
|
134
|
+
<h2><%%= @exception.message %></h2>
|
|
135
|
+
<%% else -%>
|
|
136
|
+
<h2>Sorry about that...</h2>
|
|
137
|
+
<%% end -%>
|
|
138
|
+
<h3>Parameters</h3>
|
|
139
|
+
<ul>
|
|
140
|
+
<%% params[:original_params].each do |param, value| %>
|
|
141
|
+
<li><strong><%%= param %>:</strong> <%%= value.inspect %></li>
|
|
142
|
+
<%% end %>
|
|
143
|
+
<%%= "<li>None</li>" if params[:original_params].empty? %>
|
|
144
|
+
</ul>
|
|
145
|
+
|
|
146
|
+
<h3>Session</h3>
|
|
147
|
+
<ul>
|
|
148
|
+
<%% params[:original_session].each do |param, value| %>
|
|
149
|
+
<li><strong><%%= param %>:</strong> <%%= value.inspect %></li>
|
|
150
|
+
<%% end %>
|
|
151
|
+
<%%= "<li>None</li>" if params[:original_session].empty? %>
|
|
152
|
+
</ul>
|
|
153
|
+
|
|
154
|
+
<h3>Cookies</h3>
|
|
155
|
+
<ul>
|
|
156
|
+
<%% params[:original_cookies].each do |param, value| %>
|
|
157
|
+
<li><strong><%%= param %>:</strong> <%%= value.inspect %></li>
|
|
158
|
+
<%% end %>
|
|
159
|
+
<%%= "<li>None</li>" if params[:original_cookies].empty? %>
|
|
160
|
+
</ul>
|
|
161
|
+
</div>
|
|
162
|
+
|
|
163
|
+
<%% if show_details %>
|
|
164
|
+
<table class="trace">
|
|
165
|
+
<%% @exception.backtrace.each_with_index do |line, index| %>
|
|
166
|
+
<tbody class="close">
|
|
167
|
+
<tr class="file">
|
|
168
|
+
<td class="expand">
|
|
169
|
+
</td>
|
|
170
|
+
<td class="path">
|
|
171
|
+
<%%= (line.match(/^([^:]+)/)[1] rescue 'unknown').sub(/\/((opt|usr)\/local\/lib\/(ruby\/)?(gems\/)?(1.8\/)?(gems\/)?|.+\/app\/)/, '') %>
|
|
172
|
+
<%% unless line.match(/\.erb:/) %>
|
|
173
|
+
in "<strong><%%= line.match(/:in `(.+)'$/)[1] rescue '?' %></strong>"
|
|
174
|
+
<%% else %>
|
|
175
|
+
(<strong>ERB Template</strong>)
|
|
176
|
+
<%% end %>
|
|
177
|
+
</td>
|
|
178
|
+
<td class="line">
|
|
179
|
+
<a href="txmt://open?url=file://<%%=file = (line.match(/^([^:]+)/)[1] rescue 'unknown')%>&line=<%%= lineno = line.match(/:([0-9]+):/)[1] rescue '?' %>"><%%=lineno%></a>
|
|
180
|
+
</td>
|
|
181
|
+
</tr>
|
|
182
|
+
<tr class="source">
|
|
183
|
+
<td class="collapse">
|
|
184
|
+
</td>
|
|
185
|
+
<td class="code" colspan="2"><%% (__caller_lines__(file, lineno, 5) rescue []).each do |llineno, lcode, lcurrent| %>
|
|
186
|
+
<a href="txmt://open?url=file://<%%=file%>&line=<%%=llineno%>"><%%= llineno %></a><%%='<em>' if llineno==lineno.to_i %><%%= lcode.size > 90 ? CGI.escapeHTML(lcode[0..90])+'<span class="more">......</span>' : CGI.escapeHTML(lcode) %><%%='</em>' if llineno==lineno.to_i %>
|
|
187
|
+
<%% end %>
|
|
188
|
+
|
|
189
|
+
</td>
|
|
190
|
+
</tr>
|
|
191
|
+
</tbody>
|
|
192
|
+
<%% end %>
|
|
193
|
+
</table>
|
|
194
|
+
<script type="text/javascript" charset="utf-8">
|
|
195
|
+
// swop the open & closed classes
|
|
196
|
+
els = document.getElementsByTagName('td');
|
|
197
|
+
for(i=0; i<els.length; i++){
|
|
198
|
+
if(els[i].className=='expand' || els[i].className=='collapse'){
|
|
199
|
+
els[i].onclick = function(e){
|
|
200
|
+
tbody = this.parentNode.parentNode;
|
|
201
|
+
if(tbody.className=='open'){
|
|
202
|
+
tbody.className='closed';
|
|
203
|
+
}else{
|
|
204
|
+
tbody.className='open';
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
</script>
|
|
210
|
+
<%% end %>
|
|
211
|
+
<div class="footer">
|
|
212
|
+
lots of love, from <a href="#">merb</a>
|
|
213
|
+
</div>
|
|
214
|
+
</div>
|
|
215
|
+
</body>
|
|
216
|
+
</html>
|