jruby-elasticsearch 0.0.1

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.
@@ -0,0 +1,46 @@
1
+ require "java"
2
+ require "elasticsearch/namespace"
3
+
4
+ class ElasticSearch::ActionListener
5
+ include org.elasticsearch.action.ActionListener
6
+
7
+ def initialize
8
+ @failure_callbacks = []
9
+ @success_callbacks = []
10
+ end # def initialize
11
+
12
+ # Helper for registering callbacks.
13
+ # 'what' should be either :failure or :success
14
+ #
15
+ # You can register multiple callbacks if you wish.
16
+ # Callbacks are invoked in order of addition.
17
+ def on(what, &block)
18
+ case what
19
+ when :failure
20
+ @failure_callbacks << block
21
+ when :success
22
+ @success_callbacks << block
23
+ end
24
+ return self
25
+ end # def on
26
+
27
+ # Conforming to Interface org.elasticsearch.action.ActionListener
28
+ def onFailure(exception)
29
+ if !@failure_callbacks.empty?
30
+ @failure_callbacks.each { |c| c.call(exception) }
31
+ else
32
+ # Default is no failure callbacks
33
+ raise exception
34
+ end
35
+ end # def onFailure
36
+
37
+ # Conforming to Interface org.elasticsearch.action.ActionListener
38
+ def onResponse(response)
39
+ if !@success_callbacks.empty?
40
+ @success_callbacks.each { |c| c.call(response) }
41
+ else
42
+ # Default if no success callbacks
43
+ puts "#{self.class.name}#onResponse => #{response.inspect}"
44
+ end
45
+ end # def onResponse
46
+ end # class ElasticSearch::ActionListener
@@ -0,0 +1,31 @@
1
+ require "elasticsearch/namespace"
2
+ require "elasticsearch/request"
3
+
4
+ class ElasticSearch::BulkRequest < ElasticSearch::Request
5
+ # Create a new index request.
6
+ def initialize(client)
7
+ @client = client
8
+
9
+ @prep = @client.prepareBulk(index, type, id)
10
+ super
11
+ end
12
+
13
+ # Execute this index request.
14
+ # This call is asynchronous.
15
+ #
16
+ # If a block is given, register it for both failure and success.
17
+ def execute(&block)
18
+ use_callback(&block) if block_given
19
+ action = @prep.execute(@handler)
20
+ return action
21
+ end
22
+
23
+ # Execute this index request synchronously
24
+ def execute!
25
+ return @prep.execute.actionGet()
26
+ end
27
+
28
+ def <<(request)
29
+ @prep.add(request)
30
+ end # def <<
31
+ end # def ElasticSearch::BulkRequest
@@ -0,0 +1,7 @@
1
+ require "elasticsearch/namespace"
2
+
3
+ class ElasticSearch::BulkStream
4
+ def initialize
5
+ @bulkthread = Thread.new
6
+ end
7
+ end
@@ -0,0 +1,54 @@
1
+ require "java"
2
+ require "elasticsearch/namespace"
3
+ require "elasticsearch/indexrequest"
4
+
5
+ class ElasticSearch::Client
6
+ def initialize
7
+ @node = org.elasticsearch.node.NodeBuilder.nodeBuilder.client(true).node
8
+ @client = @node.client
9
+ end # def initialize
10
+
11
+ # Index a new document
12
+ #
13
+ # args:
14
+ # index: the index name
15
+ # type: the type name
16
+ # id: (optional) the id of the document
17
+ # data: (optional) the data for this document
18
+ # &block: (optional) optional block for using the DSL to add data
19
+ #
20
+ # Returns an ElasticSearch::IndexRequest instance.
21
+ #
22
+ # Example w/ DSL:
23
+ #
24
+ # request = client.index("foo", "logs") do
25
+ # filename "/var/log/message"
26
+ # mesage "hello world"
27
+ # timestamp 123456
28
+ # end
29
+ #
30
+ # request.execute!
31
+ def index(index, type, id=nil, data={}, &block)
32
+ # Permit 'id' being omitted entirely.
33
+ # Thus a call call: index("foo", "bar", somehash) is valid.
34
+ if id.is_a?(Hash)
35
+ data = id
36
+ id = nil
37
+ end
38
+
39
+ indexreq = ElasticSearch::IndexRequest.new(@client, index, type, id, data)
40
+ if block_given?
41
+ indexreq.instance_eval(&block)
42
+ end
43
+ return indexreq
44
+ end # def index
45
+
46
+ def cluster
47
+ return @client.admin.cluster
48
+ end
49
+
50
+ def node
51
+ return @client.admin.cluster
52
+ end
53
+ end # class ElasticSearch::Client
54
+
@@ -0,0 +1,42 @@
1
+ require "elasticsearch/namespace"
2
+ require "elasticsearch/request"
3
+
4
+ class ElasticSearch::IndexRequest < ElasticSearch::Request
5
+ # Create a new index request.
6
+ def initialize(client, index, type, id=nil, data={})
7
+ @client = client
8
+ @index = index
9
+ @type = type
10
+ @id = id
11
+ @data = data
12
+
13
+ @prep = @client.prepareIndex(index, type, id)
14
+ super
15
+ end
16
+
17
+ # Execute this index request.
18
+ # This call is asynchronous.
19
+ #
20
+ # If a block is given, register it for both failure and success.
21
+ def execute(&block)
22
+ @prep.setSource(@data)
23
+ use_callback(&block) if block_given?
24
+
25
+ action = @prep.execute(@handler)
26
+ return action
27
+ end
28
+
29
+ # Execute this index request synchronously
30
+ def execute!
31
+ @prep.setSource(@data)
32
+ return @prep.execute.actionGet()
33
+ end
34
+
35
+ # DSL helper.
36
+ # TODO(sissel): Move this away to a DSL module.
37
+ def method_missing(*args)
38
+ key, value = args
39
+ puts "Adding: #{key}: #{value.inspect}"
40
+ @data[key.to_s] = value
41
+ end
42
+ end
@@ -0,0 +1,4 @@
1
+
2
+ module ElasticSearch
3
+ # empty for now
4
+ end
@@ -0,0 +1,25 @@
1
+ require "elasticsearch/namespace"
2
+ require "elasticsearch/actionlistener"
3
+
4
+ class ElasticSearch::Request
5
+ # Create a new index request.
6
+ def initialize()
7
+ @handler = ElasticSearch::ActionListener.new
8
+ end
9
+
10
+ # See ElasticSearch::ActionListener#on
11
+ def on(event, &block)
12
+ return @handler.on(*args, &block)
13
+ end
14
+
15
+ # Execute this index request.
16
+ # This call is asynchronous.
17
+ #
18
+ # If a block is given, register it for both failure and success.
19
+ def use_callback(&block)
20
+ if block_given?
21
+ on(:failure, &block)
22
+ on(:success, &block)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,8 @@
1
+ require "elasticsearch/client"
2
+
3
+ #class Proc
4
+ #include java.lang.Runnable
5
+ #alias_method :run, :call
6
+ #end
7
+
8
+ module ElasticSearch; end;
metadata ADDED
@@ -0,0 +1,73 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jruby-elasticsearch
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Jordan Sissel
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2011-02-27 00:00:00 -08:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: ...
22
+ email:
23
+ - jls@semicomplete.com
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files: []
29
+
30
+ files:
31
+ - lib/elasticsearch.rb
32
+ - lib/elasticsearch/namespace.rb
33
+ - lib/elasticsearch/bulkrequest.rb
34
+ - lib/elasticsearch/actionlistener.rb
35
+ - lib/elasticsearch/request.rb
36
+ - lib/elasticsearch/indexrequest.rb
37
+ - lib/elasticsearch/client.rb
38
+ - lib/elasticsearch/bulkstream.rb
39
+ has_rdoc: true
40
+ homepage: https://github.com/jordansissel/jruby-elasticsearch
41
+ licenses:
42
+ - Apache License (2.0)
43
+ post_install_message:
44
+ rdoc_options: []
45
+
46
+ require_paths:
47
+ - lib
48
+ - lib
49
+ required_ruby_version: !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ segments:
55
+ - 0
56
+ version: "0"
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ segments:
63
+ - 0
64
+ version: "0"
65
+ requirements: []
66
+
67
+ rubyforge_project:
68
+ rubygems_version: 1.3.7
69
+ signing_key:
70
+ specification_version: 3
71
+ summary: JRuby API for ElasticSearch using the native ES Java API
72
+ test_files: []
73
+