adapter-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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.md +13 -0
- data/Rakefile +6 -0
- data/adapter-elasticsearch.gemspec +26 -0
- data/lib/adapter-elasticsearch.rb +1 -0
- data/lib/adapter/elasticsearch.rb +41 -0
- data/lib/adapter/elasticsearch/version.rb +5 -0
- data/spec/elasticsearch_spec.rb +18 -0
- data/spec/spec_helper.rb +17 -0
- metadata +137 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
# adapter-elasticsearch
|
2
|
+
|
3
|
+
ElasticSearch adapter for adapter gem.
|
4
|
+
|
5
|
+
See examples/ or specs/ for usage.
|
6
|
+
|
7
|
+
## Note on Patches/Pull Requests
|
8
|
+
|
9
|
+
* Fork the project.
|
10
|
+
* Make your feature addition or bug fix.
|
11
|
+
* Add tests for it. This is important so we don't break it in a future version unintentionally.
|
12
|
+
* Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine, but bump version in a commit by itself so we can ignore when we pull)
|
13
|
+
* Send us a pull request. Bonus points for topic branches.
|
data/Rakefile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "adapter/elasticsearch/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "adapter-elasticsearch"
|
7
|
+
s.version = Adapter::ElasticSearch::VERSION
|
8
|
+
s.authors = ["Jonathan Hoyt"]
|
9
|
+
s.email = ["hoyt@github.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = %q{Adapter for ElasticSearch}
|
12
|
+
s.description = %q{Adapter for ElasticSearch}
|
13
|
+
|
14
|
+
s.rubyforge_project = "adapter-elasticsearch"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency 'adapter', '~> 0.5.2'
|
22
|
+
s.add_dependency 'elasticsearch-client', '~> 0.0.3'
|
23
|
+
|
24
|
+
s.add_development_dependency 'rake'
|
25
|
+
s.add_development_dependency 'rspec', '~> 2.8.0'
|
26
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'adapter/elasticsearch'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'adapter'
|
2
|
+
require 'elasticsearch'
|
3
|
+
|
4
|
+
module Adapter
|
5
|
+
module ElasticSearch
|
6
|
+
NonHashValueKeyName = '_value'
|
7
|
+
|
8
|
+
def read(key)
|
9
|
+
doc = client.mget(@options[:type], [key_for(key)])['docs'].first
|
10
|
+
doc['exists'] ? decode(doc) : nil
|
11
|
+
end
|
12
|
+
|
13
|
+
def write(key, value)
|
14
|
+
client.add(@options[:type], key_for(key), encode(value))
|
15
|
+
end
|
16
|
+
|
17
|
+
def delete(key)
|
18
|
+
read(key).tap { client.remove(@options[:type], key_for(key)) }
|
19
|
+
end
|
20
|
+
|
21
|
+
def clear
|
22
|
+
client.remove_all(@options[:type])
|
23
|
+
end
|
24
|
+
|
25
|
+
def encode(value)
|
26
|
+
value.is_a?(Hash) ? value : {NonHashValueKeyName => value}
|
27
|
+
end
|
28
|
+
|
29
|
+
def decode(value)
|
30
|
+
return if value.nil?
|
31
|
+
|
32
|
+
if value['_source'].key?(NonHashValueKeyName)
|
33
|
+
value['_source'][NonHashValueKeyName]
|
34
|
+
else
|
35
|
+
value['_source'].merge({'id' => value['_id']})
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
Adapter.define(:elasticsearch, Adapter::ElasticSearch)
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Adapter::ElasticSearch do
|
4
|
+
before(:each) do
|
5
|
+
index = 'adapter-elasticsearch'
|
6
|
+
`curl -s -XDELETE http://localhost:9200/#{index}`
|
7
|
+
`curl -s -XPUT http://localhost:9200/#{index} -d'{ "index" : { "analysis" : { "analyzer" : { "default" : { "type" : "simple" } } } } }'`
|
8
|
+
`curl -s -XPUT http://localhost:9200/#{index}/document/_mapping -d'{"document":{"properties":{"foo":{"type":"string","analyzer":"standard"}}}}'`
|
9
|
+
|
10
|
+
@client = ElasticSearch::Index.new(index, 'http://127.0.0.1:9200')
|
11
|
+
@adapter = Adapter[:elasticsearch].new(@client, {:type => 'document'})
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:client) { @client }
|
15
|
+
let(:adapter) { @adapter }
|
16
|
+
|
17
|
+
it_should_behave_like 'an elasticsearch adapter'
|
18
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
Bundler.require :default, :test
|
3
|
+
|
4
|
+
require 'adapter/spec/an_adapter'
|
5
|
+
require 'adapter/spec/types'
|
6
|
+
require 'adapter-elasticsearch'
|
7
|
+
|
8
|
+
shared_examples_for "an elasticsearch adapter" do
|
9
|
+
it_should_behave_like 'an adapter'
|
10
|
+
|
11
|
+
Adapter::Spec::Types.each do |type, (key, key2)|
|
12
|
+
it "writes Object values to keys that are #{type}s like a Hash" do
|
13
|
+
adapter[key] = {:foo => :bar}
|
14
|
+
adapter[key].should == {'id' => 'key', 'foo' => 'bar'}
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: adapter-elasticsearch
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Jonathan Hoyt
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2012-03-06 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: adapter
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ~>
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 15
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
- 5
|
32
|
+
- 2
|
33
|
+
version: 0.5.2
|
34
|
+
type: :runtime
|
35
|
+
version_requirements: *id001
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: elasticsearch-client
|
38
|
+
prerelease: false
|
39
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ~>
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
hash: 25
|
45
|
+
segments:
|
46
|
+
- 0
|
47
|
+
- 0
|
48
|
+
- 3
|
49
|
+
version: 0.0.3
|
50
|
+
type: :runtime
|
51
|
+
version_requirements: *id002
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: rake
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
hash: 3
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
version: "0"
|
64
|
+
type: :development
|
65
|
+
version_requirements: *id003
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
name: rspec
|
68
|
+
prerelease: false
|
69
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ~>
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
hash: 47
|
75
|
+
segments:
|
76
|
+
- 2
|
77
|
+
- 8
|
78
|
+
- 0
|
79
|
+
version: 2.8.0
|
80
|
+
type: :development
|
81
|
+
version_requirements: *id004
|
82
|
+
description: Adapter for ElasticSearch
|
83
|
+
email:
|
84
|
+
- hoyt@github.com
|
85
|
+
executables: []
|
86
|
+
|
87
|
+
extensions: []
|
88
|
+
|
89
|
+
extra_rdoc_files: []
|
90
|
+
|
91
|
+
files:
|
92
|
+
- .gitignore
|
93
|
+
- Gemfile
|
94
|
+
- README.md
|
95
|
+
- Rakefile
|
96
|
+
- adapter-elasticsearch.gemspec
|
97
|
+
- lib/adapter-elasticsearch.rb
|
98
|
+
- lib/adapter/elasticsearch.rb
|
99
|
+
- lib/adapter/elasticsearch/version.rb
|
100
|
+
- spec/elasticsearch_spec.rb
|
101
|
+
- spec/spec_helper.rb
|
102
|
+
homepage: ""
|
103
|
+
licenses: []
|
104
|
+
|
105
|
+
post_install_message:
|
106
|
+
rdoc_options: []
|
107
|
+
|
108
|
+
require_paths:
|
109
|
+
- lib
|
110
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
111
|
+
none: false
|
112
|
+
requirements:
|
113
|
+
- - ">="
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
hash: 3
|
116
|
+
segments:
|
117
|
+
- 0
|
118
|
+
version: "0"
|
119
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
120
|
+
none: false
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
hash: 3
|
125
|
+
segments:
|
126
|
+
- 0
|
127
|
+
version: "0"
|
128
|
+
requirements: []
|
129
|
+
|
130
|
+
rubyforge_project: adapter-elasticsearch
|
131
|
+
rubygems_version: 1.8.10
|
132
|
+
signing_key:
|
133
|
+
specification_version: 3
|
134
|
+
summary: Adapter for ElasticSearch
|
135
|
+
test_files:
|
136
|
+
- spec/elasticsearch_spec.rb
|
137
|
+
- spec/spec_helper.rb
|