Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Add littleapp example of embedding Trinidad

  • Loading branch information...
commit 4350104843ecf4a7519634e718e8e36d5a77987d 1 parent 5f5d64f
@nicksieger authored
View
5 .gitignore
@@ -1 +1,6 @@
pkg
+/littleapp/littleapp.jar
+/rails-3.0.1/rails-3.0.1.jar
+/ringpiano/ringpiano.jar
+/ringpiano/warbler-1.3.0.beta1.jar
+/littleapp/app/tmp/restart.txt
View
5 README.md
@@ -49,3 +49,8 @@ actually work on the Rails app...
This is just a simple Ruby script demonstrating the `Warbler::Jar` API
for creating archives from Ruby. Run with `jruby jar.rb` after
installing Warbler.
+
+### Littleapp
+
+This is another Warbler jar example that creates a simple rack
+application and serves it with Trinidad as an executable ruby jar.
View
3  littleapp/Gemfile
@@ -0,0 +1,3 @@
+source "http://rubygems.org"
+gem "rack"
+gem "trinidad"
View
16 littleapp/Gemfile.lock
@@ -0,0 +1,16 @@
+GEM
+ remote: http://rubygems.org/
+ specs:
+ jruby-rack (1.0.7)
+ rack (1.2.2)
+ trinidad (1.1.0)
+ jruby-rack (>= 1.0.6)
+ trinidad_jars (>= 1.0.0)
+ trinidad_jars (1.0.1)
+
+PLATFORMS
+ java
+
+DEPENDENCIES
+ rack
+ trinidad
View
1  littleapp/app/config.ru
@@ -0,0 +1 @@
+run lambda {|env| [200, {"Content-Type" => "text/plain"}, ["Hello World!"]] }
View
46 littleapp/bin/littleapp
@@ -0,0 +1,46 @@
+#!/usr/bin/env ruby
+
+require 'rubygems'
+require 'bundler/setup'
+require 'littleapp'
+
+if __FILE__ =~ /(.*\.jar)\!/
+ require 'jruby'
+ require 'fileutils'
+ # strip off file: and !/.* parts of jar paths
+ jar_file_name = __FILE__.sub(/file:([^!]+)!.*/, '\1')
+ # Warbler already extracts JRuby jars to a temp dir, if we extract
+ # our files there, they'll be cleaned up for us
+ extract_root = File.dirname(JRuby.runtime.instance_config.jruby_home.sub(/file:([^!]+)!.*/, '\1'))
+
+ puts "Extracting app from #{jar_file_name} to #{extract_root}/app"
+ appdir = File.join(extract_root, "app")
+ FileUtils.mkdir_p(appdir)
+
+ jar_file = java.util.jar.JarFile.new(jar_file_name)
+ jar_file.entries.each do |entry|
+ if entry.name =~ /^littleapp\/app/
+ entry_name = entry.name.sub('littleapp/app', '')
+ if entry.directory?
+ FileUtils.mkdir_p File.join(appdir, entry_name)
+ else
+ begin
+ entryio = jar_file.get_input_stream(entry).to_io
+ entry_path = File.join(appdir, entry_name)
+ FileUtils.mkdir_p File.dirname(entry_path)
+ File.open(entry_path, "w") {|f| f << entryio.read }
+ ensure
+ entryio.close rescue nil
+ end
+ end
+ end
+ end
+
+else
+ appdir = File.expand_path('../../app', __FILE__)
+end
+
+ARGV.clear
+# Put additional trinidad options here
+ARGV.unshift *['--dir', appdir, '--rackup' ]
+load Gem.bin_path('trinidad', 'trinidad')
View
146 littleapp/config/warble.rb
@@ -0,0 +1,146 @@
+# Disable Rake-environment-task framework detection by uncommenting/setting to false
+# Warbler.framework_detection = false
+
+class Warbler::Traits::Rack
+ # Override Rack autodetect
+ def self.detect?
+ false
+ end
+end
+
+# Warbler web application assembly configuration file
+Warbler::Config.new do |config|
+ # Features: additional options controlling how the jar is built.
+ # Currently the following features are supported:
+ # - gemjar: package the gem repository in a jar file in WEB-INF/lib
+ # - executable: embed a web server and make the war executable
+ # - compiled: compile .rb files to .class files
+ # config.features = %w(gemjar)
+
+ # Application directories to be included in the webapp.
+ config.dirs = %w(bin app lib)
+
+ # Additional files/directories to include, above those in config.dirs
+ # config.includes = FileList["db"]
+
+ # Additional files/directories to exclude
+ config.excludes = FileList["app/{log,tmp,work}"]
+
+ # Additional Java .jar files to include. Note that if .jar files are placed
+ # in lib (and not otherwise excluded) then they need not be mentioned here.
+ # JRuby and JRuby-Rack are pre-loaded in this list. Be sure to include your
+ # own versions if you directly set the value
+ # config.java_libs += FileList["lib/java/*.jar"]
+
+ # Loose Java classes and miscellaneous files to be included.
+ # config.java_classes = FileList["target/classes/**.*"]
+
+ # One or more pathmaps defining how the java classes should be copied into
+ # the archive. The example pathmap below accompanies the java_classes
+ # configuration above. See http://rake.rubyforge.org/classes/String.html#M000017
+ # for details of how to specify a pathmap.
+ # config.pathmaps.java_classes << "%{target/classes/,}p"
+
+ # Bundler support is built-in. If Warbler finds a Gemfile in the
+ # project directory, it will be used to collect the gems to bundle
+ # in your application. If you wish to explicitly disable this
+ # functionality, uncomment here.
+ # config.bundler = false
+
+ # An array of Bundler groups to avoid including in the war file.
+ # Defaults to ["development", "test"].
+ # config.bundle_without = []
+
+ # Other gems to be included. If you don't use Bundler or a gemspec
+ # file, you need to tell Warbler which gems your application needs
+ # so that they can be packaged in the archive.
+ # For Rails applications, the Rails gems are included by default
+ # unless the vendor/rails directory is present.
+ # config.gems += ["activerecord-jdbcmysql-adapter", "jruby-openssl"]
+ # config.gems << "tzinfo"
+
+ # Uncomment this if you don't want to package rails gem.
+ # config.gems -= ["rails"]
+
+ # The most recent versions of gems are used.
+ # You can specify versions of gems by using a hash assignment:
+ # config.gems["rails"] = "2.3.10"
+
+ # You can also use regexps or Gem::Dependency objects for flexibility or
+ # finer-grained control.
+ # config.gems << /^merb-/
+ # config.gems << Gem::Dependency.new("merb-core", "= 0.9.3")
+
+ # Include gem dependencies not mentioned specifically. Default is
+ # true, uncomment to turn off.
+ # config.gem_dependencies = false
+
+ # Array of regular expressions matching relative paths in gems to be
+ # excluded from the war. Defaults to empty, but you can set it like
+ # below, which excludes test files.
+ # config.gem_excludes = [/^(test|spec)\//]
+
+ # Pathmaps for controlling how application files are copied into the archive
+ # config.pathmaps.application = ["WEB-INF/%p"]
+
+ # Name of the archive (without the extension). Defaults to the basename
+ # of the project directory.
+ # config.jar_name = "mywar"
+
+ # Name of the MANIFEST.MF template for the war file. Defaults to a simple
+ # MANIFEST.MF that contains the version of Warbler used to create the war file.
+ # config.manifest_file = "config/MANIFEST.MF"
+
+ # When using the 'compiled' feature and specified, only these Ruby
+ # files will be compiled. Default is to compile all \.rb files in
+ # the application.
+ # config.compiled_ruby_files = FileList['app/**/*.rb']
+
+ # === War files only below here ===
+
+ # Path to the pre-bundled gem directory inside the war file. Default
+ # is 'WEB-INF/gems'. Specify path if gems are already bundled
+ # before running Warbler. This also sets 'gem.path' inside web.xml.
+ # config.gem_path = "WEB-INF/vendor/bundler_gems"
+
+ # Files for WEB-INF directory (next to web.xml). This contains
+ # web.xml by default. If there is an .erb-File it will be processed
+ # with webxml-config. You may want to exclude this file via
+ # config.excludes.
+ # config.webinf_files += FileList["jboss-web.xml"]
+
+ # Files to be included in the root of the webapp. Note that files in public
+ # will have the leading 'public/' part of the path stripped during staging.
+ # config.public_html = FileList["public/**/*", "doc/**/*"]
+
+ # Pathmaps for controlling how public HTML files are copied into the .war
+ # config.pathmaps.public_html = ["%{public/,}p"]
+
+ # Value of RAILS_ENV for the webapp -- default as shown below
+ # config.webxml.rails.env = ENV['RAILS_ENV'] || 'production'
+
+ # Application booter to use, one of :rack, :rails, or :merb (autodetected by default)
+ # config.webxml.booter = :rails
+
+ # When using the :rack booter, "Rackup" script to use.
+ # - For 'rackup.path', the value points to the location of the rackup
+ # script in the web archive file. You need to make sure this file
+ # gets included in the war, possibly by adding it to config.includes
+ # or config.webinf_files above.
+ # - For 'rackup', the rackup script you provide as an inline string
+ # is simply embedded in web.xml.
+ # The script is evaluated in a Rack::Builder to load the application.
+ # Examples:
+ # config.webxml.rackup.path = 'WEB-INF/hello.ru'
+ # config.webxml.rackup = %{require './lib/demo'; run Rack::Adapter::Camping.new(Demo)}
+ # config.webxml.rackup = require 'cgi' && CGI::escapeHTML(File.read("config.ru"))
+
+ # Control the pool of Rails runtimes. Leaving unspecified means
+ # the pool will grow as needed to service requests. It is recommended
+ # that you fix these values when running a production server!
+ # config.webxml.jruby.min.runtimes = 2
+ # config.webxml.jruby.max.runtimes = 4
+
+ # JNDI data source name
+ # config.webxml.jndi = 'jdbc/rails'
+end
View
4 littleapp/lib/littleapp.rb
@@ -0,0 +1,4 @@
+module Littleapp
+ VERSION = "1.0"
+ puts "This is Littleapp version #{VERSION}"
+end
Please sign in to comment.
Something went wrong with that request. Please try again.