Skip to content

Commit

Permalink
build structure for ruby support, problems in figuring out how to exe…
Browse files Browse the repository at this point in the history
…cute the ruby scripts in the most optimal manner
  • Loading branch information
kimchy committed Oct 3, 2010
1 parent 7180636 commit 6371ed7
Show file tree
Hide file tree
Showing 7 changed files with 287 additions and 0 deletions.
1 change: 1 addition & 0 deletions .idea/modules.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 28 additions & 0 deletions .idea/modules/plugin-lang-ruby.iml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

145 changes: 145 additions & 0 deletions plugins/lang/ruby/build.gradle
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
dependsOn(':elasticsearch')

apply plugin: 'java'
apply plugin: 'maven'

archivesBaseName = "elasticsearch-lang-ruby"

explodedDistDir = new File(distsDir, 'exploded')

configurations.compile.transitive = true
configurations.testCompile.transitive = true

// no need to use the resource dir
sourceSets.main.resources.srcDirs 'src/main/java'
sourceSets.test.resources.srcDirs 'src/test/java'

// add the source files to the dist jar
//jar {
// from sourceSets.main.allSource
//}

configurations {
dists
distLib {
visible = false
transitive = false
}
}

dependencies {
compile project(':elasticsearch')

compile('org.jruby:jruby-complete:1.5.3')
distLib('org.jruby:jruby-complete:1.5.3') { transitive = false }

testCompile project(':test-testng')
testCompile('org.testng:testng:5.10:jdk15') { transitive = false }
testCompile 'org.hamcrest:hamcrest-all:1.1'
}

test {
useTestNG()
jmvArgs = ["-ea", "-Xmx1024m"]
suiteName = project.name
listeners = ["org.elasticsearch.util.testng.Listeners"]
systemProperties["es.test.log.conf"] = System.getProperty("es.test.log.conf", "log4j-gradle.properties")
}

task explodedDist(dependsOn: [jar], description: 'Builds the plugin zip file') << {
[explodedDistDir]*.mkdirs()

copy {
from configurations.distLib
into explodedDistDir
}

// remove elasticsearch files (compile above adds the elasticsearch one)
ant.delete { fileset(dir: explodedDistDir, includes: "elasticsearch-*.jar") }

copy {
from libsDir
into explodedDistDir
}

ant.delete { fileset(dir: explodedDistDir, includes: "elasticsearch-*-javadoc.jar") }
ant.delete { fileset(dir: explodedDistDir, includes: "elasticsearch-*-sources.jar") }
}

task zip(type: Zip, dependsOn: ['explodedDist']) {
from(explodedDistDir) {
}
}

task release(dependsOn: [zip]) << {
ant.delete(dir: explodedDistDir)
copy {
from distsDir
into(new File(rootProject.distsDir, "plugins"))
}
}

configurations {
deployerJars
}

dependencies {
deployerJars "org.apache.maven.wagon:wagon-http:1.0-beta-2"
}

task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}

task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}

jar {
// from sourceSets.main.allJava
manifest {
attributes("Implementation-Title": "ElasticSearch", "Implementation-Version": rootProject.version, "Implementation-Date": buildTimeStr)
}
}


artifacts {
archives sourcesJar
archives javadocJar
}

uploadArchives {
repositories.mavenDeployer {
configuration = configurations.deployerJars
repository(url: rootProject.mavenRepoUrl) {
authentication(userName: rootProject.mavenRepoUser, password: rootProject.mavenRepoPass)
}
snapshotRepository(url: rootProject.mavenSnapshotRepoUrl) {
authentication(userName: rootProject.mavenRepoUser, password: rootProject.mavenRepoPass)
}

pom.project {
inceptionYear '2009'
name 'elasticsearch-plugins-lang-ruby'
description 'Ruby Plugin for ElasticSearch'
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'https://www.apache.org/licenses/LICENSE-2.0.txt'
distribution 'repo'
}
}
scm {
connection 'git:https://github.com/elasticsearch/elasticsearch.git'
developerConnection '[email protected]:elasticsearch/elasticsearch.git'
url 'https://github.com/elasticsearch/elasticsearch'
}
}

pom.whenConfigured {pom ->
pom.dependencies = pom.dependencies.findAll {dep -> dep.scope != 'test' } // removes the test scoped ones
}
}
}
1 change: 1 addition & 0 deletions plugins/lang/ruby/src/main/java/es-plugin.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
plugin=org.elasticsearch.plugin.ruby.RubyPlugin
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/*
* Licensed to Elastic Search and Shay Banon under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. Elastic Search licenses this
* file to you 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
*
* https://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.elasticsearch.plugin.ruby;

import org.elasticsearch.common.inject.Module;
import org.elasticsearch.plugins.AbstractPlugin;
import org.elasticsearch.script.ScriptModule;

/**
* @author kimchy (shay.banon)
*/
public class RubyPlugin extends AbstractPlugin {

@Override public String name() {
return "lang-ruby";
}

@Override public String description() {
return "Ruby plugin allowing to add javascript scripting support";
}

@Override public void processModule(Module module) {
if (module instanceof ScriptModule) {
// ((ScriptModule) module).addScriptEngine(JavaScriptScriptEngineService.class);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
/*
* Licensed to Elastic Search and Shay Banon under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. Elastic Search licenses this
* file to you 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
*
* https://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.elasticsearch.script.ruby;

import org.elasticsearch.common.component.AbstractComponent;
import org.elasticsearch.common.inject.Inject;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.script.ExecutableScript;
import org.elasticsearch.script.ScriptEngineService;
import org.jruby.embed.EmbedEvalUnit;
import org.jruby.embed.ScriptingContainer;

import java.util.Map;

/**
* @author kimchy (shay.banon)
*/
// Need to figure out how to execute compiled scripts in the most optimized manner (passing paramters to them).
public class RubyScriptEngineService extends AbstractComponent implements ScriptEngineService {

private final ScriptingContainer container;

@Inject public RubyScriptEngineService(Settings settings) {
super(settings);

this.container = new ScriptingContainer();
container.setClassLoader(settings.getClassLoader());
}

@Override public String[] types() {
return new String[]{"ruby"};
}

@Override public Object compile(String script) {
return container.parse(script);
}

@Override public ExecutableScript executable(Object compiledScript, Map<String, Object> vars) {
return null; //To change body of implemented methods use File | Settings | File Templates.
}

@Override public Object execute(Object compiledScript, Map<String, Object> vars) {
EmbedEvalUnit unit = (EmbedEvalUnit) compiledScript;
return null; //To change body of implemented methods use File | Settings | File Templates.
}

@Override public void close() {
container.clear();
}
}
1 change: 1 addition & 0 deletions settings.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ include 'plugins-mapper-attachments'

include 'plugins-lang-groovy'
include 'plugins-lang-javascript'
//include 'plugins-lang-ruby' #disabled for now ...

include 'plugins-transport-memcached'
include 'plugins-transport-thrift'
Expand Down

0 comments on commit 6371ed7

Please sign in to comment.