JRubyRuntimeFactory.java :  » HTTP » cipango » org » cipango » sipatra » ruby » Java Open Source

Java Open Source » HTTP » cipango 
cipango » org » cipango » sipatra » ruby » JRubyRuntimeFactory.java
// ========================================================================
// Copyright 2003-2011 the original author or authors.
// ------------------------------------------------------------------------
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at 
// http://www.apache.org/licenses/LICENSE-2.0
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// ========================================================================
package org.cipango.sipatra.ruby;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.pool.PoolableObjectFactory;
import org.jruby.embed.LocalContextScope;
import org.jruby.embed.PathType;
import org.jruby.embed.ScriptingContainer;

/**
 * 
 *
 */
public class JRubyRuntimeFactory implements PoolableObjectFactory
{
  private String _appPath;
  private String _scriptPath;

  public JRubyRuntimeFactory(String appPath, String scriptPath) 
  {
    _appPath = appPath;
    _scriptPath = scriptPath;
  }

  public Object makeObject() 
  {
    ScriptingContainer container = new ScriptingContainer(LocalContextScope.SINGLETHREAD);
    // TODO: handle RUBY LOAD PATH to allow non JRuby dev
    List<String> loadPaths = new ArrayList<String>();
    loadPaths.add(_appPath);
    container.getProvider().setLoadPaths(loadPaths);
    container.runScriptlet("ENV['SIPATRA_PATH'] = '" + _appPath.replaceAll("'", "\'") + "'");
    container.runScriptlet(PathType.CLASSPATH, "sipatra.rb");

    if(_scriptPath != null)
    {
      File file = new File(_scriptPath);
      if(file.isFile())
        container.runScriptlet(PathType.ABSOLUTE, file.getAbsolutePath());
      else if(file.isDirectory())
      {
        for(File f : file.listFiles())
        {
          if(f.getName().endsWith(".rb"))
            container.runScriptlet(PathType.ABSOLUTE, f.getAbsolutePath());
        }
      }
    }
    return container;
  }

  public void destroyObject(Object obj) {}

  public boolean validateObject(Object obj) 
  {
    return true;
  }

  public void activateObject(Object obj) {}

  public void passivateObject(Object obj) 
  {
    if (obj instanceof ScriptingContainer) 
    {
      ((ScriptingContainer) obj).clear();
    }
  }
}
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.