redis_migrator 0.0.1 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (39) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/Gemfile +3 -0
  4. data/README.md +13 -1
  5. data/Rakefile +6 -0
  6. data/lib/redis_migrator/redis_helper.rb +5 -36
  7. data/lib/redis_migrator/redis_native_migrator.rb +27 -0
  8. data/lib/redis_migrator/redis_pipe_migrator.rb +66 -0
  9. data/lib/redis_migrator/redis_populator.rb +1 -1
  10. data/lib/redis_migrator.rb +19 -20
  11. data/migrator_benchmark.rb +1 -2
  12. data/redis_migrator.gemspec +8 -4
  13. data/spec/different_redis_type_migrator.rb +67 -0
  14. data/spec/pretested_migrator.rb +47 -0
  15. data/spec/redis_migrator_spec.rb +41 -0
  16. data/spec/redis_native_migrator_spec.rb +44 -0
  17. data/spec/redis_pipe_migrator_spec.rb +51 -0
  18. data/spec/shared_hosts_context.rb +10 -0
  19. data/spec/spec_helper.rb +9 -7
  20. metadata +85 -49
  21. data/spec/migrator_spec.rb +0 -63
  22. data/spec/mock_redis/lib/mock_redis/assertions.rb +0 -13
  23. data/spec/mock_redis/lib/mock_redis/database.rb +0 -432
  24. data/spec/mock_redis/lib/mock_redis/distributed.rb +0 -6
  25. data/spec/mock_redis/lib/mock_redis/exceptions.rb +0 -3
  26. data/spec/mock_redis/lib/mock_redis/expire_wrapper.rb +0 -25
  27. data/spec/mock_redis/lib/mock_redis/hash_methods.rb +0 -118
  28. data/spec/mock_redis/lib/mock_redis/list_methods.rb +0 -187
  29. data/spec/mock_redis/lib/mock_redis/multi_db_wrapper.rb +0 -86
  30. data/spec/mock_redis/lib/mock_redis/set_methods.rb +0 -126
  31. data/spec/mock_redis/lib/mock_redis/string_methods.rb +0 -203
  32. data/spec/mock_redis/lib/mock_redis/transaction_wrapper.rb +0 -80
  33. data/spec/mock_redis/lib/mock_redis/undef_redis_methods.rb +0 -11
  34. data/spec/mock_redis/lib/mock_redis/utility_methods.rb +0 -25
  35. data/spec/mock_redis/lib/mock_redis/version.rb +0 -3
  36. data/spec/mock_redis/lib/mock_redis/zset.rb +0 -110
  37. data/spec/mock_redis/lib/mock_redis/zset_methods.rb +0 -210
  38. data/spec/mock_redis/lib/mock_redis.rb +0 -119
  39. data/spec/redis_helper_spec.rb +0 -58
