ohm 0.0.33 → 0.0.34
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/Rakefile +28 -2
- data/Thorfile +0 -21
- data/lib/ohm/key.rb +4 -0
- data/lib/ohm/redis.rb +1 -1
- data/lib/ohm.rb +18 -1
- data/test/indices_test.rb +7 -3
- data/test/model_test.rb +15 -0
- data/test/test.conf +1 -5
- metadata +12 -5
data/Rakefile
CHANGED
@@ -1,3 +1,29 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
require "rake/testtask"
|
2
|
+
|
3
|
+
REDIS_DIR = File.expand_path(File.join("..", "test"), __FILE__)
|
4
|
+
REDIS_CNF = File.join(REDIS_DIR, "test.conf")
|
5
|
+
REDIS_PID = File.join(REDIS_DIR, "db", "redis.pid")
|
6
|
+
|
7
|
+
task :default => :run
|
8
|
+
|
9
|
+
desc "Run tests and manage server start/stop"
|
10
|
+
task :run => [:start, :test, :stop]
|
11
|
+
|
12
|
+
desc "Start the Redis server"
|
13
|
+
task :start do
|
14
|
+
unless File.exists?(REDIS_PID)
|
15
|
+
system "redis-server #{REDIS_CNF}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
desc "Stop the Redis server"
|
20
|
+
task :stop do
|
21
|
+
if File.exists?(REDIS_PID)
|
22
|
+
system "kill #{File.read(REDIS_PID)}"
|
23
|
+
system "rm #{REDIS_PID}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Rake::TestTask.new(:test) do |t|
|
28
|
+
t.pattern = 'test/**/*_test.rb'
|
3
29
|
end
|
data/Thorfile
CHANGED
@@ -17,25 +17,4 @@ class Ohm < Thor
|
|
17
17
|
def deploy
|
18
18
|
system "rsync -az doc/* ohm.keyvalue.org:deploys/ohm.keyvalue.org/"
|
19
19
|
end
|
20
|
-
|
21
|
-
desc "test", "Run all tests"
|
22
|
-
def test
|
23
|
-
invoke "ohm:redis:start"
|
24
|
-
|
25
|
-
Dir["test/**/*_test.rb"].each do |file|
|
26
|
-
load file
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
class Redis < Thor
|
31
|
-
desc "start", "Start Redis server"
|
32
|
-
def start
|
33
|
-
%x{dtach -n /tmp/ohm.dtach redis-server test/test.conf}
|
34
|
-
end
|
35
|
-
|
36
|
-
desc "attach", "Attach to Redis server"
|
37
|
-
def attach
|
38
|
-
%x{dtach -a /tmp/ohm.dtach}
|
39
|
-
end
|
40
|
-
end
|
41
20
|
end
|
data/lib/ohm/key.rb
CHANGED
data/lib/ohm/redis.rb
CHANGED
@@ -53,7 +53,7 @@ module Ohm
|
|
53
53
|
|
54
54
|
PROCESSOR_IDENTITY = lambda { |reply| reply }
|
55
55
|
PROCESSOR_CONVERT_TO_BOOL = lambda { |reply| reply == 0 ? false : reply }
|
56
|
-
PROCESSOR_SPLIT_KEYS = lambda { |reply| reply.split(" ") }
|
56
|
+
PROCESSOR_SPLIT_KEYS = lambda { |reply| reply.respond_to?(:split) ? reply.split(" ") : reply }
|
57
57
|
PROCESSOR_INFO = lambda { |reply| Hash[*(reply.lines.map { |l| l.chomp.split(":", 2) }.flatten)] }
|
58
58
|
|
59
59
|
REPLY_PROCESSOR = {
|
data/lib/ohm.rb
CHANGED
@@ -8,6 +8,7 @@ require File.join(File.dirname(__FILE__), "ohm", "key")
|
|
8
8
|
require File.join(File.dirname(__FILE__), "ohm", "collection")
|
9
9
|
|
10
10
|
module Ohm
|
11
|
+
VERSION = "0.0.34"
|
11
12
|
|
12
13
|
# Provides access to the Redis database. This is shared accross all models and instances.
|
13
14
|
def redis
|
@@ -195,7 +196,7 @@ module Ohm
|
|
195
196
|
# Apply a redis operation on a collection of sets.
|
196
197
|
def apply(operation, hash, glue)
|
197
198
|
target = key.volatile.group(glue).append(*keys(hash))
|
198
|
-
model.db.send(operation, target, *target.
|
199
|
+
model.db.send(operation, target, *target.sub_keys)
|
199
200
|
Set.new(target, model)
|
200
201
|
end
|
201
202
|
|
@@ -215,6 +216,22 @@ module Ohm
|
|
215
216
|
class List < Collection
|
216
217
|
Raw = Ohm::List
|
217
218
|
|
219
|
+
def shift
|
220
|
+
if id = raw.shift
|
221
|
+
model[id]
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
def pop
|
226
|
+
if id = raw.pop
|
227
|
+
model[id]
|
228
|
+
end
|
229
|
+
end
|
230
|
+
|
231
|
+
def unshift(model)
|
232
|
+
raw.unshift(model.id)
|
233
|
+
end
|
234
|
+
|
218
235
|
def inspect
|
219
236
|
"#<List (#{model}): #{all.inspect}>"
|
220
237
|
end
|
data/test/indices_test.rb
CHANGED
@@ -33,7 +33,7 @@ class IndicesTest < Test::Unit::TestCase
|
|
33
33
|
|
34
34
|
context "A model with an indexed attribute" do
|
35
35
|
setup do
|
36
|
-
@user1 = User.create(:email => "foo", :activation_code => "bar")
|
36
|
+
@user1 = User.create(:email => "foo", :activation_code => "bar", :update => "baz")
|
37
37
|
@user2 = User.create(:email => "bar")
|
38
38
|
@user3 = User.create(:email => "baz qux")
|
39
39
|
end
|
@@ -48,8 +48,8 @@ class IndicesTest < Test::Unit::TestCase
|
|
48
48
|
assert_equal "~:IndicesTest::User:email:Zm9v+IndicesTest::User:activation_code:",
|
49
49
|
User.find(:email => "foo").find(:activation_code => "").key.to_s
|
50
50
|
|
51
|
-
assert_equal "
|
52
|
-
User.find(:email => "foo").find(:activation_code => "").find(:
|
51
|
+
assert_equal "~:~:IndicesTest::User:email:Zm9v+IndicesTest::User:activation_code:YmFy+IndicesTest::User:update:YmF6",
|
52
|
+
result = User.find(:email => "foo").find(:activation_code => "bar").find(:update => "baz").key.to_s
|
53
53
|
end
|
54
54
|
|
55
55
|
should "use a special namespace for set operations" do
|
@@ -58,6 +58,10 @@ class IndicesTest < Test::Unit::TestCase
|
|
58
58
|
assert Ohm.redis.keys("~:*").size > 0
|
59
59
|
end
|
60
60
|
|
61
|
+
should "allow multiple chained finds" do
|
62
|
+
assert_equal 1, User.find(:email => "foo").find(:activation_code => "bar").find(:update => "baz").size
|
63
|
+
end
|
64
|
+
|
61
65
|
should "raise if the field is not indexed" do
|
62
66
|
assert_raises(Ohm::Model::IndexNotFound) do
|
63
67
|
User.find(:sandunga => "foo")
|
data/test/model_test.rb
CHANGED
@@ -450,6 +450,8 @@ class TestRedis < Test::Unit::TestCase
|
|
450
450
|
|
451
451
|
context "Attributes of type List" do
|
452
452
|
setup do
|
453
|
+
Ohm.flush
|
454
|
+
|
453
455
|
@post = Post.new
|
454
456
|
@post.body = "Hello world!"
|
455
457
|
@post.create
|
@@ -551,6 +553,19 @@ class TestRedis < Test::Unit::TestCase
|
|
551
553
|
assert @post.related.include?(another_post)
|
552
554
|
assert !@post.related.include?(Post.create)
|
553
555
|
end
|
556
|
+
|
557
|
+
should "unshift models" do
|
558
|
+
@post.related.unshift(Post.create(:body => "Hello"))
|
559
|
+
@post.related.unshift(Post.create(:body => "Goodbye"))
|
560
|
+
|
561
|
+
assert_equal ["3", "2"], @post.related.raw
|
562
|
+
|
563
|
+
assert_equal "3", @post.related.shift.id
|
564
|
+
|
565
|
+
assert_equal "2", @post.related.pop.id
|
566
|
+
|
567
|
+
assert_nil @post.related.pop
|
568
|
+
end
|
554
569
|
end
|
555
570
|
|
556
571
|
context "Applying arbitrary transformations" do
|
data/test/test.conf
CHANGED
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ohm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 34
|
9
|
+
version: 0.0.34
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Michel Martens
|
@@ -10,7 +15,7 @@ autorequire:
|
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date: 2010-
|
18
|
+
date: 2010-04-03 00:00:00 -03:00
|
14
19
|
default_executable:
|
15
20
|
dependencies: []
|
16
21
|
|
@@ -60,18 +65,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
60
65
|
requirements:
|
61
66
|
- - ">="
|
62
67
|
- !ruby/object:Gem::Version
|
68
|
+
segments:
|
69
|
+
- 0
|
63
70
|
version: "0"
|
64
|
-
version:
|
65
71
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
66
72
|
requirements:
|
67
73
|
- - ">="
|
68
74
|
- !ruby/object:Gem::Version
|
75
|
+
segments:
|
76
|
+
- 0
|
69
77
|
version: "0"
|
70
|
-
version:
|
71
78
|
requirements: []
|
72
79
|
|
73
80
|
rubyforge_project: ohm
|
74
|
-
rubygems_version: 1.3.
|
81
|
+
rubygems_version: 1.3.6
|
75
82
|
signing_key:
|
76
83
|
specification_version: 3
|
77
84
|
summary: Object-hash mapping library for Redis.
|