redis_migrator 0.0.1 → 0.1.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.
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