@@ -1,119 +0,0 @@
1
- require 'set'
2
-
3
- require 'mock_redis/assertions'
4
- require 'mock_redis/database'
5
- require 'mock_redis/distributed'
6
- require 'mock_redis/expire_wrapper'
7
- require 'mock_redis/multi_db_wrapper'
8
- require 'mock_redis/transaction_wrapper'
9
- require 'mock_redis/undef_redis_methods'
10
-
11
- class MockRedis
12
- include UndefRedisMethods
13
-
14
- attr_reader :options
15
-
16
- DEFAULTS = {
17
- :scheme => "redis",
18
- :host => "127.0.0.1",
19
- :port => 6379,
20
- :path => nil,
21
- :timeout => 5.0,
22
- :password => nil,
23
- :db => 0,
24
- }
25
-
26
- def initialize(*args)
27
- @options = _parse_options(args.first)
28
-
29
- @db = TransactionWrapper.new(
30
- ExpireWrapper.new(
31
- MultiDbWrapper.new(
32
- Database.new(*args))))
33
- end
34
-
35
- def id
36
- "redis://#{self.host}:#{self.port}/#{self.db}"
37
- end
38
-
39
- def call(command, &block)
40
- self.send(*command)
41
- end
42
-
43
- def host
44
- self.options[:host]
45
- end
46
-
47
- def port
48
- self.options[:port]
49
- end
50
-
51
- def db
52
- self.options[:db]
53
- end
54
-
55
- def client
56
- self
57
- end
58
-
59
- def respond_to?(method, include_private=false)
60
- super || @db.respond_to?(method, include_private)
61
- end
62
-
63
- def method_missing(method, *args, &block)
64
- @db.send(method, *args, &block)
65
- end
66
-
67
- def initialize_copy(source)
68
- super
69
- @db = @db.clone
70
- end
71
-
72
-
73
- protected
74
-
75
- def _parse_options(options)
76
- return {} if options.nil?
77
-
78
- defaults = DEFAULTS.dup
79
-
80
- url = options[:url] || ENV["REDIS_URL"]
81
-
82
- # Override defaults from URL if given
83
- if url
84
- require "uri"
85
-
86
- uri = URI(url)
87
-
88
- if uri.scheme == "unix"
89
- defaults[:path] = uri.path
90
- else
91
- # Require the URL to have at least a host
92
- raise ArgumentError, "invalid url" unless uri.host
93
-
94
- defaults[:scheme] = uri.scheme
95
- defaults[:host] = uri.host
96
- defaults[:port] = uri.port if uri.port
97
- defaults[:password] = uri.password if uri.password
98
- defaults[:db] = uri.path[1..-1].to_i if uri.path
99
- end
100
- end
101
-
102
- options = defaults.merge(options)
103
-
104
- if options[:path]
105
- options[:scheme] = "unix"
106
- options.delete(:host)
107
- options.delete(:port)
108
- else
109
- options[:host] = options[:host].to_s
110
- options[:port] = options[:port].to_i
111
- end
112
-
113
- options[:timeout] = options[:timeout].to_f
114
- options[:db] = options[:db].to_i
115
-
116
- options
117
- end
118
-
119
- end
@@ -1,58 +0,0 @@
1
- describe Redis::Helper do
2
- before do
3
- Redis.should_receive(:new).any_number_of_times {|options|
4
- MockRedis.new(options)
5
- }
6
-
7
- @migrator = Redis::Migrator.new(["redis://localhost:6379"],
8
- ["redis://localhost:6377"])
9
-
10
- @r1 = @migrator.old_cluster
11
- @r2 = @migrator.new_cluster
12
- @migrator.stub!(:redis).and_return(@r1)
13
- @pipe = PipeMock.new(@r2)
14
- end
15
-
16
- it "should copy a string" do
17
- @r1.set("a", "some_string")
18
- @migrator.copy_string(@pipe, "a")
19
-
20
- @r2.get("a").should == "some_string"
21
- end
22
-
23
- it "should copy a hash" do
24
- @r1.hmset("myhash",
25
- "first_name", "James",
26
- "last_name", "Randi",
27
- "age", "83")
28
-
29
- @migrator.copy_hash(@pipe, "myhash")
30
-
31
- @r2.hgetall("myhash").should == {"first_name" => "James", "last_name" => "Randi", "age" => "83"}
32
- end
33
-
34
- it "should copy a list" do
35
- ('a'..'z').to_a.each { |val| @r1.lpush("mylist", val) }
36
-
37
- @migrator.copy_list(@pipe, "mylist")
38
-
39
- @r2.lrange("mylist", 0, -1).should == ('a'..'z').to_a
40
- end
41
-
42
- it "should copy a set" do
43
- ('a'..'z').to_a.each { |val| @r1.sadd("myset", val) }
44
-
45
- @migrator.copy_set(@pipe, "myset")
46
-
47
- @r2.smembers("myset").should == ('a'..'z').to_a
48
- end
49
-
50
- it "should copy zset" do
51
- ('a'..'z').to_a.each { |val| @r1.zadd("myzset", rand(100), val) }
52
-
53
- @migrator.copy_zset(@pipe, "myzset")
54
-
55
- @r2.zrange("myzset", 0, -1, :with_scores => true).sort.should == @r1.zrange("myzset", 0, -1, :with_scores => true).sort
56
- end
57
-
58
- end