remote_files 1.3.1 → 1.3.2

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.
data/lib/remote_files.rb CHANGED
@@ -45,7 +45,7 @@ module RemoteFiles
45
45
  if @synchronize_stores
46
46
  @synchronize_stores.call(file)
47
47
  else
48
- synchronize!(file)
48
+ file.synchronize!(file)
49
49
  end
50
50
  elsif block_given?
51
51
  @synchronize_stores = block
@@ -53,4 +53,18 @@ module RemoteFiles
53
53
  raise "invalid call to RemoteFiles.synchronize_stores"
54
54
  end
55
55
  end
56
+
57
+ def self.delete_file(file = nil, &block)
58
+ if file
59
+ if @delete_file
60
+ @delete_file.call(file)
61
+ else
62
+ file.delete_now!(file)
63
+ end
64
+ elsif block_given?
65
+ @delete_file = block
66
+ else
67
+ raise "invalid call to RemoteFiles.delete_file"
68
+ end
69
+ end
56
70
  end
@@ -34,14 +34,14 @@ module RemoteFiles
34
34
  raise "You need to implement #{self.class.name}:#url_matcher"
35
35
  end
36
36
 
37
- def file_from_url(url)
37
+ def file_from_url(url, options = {})
38
38
  matched = url_matcher.match(url)
39
39
 
40
40
  return nil unless matched
41
41
 
42
42
  file_identifier = matched[1]
43
43
 
44
- RemoteFiles::File.new(file_identifier, :stored_in => [identifier])
44
+ RemoteFiles::File.new(file_identifier, options.merge(:stored_in => [identifier]))
45
45
  end
46
46
  end
47
47
  end
@@ -119,7 +119,7 @@ module RemoteFiles
119
119
 
120
120
  def file_from_url(url)
121
121
  stores.each do |store|
122
- file = store.file_from_url(url)
122
+ file = store.file_from_url(url, :configuration => name)
123
123
  return file if file
124
124
  end
125
125
  end
@@ -63,7 +63,7 @@ module RemoteFiles
63
63
  end
64
64
 
65
65
  def delete!
66
- configuration.delete!(self)
66
+ delete_now!
67
67
  end
68
68
 
69
69
  def delete
@@ -74,5 +74,9 @@ module RemoteFiles
74
74
  false
75
75
  end
76
76
  end
77
+
78
+ def delete_now!
79
+ configuration.delete!(self)
80
+ end
77
81
  end
78
82
  end
@@ -4,12 +4,26 @@ require 'resque'
4
4
  module RemoteFiles
5
5
  class ResqueJob
6
6
  def self.perform(options)
7
+ action = options.delete(:_action)
8
+
7
9
  file = RemoteFiles::File.new(options.delete(:identifier), options)
8
- file.synchronize!
10
+
11
+ case action
12
+ when :synchronize
13
+ file.synchronize!
14
+ when :delete
15
+ file.delete_now!(file)
16
+ else
17
+ raise "unknown action #{action.inspect}"
18
+ end
9
19
  end
10
20
  end
11
21
 
12
22
  synchronize_stores do |file|
13
- Resque.enqueue(ResqueJob, file.options)
23
+ Resque.enqueue(ResqueJob, file.options.merge(:_action => :synchronize))
24
+ end
25
+
26
+ delete_file do |file|
27
+ Resque.enqueue(ResqueJob, file.options.merge(:_action => :delete))
14
28
  end
15
29
  end
@@ -1,3 +1,3 @@
1
1
  module RemoteFiles
2
- VERSION = '1.3.1'
2
+ VERSION = '1.3.2'
3
3
  end
@@ -175,4 +175,12 @@ describe RemoteFiles::Configuration do
175
175
  end
176
176
  end
177
177
 
178
+ describe '#file_from_url' do
179
+ it 'should return a file from this configuration' do
180
+ file = @configuration.file_from_url('memory://mock2/foo')
181
+ assert file
182
+ file.configuration.must_equal @configuration
183
+ end
184
+ end
185
+
178
186
  end
data/test/file_test.rb CHANGED
@@ -84,7 +84,7 @@ describe RemoteFiles::File do
84
84
  describe '::from_url' do
85
85
  it 'should return a file from the first store that matches' do
86
86
  url = 'http://something'
87
- @cf.expects(:file_from_url).with(url).returns(@file)
87
+ @cf.expects(:file_from_url).with(url, :configuration => :default).returns(@file)
88
88
  assert_equal @file, RemoteFiles::File.from_url(url)
