flubber 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/flubber.rb +79 -0
  3. metadata +47 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 91ad4381dc64ed02369e983a90fb054f09f4fc9d
4
+ data.tar.gz: 1977f550a64f3f7b46de3e0b74c2590d368a2166
5
+ SHA512:
6
+ metadata.gz: 517610654acb3709c1c11b5795fffccb3b3dc97fd8a230b59406360aebb19dd763b81c812e0c8b0394064b1c3d5fe6eef7ee073077ca39721205ecfa7cb68467
7
+ data.tar.gz: 6427d3ba7ea6138ae682d0d9a5adff95f45c7b89e5979d9b13ed640e662b9a3067a32127d6a12d6b63dcd903cf76a43c3c755428178e6197c4cdfab647b9f010
@@ -0,0 +1,79 @@
1
+ # Flubber is just some simple, stupid bindings to use Elasticsearch as a plain old CRUD database.
2
+ # Create will make an id if you do not provide one; Read, Update, and Delete all require an id.
3
+ # We also support a default index/type to make it really brain-dead to use. Huzzah!
4
+ # It sits on top of the vendor-provided elasticsearch gem - you can, and should, use the client
5
+ # this provides via client() to talk directly to elasticsearch if you need to be more savvy.
6
+
7
+ # Why Flubber?
8
+ # - All the good names were taken?
9
+ # - Flubber is kind of a CRUDdy Elastic?
10
+ # - The original was pretty awesome. Jerry Lewis 4tW.
11
+
12
+ class Flubber
13
+
14
+ def initialize(a)
15
+ @attr = { url: ENV['ELASTICSEARCH_URL'], index: 'test', type: 'test' }
16
+ if !a.nil? then
17
+ self.default(a) if a.class == Hash
18
+ @attr[:url] = a if a.class == String
19
+ end
20
+ @client = Elasticsearch::Client.new url: @attr[:url]
21
+ end
22
+
23
+ def client
24
+ return @client
25
+ end
26
+
27
+ # Copy key value from one hash to another, forcing key to sym, only if it exists
28
+ def setval(dest, source, name)
29
+ return unless source.class == Hash
30
+ return if source[name].nil? and source[name.to_sym].nil?
31
+ dest[name.to_sym] = source[name].to_s unless source[name].nil?
32
+ dest[name.to_sym] = source[name.to_sym].to_s unless source[name.to_sym].nil?
33
+ dest[name.to_sym] = source[name.to_s].to_s unless source[name.to_s].nil?
34
+ end
35
+
36
+ # Replace defaults
37
+ def default(a)
38
+ a.keys.each { |k| self.setval(@attr, a, k) }
39
+ end
40
+
41
+ def info
42
+ @client.info
43
+ end
44
+
45
+ def setup(a)
46
+ q = { index: @attr[:index], type: @attr[:type] }
47
+ if a.class == Hash then
48
+ [:index, :type, :id].each { |k| self.setval(q, a, k) }
49
+ else
50
+ q[:id] = a.to_s
51
+ end
52
+ return q
53
+ end
54
+
55
+ def create(a, j)
56
+ q = setup(a)
57
+ j = j.to_s if j.respond_to?(:to_s)
58
+ q[:body] = j
59
+ @client.index q
60
+ end
61
+
62
+ def read(a)
63
+ @client.get setup(a)
64
+ end
65
+
66
+ def update(a, j) # maybe add modify() that only changes some fields? hmmm.
67
+ q = setup(a)
68
+ q[:body] = j
69
+ @client.index q
70
+ end
71
+
72
+ def delete(a)
73
+ @client.delete setup(a)
74
+ end
75
+
76
+ def search(a)
77
+ end
78
+
79
+ end
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: flubber
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Tom Bortels
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-08-17 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Flubber is a simple CRUD interface for elasticsearch.
14
+ email: bortels@gmail.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/flubber.rb
20
+ homepage: http://rubygems.org/gems/flubber
21
+ licenses:
22
+ - MIT
23
+ metadata: {}
24
+ post_install_message:
25
+ rdoc_options: []
26
+ require_paths:
27
+ - lib
28
+ required_ruby_version: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ required_rubygems_version: !ruby/object:Gem::Requirement
34
+ requirements:
35
+ - - ">="
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ requirements:
39
+ - elasticsearch
40
+ - json
41
+ rubyforge_project:
42
+ rubygems_version: 2.2.2
43
+ signing_key:
44
+ specification_version: 4
45
+ summary: CRUD for elasticsearch
46
+ test_files: []
47
+ has_rdoc: