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.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in adapter-elasticsearch.gemspec
4
+ gemspec
@@ -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.
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require 'rspec/core/rake_task'
3
+
4
+ RSpec::Core::RakeTask.new
5
+
6
+ task :default => :spec
@@ -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,5 @@
1
+ module Adapter
2
+ module ElasticSearch
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -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
@@ -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