riaktor 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.
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ === 0.0.1 2010-03-15
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
data/Manifest.txt ADDED
@@ -0,0 +1,11 @@
1
+ History.txt
2
+ Manifest.txt
3
+ PostInstall.txt
4
+ README.rdoc
5
+ Rakefile
6
+ lib/riaktor.rb
7
+ script/console
8
+ script/destroy
9
+ script/generate
10
+ test/test_helper.rb
11
+ test/test_riaktor.rb
data/PostInstall.txt ADDED
@@ -0,0 +1,4 @@
1
+
2
+ For more information on riaktor, see http://riaktor.rubyforge.org and
3
+ http://wiki.github.com/benmyles/riaktor/.
4
+
data/README.rdoc ADDED
@@ -0,0 +1,70 @@
1
+ = Riaktor
2
+
3
+ * http://github.com/benmyles/riaktor
4
+
5
+ == DESCRIPTION:
6
+
7
+ Riaktor is a Ruby client and object mapper for Riak (http://riak.basho.com/).
8
+ It's brand new and probably has bugs, but feel free to try it out.
9
+
10
+ == FEATURES/PROBLEMS:
11
+
12
+ * Fast: all GETs are concurrent, support for concurrent PUTs and DELETEs.
13
+ Operations like find_many on a document make this transparent.
14
+
15
+ * Attributes: split your document up into attributes so that you reduce the
16
+ chance of conflicts and better spread out your data.
17
+
18
+ * Indexes: create basic, arbitrary indexes on your Riak objects with one line.
19
+
20
+ * Associations: define associations with one line. Uses the Riak links feature
21
+ so that you'll be able to do easy map reduce functions. Also supports paging
22
+ through your association members so that you don't need to load them all
23
+ at once.
24
+
25
+ == SYNOPSIS:
26
+
27
+ See tests. Better documentation coming soon to the Wiki.
28
+
29
+ == REQUIREMENTS:
30
+
31
+ * Ruby 1.9+
32
+ * Rails 3.0 beta (Riaktor doesn't care if it's used within a Rails project or not
33
+ but it does rely on Active Model and Active Support).
34
+
35
+ == INSTALL:
36
+
37
+ $ gem install tzinfo builder memcache-client rack rack-test rack-mount erubis mail text-format thor bundler i18n
38
+ $ gem install rails --pre
39
+ $ gem install riaktor
40
+
41
+ == LINKS:
42
+
43
+ * Documentation: http://wiki.github.com/benmyles/riaktor/
44
+ * Email: ben dot myles at gmail dot com
45
+ * Twitter: benmyles
46
+
47
+ == LICENSE:
48
+
49
+ (The MIT License)
50
+
51
+ Copyright (c) 2010 Ben Myles
52
+
53
+ Permission is hereby granted, free of charge, to any person obtaining
54
+ a copy of this software and associated documentation files (the
55
+ 'Software'), to deal in the Software without restriction, including
56
+ without limitation the rights to use, copy, modify, merge, publish,
57
+ distribute, sublicense, and/or sell copies of the Software, and to
58
+ permit persons to whom the Software is furnished to do so, subject to
59
+ the following conditions:
60
+
61
+ The above copyright notice and this permission notice shall be
62
+ included in all copies or substantial portions of the Software.
63
+
64
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
65
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
66
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
67
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
68
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
69
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
70
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,30 @@
1
+ require 'rubygems'
2
+ gem 'hoe', '>= 2.1.0'
3
+ require 'hoe'
4
+ require 'fileutils'
5
+ require './lib/riaktor'
6
+
7
+ Hoe.plugin :newgem
8
+ # Hoe.plugin :website
9
+ # Hoe.plugin :cucumberfeatures
10
+
11
+ # Generate all the Rake tasks
12
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
13
+ $hoe = Hoe.spec 'riaktor' do
14
+ self.developer 'Ben Myles', 'ben.myles@gmail.com'
15
+ self.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
16
+ self.rubyforge_name = self.name # TODO this is default value
17
+ # self.extra_deps = [['activesupport','>= 2.0.2']]
18
+ self.extra_deps = [ ['typhoeus',"= 0.1.22"],
19
+ ['uuidtools','= 2.1.1'],
20
+ ['yajl-ruby', '= 0.7.4'],
21
+ ['activesupport', '= 3.0.0.beta'],
22
+ ["activemodel", '= 3.0.0.beta'] ]
23
+ end
24
+
25
+ require 'newgem/tasks'
26
+ Dir['tasks/**/*.rake'].each { |t| load t }
27
+
28
+ # TODO - want other tests/tasks run by default? Add them to the list
29
+ # remove_task :default
30
+ # task :default => [:spec, :features]
data/lib/riaktor.rb ADDED
@@ -0,0 +1,25 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ gem "typhoeus", "= 0.1.22"
5
+ require "typhoeus"
6
+
7
+ gem 'uuidtools','= 2.1.1'
8
+ require 'uuidtools'
9
+
10
+ gem 'yajl-ruby', '= 0.7.4'
11
+ require 'yajl'
12
+
13
+ gem "activesupport", '= 3.0.0.beta'
14
+ require "active_support/all"
15
+
16
+ gem "activemodel", '= 3.0.0.beta'
17
+ require "active_model"
18
+
19
+ module Riaktor
20
+ VERSION = '0.0.1'
21
+ end
22
+
23
+ require "#{File.dirname(__FILE__)}/riaktor/client"
24
+ require "#{File.dirname(__FILE__)}/riaktor/r_object"
25
+ require "#{File.dirname(__FILE__)}/riaktor/document"
data/script/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/riaktor.rb'}"
9
+ puts "Loading riaktor gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1,24 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/riaktor'
4
+
5
+ class Person < Riaktor::Document::Base
6
+ attribute :occupation
7
+ attribute :age
8
+ attribute :updated_at
9
+ attribute :phone_number
10
+
11
+ index :phone_number
12
+
13
+ association :friends, :class => :person
14
+
15
+ validates_presence_of :age
16
+
17
+ before_save :set_updated_at
18
+
19
+ protected
20
+
21
+ def set_updated_at
22
+ self.updated_at.value = Time.now.utc
23
+ end
24
+ end
@@ -0,0 +1,312 @@
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
2
+
3
+ class TestRiaktor < Test::Unit::TestCase
4
+
5
+ def setup
6
+ end
7
+
8
+ def test_document
9
+ if p = Person.find("ben")
10
+ assert p.destroy
11
+ sleep(0.01)
12
+ assert_nil Person.find("ben")
13
+ end
14
+
15
+ p = Person.new
16
+ p.key = "ben"
17
+ p.value = "Ben Myles"
18
+ p.age.value = 20
19
+ assert p.save
20
+
21
+ p = Person.find("ben")
22
+ assert_equal "Ben Myles", p.value
23
+ p.occupation.value = "something"
24
+ p.age.value = 26
25
+ assert p.save
26
+
27
+ p = Person.find("ben")
28
+ assert_equal "something", p.occupation.value
29
+ assert_equal 26, p.age.value
30
+ end
31
+
32
+ def test_destroy
33
+ if p = Person.find("test_destroy")
34
+ assert p.destroy
35
+ sleep(0.01)
36
+ assert_nil Person.find("test_destroy")
37
+ end
38
+
39
+ p = Person.new
40
+ p.key = "test_destroy"
41
+ p.value = "test_destroy value"
42
+ p.age.value = 20
43
+ assert p.save
44
+
45
+ assert Person.find("test_destroy")
46
+ assert Riaktor::Document::Attribute.find(p.age.key, {:bucket => p.bucket})
47
+ assert p.destroy; sleep(0.01)
48
+
49
+ assert_nil Person.find("test_destroy")
50
+ assert_nil Riaktor::Document::Attribute.find(p.age.key, {:bucket => p.bucket})
51
+ end
52
+
53
+ def test_find_many
54
+ keys = []
55
+ 1.upto(25) do |i|
56
+ if p = Person.find("person#{i}")
57
+ p.destroy; sleep(0.01)
58
+ end
59
+ p = Person.new(:key => "person#{i}", :value => "value#{i}")
60
+ p.age.value = i
61
+ assert p.save
62
+ keys << p.key
63
+ end
64
+ results = Person.find_many(keys)
65
+ 1.upto(25) do |i|
66
+ p = results["person#{i}"]
67
+ assert_equal "value#{i}", p.value
68
+ assert_equal i, p.age.value
69
+ end
70
+ end
71
+
72
+ def test_save_many_and_destroy_many
73
+ keys = []
74
+ 1.upto(25) { |i| keys << "person#{i}" }
75
+ if people = Person.find_many(keys) and !people.empty?
76
+ results = Person.destroy_many(people.collect { |k,v| v })
77
+ results.each { |k,v| assert v == true }
78
+ end; sleep(0.01)
79
+
80
+ docs = []
81
+
82
+ 1.upto(25) do |i|
83
+ assert_nil Person.find("person#{i}")
84
+ p = Person.new(:key => "person#{i}", :value => "value#{i}")
85
+ p.age.value = i
86
+ docs << p
87
+ end
88
+
89
+ results = Person.save_many(docs)
90
+ results.each { |doc,res| assert res == true }
91
+
92
+ 1.upto(25) do |i|
93
+ p = Person.find("person#{i}")
94
+ assert_equal "value#{i}", p.value
95
+ assert_equal i, p.age.value
96
+ end
97
+
98
+ keys = []
99
+ 1.upto(25) { |i| keys << "person#{i}" }
100
+ if people = Person.find_many(keys) and !people.empty?
101
+ results = Person.destroy_many(people.collect { |k,v| v })
102
+ results.each { |k,v| assert v == true }
103
+ end
104
+
105
+ sleep(0.01)
106
+
107
+ 1.upto(25) do |i|
108
+ assert_nil Person.find("person#{i}")
109
+ end
110
+ end
111
+
112
+ def test_validations
113
+ p = Person.new(:key => "test_validations")
114
+ assert !p.save
115
+ assert_equal({:age=>["can't be blank"]}, p.errors)
116
+ end
117
+
118
+ def test_non_unique_key
119
+ unless p = Person.find("ben")
120
+ p = Person.new
121
+ p.key = "ben"
122
+ p.value = "Ben Myles"
123
+ p.age.value = 20
124
+ assert p.save
125
+ end
126
+
127
+ p = Person.new(:key => "ben")
128
+ assert !p.save
129
+ assert_equal({:key=>["is not unique"]}, p.errors)
130
+ end
131
+
132
+ def test_cannot_save_attributes_if_doc_is_not_valid
133
+ unless p = Person.find("ben")
134
+ p = Person.new
135
+ p.key = "ben"
136
+ p.value = "Ben Myles"
137
+ p.age.value = 20
138
+ assert p.save
139
+ end
140
+
141
+ p.occupation.value = "engineer"
142
+ assert p.occupation.save
143
+ assert p.valid?
144
+ p.age.value = nil
145
+ assert !p.valid?
146
+ assert !p.occupation.save
147
+ end
148
+
149
+ def test_callbacks
150
+ unless p = Person.find("ben")
151
+ p = Person.new
152
+ p.key = "ben"
153
+ p.value = "Ben Myles"
154
+ p.age.value = 20
155
+ end
156
+ assert p.save
157
+ assert p.updated_at.value.is_a?(Time)
158
+ t1 = p.updated_at.value
159
+ assert p.save
160
+ assert p.updated_at.value.is_a?(Time)
161
+ assert p.updated_at.value > t1
162
+ end
163
+
164
+ def test_siblings
165
+ props = Riaktor::Client.bucket_props("person")
166
+ props["props"]["allow_mult"] = true
167
+ assert Riaktor::Client.set_bucket_props("person", props)
168
+ props = Riaktor::Client.bucket_props("person")
169
+ assert props["props"]["allow_mult"] == true
170
+
171
+ if p = Person.find("test_siblings")
172
+ assert p.resolved!
173
+ assert p.age.resolved!
174
+ assert p.updated_at.resolved!
175
+ assert p.destroy
176
+ sleep(0.1)
177
+ assert_nil Person.find("test_siblings")
178
+ end
179
+
180
+ Riaktor::Client.client_id = "client1"
181
+ unless client1_p = Person.find("test_siblings")
182
+ client1_p = Person.new
183
+ client1_p.key = "test_siblings"
184
+ client1_p.value = "client1 value"
185
+ client1_p.age.value = 20
186
+ end
187
+ assert client1_p.save
188
+
189
+ client2_p = Person.find("test_siblings")
190
+ assert_equal 20, client2_p.age.value
191
+ assert_equal "client1 value", client2_p.value
192
+
193
+ Riaktor::Client.client_id = "client1"
194
+ client1_p.value = "client1 value II"
195
+ client1_p.age.value = 21
196
+ assert client1_p.save
197
+
198
+ Riaktor::Client.client_id = "client2"
199
+ client2_p.value = "client2 value"
200
+ client2_p.age.value = 22
201
+ assert client2_p.save
202
+
203
+ assert_equal 2, client2_p.siblings.keys.size
204
+ assert_equal 2, client2_p.age.siblings.keys.size
205
+ assert_equal 2, client2_p.updated_at.siblings.keys.size
206
+ assert client2_p.in_conflict?
207
+ client2_p.value = "client2 value"
208
+ client2_p.resolved!
209
+ assert client2_p.in_conflict?
210
+ client2_p.age.value = 23
211
+ client2_p.age.resolved!
212
+ client2_p.updated_at.resolved!
213
+ assert !client2_p.in_conflict?
214
+ assert client2_p.save
215
+
216
+ p = Person.find("test_siblings")
217
+ assert_equal "client2 value", p.value
218
+ assert_equal 23, p.age.value
219
+ end
220
+
221
+ def test_indexes
222
+ if p = Person.find("test_indexes")
223
+ assert p.destroy
224
+ end
225
+
226
+ p = Person.new(:key => "test_indexes")
227
+ p.value = "Ben Myles"
228
+ p.age.value = 26
229
+ p.phone_number.value = "555-444-5555"
230
+ assert p.save
231
+
232
+ p = Person.find_with_index(:phone_number, "555-444-5555")
233
+ assert p
234
+ assert_equal "555-444-5555", p.phone_number.value
235
+ p.phone_number.value = "555-555-5555"
236
+ assert p.save
237
+ assert_nil Person.find_with_index(:phone_number, "555-444-5555")
238
+ p = Person.find_with_index(:phone_number, "555-555-5555")
239
+ assert p
240
+ assert p.destroy
241
+ assert_nil Person.find_with_index(:phone_number, "555-444-5555")
242
+ end
243
+
244
+ def test_links
245
+ ["test_links_ben","test_links_chris", "test_links_sean"].each do |key|
246
+ if p = Person.find(key)
247
+ p.destroy
248
+ end
249
+ end
250
+
251
+ ben = Person.new(:key => "test_links_ben")
252
+ ben.value = "Ben"
253
+ ben.age.value = 26
254
+ ben.phone_number.value = "555-444-5555"
255
+ assert ben.save
256
+ ben.age.value = 25
257
+ assert ben.save
258
+
259
+ chris = Person.new(:key => "test_links_chris")
260
+ chris.value = "Chris"
261
+ chris.age.value = 26
262
+ chris.phone_number.value = "555-555-5555"
263
+ assert chris.save
264
+
265
+ sean = Person.new(:key => "test_links_sean")
266
+ sean.value = "Sean"
267
+ sean.age.value = 26
268
+ sean.phone_number.value = "123-555-5555"
269
+ assert sean.save
270
+
271
+ assert_equal [], ben.links
272
+ assert_equal [], ben.friends.members
273
+ assert ben.friends << chris
274
+ assert_equal 1, ben.friends.members.size
275
+ assert_equal 1, ben.links.size
276
+
277
+ ben = Person.find("test_links_ben")
278
+ assert_equal [], ben.links
279
+ assert_equal [], ben.friends.members
280
+ assert ben.friends << chris
281
+ assert_equal 1, ben.friends.members.size
282
+ assert_equal 1, ben.links.size
283
+ assert ben.friends.save
284
+
285
+ ben = Person.find("test_links_ben")
286
+ assert_equal 1, ben.friends.members.size
287
+ assert_equal 1, ben.links.size
288
+ assert_equal chris, ben.friends.members.first
289
+
290
+ ben.friends << sean
291
+ assert ben.friends.save
292
+ assert_equal 2, ben.friends.members.size
293
+ assert_equal 2, ben.links.size
294
+ assert_equal chris, ben.friends.members.first
295
+ ben = Person.find("test_links_ben")
296
+ assert_equal 2, ben.friends.members.size
297
+ assert_equal 2, ben.links.size
298
+ assert_equal chris, ben.friends.members.first
299
+ assert_equal [chris], ben.friends.members(0,0)
300
+ assert_equal [sean], ben.friends.members(1,1)
301
+ assert_equal [chris,sean], ben.friends.members
302
+
303
+ assert ben.friends.remove(chris)
304
+ assert_equal 1, ben.links.size
305
+ assert_equal 1, ben.friends.members.size
306
+ assert ben.friends.save
307
+
308
+ ben = Person.find("test_links_ben")
309
+ assert_equal 1, ben.links.size
310
+ assert_equal 1, ben.friends.members.size
311
+ end
312
+ end
metadata ADDED
@@ -0,0 +1,192 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: riaktor
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 1
9
+ version: 0.0.1
10
+ platform: ruby
11
+ authors:
12
+ - Ben Myles
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-03-18 00:00:00 -07:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: typhoeus
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - "="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ - 1
30
+ - 22
31
+ version: 0.1.22
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: uuidtools
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 2
43
+ - 1
44
+ - 1
45
+ version: 2.1.1
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: yajl-ruby
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - "="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ - 7
58
+ - 4
59
+ version: 0.7.4
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ - !ruby/object:Gem::Dependency
63
+ name: activesupport
64
+ prerelease: false
65
+ requirement: &id004 !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - "="
68
+ - !ruby/object:Gem::Version
69
+ segments:
70
+ - 3
71
+ - 0
72
+ - 0
73
+ - beta
74
+ version: 3.0.0.beta
75
+ type: :runtime
76
+ version_requirements: *id004
77
+ - !ruby/object:Gem::Dependency
78
+ name: activemodel
79
+ prerelease: false
80
+ requirement: &id005 !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - "="
83
+ - !ruby/object:Gem::Version
84
+ segments:
85
+ - 3
86
+ - 0
87
+ - 0
88
+ - beta
89
+ version: 3.0.0.beta
90
+ type: :runtime
91
+ version_requirements: *id005
92
+ - !ruby/object:Gem::Dependency
93
+ name: rubyforge
94
+ prerelease: false
95
+ requirement: &id006 !ruby/object:Gem::Requirement
96
+ requirements:
97
+ - - ">="
98
+ - !ruby/object:Gem::Version
99
+ segments:
100
+ - 2
101
+ - 0
102
+ - 4
103
+ version: 2.0.4
104
+ type: :development
105
+ version_requirements: *id006
106
+ - !ruby/object:Gem::Dependency
107
+ name: gemcutter
108
+ prerelease: false
109
+ requirement: &id007 !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ segments:
114
+ - 0
115
+ - 5
116
+ - 0
117
+ version: 0.5.0
118
+ type: :development
119
+ version_requirements: *id007
120
+ - !ruby/object:Gem::Dependency
121
+ name: hoe
122
+ prerelease: false
123
+ requirement: &id008 !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ segments:
128
+ - 2
129
+ - 5
130
+ - 0
131
+ version: 2.5.0
132
+ type: :development
133
+ version_requirements: *id008
134
+ description: |-
135
+ Riaktor is a Ruby client and object mapper for Riak (http://riak.basho.com/).
136
+ It's brand new and probably has bugs, but feel free to try it out.
137
+ email:
138
+ - ben.myles@gmail.com
139
+ executables: []
140
+
141
+ extensions: []
142
+
143
+ extra_rdoc_files:
144
+ - History.txt
145
+ - Manifest.txt
146
+ - PostInstall.txt
147
+ files:
148
+ - History.txt
149
+ - Manifest.txt
150
+ - PostInstall.txt
151
+ - README.rdoc
152
+ - Rakefile
153
+ - lib/riaktor.rb
154
+ - script/console
155
+ - script/destroy
156
+ - script/generate
157
+ - test/test_helper.rb
158
+ - test/test_riaktor.rb
159
+ has_rdoc: true
160
+ homepage: http://github.com/benmyles/riaktor
161
+ licenses: []
162
+
163
+ post_install_message: PostInstall.txt
164
+ rdoc_options:
165
+ - --main
166
+ - README.rdoc
167
+ require_paths:
168
+ - lib
169
+ required_ruby_version: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ segments:
174
+ - 0
175
+ version: "0"
176
+ required_rubygems_version: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ segments:
181
+ - 0
182
+ version: "0"
183
+ requirements: []
184
+
185
+ rubyforge_project: riaktor
186
+ rubygems_version: 1.3.6
187
+ signing_key:
188
+ specification_version: 3
189
+ summary: Riaktor is a Ruby client and object mapper for Riak (http://riak.basho.com/)
190
+ test_files:
191
+ - test/test_helper.rb
192
+ - test/test_riaktor.rb