spymemcached.jruby 1.0.3-java

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 5780ea53b6d60b038125beb9dd617f8add8cbbc7
4
+ data.tar.gz: e55cd318622f535a5351ab76d02b666b2294dbab
5
+ SHA512:
6
+ metadata.gz: a78224ec0b00eb60041e3e0ccfaf2a97b37b79c139e6f7e766fafe9d0133fa292edd77b4b5e5e17bacd1d6bf2d2f880a37439c491f584d4e236da4bc96ce15d1
7
+ data.tar.gz: e022c6ef66b52a9da19958a9753dcda754d536050305a3c0e87e62095894e0f8c16e3bb103fcec378bbdfacb26af09e932644c1b0c7c75c6e90c27a64c9b3303
data/README.md ADDED
File without changes
Binary file
@@ -0,0 +1,144 @@
1
+ require 'spymemcached-2.11.4.jar'
2
+ require 'spymemcached_adapter.jar'
3
+ require 'spymemcached_adapter'
4
+
5
+ #
6
+ # Memcached client Spymemcached JRuby extension
7
+ #
8
+ class Spymemcached
9
+ class Error < StandardError; end
10
+ class TimeoutError < Error; end
11
+
12
+ # default options for client
13
+ DEFAULT_OPTIONS = {
14
+ :timeout => 0.5, # second
15
+ :binary => true
16
+ }
17
+
18
+ # Accepts a list of +servers+ and a list of +options+.
19
+ # The +servers+ can be either strings of the form "hostname:port" or
20
+ # one string format as "<hostname>:<port>,<hostname>:<port>".
21
+ # Use KetamaConnectionFactory as Spymemcached MemcachedClient connection factory.
22
+ # See Spymemcached document for details.
23
+ # Different with Ruby memcache clients (e.g. Dalli), there is no raw option for operations.
24
+ #
25
+ # Valid +options+ are:
26
+ #
27
+ # [:namespace] Prepends this value to all keys added or retrieved.
28
+ # [:timeout] Time to use as the socket read timeout, seconds. Defaults to 0.5 sec.
29
+ # [:binary] Talks binary protocol with Memcached server. Default to true.
30
+ #
31
+ # Logger: see Spymemcached for how to turn on detail log
32
+ #
33
+ def initialize(servers=['localhost:11211'], options={})
34
+ @servers, @options = Array(servers).join(','), DEFAULT_OPTIONS.merge(options)
35
+ @client = SpymemcachedAdapter.new(@servers, @options)
36
+ @namespace = if @options[:namespace]
37
+ @options[:namespace].is_a?(Proc) ? @options[:namespace] : lambda { @options[:namespace] }
38
+ end
39
+ at_exit { shutdown }
40
+ end
41
+
42
+ def fetch(key, ttl=0, &block)
43
+ val = get(key)
44
+ if val.nil? && block_given?
45
+ val = yield
46
+ add(key, val, ttl)
47
+ end
48
+ val
49
+ end
50
+
51
+ def get(key)
52
+ @client.get(ns(key))
53
+ end
54
+ alias :[] :get
55
+
56
+ def get_multi(*keys)
57
+ Hash[@client.get_multi(keys.map(&method(:ns))).map {|k, v| [unns(k), v]}]
58
+ end
59
+
60
+ def add(key, value, ttl=0, opts={})
61
+ @client.add(ns(key), value, ttl)
62
+ end
63
+
64
+ def set(key, value, ttl=0, opts={})
65
+ @client.set(ns(key), value, ttl)
66
+ end
67
+ alias :[]= :set
68
+
69
+ def cas(key, ttl=0, &block)
70
+ @client.cas(ns(key), ttl, &block)
71
+ end
72
+
73
+ def replace(key, value, ttl=0)
74
+ @client.replace(ns(key), value, ttl)
75
+ end
76
+
77
+ def delete(key)
78
+ @client.delete(ns(key))
79
+ end
80
+
81
+ def incr(key, by=1)
82
+ @client.incr(ns(key), by)
83
+ end
84
+
85
+ def decr(key, by=1)
86
+ @client.decr(ns(key), by)
87
+ end
88
+
89
+ def append(key, value)
90
+ @client.append(ns(key), value)
91
+ end
92
+
93
+ def prepend(key, value)
94
+ @client.prepend(ns(key), value)
95
+ end
96
+
97
+ def touch(key, ttl=0)
98
+ @client.touch(ns(key), ttl)
99
+ end
100
+
101
+ def stats
102
+ @client.stats
103
+ end
104
+
105
+ def version
106
+ @client.version
107
+ end
108
+
109
+ def flush_all
110
+ @client.flush_all
111
+ end
112
+ alias :flush :flush_all
113
+ alias :clear :flush_all
114
+
115
+ def shutdown
116
+ @client.shutdown
117
+ end
118
+
119
+ # compatible api
120
+ def rails23
121
+ require 'spymemcached/rails23'
122
+ Rails23.new(self)
123
+ end
124
+
125
+ private
126
+ def raw?(opts)
127
+ opts.is_a?(Hash) ? opts[:raw] : opts
128
+ end
129
+
130
+ def ns(key)
131
+ return key unless namespace
132
+ "#{namespace.call}:#{key}"
133
+ end
134
+
135
+ def unns(k)
136
+ return k unless namespace
137
+ @ns_size ||= namespace.call.size + 1
138
+ k[@ns_size..-1]
139
+ end
140
+
141
+ def namespace
142
+ @namespace
143
+ end
144
+ end
@@ -0,0 +1,60 @@
1
+ require 'memcache'
2
+
3
+ class Spymemcached
4
+ class Rails23
5
+ module Response # :nodoc:
6
+ STORED = "STORED\r\n"
7
+ NOT_STORED = "NOT_STORED\r\n"
8
+ EXISTS = "EXISTS\r\n"
9
+ NOT_FOUND = "NOT_FOUND\r\n"
10
+ DELETED = "DELETED\r\n"
11
+ end
12
+
13
+ def initialize(client)
14
+ @client = client
15
+ end
16
+
17
+ def get_multi(*args)
18
+ op(:get_multi, *args)
19
+ end
20
+
21
+ def get(key, *args)
22
+ op(:get, key)
23
+ end
24
+
25
+ def add(key, value, ttl=0, *args)
26
+ op(:add, key, value, ttl) ? Response::STORED : Response::NOT_STORED
27
+ end
28
+
29
+ def set(key, value, ttl=0, *args)
30
+ op(:set, key, value, ttl) ? Response::STORED : Response::NOT_STORED
31
+ end
32
+
33
+ def delete(key, *args)
34
+ op(:delete, key) ? Response::DELETED : Response::NOT_FOUND
35
+ end
36
+
37
+ def incr(key, by=1)
38
+ op(:incr, key, by)
39
+ end
40
+
41
+ def decr(key, by=1)
42
+ op(:decr, key, by)
43
+ end
44
+
45
+ def flush_all
46
+ op(:flush_all)
47
+ end
48
+
49
+ def stats
50
+ op(:stats)
51
+ end
52
+
53
+ private
54
+ def op(name, *args, &block)
55
+ @client.send(name, *args, &block)
56
+ rescue Spymemcached::Error => e
57
+ raise MemCache::MemCacheError, e.message
58
+ end
59
+ end
60
+ end
Binary file
data/test/memcache.rb ADDED
@@ -0,0 +1,4 @@
1
+ class MemCache
2
+ class MemCacheError
3
+ end
4
+ end
@@ -0,0 +1,121 @@
1
+ require 'test_helper'
2
+
3
+ class SpymemcachedBinaryProtocolTest < Test::Unit::TestCase
4
+ def setup
5
+ @client = binary_client
6
+ @client.flush_all
7
+ end
8
+
9
+ def test_get_set
10
+ assert_equal nil, @client.get('key')
11
+ @client.set('key', 'value')
12
+ assert_equal 'value', @client.get('key')
13
+ assert_equal 'value', @client['key']
14
+
15
+ @client.set('key', nil)
16
+ assert_equal nil, @client.get('key')
17
+ @client['key'] = 'hello'
18
+ assert_equal 'hello', @client.get('key')
19
+
20
+ @client.set('key2', ['hello', 'world'])
21
+ assert_equal ['hello', 'world'], @client.get('key2')
22
+
23
+ @client.set('key2', Msg.new('hi'))
24
+ assert_equal Msg.new('hi'), @client.get('key2')
25
+ end
26
+
27
+ def test_get_set_large_string
28
+ str = 'value' * 10_000_000
29
+ @client.set(name, str)
30
+ assert_equal str, @client.get(name)
31
+ end
32
+
33
+ def test_add
34
+ assert @client.add('key', 'value')
35
+ assert_equal "value", @client.get('key')
36
+
37
+ assert !@client.add('key', 'another')
38
+ assert_equal "value", @client.get('key')
39
+ end
40
+
41
+ def test_incr_and_decr
42
+ @client.add('key', '0')
43
+ assert_equal 0, @client.incr('key', 0)
44
+ @client.incr('key')
45
+ assert_equal 1, @client.incr('key', 0)
46
+ @client.incr('key', 5)
47
+ assert_equal 6, @client.incr('key', 0)
48
+ assert_equal '6', @client.get('key')
49
+
50
+ @client.set('key', '6')
51
+ @client.decr('key')
52
+ assert_equal 5, @client.decr('key', 0)
53
+ @client.decr('key', 3)
54
+ assert_equal 2, @client.decr('key', 0)
55
+
56
+ @client.replace('key', '10')
57
+ assert_equal 11, @client.incr('key')
58
+
59
+ @client.cas('key') { '7' }
60
+ assert_equal 8, @client.incr('key')
61
+ end
62
+
63
+ def test_fetch
64
+ ret = @client.fetch('key') { 'value' }
65
+ assert_equal 'value', ret
66
+ ret = @client.fetch('key') { 'hello' }
67
+ assert_equal 'value', ret
68
+ end
69
+
70
+ def test_get_multi
71
+ @client.add('k1', 'v1')
72
+ @client.add('k2', Msg.new('v2'))
73
+ ret = @client.get_multi('k1', 'k2', 'k3')
74
+ assert_equal(2, ret.size)
75
+ assert_equal('v1', ret['k1'])
76
+ assert_equal(Msg.new('v2'), ret['k2'])
77
+ end
78
+
79
+ def test_cas
80
+ assert_nil(@client.cas('k1') { 'v0' })
81
+
82
+ assert @client.add('k1', 'v1')
83
+ assert(@client.cas('k1') { 'v2' })
84
+ assert_equal 'v2', @client.get('k1')
85
+
86
+ ret = @client.cas('k1') do
87
+ @client.set('k1', 'v4')
88
+ 'v3'
89
+ end
90
+ assert_equal(false, ret)
91
+ assert_equal('v4', @client.get('k1'))
92
+ end
93
+
94
+ def test_replace
95
+ assert_equal false, @client.replace('k1', 'v1')
96
+ assert_nil @client['k1']
97
+
98
+ @client['k1'] = 'v0'
99
+ assert @client.replace('k1', 'v1')
100
+ assert_equal 'v1', @client['k1']
101
+ end
102
+
103
+ def test_delete
104
+ @client['k1'] = 'v0'
105
+ assert @client.delete('k1')
106
+ assert_nil @client['k1']
107
+ assert_equal false, @client.delete('k1')
108
+ end
109
+
110
+ def test_append_string
111
+ @client['k1'] = 'v'
112
+ assert @client.append('k1', '1')
113
+ assert_equal 'v1', @client['k1']
114
+ end
115
+
116
+ def test_prepend_string
117
+ @client['k1'] = 'v'
118
+ assert @client.prepend('k1', '1')
119
+ assert_equal '1v', @client['k1']
120
+ end
121
+ end
@@ -0,0 +1,121 @@
1
+ require 'test_helper'
2
+
3
+ class SpymemcachedPlainProtocolTest < Test::Unit::TestCase
4
+ def setup
5
+ @client = plain_client
6
+ @client.flush_all
7
+ end
8
+
9
+ def test_get_set
10
+ assert_equal nil, @client.get('key')
11
+ @client.set('key', 'value')
12
+ assert_equal 'value', @client.get('key')
13
+ assert_equal 'value', @client['key']
14
+
15
+ @client.set('key', nil)
16
+ assert_equal nil, @client.get('key')
17
+ @client['key'] = 'hello'
18
+ assert_equal 'hello', @client.get('key')
19
+
20
+ @client.set('key2', ['hello', 'world'])
21
+ assert_equal ['hello', 'world'], @client.get('key2')
22
+
23
+ @client.set('key2', Msg.new('hi'))
24
+ assert_equal Msg.new('hi'), @client.get('key2')
25
+ end
26
+
27
+ def test_get_set_large_string
28
+ str = 'value' * 10_000_000
29
+ @client.set(name, str)
30
+ assert_equal str, @client.get(name)
31
+ end
32
+
33
+ def test_add
34
+ assert @client.add('key', 'value')
35
+ assert_equal "value", @client.get('key')
36
+
37
+ assert !@client.add('key', 'another')
38
+ assert_equal "value", @client.get('key')
39
+ end
40
+
41
+ def test_incr_and_decr
42
+ @client.add('key', '0')
43
+ assert_equal 0, @client.incr('key', 0)
44
+ @client.incr('key')
45
+ assert_equal 1, @client.incr('key', 0)
46
+ @client.incr('key', 5)
47
+ assert_equal 6, @client.incr('key', 0)
48
+ assert_equal '6', @client.get('key')
49
+
50
+ @client.set('key', '6')
51
+ @client.decr('key')
52
+ assert_equal 5, @client.decr('key', 0)
53
+ @client.decr('key', 3)
54
+ assert_equal 2, @client.decr('key', 0)
55
+
56
+ @client.replace('key', '10')
57
+ assert_equal 11, @client.incr('key')
58
+
59
+ @client.cas('key') { '7' }
60
+ assert_equal 8, @client.incr('key')
61
+ end
62
+
63
+ def test_fetch
64
+ ret = @client.fetch('key') { 'value' }
65
+ assert_equal 'value', ret
66
+ ret = @client.fetch('key') { 'hello' }
67
+ assert_equal 'value', ret
68
+ end
69
+
70
+ def test_get_multi
71
+ @client.add('k1', 'v1')
72
+ @client.add('k2', Msg.new('v2'))
73
+ ret = @client.get_multi('k1', 'k2', 'k3')
74
+ assert_equal(2, ret.size)
75
+ assert_equal('v1', ret['k1'])
76
+ assert_equal(Msg.new('v2'), ret['k2'])
77
+ end
78
+
79
+ def test_cas
80
+ assert_nil(@client.cas('k1') { 'v0' })
81
+
82
+ assert @client.add('k1', 'v1')
83
+ assert(@client.cas('k1') { 'v2' })
84
+ assert_equal 'v2', @client.get('k1')
85
+
86
+ ret = @client.cas('k1') do
87
+ @client.set('k1', 'v4')
88
+ 'v3'
89
+ end
90
+ assert_equal(false, ret)
91
+ assert_equal('v4', @client.get('k1'))
92
+ end
93
+
94
+ def test_replace
95
+ assert_equal false, @client.replace('k1', 'v1')
96
+ assert_nil @client['k1']
97
+
98
+ @client['k1'] = 'v0'
99
+ assert @client.replace('k1', 'v1')
100
+ assert_equal 'v1', @client['k1']
101
+ end
102
+
103
+ def test_delete
104
+ @client['k1'] = 'v0'
105
+ assert @client.delete('k1')
106
+ assert_nil @client['k1']
107
+ assert_equal false, @client.delete('k1')
108
+ end
109
+
110
+ def test_append_string
111
+ @client['k1'] = 'v'
112
+ assert @client.append('k1', '1')
113
+ assert_equal 'v1', @client['k1']
114
+ end
115
+
116
+ def test_prepend_string
117
+ @client['k1'] = 'v'
118
+ assert @client.prepend('k1', '1')
119
+ assert_equal '1v', @client['k1']
120
+ end
121
+ end
@@ -0,0 +1,30 @@
1
+ require 'test_helper'
2
+
3
+ class SpymemcachedRails23Test < Test::Unit::TestCase
4
+ def setup
5
+ @client = binary_client.rails23
6
+ @client.flush_all
7
+ end
8
+
9
+ def test_api_compatible
10
+ assert_equal response::STORED, @client.add("key", 'value')
11
+ assert_equal 'value', @client.get('key')
12
+ assert_equal response::STORED, @client.set('key', 'value2')
13
+
14
+ assert_equal response::DELETED, @client.delete('key')
15
+ assert_equal response::NOT_FOUND, @client.delete('key2')
16
+
17
+ @client.set("key1", '0')
18
+ @client.set("key2", '1')
19
+ assert_equal({"key1" => '0', 'key2' => '1'}, @client.get_multi('key1', 'key2'))
20
+
21
+ assert_equal 1, @client.incr('key1')
22
+ assert_equal 0, @client.decr('key2')
23
+
24
+ assert @client.stats.values.first
25
+ end
26
+
27
+ def response
28
+ Spymemcached::Rails23::Response
29
+ end
30
+ end
@@ -0,0 +1,175 @@
1
+ require 'test_helper'
2
+
3
+ class SpymemcachedTest < Test::Unit::TestCase
4
+ def setup
5
+ @client = binary_client
6
+ @client.flush_all
7
+ end
8
+
9
+ def test_expiry
10
+ @client.add('add_key1', 'v1', 0)
11
+ @client.add('add_key2', 'v2', 2)
12
+
13
+ @client.set('set_key1', 'v1', 0)
14
+ @client.set('set_key2', 'v2', 2)
15
+
16
+ @client.fetch('fetch_key1', 0) { 'v1' }
17
+ @client.fetch('fetch_key2', 2) { 'v2' }
18
+
19
+ @client.add('cas_key1', 'v0')
20
+ @client.add('cas_key2', 'v0')
21
+ @client.cas('cas_key1', 0) { 'v1' }
22
+ @client.cas('cas_key2', 2) { 'v2' }
23
+
24
+ @client.add('replace_key1', 'v0')
25
+ @client.add('replace_key2', 'v0')
26
+ @client.replace('replace_key1', 'v1', 0)
27
+ @client.replace('replace_key2', 'v2', 2)
28
+
29
+ @client.add('touch_key1', 'v1', 2)
30
+
31
+ sleep 0.1
32
+
33
+ assert_equal 'v2', @client.get('add_key2')
34
+ assert_equal 'v2', @client.get('set_key2')
35
+ assert_equal 'v2', @client.get('fetch_key2')
36
+ assert_equal 'v2', @client.get('cas_key2')
37
+ assert_equal 'v2', @client.get('replace_key2')
38
+
39
+ assert @client.touch('touch_key1')
40
+
41
+ sleep 2
42
+ assert_equal 'v1', @client['touch_key1']
43
+
44
+ assert_equal 'v1', @client.get('add_key1')
45
+ assert_nil @client.get('add_key2')
46
+
47
+ assert_equal 'v1', @client.get('set_key1')
48
+ assert_nil @client.get('set_key2')
49
+
50
+ assert_equal 'v1', @client.get('fetch_key1')
51
+ assert_nil @client.get('fetch_key2')
52
+
53
+ assert_equal 'v1', @client.get('cas_key1')
54
+ assert_nil @client.get('cas_key2')
55
+
56
+ assert_equal 'v1', @client.get('replace_key1')
57
+ assert_nil @client.get('replace_key2')
58
+ end
59
+
60
+ def test_timeout
61
+ @client = Spymemcached.new('localhost:11111', :timeout => 0.01)
62
+ assert_timeout = lambda do |action, *args|
63
+ start_at = Time.now
64
+ assert_raise Spymemcached::TimeoutError do
65
+ @client.send(action, *args) { 'v1' }
66
+ end
67
+ time = Time.now - start_at
68
+ assert time < 0.025, "Timeout is 0.01, actual time of action #{action} when timeout: #{time}"
69
+ end
70
+
71
+ assert_timeout[:flush_all]
72
+
73
+ assert_timeout[:get, 'key']
74
+ assert_timeout[:get_multi, 'key']
75
+ assert_timeout[:incr, 'key']
76
+ assert_timeout[:decr, 'key']
77
+ assert_timeout[:fetch, 'key']
78
+ assert_timeout[:delete, 'key']
79
+ assert_timeout[:touch, 'key']
80
+
81
+ assert_timeout[:add, 'key', 'value']
82
+ assert_timeout[:set, 'key', 'value']
83
+ assert_timeout[:replace, 'key', 'value']
84
+ assert_timeout[:append, 'key', 'value']
85
+ assert_timeout[:prepend, 'key', 'value']
86
+
87
+ assert_equal({}, @client.version)
88
+
89
+ stats = @client.stats
90
+ assert_equal(1, stats.size)
91
+ assert_equal([{}], stats.values)
92
+ end
93
+
94
+ def test_namespace
95
+ @ns_client = Spymemcached.new('localhost:11211', :namespace => 'ns')
96
+ assert_ns = lambda do |k, v|
97
+ assert_equal 'v1', @ns_client.get('key1')
98
+ assert_nil @client.get('key1')
99
+ assert_equal 'v1', @client.get('ns:key1')
100
+ end
101
+
102
+ @ns_client.set('key1', 'v1')
103
+ assert_ns.call('key1', 'v1')
104
+
105
+ @ns_client.add('key2', 'v2')
106
+ assert_ns.call('key2', 'v2')
107
+
108
+ assert_equal({'key1' => 'v1', 'key2' => 'v2'}, @ns_client.get_multi('key1', 'key2'))
109
+ assert_equal({}, @client.get_multi('key1', 'key2'))
110
+
111
+ @ns_client.add('key3', 'v0')
112
+ @ns_client.cas('key3') { 'v3' }
113
+ assert_equal 'v3', @ns_client['key3']
114
+ assert_nil @client['key3']
115
+ assert_equal 'v3', @client['ns:key3']
116
+
117
+ assert @ns_client.replace('key3', 'v4')
118
+ assert_equal 'v4', @ns_client['key3']
119
+ assert_nil @client['key3']
120
+ assert_equal 'v4', @client['ns:key3']
121
+
122
+ @client['key3'] = 'v3'
123
+ assert @ns_client.delete('key3')
124
+ assert_equal 'v3', @client['key3']
125
+ assert_nil @ns_client['key3']
126
+
127
+ @ns_client.append('key2', '4')
128
+ assert_equal 'v24', @ns_client.get('key2')
129
+
130
+ @ns_client.prepend('key2', '4')
131
+ assert_equal '4v24', @ns_client.get('key2')
132
+
133
+ @ns_client['key2'] = '1'
134
+ assert_equal 2, @ns_client.incr('key2')
135
+ assert_equal 1, @ns_client.decr('key2')
136
+
137
+ @ns_client.touch('key2', 1)
138
+ sleep 1.1
139
+ assert_nil @ns_client['key2']
140
+ end
141
+
142
+ def test_lambda_as_namespace
143
+ @ns_client = Spymemcached.new('localhost:11211', :namespace => lambda { 'ns' })
144
+ @ns_client['key'] = 'value'
145
+ assert_equal 'value', @client['ns:key']
146
+
147
+ assert_equal({'key' => "value"}, @ns_client.get_multi('key'))
148
+ end
149
+
150
+ def test_timeout_zero
151
+ assert_raise Spymemcached::Error do
152
+ Spymemcached.new('localhost:11111', :timeout => 0)
153
+ end
154
+ end
155
+
156
+ def test_stats
157
+ stats = @client.stats
158
+ assert_equal(Hash, stats.class)
159
+ assert_equal(1, stats.size)
160
+ assert_match(/localhost/, stats.keys.first)
161
+ assert_match(/\:11211/, stats.keys.first)
162
+ assert_equal(Hash, stats.values.first.class)
163
+ assert stats.values.first.size > 5
164
+ assert_match(@client.version.values.first, stats.values.first['version'])
165
+ end
166
+
167
+ def test_version
168
+ v = @client.version
169
+ assert_equal(Hash, v.class)
170
+ assert_equal(1, v.size)
171
+ assert_match(/localhost/, v.keys.first)
172
+ assert_match(/\:11211/, v.keys.first)
173
+ assert_match(/\d\.\d+\.\d+/, v.values.first)
174
+ end
175
+ end
@@ -0,0 +1,19 @@
1
+ require 'test/unit'
2
+ require "spymemcached"
3
+
4
+ class Msg < Struct.new(:name)
5
+ end
6
+
7
+ class Test::Unit::TestCase
8
+ def plain_client
9
+ @@plain_client ||= spymemcached(:binary => false)
10
+ end
11
+
12
+ def binary_client
13
+ @@binary_client ||= spymemcached
14
+ end
15
+
16
+ def spymemcached(opts={})
17
+ Spymemcached.new('localhost:11211', opts)
18
+ end
19
+ end
metadata ADDED
@@ -0,0 +1,104 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: spymemcached.jruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.3
5
+ platform: java
6
+ authors:
7
+ - Xiao Li
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-10-27 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rake
15
+ version_requirements: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ requirement: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - '>='
23
+ - !ruby/object:Gem::Version
24
+ version: '0'
25
+ prerelease: false
26
+ type: :development
27
+ - !ruby/object:Gem::Dependency
28
+ name: test-unit
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ requirement: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ prerelease: false
40
+ type: :development
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake-compiler
43
+ version_requirements: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.9'
48
+ - - '>='
49
+ - !ruby/object:Gem::Version
50
+ version: 0.9.2
51
+ requirement: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: '0.9'
56
+ - - '>='
57
+ - !ruby/object:Gem::Version
58
+ version: 0.9.2
59
+ prerelease: false
60
+ type: :development
61
+ description: |
62
+ A JRuby extension wrapping the latest spymemcached client (v2.11.4).
63
+ email:
64
+ - swing1979@gmail.com
65
+ executables: []
66
+ extensions: []
67
+ extra_rdoc_files: []
68
+ files:
69
+ - README.md
70
+ - lib/spymemcached-2.11.4.jar
71
+ - lib/spymemcached.rb
72
+ - lib/spymemcached_adapter.jar
73
+ - lib/spymemcached/rails23.rb
74
+ - test/memcache.rb
75
+ - test/spymemcached_binary_protocol_test.rb
76
+ - test/spymemcached_plain_protocol_test.rb
77
+ - test/spymemcached_rails23_test.rb
78
+ - test/spymemcached_test.rb
79
+ - test/test_helper.rb
80
+ homepage: https://github.com/xli/spymemcached.jruby
81
+ licenses:
82
+ - MIT
83
+ metadata: {}
84
+ post_install_message:
85
+ rdoc_options: []
86
+ require_paths:
87
+ - lib
88
+ required_ruby_version: !ruby/object:Gem::Requirement
89
+ requirements:
90
+ - - '>='
91
+ - !ruby/object:Gem::Version
92
+ version: '0'
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - '>='
96
+ - !ruby/object:Gem::Version
97
+ version: '0'
98
+ requirements: []
99
+ rubyforge_project:
100
+ rubygems_version: 2.1.9
101
+ signing_key:
102
+ specification_version: 4
103
+ summary: A JRuby extension wrapping the latest spymemcached client (v2.11.4).
104
+ test_files: []