tap 0.7.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (146) hide show
  1. data/MIT-LICENSE +21 -0
  2. data/README +71 -0
  3. data/Rakefile +117 -0
  4. data/bin/tap +63 -0
  5. data/lib/tap.rb +15 -0
  6. data/lib/tap/app.rb +739 -0
  7. data/lib/tap/file_task.rb +354 -0
  8. data/lib/tap/generator.rb +29 -0
  9. data/lib/tap/generator/generators/config/USAGE +0 -0
  10. data/lib/tap/generator/generators/config/config_generator.rb +23 -0
  11. data/lib/tap/generator/generators/config/templates/config.erb +2 -0
  12. data/lib/tap/generator/generators/file_task/USAGE +0 -0
  13. data/lib/tap/generator/generators/file_task/file_task_generator.rb +21 -0
  14. data/lib/tap/generator/generators/file_task/templates/task.erb +27 -0
  15. data/lib/tap/generator/generators/file_task/templates/test.erb +12 -0
  16. data/lib/tap/generator/generators/root/USAGE +0 -0
  17. data/lib/tap/generator/generators/root/root_generator.rb +36 -0
  18. data/lib/tap/generator/generators/root/templates/Rakefile +48 -0
  19. data/lib/tap/generator/generators/root/templates/app.yml +19 -0
  20. data/lib/tap/generator/generators/root/templates/config/process_tap_request.yml +4 -0
  21. data/lib/tap/generator/generators/root/templates/lib/process_tap_request.rb +26 -0
  22. data/lib/tap/generator/generators/root/templates/public/images/nav.jpg +0 -0
  23. data/lib/tap/generator/generators/root/templates/public/stylesheets/color.css +57 -0
  24. data/lib/tap/generator/generators/root/templates/public/stylesheets/layout.css +108 -0
  25. data/lib/tap/generator/generators/root/templates/public/stylesheets/normalize.css +40 -0
  26. data/lib/tap/generator/generators/root/templates/public/stylesheets/typography.css +21 -0
  27. data/lib/tap/generator/generators/root/templates/server/config/environment.rb +60 -0
  28. data/lib/tap/generator/generators/root/templates/server/lib/tasks/clear_database_prerequisites.rake +5 -0
  29. data/lib/tap/generator/generators/root/templates/server/test/test_helper.rb +53 -0
  30. data/lib/tap/generator/generators/root/templates/test/tap_test_helper.rb +3 -0
  31. data/lib/tap/generator/generators/root/templates/test/tap_test_suite.rb +4 -0
  32. data/lib/tap/generator/generators/task/USAGE +0 -0
  33. data/lib/tap/generator/generators/task/task_generator.rb +21 -0
  34. data/lib/tap/generator/generators/task/templates/task.erb +21 -0
  35. data/lib/tap/generator/generators/task/templates/test.erb +29 -0
  36. data/lib/tap/generator/generators/workflow/USAGE +0 -0
  37. data/lib/tap/generator/generators/workflow/templates/task.erb +16 -0
  38. data/lib/tap/generator/generators/workflow/templates/test.erb +7 -0
  39. data/lib/tap/generator/generators/workflow/workflow_generator.rb +21 -0
  40. data/lib/tap/generator/options.rb +26 -0
  41. data/lib/tap/generator/usage.rb +26 -0
  42. data/lib/tap/root.rb +275 -0
  43. data/lib/tap/script/console.rb +7 -0
  44. data/lib/tap/script/destroy.rb +8 -0
  45. data/lib/tap/script/generate.rb +8 -0
  46. data/lib/tap/script/run.rb +111 -0
  47. data/lib/tap/script/server.rb +12 -0
  48. data/lib/tap/support/audit.rb +415 -0
  49. data/lib/tap/support/batch_queue.rb +165 -0
  50. data/lib/tap/support/combinator.rb +114 -0
  51. data/lib/tap/support/logger.rb +91 -0
  52. data/lib/tap/support/rap.rb +38 -0
  53. data/lib/tap/support/run_error.rb +20 -0
  54. data/lib/tap/support/template.rb +81 -0
  55. data/lib/tap/support/templater.rb +155 -0
  56. data/lib/tap/support/versions.rb +63 -0
  57. data/lib/tap/task.rb +448 -0
  58. data/lib/tap/test.rb +320 -0
  59. data/lib/tap/test/env_vars.rb +16 -0
  60. data/lib/tap/test/inference_methods.rb +298 -0
  61. data/lib/tap/test/subset_methods.rb +260 -0
  62. data/lib/tap/version.rb +3 -0
  63. data/lib/tap/workflow.rb +73 -0
  64. data/test/app/config/addition_template.yml +6 -0
  65. data/test/app/config/batch.yml +2 -0
  66. data/test/app/config/empty.yml +0 -0
  67. data/test/app/config/erb.yml +1 -0
  68. data/test/app/config/template.yml +6 -0
  69. data/test/app/config/version-0.1.yml +1 -0
  70. data/test/app/config/version.yml +1 -0
  71. data/test/app/lib/app_test_task.rb +2 -0
  72. data/test/app_class_test.rb +33 -0
  73. data/test/app_test.rb +1372 -0
  74. data/test/file_task/config/batch.yml +2 -0
  75. data/test/file_task/config/configured.yml +1 -0
  76. data/test/file_task/old_file_one.txt +0 -0
  77. data/test/file_task/old_file_two.txt +0 -0
  78. data/test/file_task_test.rb +1041 -0
  79. data/test/root/alt_lib/alt_module.rb +4 -0
  80. data/test/root/lib/absolute_alt_filepath.rb +2 -0
  81. data/test/root/lib/alternative_filepath.rb +2 -0
  82. data/test/root/lib/another_module.rb +2 -0
  83. data/test/root/lib/nested/some_module.rb +4 -0
  84. data/test/root/lib/no_module_included.rb +0 -0
  85. data/test/root/lib/some/module.rb +4 -0
  86. data/test/root/lib/some_class.rb +2 -0
  87. data/test/root/lib/some_module.rb +3 -0
  88. data/test/root/load_path/load_path_module.rb +2 -0
  89. data/test/root/load_path/skip_module.rb +2 -0
  90. data/test/root/mtime/older.txt +0 -0
  91. data/test/root/unload/full_path.rb +2 -0
  92. data/test/root/unload/loaded_by_nested.rb +2 -0
  93. data/test/root/unload/nested/nested_load.rb +6 -0
  94. data/test/root/unload/nested/nested_with_ext.rb +4 -0
  95. data/test/root/unload/nested/relative_path.rb +4 -0
  96. data/test/root/unload/older.rb +2 -0
  97. data/test/root/unload/unload_base.rb +9 -0
  98. data/test/root/versions/another.yml +0 -0
  99. data/test/root/versions/file-0.1.2.yml +0 -0
  100. data/test/root/versions/file-0.1.yml +0 -0
  101. data/test/root/versions/file.yml +0 -0
  102. data/test/root_test.rb +483 -0
  103. data/test/support/audit_test.rb +449 -0
  104. data/test/support/batch_queue_test.rb +320 -0
  105. data/test/support/combinator_test.rb +249 -0
  106. data/test/support/logger_test.rb +31 -0
  107. data/test/support/template_test.rb +122 -0
  108. data/test/support/templater/erb.txt +2 -0
  109. data/test/support/templater/erb.yml +2 -0
  110. data/test/support/templater/somefile.txt +2 -0
  111. data/test/support/templater_test.rb +192 -0
  112. data/test/support/versions_test.rb +71 -0
  113. data/test/tap_test_helper.rb +4 -0
  114. data/test/tap_test_suite.rb +4 -0
  115. data/test/task/config/batch.yml +2 -0
  116. data/test/task/config/batched.yml +2 -0
  117. data/test/task/config/configured.yml +1 -0
  118. data/test/task/config/example.yml +1 -0
  119. data/test/task/config/overriding.yml +2 -0
  120. data/test/task/config/task_with_config.yml +1 -0
  121. data/test/task/config/template.yml +4 -0
  122. data/test/task_class_test.rb +118 -0
  123. data/test/task_execute_test.rb +233 -0
  124. data/test/task_test.rb +424 -0
  125. data/test/test/inference_methods/test_assert_expected/expected/file.txt +1 -0
  126. data/test/test/inference_methods/test_assert_expected/expected/folder/file.txt +1 -0
  127. data/test/test/inference_methods/test_assert_expected/input/file.txt +1 -0
  128. data/test/test/inference_methods/test_assert_expected/input/folder/file.txt +1 -0
  129. data/test/test/inference_methods/test_assert_files_exist/input/input_1.txt +0 -0
  130. data/test/test/inference_methods/test_assert_files_exist/input/input_2.txt +0 -0
  131. data/test/test/inference_methods/test_file_compare/expected/output_1.txt +3 -0
  132. data/test/test/inference_methods/test_file_compare/expected/output_2.txt +1 -0
  133. data/test/test/inference_methods/test_file_compare/input/input_1.txt +3 -0
  134. data/test/test/inference_methods/test_file_compare/input/input_2.txt +3 -0
  135. data/test/test/inference_methods/test_infer_glob/expected/file.yml +0 -0
  136. data/test/test/inference_methods/test_infer_glob/expected/file_1.txt +0 -0
  137. data/test/test/inference_methods/test_infer_glob/expected/file_2.txt +0 -0
  138. data/test/test/inference_methods/test_yml_compare/expected/output_1.yml +6 -0
  139. data/test/test/inference_methods/test_yml_compare/expected/output_2.yml +6 -0
  140. data/test/test/inference_methods/test_yml_compare/input/input_1.yml +4 -0
  141. data/test/test/inference_methods/test_yml_compare/input/input_2.yml +4 -0
  142. data/test/test/inference_methods_test.rb +311 -0
  143. data/test/test/subset_methods_test.rb +115 -0
  144. data/test/test_test.rb +233 -0
  145. data/test/workflow_test.rb +108 -0
  146. metadata +274 -0
