distributed_cache 0.1.0 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ea80e92a851ce1d5042dcd3d28263449e2c78f35
4
- data.tar.gz: ace19ce97a6d3ca598c0b8c2e9daf3da549bc10a
3
+ metadata.gz: bae74c33b8445bc66d391fedd024530242ed2bcd
4
+ data.tar.gz: 2c3e0c5bfbceb79feb61d11e4e499c64b3c56683
5
5
  SHA512:
6
- metadata.gz: fbfd450ca33835729c58406e6de69914e2b9141378c3e71c48fc50959fcf0c5fc7338926a1fb60197f43e35ca8151d6b2b8a30e730956b5713ed6162d0ec762b
7
- data.tar.gz: 6b2aa072d7852ddd52655efb26a9dbc037f8b84b4c85433dbd63e6f7b176564f048e9cef11b0e73bd1612c315f674767d23d39d7fd4f47b6146f30350e5926f8
6
+ metadata.gz: 923dcf7aeadaa1a6abeaa641b5291cae63387c4123a1d3e79158979ad9cf08667dac1075d46f83929977ca5dee7bccc4b050423735b6f5d4641b2c7334f83a53
7
+ data.tar.gz: 3a407ee819ddf9807510077e772763a5d10200e863681e943a43fb6f6e0daccf8e2219381cead738be88d1624177bc02506aec37adfd9cff7a61d744c643b075
data/Gemfile CHANGED
@@ -5,4 +5,5 @@ gem 'autoload'
5
5
  group :development do
6
6
  gem "jeweler"
7
7
  gem "rspec"
8
+ gem 'fakeweb'
8
9
  end
data/Gemfile.lock CHANGED
@@ -5,6 +5,7 @@ GEM
5
5
  autoload (0.3.0)
6
6
  builder (3.2.2)
7
7
  diff-lcs (1.2.4)
8
+ fakeweb (1.3.0)
8
9
  faraday (0.8.8)
9
10
  multipart-post (~> 1.2.0)
10
11
  git (1.2.5)
@@ -59,5 +60,6 @@ PLATFORMS
59
60
 
60
61
  DEPENDENCIES
61
62
  autoload
63
+ fakeweb
62
64
  jeweler
63
65
  rspec
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "distributed_cache"
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Doug Youch"]
12
- s.date = "2013-07-31"
12
+ s.date = "2013-08-01"
13
13
  s.description = "Creates tar files of cache directories for distribution"
14
14
  s.email = "doug@sessionm.com"
15
15
  s.extra_rdoc_files = [
@@ -28,9 +28,12 @@ Gem::Specification.new do |s|
28
28
  "VERSION",
29
29
  "distributed_cache.gemspec",
30
30
  "lib/distributed_cache.rb",
31
+ "lib/distributed_cache/bundle.rb",
31
32
  "lib/distributed_cache/config.rb",
32
33
  "lib/distributed_cache/manifest.rb",
33
- "lib/distributed_cache/utils.rb"
34
+ "lib/distributed_cache/utils.rb",
35
+ "spec/distributed_cache_spec.rb",
36
+ "spec/helper.rb"
34
37
  ]
35
38
  s.homepage = "http://github.com/sessionm/distributed_cache"
36
39
  s.licenses = ["MIT"]
@@ -45,15 +48,18 @@ Gem::Specification.new do |s|
45
48
  s.add_runtime_dependency(%q<autoload>, [">= 0"])
46
49
  s.add_development_dependency(%q<jeweler>, [">= 0"])
47
50
  s.add_development_dependency(%q<rspec>, [">= 0"])
51
+ s.add_development_dependency(%q<fakeweb>, [">= 0"])
48
52
  else
49
53
  s.add_dependency(%q<autoload>, [">= 0"])
50
54
  s.add_dependency(%q<jeweler>, [">= 0"])
51
55
  s.add_dependency(%q<rspec>, [">= 0"])
56
+ s.add_dependency(%q<fakeweb>, [">= 0"])
52
57
  end
53
58
  else
54
59
  s.add_dependency(%q<autoload>, [">= 0"])
55
60
  s.add_dependency(%q<jeweler>, [">= 0"])
56
61
  s.add_dependency(%q<rspec>, [">= 0"])
62
+ s.add_dependency(%q<fakeweb>, [">= 0"])
57
63
  end
58
64
  end
59
65
 
