defog 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -82,18 +82,21 @@ closing (e.g. via <code>File.unlink(file.path)</code>) or pass
82
82
 
83
83
  === Proxy handle
84
84
 
85
- Calling Defog::Proxy#file without a mode returns a Defog::Handle object that supports remote file query and manipulation:
85
+ Calling Defog::Proxy#file without a mode returns a Defog::Handle object that supports cloud file query and manipulation:
86
86
 
87
- proxy.file("key").exist? # => returns true if the remove file exists
88
- proxy.file("key").delete # => deletes the remote file
87
+ handle = defog.file("key")
88
+ handle.exist? # => true if the cloud file exists
89
+ handle.delete # deletes the cloud file
90
+ handle.size # => size of the cloud file
91
+ handle.last_modified # => modification date of the cloud file
89
92
 
90
- In fact, <code>proxy.file("key", mode, options, &block)</code> is really just shorthand for
93
+ In fact, <code>defog.file("key", mode, options, &block)</code> is really just shorthand for
91
94
 
92
- proxy.file("key").open(mode, options, &block)
95
+ defog.file("key").open(mode, options, &block)
93
96
 
94
97
  In addition, the handle allows you to look up the path where the local proxy file will be if/when you open the proxy (but without actually doing the proxying).
95
98
 
96
- proxy.file("key").proxy_path # returns pathname where proxy file will be when you open
99
+ defog.file("key").proxy_path # => Pathname where proxy file is, was, or will be
97
100
 
98
101
  === Persistence
99
102
 
data/defog.gemspec CHANGED
@@ -17,6 +17,7 @@ Gem::Specification.new do |gem|
17
17
 
18
18
  gem.add_dependency 'fog'
19
19
  gem.add_dependency 'hash_keyword_args'
20
+ gem.add_dependency 'fastandand'
20
21
 
21
22
  gem.add_development_dependency 'rake'
22
23
  gem.add_development_dependency 'rspec'
data/lib/defog/handle.rb CHANGED
@@ -1,3 +1,5 @@
1
+ require "fastandand"
2
+
1
3
  module Defog
2
4
  # Create a Defog::Handle proxy instance via Defog::Proxy#file, such as
3
5
  #
@@ -14,13 +16,17 @@ module Defog
14
16
  # The #proxy_path attribute method returns a <code>Pathname</code>
15
17
  # giving the local proxy file location. Querying the attribute does
16
18
  # <i>not</i> upload, download, synchronize, or otherwise interact with
17
- # the cloud or local proxy file in any way -- just returns a constructed
18
- # a Pathname.
19
+ # the cloud or local proxy file in any way -- it just returns a constructed
20
+ # Pathname. The <code>proxy_path</code> is a deterministic function of the
21
+ # cloud key and Defog::Proxy#proxy_root, so you can rely on it not
22
+ # changing between independent accesses to a cloud file.
19
23
  #
20
24
  class Handle
21
25
 
22
26
  attr_reader :key
23
27
  attr_reader :proxy #:nodoc:
28
+
29
+ # Pathname where proxy file is, was, or will be located.
24
30
  attr_reader :proxy_path
25
31
 
26
32
  def initialize(proxy, key) #:nodoc:
@@ -31,12 +37,23 @@ module Defog
31
37
 
32
38
  # Returns true if the remote cloud file exists
33
39
  def exist?
34
- !!@proxy.fog_wrapper.fog_head(@key)
40
+ !!fog_model
35
41
  end
36
42
 
37
- # Deletes the remote cloud file
43
+ # Deletes the remote cloud file if it exists
38
44
  def delete
39
- @proxy.fog_wrapper.fog_head(@key).destroy
45
+ fog_model.andand.destroy
46
+ end
47
+
48
+ # Returns the size of the remote cloud file, or nil if it doesn't exist
49
+ def size
50
+ fog_model.andand.content_length
51
+ end
52
+
53
+ # Returns the modification date of the remote cloud file, or nil if it
54
+ # doesn't exist
55
+ def last_modified
56
+ fog_model.andand.last_modified
40
57
  end
41
58
 
42
59
  # Returns a URL to access the remote cloud file.
data/lib/defog/proxy.rb CHANGED
@@ -39,7 +39,7 @@ module Defog
39
39
  @fog_wrapper = FogWrapper.connect(opts)
40
40
 
41
41
  @proxy_root ||= case
42
- when defined?(Rails) then Rails.root
42
+ when defined?(Rails) then Rails.root + "tmp"
43
43
  else Pathname.new(Dir.tmpdir)
44
44
  end + "defog" + provider.to_s + location
45
45
 