89
89
  end
90
90
  end
@@ -3,45 +3,73 @@ require 'remote_files/resque_job'
3
3
 
4
4
  describe RemoteFiles::ResqueJob do
5
5
  describe 'loading the implementation file' do
6
- before { load 'remote_files/resque_job.rb' }
6
+ before do
7
+ @file = RemoteFiles::File.new('identifier',
8
+ :content_type => 'text/plain',
9
+ :content => 'content',
10
+ :stored_in => [:s3],
11
+ :foo => :bar
12
+ )
13
+
14
+ load 'remote_files/resque_job.rb'
15
+ end
7
16
 
8
17
  it 'should setup the right synchronize_stores hook' do
9
- file = RemoteFiles::File.new('identifier',
10
- :content_type => 'text/plain',
11
- :content => 'content',
12
- :stored_in => [:s3],
13
- :foo => :bar
18
+ Resque.expects(:enqueue).with(RemoteFiles::ResqueJob,
19
+ :identifier => 'identifier',
20
+ :content_type => 'text/plain',
21
+ :stored_in => [:s3],
22
+ :foo => :bar,
23
+ :configuration => :default,
24
+ :_action => :synchronize
14
25
  )
15
26
 
27
+ RemoteFiles.synchronize_stores(@file)
28
+ end
29
+
30
+ it 'should setup the right delete_file hook' do
16
31
  Resque.expects(:enqueue).with(RemoteFiles::ResqueJob,
17
- :identifier => 'identifier',
18
- :content_type => 'text/plain',
19
- :stored_in => [:s3],
20
- :foo => :bar,
21
- :configuration => :default
32
+ :identifier => 'identifier',
33
+ :content_type => 'text/plain',
34
+ :stored_in => [:s3],
35
+ :foo => :bar,
36
+ :configuration => :default,
37
+ :_action => :delete
22
38
  )
23
39
 
24
- RemoteFiles.synchronize_stores(file)
40
+ RemoteFiles.delete_file(@file)
25
41
  end
26
42
  end
27
43
 
28
- it 'should call #synchronize! on the reconstructed file' do
29
- options = {
30
- :identifier => 'identifier',
31
- :content_type => 'text/plain',
32
- :stored_in => [:s3],
33
- :foo => :bar
34
- }
44
+ describe "running the job" do
45
+ before do
46
+ @options = {
47
+ :identifier => 'identifier',
48
+ :content_type => 'text/plain',
49
+ :stored_in => [:s3],
50
+ :foo => :bar
51
+ }
35
52
 
36
- file = stub
37
- file.expects(:synchronize!)
53
+ @file = stub
38
54
 
39
- RemoteFiles::File.expects(:new).with('identifier',
40
- :content_type => 'text/plain',
41
- :stored_in => [:s3],
42
- :foo => :bar
43
- ).returns(file)
55
+ RemoteFiles::File.expects(:new).with('identifier',
56
+ :content_type => 'text/plain',
57
+ :stored_in => [:s3],
58
+ :foo => :bar
59
+ ).returns(@file)
60
+ end
44
61
 
45
- RemoteFiles::ResqueJob.perform(options)
62
+ it 'should call #synchronize! on the reconstructed file when asked to' do
63
+ @file.expects(:synchronize!)
64
+
65
+ RemoteFiles::ResqueJob.perform(@options.merge(:_action => :synchronize))
66
+ end
67
+
68
+ it 'should call #synchronize! on the reconstructed file when asked to' do
69
+ @file.expects(:delete_now!)
70
+
71
+ RemoteFiles::ResqueJob.perform(@options.merge(:_action => :delete))
72
+ end
46
73
  end
74
+
47
75
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: remote_files
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.3.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-25 00:00:00.000000000 Z
12
+ date: 2012-10-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
@@ -148,7 +148,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
148
148
  version: '0'
149
149
  segments:
150
150
  - 0
151
- hash: 4069569723129805523
151
+ hash: 2988257809019653015
152
152
  required_rubygems_version: !ruby/object:Gem::Requirement
153
153
  none: false
154
154
  requirements:
@@ -157,7 +157,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
157
  version: '0'
158
158
  segments:
159
159
  - 0
160
- hash: 4069569723129805523
160
+ hash: 2988257809019653015
161
161
  requirements: []
162
162
  rubyforge_project:
163
163
  rubygems_version: 1.8.24