test_sinatra_app 0.0.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/.gemtest ADDED
File without changes
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ *.swp
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in test_sinatra_app.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,45 @@
1
+ # Test Sinatra App
2
+ The purpose of this repo is to have, what I would consider, a standard standalone sinatra application that someone might want to package.
3
+
4
+ The goal is to have it work in the following configurations:
5
+
6
+ * With and without bundler
7
+ * With and without rvm
8
+ * MRI installable gem
9
+ * JRuby installable gem
10
+ * Standalone application via bin script
11
+ * rackable application via config.ru
12
+ * Warble-packaged deployable warfile (both jetty and tomcat)
13
+ * Warble standalone winstone warfile
14
+ * SSL works with JRuby
15
+
16
+ Additionally, it needs to be flexible in accepting a single configuration option: `sky_color`.
17
+
18
+ ## So what works?
19
+
20
+ * MRI and Jruby specific gem packages
21
+ * Standalone bin execution with and without the custom option (MRI and Jruby)
22
+ * Rackup with and without custom option (in config.ru) in MRI and Jruby (both rvm and downloaded)
23
+
24
+ ## What's not working?
25
+ Warbler. I'm just not having any luck no matter what options I try. I've attempted to make the war:
26
+
27
+ * With/without gemjar
28
+ * With/without executable
29
+ * With/without using bundler in warble.rb
30
+ * With/without requiring `rubygems` in the config.ru
31
+
32
+ I've seen every error under the sun in attempting to follow this same application style across three different codebases now:
33
+
34
+ * Winstone goes into infinite redirect
35
+ * LoadErrors on random gems
36
+ * Jetty 6 works but Jetty 7 doesn't. Or Tomcat works but no Jetty's work
37
+ * jruby-openssl/bouncy castle errors
38
+
39
+ # How to help
40
+ Fork it and fix it. Use it as a test case. Let me know if I'm just expecting to be able to do too much from a single codebase. Show me where I'm screwing up.
41
+
42
+ # Why?
43
+ I work in a cross-vm world. At my day job, we're primarily a java shop. I use Ruby (and especially sinatra) for various glue applications and it's much easier to be able to package and deploy those to a container. The developers need to have those applications available locally for testing, so a winstone self-executing war is a godsend (when it works).
44
+
45
+ In my personal projects (like Noah), I want to reach the biggest possible audience. I want to make it as easy as possible for someone to try out the application. That means supporting all of the use cases above.
data/Rakefile ADDED
@@ -0,0 +1,10 @@
1
+ require 'bundler'
2
+ require 'rspec/core'
3
+ require 'rspec/core/rake_task'
4
+
5
+ Bundler::GemHelper.install_tasks
6
+ RSpec::Core::RakeTask.new(:spec) do |spec|
7
+ spec.pattern = FileList['spec/**/*_spec.rb']
8
+ end
9
+
10
+ task :default => [:spec]
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env ruby
2
+ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
3
+ require 'rubygems'
4
+ require 'test_sinatra_app'
5
+ require 'vegas'
6
+
7
+ Vegas::Runner.new(TestSinatraApp::Service, 'test_sinatra_app') do |runner, opts, app|
8
+ opts.on("-m", "--sky-color color", "value for sky color") {|sky| app.set :sky_color, sky.to_sym}
9
+ end
data/config/warble.rb ADDED
@@ -0,0 +1,136 @@
1
+ # Disable automatic framework detection by uncommenting/setting to false
2
+ # Warbler.framework_detection = false
3
+
4
+ # Warbler web application assembly configuration file
5
+ Warbler::Config.new do |config|
6
+ # Features: additional options controlling how the jar is built.
7
+ # Currently the following features are supported:
8
+ # - gemjar: package the gem repository in a jar file in WEB-INF/lib
9
+ # config.features = %w(gemjar)
10
+
11
+ # Application directories to be included in the webapp.
12
+ config.dirs = %w(config lib views)
13
+
14
+ # Additional files/directories to include, above those in config.dirs
15
+ config.includes = FileList["config.ru"]
16
+
17
+ # Additional files/directories to exclude
18
+ # config.excludes = FileList["lib/tasks/*"]
19
+
20
+ # Additional Java .jar files to include. Note that if .jar files are placed
21
+ # in lib (and not otherwise excluded) then they need not be mentioned here.
22
+ # JRuby and JRuby-Rack are pre-loaded in this list. Be sure to include your
23
+ # own versions if you directly set the value
24
+ # config.java_libs += FileList["lib/java/*.jar"]
25
+
26
+ # Loose Java classes and miscellaneous files to be placed in WEB-INF/classes.
27
+ # config.java_classes = FileList["target/classes/**.*"]
28
+
29
+ # One or more pathmaps defining how the java classes should be copied into
30
+ # WEB-INF/classes. The example pathmap below accompanies the java_classes
31
+ # configuration above. See http://rake.rubyforge.org/classes/String.html#M000017
32
+ # for details of how to specify a pathmap.
33
+ # config.pathmaps.java_classes << "%{target/classes/,}p"
34
+
35
+ # Path to the pre-bundled gem directory inside the war file. Default
36
+ # is 'WEB-INF/gems'. Specify path if gems are already bundled
37
+ # before running Warbler. This also sets 'gem.path' inside web.xml.
38
+ # config.gem_path = "WEB-INF/vendor/bundler_gems"
39
+
40
+ # Bundler support is built-in. If Warbler finds a Gemfile in the
41
+ # project directory, it will be used to collect the gems to bundle
42
+ # in your application. If you wish to explicitly disable this
43
+ # functionality, uncomment here.
44
+ config.bundler = false
45
+
46
+ # An array of Bundler groups to avoid including in the war file.
47
+ # Defaults to ["development", "test"].
48
+ # config.bundle_without = []
49
+
50
+ # Files for WEB-INF directory (next to web.xml). This contains
51
+ # web.xml by default. If there is an .erb-File it will be processed
52
+ # with webxml-config. You may want to exclude this file via
53
+ # config.excludes.
54
+ # config.webinf_files += FileList["jboss-web.xml"]
55
+
56
+ # Other gems to be included. You need to tell Warbler which gems
57
+ # your application needs so that they can be packaged in the war
58
+ # file.
59
+ # The Rails gems are included by default unless the vendor/rails
60
+ # directory is present.
61
+ config.gems += ["jruby-openssl", "test_sinatra_app", "sinatra"]
62
+ # config.gems += ["activerecord-jdbcmysql-adapter", "jruby-openssl"]
63
+ # config.gems << "tzinfo"
64
+
65
+ # Uncomment this if you don't want to package rails gem.
66
+ # config.gems -= ["rails"]
67
+
68
+ # The most recent versions of gems are used.
69
+ # You can specify versions of gems by using a hash assignment:
70
+ # config.gems["rails"] = "2.0.2"
71
+
72
+ # You can also use regexps or Gem::Dependency objects for flexibility or
73
+ # fine-grained control.
74
+ # config.gems << /^merb-/
75
+ # config.gems << Gem::Dependency.new("merb-core", "= 0.9.3")
76
+
77
+ # Include gem dependencies not mentioned specifically. Default is
78
+ # true, uncomment to turn off.
79
+ # config.gem_dependencies = false
80
+
81
+ # Array of regular expressions matching relative paths in gems to be
82
+ # excluded from the war. Defaults to empty, but you can set it like
83
+ # below, which excludes test files.
84
+ # config.gem_excludes = [/^(test|spec)\//]
85
+
86
+ # Files to be included in the root of the webapp. Note that files in public
87
+ # will have the leading 'public/' part of the path stripped during staging.
88
+ # config.public_html = FileList["public/**/*", "doc/**/*"]
89
+
90
+ # Pathmaps for controlling how public HTML files are copied into the .war
91
+ # config.pathmaps.public_html = ["%{public/,}p"]
92
+
93
+ # Pathmaps for controlling how application files are copied into the .war
94
+ # config.pathmaps.application = ["WEB-INF/%p"]
95
+
96
+ # Name of the war file (without the .war) -- defaults to the basename
97
+ # of RAILS_ROOT
98
+ # config.war_name = "mywar"
99
+
100
+ # Name of the MANIFEST.MF template for the war file. Defaults to a simple
101
+ # MANIFEST.MF that contains the version of Warbler used to create the war file.
102
+ # config.manifest_file = "config/MANIFEST.MF"
103
+
104
+ # When using the 'compiled' feature and specified, only these Ruby
105
+ # files will be compiled. Default is to compile all \.rb files in
106
+ # the application.
107
+ # config.compiled_ruby_files = FileList['app/**/*.rb']
108
+
109
+ # Value of RAILS_ENV for the webapp -- default as shown below
110
+ # config.webxml.rails.env = ENV['RAILS_ENV'] || 'production'
111
+
112
+ # Application booter to use, one of :rack, :rails, or :merb (autodetected by default)
113
+ config.webxml.booter = :rack
114
+
115
+ # When using the :rack booter, "Rackup" script to use.
116
+ # - For 'rackup.path', the value points to the location of the rackup
117
+ # script in the web archive file. You need to make sure this file
118
+ # gets included in the war, possibly by adding it to config.includes
119
+ # or config.webinf_files above.
120
+ # - For 'rackup', the rackup script you provide as an inline string
121
+ # is simply embedded in web.xml.
122
+ # The script is evaluated in a Rack::Builder to load the application.
123
+ # Examples:
124
+ # config.webxml.rackup.path = 'WEB-INF/hello.ru'
125
+ # config.webxml.rackup = %{require './lib/demo'; run Rack::Adapter::Camping.new(Demo)}
126
+ # config.webxml.rackup = require 'cgi' && CGI::escapeHTML(File.read("config.ru"))
127
+
128
+ # Control the pool of Rails runtimes. Leaving unspecified means
129
+ # the pool will grow as needed to service requests. It is recommended
130
+ # that you fix these values when running a production server!
131
+ # config.webxml.jruby.min.runtimes = 2
132
+ # config.webxml.jruby.max.runtimes = 4
133
+
134
+ # JNDI data source name
135
+ # config.webxml.jndi = 'jdbc/rails'
136
+ end
data/config.ru ADDED
@@ -0,0 +1,5 @@
1
+ require 'rubygems'
2
+ require 'test_sinatra_app'
3
+
4
+ TestSinatraApp::Service.set :sky_color, :yellow
5
+ run TestSinatraApp::Service
@@ -0,0 +1,52 @@
1
+ require 'sinatra/base'
2
+ require 'openssl'
3
+ require 'net/https'
4
+ require 'uri'
5
+
6
+ module TestSinatraApp
7
+ class Service < Sinatra::Base
8
+
9
+ configure do
10
+ set :app_file, __FILE__
11
+ set :views, File.expand_path(File.join(File.dirname(__FILE__), "..","..","views"))
12
+ set :server, %w[thin mongrel webrick]
13
+ set :logging, true
14
+ set :raise_errors, false
15
+ set :show_exceptions, true
16
+ set :run, false
17
+ set :sky_color, ENV['SKY_COLOR'] || :blue
18
+ end
19
+
20
+ before do
21
+ content_type "text/plain"
22
+ end
23
+
24
+ get "/" do
25
+ "#{settings.sky_color}"
26
+ end
27
+
28
+ get "/ssltest/?" do
29
+ uri = URI.parse("https://gist.github.com/raw/833757/d21b2b095c459e62518f10eefa4654b589bfae80/test-gist.txt")
30
+ http = Net::HTTP.new(uri.host, uri.port)
31
+ http.use_ssl = true
32
+ http.verify_mode = OpenSSL::SSL::VERIFY_PEER
33
+ request = Net::HTTP::Get.new(uri.request_uri)
34
+
35
+ response = http.request(request)
36
+ "#{response.body}"
37
+ end
38
+
39
+ get "/pemtest/?" do
40
+ cert = OpenSSL::X509::Certificate.new(TestSinatraApp::PEMFILE)
41
+ out=<<-EOL
42
+ Issuer: #{cert.issuer.to_s}
43
+ Version: #{cert.version.to_s}
44
+ Not Before: #{cert.not_before.to_s}
45
+ Not After: #{cert.not_after.to_s}
46
+ Subject: #{cert.subject.to_s}
47
+ Algorithm: #{cert.signature_algorithm}
48
+ EOL
49
+ "#{out}"
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,3 @@
1
+ module TestSinatraApp
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,29 @@
1
+ require File.join(File.dirname(__FILE__), 'test_sinatra_app','version')
2
+ require File.join(File.dirname(__FILE__), 'test_sinatra_app','app')
3
+ module TestSinatraApp
4
+ PEMFILE=<<EOC
5
+ -----BEGIN CERTIFICATE-----
6
+ MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
7
+ HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
8
+ IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
9
+ aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1
10
+ MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
11
+ SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
12
+ IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw
13
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U
14
+ 0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI
15
+ TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf
16
+ RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF
17
+ zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh
18
+ BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA
19
+ AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY
20
+ PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/
21
+ BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn
22
+ 9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT
23
+ Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF
24
+ Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX
25
+ n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW
26
+ H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S
27
+ -----END CERTIFICATE-----
28
+ EOC
29
+ end
data/spec/rack_spec.rb ADDED
@@ -0,0 +1,31 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ describe "Requesting" do
4
+ describe "/" do
5
+ it "should display 'blue'" do
6
+ get "/"
7
+ last_response.should be_ok
8
+ r = last_response.body
9
+ r.should == "blue"
10
+ end
11
+ end
12
+
13
+ describe "/ssltest" do
14
+ it "should work" do
15
+ get "/ssltest"
16
+ last_response.should be_ok
17
+ r = last_response.body
18
+ r.should == "If you can read this, SSL works!"
19
+ end
20
+ end
21
+
22
+ describe "/pemtest" do
23
+ it "should work" do
24
+ get "/pemtest"
25
+ last_response.should be_ok
26
+ r = last_response.body
27
+ r.should =~ /sha1WithRSAEncryption/
28
+ end
29
+ end
30
+
31
+ end
@@ -0,0 +1,15 @@
1
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'test_sinatra_app')
2
+ require File.join(File.dirname(__FILE__), '..', 'lib', 'test_sinatra_app', 'app')
3
+
4
+ require 'rspec'
5
+ require 'rack/test'
6
+
7
+ RSpec.configure do |config|
8
+ config.color_enabled = true
9
+ config.formatter = "documentation"
10
+ config.include Rack::Test::Methods
11
+ end
12
+
13
+ def app
14
+ TestSinatraApp::Service
15
+ end
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "test_sinatra_app/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "test_sinatra_app"
7
+ s.version = TestSinatraApp::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["John E. Vincent"]
10
+ s.email = ["lusis.org+github.com@gmail.com"]
11
+ s.homepage = "https://github.com/lusis/test_sinatra_app"
12
+ s.summary = %q{Test Sinatra App}
13
+ s.description = %q{A Sinatra test application for validating various combinations of packaging and vm platforms}
14
+
15
+ s.rubyforge_project = "test_sinatra_app"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+
22
+ s.add_dependency("sinatra")
23
+ s.add_dependency("json")
24
+ s.add_dependency("vegas")
25
+
26
+ if RUBY_PLATFORM == "java"
27
+ s.add_dependency("jruby-openssl")
28
+ s.add_development_dependency("warbler")
29
+ else
30
+ s.add_dependency("thin")
31
+ end
32
+ s.add_development_dependency("rack-test")
33
+ s.add_development_dependency("rspec")
34
+ end
data/views/index.erb ADDED
File without changes
metadata ADDED
@@ -0,0 +1,165 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: test_sinatra_app
3
+ version: !ruby/object:Gem::Version
4
+ hash: 27
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 2
10
+ version: 0.0.2
11
+ platform: ruby
12
+ authors:
13
+ - John E. Vincent
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2011-02-18 00:00:00 -05:00
19
+ default_executable:
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: sinatra
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
32
+ version: "0"
33
+ type: :runtime
34
+ version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: json
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :runtime
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: vegas
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :runtime
62
+ version_requirements: *id003
63
+ - !ruby/object:Gem::Dependency
64
+ name: thin
65
+ prerelease: false
66
+ requirement: &id004 !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ hash: 3
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ type: :runtime
76
+ version_requirements: *id004
77
+ - !ruby/object:Gem::Dependency
78
+ name: rack-test
79
+ prerelease: false
80
+ requirement: &id005 !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ hash: 3
86
+ segments:
87
+ - 0
88
+ version: "0"
89
+ type: :development
90
+ version_requirements: *id005
91
+ - !ruby/object:Gem::Dependency
92
+ name: rspec
93
+ prerelease: false
94
+ requirement: &id006 !ruby/object:Gem::Requirement
95
+ none: false
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ hash: 3
100
+ segments:
101
+ - 0
102
+ version: "0"
103
+ type: :development
104
+ version_requirements: *id006
105
+ description: A Sinatra test application for validating various combinations of packaging and vm platforms
106
+ email:
107
+ - lusis.org+github.com@gmail.com
108
+ executables:
109
+ - test_sinatra_app
110
+ extensions: []
111
+
112
+ extra_rdoc_files: []
113
+
114
+ files:
115
+ - .gemtest
116
+ - .gitignore
117
+ - Gemfile
118
+ - README.md
119
+ - Rakefile
120
+ - bin/test_sinatra_app
121
+ - config.ru
122
+ - config/warble.rb
123
+ - lib/test_sinatra_app.rb
124
+ - lib/test_sinatra_app/app.rb
125
+ - lib/test_sinatra_app/version.rb
126
+ - spec/rack_spec.rb
127
+ - spec/spec_helper.rb
128
+ - test_sinatra_app.gemspec
129
+ - views/index.erb
130
+ has_rdoc: true
131
+ homepage: https://github.com/lusis/test_sinatra_app
132
+ licenses: []
133
+
134
+ post_install_message:
135
+ rdoc_options: []
136
+
137
+ require_paths:
138
+ - lib
139
+ required_ruby_version: !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ hash: 3
145
+ segments:
146
+ - 0
147
+ version: "0"
148
+ required_rubygems_version: !ruby/object:Gem::Requirement
149
+ none: false
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ hash: 3
154
+ segments:
155
+ - 0
156
+ version: "0"
157
+ requirements: []
158
+
159
+ rubyforge_project: test_sinatra_app
160
+ rubygems_version: 1.4.1
161
+ signing_key:
162
+ specification_version: 3
163
+ summary: Test Sinatra App
164
+ test_files: []
165
+