dm-riak-adapter 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -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
- stores = stores_for(resources.first.model)
12
+ objects = objects_for(resources.first.model)
12
13
 
13
- resources.each {|r| initialize_serial(r, stores.size.succ)}
14
- create_store(resources)
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(stores_for(query.model).dup)
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
- stores_for(collection.query.model).each {|r| r.update(attributes)}
25
- update_store(collection)
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
- delete_store(collection)
30
+ delete_objects(collection)
30
31
  end
31
32
 
32
33
  private
33
34
 
34
- def stores_for(model)
35
- bucket = @riak[model.storage_name]
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 create_store(resources)
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
- robject = @riak[resource.model.storage_name].new("#{resource.id}").store
42
- robject.data = resource.attributes(:field)
43
- robject.store
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 update_store(resources)
51
+ def update_objects(resources)
48
52
  resources.each do |resource|
49
- robject = @riak[resource.model.storage_name]["#{resource.id}"]
50
- robject.data = resource.attributes(:field)
51
- robject.store
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 delete_store(resources)
59
+ def delete_objects(resources)
56
60
  resources.each do |resource|
57
- @riak[resource.model.storage_name]["#{resource.id}"].delete
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
- version: 0.0.1
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-22 00:00:00 -04:00
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
- type: :runtime
18
- version_requirement:
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
- version:
32
+ type: :runtime
33
+ version_requirements: *id001
25
34
  - !ruby/object:Gem::Dependency
26
35
  name: ripple
27
- type: :runtime
28
- version_requirement:
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
- version:
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.5
85
+ rubygems_version: 1.3.6
72
86
  signing_key:
73
87
  specification_version: 2
74
88
  summary: DataMapper adapter for Riak