@@ -0,0 +1,12 @@
1
+ require File.join(File.dirname(__FILE__), '<%= '../' * class_nesting_depth %>tap_test_helper.rb')
2
+ require '<%= class_path.empty? ? file_name : File.join(class_path, file_name) %>'
3
+
4
+ class <%= class_name %>Test < Test::Unit::TestCase
5
+ acts_as_tap_test
6
+
7
+ def test_<%= file_name.underscore %>
8
+ t = <%= class_name %>.new
9
+ file_task_test(t, :quiet => true)
10
+ end
11
+
12
+ end
File without changes
@@ -0,0 +1,36 @@
1
+ require 'tap/root'
2
+
3
+ module Tap::Generator::Generators
4
+ class RootGenerator < Rails::Generator::NamedBase # :nodoc:
5
+ def initialize(*args)
6
+ super(*args)
7
+ Tap::App.instance.root = File.join(Tap::App.instance[:root], class_path, file_name)
8
+ @destination_root = Tap::App.instance[:root]
9
+ end
10
+
11
+ def manifest
12
+ record do |m|
13
+ # directories
14
+ m.directory "lib"
15
+ m.directory "config"
16
+ m.directory "test"
17
+ m.directory "public"
18
+ m.directory "public/images"
19
+ m.directory "public/stylesheets"
20
+ m.directory "gemspecs"
21
+ m.directory "server/config"
22
+ m.directory "server/test"
23
+ m.directory "server/lib/tasks"
24
+
25
+ # files
26
+ template_dir = File.dirname(__FILE__) + "/templates"
27
+ Dir.glob(template_dir + "/**/*").each do |fname|
28
+ next if File.directory?(fname)
29
+
30
+ fname = Tap::Root.relative_filepath(template_dir, fname)
31
+ m.file fname, fname
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,48 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+ require 'rake/gempackagetask'
5
+
6
+ # tasks
7
+ desc 'Default: Run tests.'
8
+ task :default => :test
9
+
10
+ desc 'Run tests.'
11
+ Rake::TestTask.new(:test) do |t|
12
+ t.libs << 'lib'
13
+ t.pattern = File.join('test', ENV['subset'] || '', ENV['pattern'] || '**/*_test.rb')
14
+ t.verbose = true
15
+ end
16
+
17
+ desc 'Generate documentation.'
18
+ Rake::RDocTask.new(:rdoc) do |rdoc|
19
+ rdoc.rdoc_dir = 'rdoc'
20
+ rdoc.title = 'Local' # should be changed
21
+ rdoc.options << '--line-numbers' << '--inline-source'
22
+ rdoc.rdoc_files.include('README')
23
+ rdoc.rdoc_files.include('lib/**/*.rb')
24
+ end
25
+
26
+ #
27
+ # Gem specification
28
+ #
29
+ spec = Gem::Specification.new do |s|
30
+ #s.name = "gemname"
31
+ s.version = "0.0.1"
32
+ #s.author = "Your Name Here"
33
+ #s.email = "your.email@pubfactory.edu"
34
+ #s.homepage = "http://rubyforge.org/projects/gemname/"
35
+ s.platform = Gem::Platform::RUBY
36
+ #s.summary = "Description"
37
+ s.files = Dir.glob("{test,lib,docs}/**/*")
38
+ s.require_path = "lib"
39
+ s.test_file = "test/tap_test_suite.rb" # should be changed
40
+
41
+ s.has_rdoc = true
42
+ s.extra_rdoc_files = ["README"]
43
+ s.add_dependency("tap", ">= 0.1.0")
44
+ end
45
+
46
+ Rake::GemPackageTask.new(spec) do |pkg|
47
+ pkg.need_tar = true
48
+ end
@@ -0,0 +1,19 @@
1
+ # Put your app configurations here:
2
+
3
+ #root: #
4
+ #directories: # uncomment to specify aliases for directories
5
+ #lib:
6
+ #log:
7
+ #...
8
+
9
+ #options: # uncomment to specify options
10
+ #trace: true # full error output, increased logging
11
+ #quiet: true # supresses logging
12
+ #... # you can add your own options
13
+
14
+ logger:
15
+ #device: # STDOUT by default
16
+ #level: 1 # [DEBUG, INFO, WARN, ERROR, FATAL, ANY]
17
+ datetime_format: %H:%M:%S # Hour:Minute:Second
18
+
19
+ loadable: 'lib'
@@ -0,0 +1,4 @@
1
+ # Put your task configurations here:
2
+
3
+ # Remote URL should point to the host and port of the remote server
4
+ remote_url: http://localhost:3000
@@ -0,0 +1,26 @@
1
+ require 'net/http'
2
+ require 'cgi'
3
+ require 'yaml'
4
+
5
+ class ProcessTapRequest < Tap::Task
6
+ def process(input)
7
+ id = input['id']
8
+ key = input['key']
9
+
10
+ url = URI.parse(config[:remote_url])
11
+ res = Net::HTTP.start(url.host, url.port) do |http|
12
+ http.get("/tap/queue/#{id}?key=#{key}")
13
+ end
14
+
15
+ unless res.kind_of?(Net::HTTPSuccess)
16
+ puts res.body
17
+ return
18
+ end
19
+
20
+ queue = YAML.load(res.body)
21
+ task = queue['task']
22
+ input = queue['input']
23
+
24
+ Tap::App.run(task, *input)
25
+ end
26
+ end
@@ -0,0 +1,57 @@
1
+ /* Color scheme
2
+
3
+ off_white background: #f1f8ee;
4
+ light background: #DCE6CF;
5
+ dark background: #648F7D;
6
+
7
+ content text: black
8
+ red text: #8a181d;
9
+ identifiers: #708059;
10
+
11
+ muted:
12
+ links _ color: #805976;
13
+ hover _ color: #CC0099;
14
+
15
+ bold:
16
+ links _ color: #0000FF;
17
+ hover _ color: #800080;
18
+
19
+ light contrast (notifications and links): #708059;
20
+ strong contrast (notifications and hover): #CC0099;
21
+
22
+ */
23
+
24
+ body {
25
+ color: black;
26
+ background-color: #DCE6CF;
27
+ }
28
+
29
+ a { color: #8a181d; }
30
+ a:hover{ color: #800080;}
31
+
32
+ a.muted { color: #805976; }
33
+ a.muted:hover{ color: #CC0099; }
34
+
35
+ .highlight {color: #FF0000;}
36
+
37
+ #flash { color: #99BF60; }
38
+
39
+ /* Branding */
40
+ div#brandingLogo {
41
+ color: #f1f8ee;
42
+ }
43
+
44
+ /* Navigation */
45
+ div#navMain ul li {
46
+ background-color: #B4CC8F;
47
+ border-top-color: #805976;
48
+ border-right-color: #805976;
49
+ }
50
+ div#navSupp ul li {
51
+ background-color: #B4CC8F;
52
+ border-top-color: #805976;
53
+ border-left-color: #805976;
54
+ }
55
+ div#navControl a {
56
+ color: #f1f8ee;
57
+ }
@@ -0,0 +1,108 @@
1
+ @import url(normalize.css);
2
+ @import url(color.css);
3
+ @import url(typography.css);
4
+
5
+ body {
6
+ margin: 0;
7
+ padding: 0;
8
+ width: 100%;
9
+ }
10
+
11
+ div#branding, div#nav, div#content {
12
+ position: relative;
13
+ min-width: 50em;
14
+ width: 100%;
15
+ }
16
+
17
+ /* Branding */
18
+ div#branding {
19
+ position: absolute;
20
+ z-index: 10; /* sets the branding above the nav background */
21
+ }
22
+ div#brandingLogo {
23
+ position: absolute;
24
+ top: .5em;
25
+ left: .5em;
26
+ }
27
+
28
+ /* Navigation */
29
+ div#nav {
30
+ top: 0;
31
+ left: 0;
32
+ height: 6em;
33
+ background-image: url(../images/nav.jpg);
34
+ background-repeat: no-repeat;
35
+ background-position: center top;
36
+ }
37
+
38
+ /* Control Navigation */
39
+ div#navControl {
40
+ position: absolute;
41
+ top: 0;
42
+ right: 0;
43
+ }
44
+
45
+ /* Main and Supp Navigation */
46
+ div#navMain, div#navSupp {
47
+ position: absolute;
48
+ bottom: 0;
49
+ }
50
+ div#navMain {
51
+ left:0;
52
+ }
53
+ div#navSupp {
54
+ right: 0;
55
+ }
56
+
57
+ div#nav ul li {
58
+ float: left;
59
+ padding-left: .5em;
60
+ padding-right: .5em;
61
+ }
62
+ div#navMain ul li {
63
+ border-top-style: solid;
64
+ border-top-width: 1px;
65
+ border-right-style: solid;
66
+ border-right-width: 1px;
67
+ }
68
+ div#navSupp ul li {
69
+ border-top-style: solid;
70
+ border-top-width: 1px;
71
+ border-left-style: solid;
72
+ border-left-width: 1px;
73
+ }
74
+
75
+ /* Misc Navigation - these are intended for contentSupp */
76
+ .navMisc {
77
+ padding-top: 1em;
78
+ padding-left: 3em;
79
+ padding-right: 1em;
80
+ }
81
+ .navMisc ul {
82
+ padding-left: 1em;
83
+ }
84
+
85
+ /* Content */
86
+ div#contentMain {
87
+ left: 0;
88
+ width: 75%;
89
+ }
90
+ div#contentSupp {
91
+ left: 75%;
92
+ width: 25%;
93
+ }
94
+
95
+ /* Inman clearing */
96
+ .pc,.sc {position:absolute; top:0;}
97
+ .clear_children,.cc_tallest { position: relative; } /**/* html .clear_children { display: inline;}/* PREVENTS MISSING CHILDREN IN IE WIN 5.0 */
98
+ .cc_tallest:after { content: ''; } /* PREVENTS A REDRAW BUG IN SAFARI */
99
+
100
+ /* Site Infor */
101
+ div#siteInfo {
102
+ text-align:center;
103
+ width: 75%;
104
+ min-width: 37.5em;
105
+ }
106
+ div#siteInfo p {
107
+ display: inline;
108
+ }
@@ -0,0 +1,40 @@
1
+ /* normalize.css */
2
+ /* Based the normalizations presented in Transcending CSS - Andy Clarke 2007
3
+ * and undohtml.css file by Tantek Celik 2004
4
+ * http://tantek.com/log/2004/undohtml.css */
5
+
6
+ /* Normalize margin, padding */
7
+ body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,fieldset,input,p,blockquote,th,td
8
+ { margin: 0; padding: 0 }
9
+
10
+ /* Normalize font-size for headers */
11
+ h1,h2,h3,h4,h5,h6
12
+ { font-size: 100% }
13
+
14
+ /* Removes list-style from lists */
15
+ ul,ol
16
+ { list-style: none }
17
+
18
+ /* Normalize font-style and font-weight to normal */
19
+ address,caption,cite,code,dfn,em,strong,th,var
20
+ { font-style: normal; font-weight: normal;}
21
+
22
+ /* Normalizes table style*/
23
+ table
24
+ { border-collapse: collapse; border-spacing: 0;}
25
+
26
+ /* Remove border from fieldset and img */
27
+ fieldset,img
28
+ { border: 0;}
29
+
30
+ /* Left-align text in caption and th */
31
+ caption,th
32
+ { text-align: left;}
33
+
34
+ /* Remove quotation marks from q */
35
+ q:before,q:after
36
+ { content:'';}
37
+
38
+ /* link underlines tend to make hypertext less readable,
39
+ because underlines obscure the shapes of the lower halves of words */
40
+ a:link,a:visited { text-decoration:none }
@@ -0,0 +1,21 @@
1
+
2
+ body {
3
+ font-family: trebuchet ms, verdana, arial, tahoma;
4
+ font-size: 100%; /* can't remember why, but for an IE bug this was included */
5
+ }
6
+
7
+ .emphasize {font-weight: bold;}
8
+
9
+ /* Branding */
10
+ div#brandingLogo {
11
+ font-size: 2em;
12
+ }
13
+
14
+
15
+ /* Navigation */
16
+ div#navMain, div#navSupp {
17
+ font-weight: bold;
18
+ }
19
+ div#navControl {
20
+ font-size: 0.8em;
21
+ }
@@ -0,0 +1,60 @@
1
+ # Be sure to restart your web server when you modify this file.
2
+
3
+ # Uncomment below to force Rails into production mode when
4
+ # you don't control web/app server and can't set it the proper way
5
+ # ENV['RAILS_ENV'] ||= 'production'
6
+
7
+ # Specifies gem version of Rails to use when vendor/rails is not present
8
+ RAILS_GEM_VERSION = '1.2.3' unless defined? RAILS_GEM_VERSION
9
+
10
+ # Bootstrap the Rails environment, frameworks, and default configuration
11
+ require File.join(File.dirname(__FILE__), 'boot')
12
+
13
+ Rails::Initializer.run do |config|
14
+ # Settings in config/environments/* take precedence over those specified here
15
+
16
+ # Skip frameworks you're not going to use (only works if using vendor/rails)
17
+ config.frameworks -= [ :action_web_service, :action_mailer ]
18
+
19
+ # Only load the plugins named here, by default all plugins in vendor/plugins are loaded
20
+ # config.plugins = %W( exception_notification ssl_requirement )
21
+
22
+ # Add additional load paths for your own custom dirs
23
+ # config.load_paths += %W( #{RAILS_ROOT}/extras )
24
+
25
+ # Force all environments to use the same logger level
26
+ # (by default production uses :info, the others :debug)
27
+ # config.log_level = :debug
28
+
29
+ # Use the database for sessions instead of the file system
30
+ # (create the session table with 'rake db:sessions:create')
31
+ # config.action_controller.session_store = :active_record_store
32
+
33
+ # Use SQL instead of Active Record's schema dumper when creating the test database.
34
+ # This is necessary if your schema can't be completely dumped by the schema dumper,
35
+ # like if you have constraints or database-specific column types
36
+ # config.active_record.schema_format = :sql
37
+
38
+ # Activate observers that should always be running
39
+ # config.active_record.observers = :cacher, :garbage_collector
40
+
41
+ # Make Active Record use UTC-base instead of local time
42
+ # config.active_record.default_timezone = :utc
43
+
44
+ # See Rails::Configuration for more options
45
+ end
46
+
47
+ # Add new inflection rules using the following format
48
+ # (all these examples are active by default):
49
+ # Inflector.inflections do |inflect|
50
+ # inflect.plural /^(ox)$/i, '\1en'
51
+ # inflect.singular /^(ox)en/i, '\1'
52
+ # inflect.irregular 'person', 'people'
53
+ # inflect.uncountable %w( fish sheep )
54
+ # end
55
+
56
+ # Add new mime types for use in respond_to blocks:
57
+ # Mime::Type.register "text/richtext", :rtf
58
+ # Mime::Type.register "application/x-mobile", :mobile
59
+
60
+ # Include your application configuration below