@@ -0,0 +1,76 @@
1
+ require 'open-uri'
2
+
3
+ module DistributedCache
4
+ class Bundle
5
+ attr_reader :config, :cache_name, :new_files
6
+
7
+ def initialize(config, cache_name)
8
+ @config = config
9
+ @cache_name = cache_name
10
+
11
+ @new_files = []
12
+ end
13
+
14
+ def install
15
+ download_manifest
16
+
17
+ manifest.files.each do |file, md5|
18
+ tar_file = create_tar_file file
19
+ if ! valid_tar_file?(tar_file, md5)
20
+ download_file file, tar_file
21
+ raise "invalid tar file (#{tar_file}) with md5 (#{md5})" unless valid_tar_file?(tar_file, md5)
22
+ @new_files << tar_file
23
+ elsif @new_files.size > 0
24
+ @new_files << tar_file
25
+ end
26
+ end
27
+
28
+ Dir.chdir(cache_dir) do
29
+ @new_files.each do |tar_file|
30
+ DistributedCache::Utils.untar tar_file
31
+ end
32
+ end
33
+ end
34
+
35
+ def cache_dir
36
+ config.cache_dir.tap do |dir|
37
+ FileUtils.mkdir_p(dir) unless File.exists?(dir)
38
+ end
39
+ end
40
+
41
+ def valid_tar_file?(file, md5)
42
+ File.exists?(file) && Digest::MD5.file(file).to_s == md5
43
+ end
44
+
45
+ def create_tar_file(file)
46
+ "#{config.bundle_dir}/#{file}".tap do |f|
47
+ dir = File.dirname f
48
+ FileUtils.mkdir_p(dir) unless File.exists?(dir)
49
+ end
50
+ end
51
+
52
+ def latest_dir
53
+ "#{config.bundle_dir}/#{cache_name}".tap do |dir|
54
+ FileUtils.mkdir_p(dir) unless File.exists?(dir)
55
+ end
56
+ end
57
+
58
+ def download_manifest
59
+ download_file "#{cache_name}/latest/manifest.yml", manifest_file
60
+ end
61
+
62
+ def download_file(remote_file, local_file)
63
+ open(local_file, 'wb+') do |f|
64
+ f.write open("http://#{config.file_server_with_port}/#{config.remote_bundle_dir}/#{remote_file}", 'rb').read
65
+ end
66
+ end
67
+
68
+ def manifest_file
69
+ "#{latest_dir}/manifest.yml"
70
+ end
71
+
72
+ def manifest
73
+ @manifest ||= DistributedCache::Manifest.load(config, manifest_file)
74
+ end
75
+ end
76
+ end
@@ -1,7 +1,31 @@
1
1
  module DistributedCache
2
2
  class Config < Struct.new(:cache_dir,
3
- :bundler_dir,
4
- :file_servers
3
+ :bundle_dir,
4
+ :file_servers,
5
+ :file_server_port,
6
+ :remote_bundle_dir
5
7
  )
8
+
9
+ def initialize
10
+ self.file_server_port = 80
11
+ self.remote_bundle_dir = 'cache/bundles'
12
+ self.cache_dir = "#{Rails.root}/cache" if defined?(Rails)
13
+ self.bundle_dir = "#{Rails.root}/bundles" if defined?(Rails)
14
+ end
15
+
16
+ def next_file_server
17
+ @first_file_server_idx ||= rand(self.file_servers.size)
18
+ self.file_servers[@first_file_server_idx].tap do
19
+ @first_file_server_idx = (@first_file_server_idx + 1) % self.file_servers.size
20
+ end
21
+ end
22
+
23
+ def file_server_with_port
24
+ if self.file_server_port == 80
25
+ next_file_server
26
+ else
27
+ "#{next_file_server}:#{self.file_server_port}"
28
+ end
29
+ end
6
30
  end
7
31
  end
@@ -1,31 +1,45 @@
1
+ require 'yaml'
2
+
1
3
  module DistributedCache
2
4
  class Manifest
3
5
  attr_reader :config
6
+ attr_accessor :data, :date_format
4
7
 
5
8
  DEFAULT_DATE_FORMAT = '%Y%m%d'
6
9
 
7
- module Fieldst
10
+ module Field
8
11
  CACHE_NAME = 'cache_name'
9
12
  DATE = 'date'
10
13
  DATE_FORMAT = 'date_format'
11
14
  CACHE_VERSION = 'cache_version'
12
15
  FILES = 'files'
13
16
  end
14
- include Fields
17
+ include Field
15
18
 
