dm-riak-adapter 0.0.1 → 0.0.2
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/README.md +42 -0
- data/lib/dm-riak-adapter.rb +25 -21
- data/spec/dm-riak-adapter_spec.rb +5 -1
- metadata +27 -13
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# dm-riak-adapter
|
2
|
+
|
3
|
+
DataMapper adapter for the Dynamo-inspired key/value store, [Riak](http://riak.basho.com/).
|
4
|
+
|
5
|
+
## Install
|
6
|
+
|
7
|
+
Requires that you have Riak installed. You can download the latest release [here](http://downloads.basho.com/riak/), or install using [homebrew](http://github.com/mxcl/homebrew):
|
8
|
+
|
9
|
+
brew install riak
|
10
|
+
|
11
|
+
Install the **dm-riak-adapter** gem:
|
12
|
+
|
13
|
+
gem install dm-riak-adapter
|
14
|
+
|
15
|
+
## Usage
|
16
|
+
|
17
|
+
Require **dm-core** and **dm-riak-adapter**. Tell DataMapper to use the Riak adapter and set a namespace for your app. This namespace will prefix each bucket like the following. `myapp:projects` `myapp:tasks`
|
18
|
+
|
19
|
+
require 'dm-core'
|
20
|
+
require 'dm-riak-adapter'
|
21
|
+
|
22
|
+
DataMapper.setup :default, :adapter => 'riak', :namespace => 'myapp'
|
23
|
+
|
24
|
+
Continue Defining your models and properties as you normally would.
|
25
|
+
|
26
|
+
class Project
|
27
|
+
include DataMapper::Resource
|
28
|
+
|
29
|
+
property :id, Serial
|
30
|
+
property :name, String
|
31
|
+
|
32
|
+
has n, :tasks
|
33
|
+
end
|
34
|
+
|
35
|
+
class Task
|
36
|
+
include DataMapper::Resource
|
37
|
+
|
38
|
+
property :id, Serial
|
39
|
+
property :summary, String
|
40
|
+
|
41
|
+
belongs_to :project
|
42
|
+
end
|
data/lib/dm-riak-adapter.rb
CHANGED
@@ -4,57 +4,61 @@ module DataMapper::Adapters
|
|
4
4
|
class RiakAdapter < AbstractAdapter
|
5
5
|
def initialize(name, options)
|
6
6
|
super
|
7
|
-
@riak = Riak::Client.new
|
7
|
+
@riak = Riak::Client.new(:prefix => options[:prefix] || 'riak')
|
8
|
+
@namespace = options[:namespace] ? options[:namespace] + ':' : ''
|
8
9
|
end
|
9
10
|
|
10
11
|
def create(resources)
|
11
|
-
|
12
|
+
objects = objects_for(resources.first.model)
|
12
13
|
|
13
|
-
resources.each {|r| initialize_serial(r,
|
14
|
-
|
14
|
+
resources.each {|r| initialize_serial(r, objects.size.succ)}
|
15
|
+
create_objects(resources)
|
15
16
|
end
|
16
17
|
|
17
18
|
def read(query)
|
18
|
-
query.filter_records(
|
19
|
+
query.filter_records(objects_for(query.model).dup)
|
19
20
|
end
|
20
21
|
|
21
22
|
def update(attributes, collection)
|
22
23
|
attributes = attributes_as_fields(attributes)
|
23
24
|
|
24
|
-
|
25
|
-
|
25
|
+
objects_for(collection.query.model).each {|r| r.update(attributes)}
|
26
|
+
update_objects(collection)
|
26
27
|
end
|
27
28
|
|
28
29
|
def delete(collection)
|
29
|
-
|
30
|
+
delete_objects(collection)
|
30
31
|
end
|
31
32
|
|
32
33
|
private
|
33
34
|
|
34
|
-
def
|
35
|
-
bucket
|
36
|
-
bucket.keys.map {|key| bucket[key].data}
|
35
|
+
def bucket(model)
|
36
|
+
@riak.bucket(@namespace + model.storage_name)
|
37
37
|
end
|
38
38
|
|
39
|
-
def
|
39
|
+
def objects_for(model)
|
40
|
+
bucket(model).keys.map {|key| bucket(model)[key].data}
|
41
|
+
end
|
42
|
+
|
43
|
+
def create_objects(resources)
|
40
44
|
resources.each do |resource|
|
41
|
-
|
42
|
-
|
43
|
-
|
45
|
+
object = bucket(resource.model).new("#{resource.id}")
|
46
|
+
object.data = resource.attributes(:field)
|
47
|
+
object.store
|
44
48
|
end
|
45
49
|
end
|
46
50
|
|
47
|
-
def
|
51
|
+
def update_objects(resources)
|
48
52
|
resources.each do |resource|
|
49
|
-
|
50
|
-
|
51
|
-
|
53
|
+
object = bucket(resource.model)["#{resource.id}"]
|
54
|
+
object.data = resource.attributes(:field)
|
55
|
+
object.store
|
52
56
|
end
|
53
57
|
end
|
54
58
|
|
55
|
-
def
|
59
|
+
def delete_objects(resources)
|
56
60
|
resources.each do |resource|
|
57
|
-
|
61
|
+
bucket(resource.model)["#{resource.id}"].delete
|
58
62
|
end
|
59
63
|
end
|
60
64
|
end
|
@@ -5,7 +5,11 @@ require 'dm-core/spec/adapter_shared_spec'
|
|
5
5
|
|
6
6
|
describe DataMapper::Adapters::RiakAdapter do
|
7
7
|
before :all do
|
8
|
-
@adapter = DataMapper.setup(:default, :adapter => 'riak')
|
8
|
+
@adapter = DataMapper.setup(:default, :adapter => 'riak', :namespace => 'test')
|
9
|
+
end
|
10
|
+
|
11
|
+
after :all do
|
12
|
+
Heffalump.all.destroy
|
9
13
|
end
|
10
14
|
|
11
15
|
it_should_behave_like 'An Adapter'
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dm-riak-adapter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 2
|
9
|
+
version: 0.0.2
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Mike Richards
|
@@ -9,29 +14,35 @@ autorequire:
|
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
16
|
|
12
|
-
date: 2010-03-
|
17
|
+
date: 2010-03-23 00:00:00 -04:00
|
13
18
|
default_executable:
|
14
19
|
dependencies:
|
15
20
|
- !ruby/object:Gem::Dependency
|
16
21
|
name: dm-core
|
17
|
-
|
18
|
-
|
19
|
-
version_requirements: !ruby/object:Gem::Requirement
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
24
|
requirements:
|
21
25
|
- - ">="
|
22
26
|
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
- 10
|
30
|
+
- 2
|
23
31
|
version: 0.10.2
|
24
|
-
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
25
34
|
- !ruby/object:Gem::Dependency
|
26
35
|
name: ripple
|
27
|
-
|
28
|
-
|
29
|
-
version_requirements: !ruby/object:Gem::Requirement
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
30
38
|
requirements:
|
31
39
|
- - ">="
|
32
40
|
- !ruby/object:Gem::Version
|
41
|
+
segments:
|
42
|
+
- 0
|
33
43
|
version: "0"
|
34
|
-
|
44
|
+
type: :runtime
|
45
|
+
version_requirements: *id002
|
35
46
|
description: DataMapper adapter for Riak
|
36
47
|
email: mike22e@gmail.com
|
37
48
|
executables: []
|
@@ -41,6 +52,7 @@ extensions: []
|
|
41
52
|
extra_rdoc_files: []
|
42
53
|
|
43
54
|
files:
|
55
|
+
- README.md
|
44
56
|
- lib/dm-riak-adapter.rb
|
45
57
|
- spec/dm-riak-adapter_spec.rb
|
46
58
|
- spec/spec_helper.rb
|
@@ -57,18 +69,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
57
69
|
requirements:
|
58
70
|
- - ">="
|
59
71
|
- !ruby/object:Gem::Version
|
72
|
+
segments:
|
73
|
+
- 0
|
60
74
|
version: "0"
|
61
|
-
version:
|
62
75
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
76
|
requirements:
|
64
77
|
- - ">="
|
65
78
|
- !ruby/object:Gem::Version
|
79
|
+
segments:
|
80
|
+
- 0
|
66
81
|
version: "0"
|
67
|
-
version:
|
68
82
|
requirements: []
|
69
83
|
|
70
84
|
rubyforge_project:
|
71
|
-
rubygems_version: 1.3.
|
85
|
+
rubygems_version: 1.3.6
|
72
86
|
signing_key:
|
73
87
|
specification_version: 2
|
74
88
|
summary: DataMapper adapter for Riak
|