redis-scripted 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.md ADDED
@@ -0,0 +1,34 @@
1
+ `Redis::Scripted`
2
+ ===
3
+
4
+ A Ruby client that supports the experimental scripting feature in Redis.
5
+
6
+ Usage
7
+ ---
8
+
9
+ Drop your Lua scripts in `./scripts`:
10
+
11
+ scripts/
12
+ ├── msadd.lua
13
+ └── sintercard.lua
14
+
15
+ Then initialize the connection to Redis, passing the path where the
16
+ class should look for scripts:
17
+
18
+ require "redis/scripted"
19
+
20
+ redis = Redis.connect(scripts_path: "./scripts")
21
+
22
+ The scripts are defined as instance methods for convenience:
23
+
24
+ redis.msadd(["foo"], ["s1", "s2", "s3"])
25
+
26
+ Note that `msadd` receives two arguments at most: one array for the keys
27
+ and another for the values. This is necessary because of [how `EVAL`
28
+ works](http://antirez.com/post/scripting-branch-released.html).
29
+
30
+ Acknowledgments
31
+ ===
32
+
33
+ Code was inspired by [mkrecny](https://github.com/mkrecny/redis-extend)
34
+ and [catwell](https://github.com/catwell/redis-extend).
@@ -0,0 +1,19 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = "redis-scripted"
3
+ s.version = "0.0.1"
4
+ s.summary = "A Ruby client that supports the experimental scripting feature of Redis"
5
+ s.authors = ["Damian Janowski"]
6
+ s.email = ["djanowski@dimaion.com"]
7
+ s.homepage = "http://github.com/djanowski/redis-scripted"
8
+
9
+ s.add_dependency("redis")
10
+
11
+ s.files = Dir[
12
+ "LICENSE",
13
+ "README*",
14
+ "Rakefile",
15
+ "bin/*",
16
+ "*.gemspec",
17
+ "test/*.*"
18
+ ]
19
+ end
data/test/redis.conf ADDED
@@ -0,0 +1,3 @@
1
+ daemonize yes
2
+ port 6399
3
+ pidfile test/redis.pid
@@ -0,0 +1,39 @@
1
+ require "cutest"
2
+
3
+ def root(path)
4
+ File.expand_path("../#{path}", File.dirname(__FILE__))
5
+ end
6
+
7
+ require root("lib/redis/scripted")
8
+
9
+ redis = Redis::Scripted.new(port: 6399, scripts_path: root("test/scripts"))
10
+
11
+ prepare do
12
+ Process.kill(:INT, File.read("test/redis.pid").to_i) if File.exist?("test/redis.pid")
13
+ `redis-server test/redis.conf`
14
+ sleep 0.1
15
+ end
16
+
17
+ test "runs Lua code" do
18
+ redis.sadd("foo", "s1")
19
+ redis.sadd("foo", "s2")
20
+ redis.sadd("bar", "s1")
21
+
22
+ assert_equal redis.sintercard(["foo", "bar"]), 1
23
+ end
24
+
25
+ test "sends keys and values" do
26
+ redis.msadd(["foo"], %w(s1 s2 s3))
27
+
28
+ assert_equal %w(s1 s2 s3), redis.smembers("foo").sort
29
+ end
30
+
31
+ test "uses EVALSHA" do
32
+ redis.sadd("foo", "s1")
33
+ redis.sadd("foo", "s2")
34
+ redis.sadd("bar", "s1")
35
+
36
+ redis.sintercard(["foo", "bar"])
37
+
38
+ assert_equal Redis.new(port: 6399).client.call(:evalsha, "d76ce5687840f0436ae4c09c50564cf0e537395e", 2, "foo", "bar"), 1
39
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redis-scripted
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - Damian Janowski
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-06-07 00:00:00 -03:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: redis
18
+ prerelease: false
19
+ requirement: &id001 !ruby/object:Gem::Requirement
20
+ none: false
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: "0"
25
+ type: :runtime
26
+ version_requirements: *id001
27
+ description:
28
+ email:
29
+ - djanowski@dimaion.com
30
+ executables: []
31
+
32
+ extensions: []
33
+
34
+ extra_rdoc_files: []
35
+
36
+ files:
37
+ - README.md
38
+ - redis-scripted.gemspec
39
+ - test/redis.conf
40
+ - test/rediscripted.rb
41
+ has_rdoc: true
42
+ homepage: http://github.com/djanowski/redis-scripted
43
+ licenses: []
44
+
45
+ post_install_message:
46
+ rdoc_options: []
47
+
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: "0"
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: "0"
62
+ requirements: []
63
+
64
+ rubyforge_project:
65
+ rubygems_version: 1.6.2
66
+ signing_key:
67
+ specification_version: 3
68
+ summary: A Ruby client that supports the experimental scripting feature of Redis
69
+ test_files: []
70
+