16
- def initialize(config, cache_name, cache_version)
19
+ def initialize(config, name=nil, version=nil)
17
20
  @config = config
18
- @date = {
19
- CACHE_NAME => cache_name,
20
- CACHE_VERSION => cache_version,
21
- DATE => date,
21
+ @data = {
22
+ CACHE_NAME => name,
23
+ CACHE_VERSION => version,
22
24
  FILES => []
23
25
  }
24
26
  load
25
27
  end
26
28
 
27
29
  def files
28
- data[FILES]
30
+ @data[FILES]
31
+ end
32
+
33
+ def cache_name
34
+ @data[CACHE_NAME]
35
+ end
36
+
37
+ def cache_version
38
+ @data[CACHE_VERSION]
39
+ end
40
+
41
+ def add_file(name, file)
42
+ @data[FILES] << [name, Digest::MD5.file(file).to_s]
29
43
  end
30
44
 
31
45
  def [](key)
@@ -51,7 +65,7 @@ module DistributedCache
51
65
  end
52
66
 
53
67
  def date_format
54
- @data[DATE_FORMAT] || DEFAULT_DATE_FORMAT
68
+ @date_format || DEFAULT_DATE_FORMAT
55
69
  end
56
70
 
57
71
  def date
@@ -89,6 +103,12 @@ module DistributedCache
89
103
  FileUtils.symlink bundle_dir, latest_bundle_dir
90
104
  end
91
105
 
106
+ def self.load(config, manifest_file)
107
+ new(config).tap do |manifest|
108
+ manifest.data = YAML.load_file(manifest_file)
109
+ end
110
+ end
111
+
92
112
  private
93
113
 
94
114
  def load
@@ -15,10 +15,30 @@ module DistributedCache
15
15
  end
16
16
 
17
17
  def self.tar(name, files)
18
- if name[-3..-1] == 'tgz'
19
- `tar zcfh #{name} #{files}`
20
- else
21
- `tar cfh #{name} #{files}`
18
+ cmd =
19
+ if name[-3..-1] == 'tgz'
20
+ "tar zcf #{name} #{files}"
21
+ else
22
+ "tar cf #{name} #{files}"
23
+ end
24
+
25
+ `#{cmd}`.tap do
26
+ status = $?
27
+ raise "failed to (#{cmd}), status #{status}" unless status == 0
28
+ end
29
+ end
30
+
31
+ def self.untar(file)
32
+ cmd =
33
+ if file[-3..-1] == 'tgz'
34
+ "tar zxf #{file}"
35
+ else
36
+ "tar xf #{file}"
37
+ end
38
+
39
+ `#{cmd}`.tap do
40
+ status = $?
41
+ raise "failed to (#{cmd}), status #{status}" unless status == 0
22
42
  end
23
43
  end
24
44
  end
@@ -5,14 +5,11 @@ module DistributedCache
5
5
  autoload :Config, 'distributed_cache/config'
6
6
  autoload :Utils, 'distributed_cache/utils'
7
7
  autoload :Manifest, 'distributed_cache/manifest'
8
+ autoload :Bundle, 'distributed_cache/bundle'
8
9
 
9
- @@config
10
+ @@config = nil
10
11
  def self.config
11
- @@config ||= DistributedCache::Config.new.tap do |c|
12
- if defined?(Rails)
13
- c.cache_dir = "#{Rails.root}/cache"
14
- end
15
- end
12
+ @@config ||= DistributedCache::Config.new
16
13
  end
17
14
 
18
15
  def self.configure
@@ -24,7 +21,7 @@ module DistributedCache
24
21
  # cache_version - this is the version of the klass being saved, guards against changes to model where new fields are added or removed ex: 20130731
25
22
  # update_cache - this method caches data to disk, it is passed the manifest object. This can be used to store things like the last_id. So on later runs you can just pull the new records out of the database.
26
23
  # ex models = self.where("id > #{manifest['last_id'].to_i").all.each { |m| m.cache_model }; manifest['last_id'] = models.map(&:id).max
27
- def self.update_cache(klass)
24
+ def self.update_remote_cache(klass)
28
25
  raise "cache_dir not configured" if self.config.cache_dir.nil?
29
26
  raise "bundle_dir not configured" if self.config.bundle_dir.nil?
30
27
 
@@ -35,16 +32,20 @@ module DistributedCache
35
32
  return unless klass.update_cache(manifest)
36
33
 
37
34
  tar_name = "#{manifest.cache_path}/#{klass.cache_name}-#{manifest.files.size + 1}.#{manifest.full? ? 'tgz' : 'tar'}"
38
- manifest.files << tar_name
39
35
  tar_file = "#{config.bundle_dir}/#{tar_name}"
40
36
  Dir.chdir(config.cache_dir) do
41
37
  DistributedCache::Utils.tar tar_file, klass.cache_name
42
38
  end
39
+ manifest.add_file tar_name, tar_file
43
40
 
44
41
  manifest.save
45
42
  manifest.update_latest_bundle_dir
46
43
  end
47
44
 
45
+ def self.update_local_cache(cache_name)
46
+ DistributedCache::Bundle.new(self.config, cache_name).install
47
+ end
48
+
48
49
  def self.sync
49
50
  self.config.file_servers.each do |server|
50
51
  DistributedCache::Utils.rsync config.bundle_dir, server
@@ -0,0 +1,158 @@
1
+ require 'helper'
2
+
3
+ describe DistributedCache do
4
+ context 'config' do
5
+ it "should be able to configure itself" do
6
+ configure_test_distributed_cache
7
+
8
+ DistributedCache.config.file_servers.should == ['localhost']
9
+ DistributedCache.config.cache_dir = "#{BASE_TMP_DIR}/cache"
10
+ DistributedCache.config.bundle_dir = "#{BASE_TMP_DIR}/bundles"
11
+ end
12
+ end
13
+
14
+ context "update_remote_cache" do
15
+ before(:each) do
16
+ configure_test_distributed_cache
17
+ end
18
+
19
+ it "should create the full cache tar file" do
20
+ DistributedCache.update_remote_cache CachableKlass
21
+ DistributedCache::Manifest.new(DistributedCache.config, CachableKlass.cache_name, CachableKlass.cache_version).tap do |manifest|
22
+ manifest.cache_name.should == CachableKlass.cache_name
23
+ manifest.cache_version.should == CachableKlass.cache_version
24
+ manifest.files.size.should == 1
25
+ manifest.files[0][0].should == "#{CachableKlass.cache_name}/#{Time.now.strftime('%Y%m%d')}/#{CachableKlass.cache_version}/test-1.tgz"
26
+ end
27
+ end
28
+
29
+ it "should add the partial data as another tar file" do
30
+ DistributedCache.update_remote_cache CachableKlass
31
+ DistributedCache.update_remote_cache CachableKlass
32
+ DistributedCache::Manifest.new(DistributedCache.config, CachableKlass.cache_name, CachableKlass.cache_version).tap do |manifest|
33
+ manifest.cache_name.should == CachableKlass.cache_name
34
+ manifest.cache_version.should == CachableKlass.cache_version
35
+ manifest.files.size.should == 2
36
+ manifest.files[0][0].should == "#{CachableKlass.cache_name}/#{Time.now.strftime('%Y%m%d')}/#{CachableKlass.cache_version}/test-1.tgz"
37
+ manifest.files[1][0].should == "#{CachableKlass.cache_name}/#{Time.now.strftime('%Y%m%d')}/#{CachableKlass.cache_version}/test-2.tar"
38
+ end
39
+ end
40
+ end
41
+
42
+ context "update_local_cache" do
43
+ def update_remote_cache_for_context_update_local_cache
44
+ old_bundle_dir = DistributedCache.config.bundle_dir
45
+ old_cache_dir = DistributedCache.config.cache_dir
46
+
47
+ DistributedCache.configure do |config|
48
+ config.bundle_dir = "#{BASE_TMP_DIR}/remote/cache/bundles"
49
+ config.cache_dir = "#{BASE_TMP_DIR}/remote/cache/cache"
50
+ end
51
+
52
+ DistributedCache.update_remote_cache CachableKlass
53
+
54
+ DistributedCache.configure do |config|
55
+ config.bundle_dir = old_bundle_dir
56
+ config.cache_dir = old_cache_dir
57
+ end
58
+ end
59
+
60
+ before(:each) do
61
+ configure_test_distributed_cache
62
+ update_remote_cache_for_context_update_local_cache
63
+ end
64
+
65
+ it "should be able to install the full tar" do
66
+ cache_path = "#{CachableKlass.cache_name}/#{Time.now.strftime('%Y%m%d')}/#{CachableKlass.cache_version}"
67
+ manifest_file = "#{BASE_TMP_DIR}/remote/cache/bundles/test/latest/manifest.yml"
68
+ tar_file_1 = "#{BASE_TMP_DIR}/remote/cache/bundles/#{cache_path}/test-1.tgz"
69
+
70
+ File.exists?(manifest_file).should be_true
71
+ File.exists?(tar_file_1).should be_true
72
+ FakeWeb.register_uri :get, "http://localhost/cache/bundles/test/latest/manifest.yml", :body => manifest_file
73
+ FakeWeb.register_uri :get, "http://localhost/cache/bundles/#{cache_path}/test-1.tgz", :body => tar_file_1
74
+ DistributedCache.update_local_cache CachableKlass.cache_name
75
+
76
+ [['full1', 'test1'], ['full2', 'test2'], ['full3', 'test3']].each do |name, data|
77
+ file = "#{DistributedCache.config.cache_dir}/#{CachableKlass.cache_name}/#{name}"
78
+ File.exists?(file).should be_true
79
+ File.read(file).should == data
80
+ end
81
+ end
82
+
83
+ it "should use the partial tar override existing cache files" do
84
+ cache_path = "#{CachableKlass.cache_name}/#{Time.now.strftime('%Y%m%d')}/#{CachableKlass.cache_version}"
85
+ manifest_file = "#{BASE_TMP_DIR}/remote/cache/bundles/test/latest/manifest.yml"
86
+ tar_file_1 = "#{BASE_TMP_DIR}/remote/cache/bundles/#{cache_path}/test-1.tgz"
87
+ tar_file_2 = "#{BASE_TMP_DIR}/remote/cache/bundles/#{cache_path}/test-2.tar"
88
+
89
+ File.exists?(manifest_file).should be_true
90
+ File.exists?(tar_file_1).should be_true
91
+ FakeWeb.register_uri :get, "http://localhost/cache/bundles/test/latest/manifest.yml", :body => manifest_file
92
+ FakeWeb.register_uri :get, "http://localhost/cache/bundles/#{cache_path}/test-1.tgz", :body => tar_file_1
93
+
94
+ DistributedCache.update_local_cache CachableKlass.cache_name
95
+
96
+ [['full1', 'test1'], ['full2', 'test2'], ['full3', 'test3']].each do |name, data|
97
+ file = "#{DistributedCache.config.cache_dir}/#{CachableKlass.cache_name}/#{name}"
98
+ File.exists?(file).should be_true
99
+ File.read(file).should == data
100
+ end
101
+
102
+ update_remote_cache_for_context_update_local_cache
103
+
104
+ FakeWeb.clean_registry
105
+ File.exists?(tar_file_2).should be_true
106
+ FakeWeb.register_uri :get, "http://localhost/cache/bundles/test/latest/manifest.yml", :body => manifest_file
107
+ FakeWeb.register_uri :get, "http://localhost/cache/bundles/#{cache_path}/test-2.tar", :body => tar_file_2
108
+
109
+ DistributedCache.update_local_cache CachableKlass.cache_name
110
+
111
+ [['full1', 'test1'], ['full2', 'changed2'], ['full3', 'test3'], ['partial1', '1'], ['partial2', '2']].each do |name, data|
112
+ file = "#{DistributedCache.config.cache_dir}/#{CachableKlass.cache_name}/#{name}"
113
+ File.exists?(file).should be_true
114
+ File.read(file).should == data
115
+ end
116
+ end
117
+
118
+ it "should download the tar file if it is missing locally and untar all the files after it" do
119
+ update_remote_cache_for_context_update_local_cache
120
+
121
+ cache_path = "#{CachableKlass.cache_name}/#{Time.now.strftime('%Y%m%d')}/#{CachableKlass.cache_version}"
122
+ manifest_file = "#{BASE_TMP_DIR}/remote/cache/bundles/test/latest/manifest.yml"
123
+ tar_file_1 = "#{BASE_TMP_DIR}/remote/cache/bundles/#{cache_path}/test-1.tgz"
124
+ tar_file_2 = "#{BASE_TMP_DIR}/remote/cache/bundles/#{cache_path}/test-2.tar"
125
+
126
+ File.exists?(manifest_file).should be_true
127
+ File.exists?(tar_file_1).should be_true
128
+ File.exists?(tar_file_2).should be_true
129
+ FakeWeb.register_uri :get, "http://localhost/cache/bundles/test/latest/manifest.yml", :body => manifest_file
130
+ FakeWeb.register_uri :get, "http://localhost/cache/bundles/#{cache_path}/test-1.tgz", :body => tar_file_1
131
+ FakeWeb.register_uri :get, "http://localhost/cache/bundles/#{cache_path}/test-2.tar", :body => tar_file_2
132
+
133
+ DistributedCache.update_local_cache CachableKlass.cache_name
134
+
135
+ [['full1', 'test1'], ['full2', 'changed2'], ['full3', 'test3'], ['partial1', '1'], ['partial2', '2']].each do |name, data|
136
+ file = "#{DistributedCache.config.cache_dir}/#{CachableKlass.cache_name}/#{name}"
137
+ File.exists?(file).should be_true
138
+ File.read(file).should == data
139
+ end
140
+
141
+ local_tar_file_1 = "#{DistributedCache.config.bundle_dir}/#{cache_path}/test-1.tgz"
142
+ File.exists?(local_tar_file_1).should be_true
143
+ File.unlink local_tar_file_1
144
+
145
+ FakeWeb.clean_registry
146
+ FakeWeb.register_uri :get, "http://localhost/cache/bundles/test/latest/manifest.yml", :body => manifest_file
147
+ FakeWeb.register_uri :get, "http://localhost/cache/bundles/#{cache_path}/test-1.tgz", :body => tar_file_1
148
+
149
+ DistributedCache.update_local_cache CachableKlass.cache_name
150
+
151
+ [['full1', 'test1'], ['full2', 'changed2'], ['full3', 'test3'], ['partial1', '1'], ['partial2', '2']].each do |name, data|
152
+ file = "#{DistributedCache.config.cache_dir}/#{CachableKlass.cache_name}/#{name}"
153
+ File.exists?(file).should be_true
154
+ File.read(file).should == data
155
+ end
156
+ end
157
+ end
158
+ end
data/spec/helper.rb ADDED
@@ -0,0 +1,60 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ begin
5
+ Bundler.setup(:default, :development)
6
+ rescue Bundler::BundlerError => e
7
+ $stderr.puts e.message
8
+ $stderr.puts "Run `bundle install` to install missing gems"
9
+ exit e.status_code
10
+ end
11
+
12
+ require 'fakeweb'
13
+
14
+ class CachableKlass
15
+ def self.cache_name
16
+ 'test'
17
+ end
18
+
19
+ def self.cache_version
20
+ 19871009
21
+ end
22
+
23
+ def self.cache_file(name, data="test")
24
+ File.open("#{DistributedCache.config.cache_dir}/#{self.cache_name}/#{name}", 'wb+') { |f| f.write data }
25
+ end
26
+
27
+ def self.update_cache(manifeset)
28
+ if manifeset.full?
29
+ cache_file 'full1', 'test1'
30
+ cache_file 'full2', 'test2'
31
+ cache_file 'full3', 'test3'
32
+ else
33
+ cache_file 'partial1', '1'
34
+ cache_file 'partial2', '2'
35
+ cache_file 'full2', 'changed2'
36
+ end
37
+ end
38
+ end
39
+
40
+ BASE_TMP_DIR = "#{Dir.pwd}/tmp/rspec"
41
+
42
+ def configure_test_distributed_cache
43
+ FileUtils.rm_rf BASE_TMP_DIR
44
+
45
+ DistributedCache.configure do |config|
46
+ config.file_servers = ['localhost']
47
+ config.cache_dir = "#{BASE_TMP_DIR}/cache"
48
+ config.bundle_dir = "#{BASE_TMP_DIR}/bundles"
49
+ end
50
+ end
51
+
52
+ RSpec.configure do |config|
53
+ config.before(:each) do
54
+ FakeWeb.allow_net_connect = false
55
+ FakeWeb.clean_registry
56
+ end
57
+ end
58
+
59
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
60
+ require 'distributed_cache'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: distributed_cache
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Doug Youch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-31 00:00:00.000000000 Z
11
+ date: 2013-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: autoload
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: fakeweb
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description: Creates tar files of cache directories for distribution
56
70
  email: doug@sessionm.com
57
71
  executables: []
@@ -71,9 +85,12 @@ files:
71
85
  - VERSION
72
86
  - distributed_cache.gemspec
73
87
  - lib/distributed_cache.rb
88
+ - lib/distributed_cache/bundle.rb
74
89
  - lib/distributed_cache/config.rb
75
90
  - lib/distributed_cache/manifest.rb
76
91
  - lib/distributed_cache/utils.rb
92
+ - spec/distributed_cache_spec.rb
93
+ - spec/helper.rb
77
94
  homepage: http://github.com/sessionm/distributed_cache
78
95
  licenses:
79
96
  - MIT