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 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