data/lib/defog/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Defog
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
data/spec/handle_spec.rb CHANGED
@@ -10,15 +10,31 @@ shared_examples "a handle" do |proxyargs|
10
10
  @handle = @proxy.file(key)
11
11
  end
12
12
 
13
- it "should report exist? true if remode cloud file exists" do
13
+ it "should report exist? true if remote cloud file exists" do
14
14
  create_remote("i exist")
15
15
  @handle.should be_exist
16
16
  end
17
17
 
18
- it "should report exist? false if remode cloud file does not exists" do
18
+ it "should report exist? false if remote cloud file does not exist" do
19
19
  @handle.should_not be_exist
20
20
  end
21
21
 
22
+ { :size => :content_length,
23
+ :last_modified => :last_modified,
24
+ :delete => :destroy }.each do |method, fog_method|
25
+
26
+ it "should delegate #{method.inspect} to the fog model #{fog_method.inspect}if the remote file exists" do
27
+ create_remote("delegate me")
28
+ @handle.fog_model.class.any_instance.should_receive(fog_method).and_return { "dummy" }
29
+ @handle.send(method).should == "dummy"
30
+ end
31
+
32
+ it "should return nil from #{method} if the remote file does not exist" do
33
+ @handle.send(method).should be_nil
34
+ end
35
+
36
+ end
37
+
22
38
  it "should delete a remote cloud file" do
23
39
  create_remote("delete me")
24
40
  remote_exist?.should be_true
data/spec/proxy_spec.rb CHANGED
@@ -10,7 +10,7 @@ shared_examples "a proxy" do |args|
10
10
  it "should default proxy root to Rails.root" do
11
11
  with_rails_defined do
12
12
  proxy = Defog::Proxy.new(args)
13
- proxy.proxy_root.should == Rails.root + "defog" + proxy.provider.to_s + proxy.location
13
+ proxy.proxy_root.should == Rails.root + "tmp/defog" + proxy.provider.to_s + proxy.location
14
14
  end
15
15
  end
16
16
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: defog
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-26 00:00:00.000000000 Z
12
+ date: 2012-04-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: fog
16
- requirement: &70310792245820 !ruby/object:Gem::Requirement
16
+ requirement: &70159750978980 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70310792245820
24
+ version_requirements: *70159750978980
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: hash_keyword_args
27
- requirement: &70310792245400 !ruby/object:Gem::Requirement
27
+ requirement: &70159750978560 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,21 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70310792245400
35
+ version_requirements: *70159750978560
36
+ - !ruby/object:Gem::Dependency
37
+ name: fastandand
38
+ requirement: &70159750978140 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :runtime
45
+ prerelease: false
46
+ version_requirements: *70159750978140
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: rake
38
- requirement: &70310792244960 !ruby/object:Gem::Requirement
49
+ requirement: &70159750977700 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ! '>='
@@ -43,10 +54,10 @@ dependencies:
43
54
  version: '0'
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *70310792244960
57
+ version_requirements: *70159750977700
47
58
  - !ruby/object:Gem::Dependency
48
59
  name: rspec
49
- requirement: &70310792244520 !ruby/object:Gem::Requirement
60
+ requirement: &70159750977280 !ruby/object:Gem::Requirement
50
61
  none: false
51
62
  requirements:
52
63
  - - ! '>='
@@ -54,10 +65,10 @@ dependencies:
54
65
  version: '0'
55
66
  type: :development
56
67
  prerelease: false
57
- version_requirements: *70310792244520
68
+ version_requirements: *70159750977280
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: simplecov
60
- requirement: &70310792243920 !ruby/object:Gem::Requirement
71
+ requirement: &70159750976820 !ruby/object:Gem::Requirement
61
72
  none: false
62
73
  requirements:
63
74
  - - ! '>='
@@ -65,10 +76,10 @@ dependencies:
65
76
  version: '0'
66
77
  type: :development
67
78
  prerelease: false
68
- version_requirements: *70310792243920
79
+ version_requirements: *70159750976820
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: simplecov-gem-adapter
71
- requirement: &70310792243380 !ruby/object:Gem::Requirement
82
+ requirement: &70159750976360 !ruby/object:Gem::Requirement
72
83
  none: false
73
84
  requirements:
74
85
  - - ! '>='
@@ -76,7 +87,7 @@ dependencies:
76
87
  version: '0'
77
88
  type: :development
78
89
  prerelease: false
79
- version_requirements: *70310792243380
90
+ version_requirements: *70159750976360
80
91
  description: Wrapper to fog gem, proxying access to cloud files as local files.
81
92
  email:
82
93
  - ronen@barzel.org