attached 0.2.1 → 0.2.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.
@@ -33,11 +33,11 @@ module Attached
33
33
  #
34
34
  # Usage:
35
35
  #
36
- # Attached::Attachment.options = { :storage => :fs, :path => "/:name/:style/:identifier:extension" }
36
+ # Attached::Attachment.options = { :storage => :fs, :path => ":name/:style/:identifier:extension" }
37
37
 
38
38
  def self.options
39
39
  @options ||= {
40
- :path => "/:name/:style/:identifier:extension",
40
+ :path => ":name/:style/:identifier:extension",
41
41
  :default => :original,
42
42
  :medium => :aws,
43
43
  :credentials => {},
@@ -1,5 +1,6 @@
1
- require 'attached/storage/base'
2
1
  require 'attached/storage/aws'
2
+ require 'attached/storage/google'
3
+ require 'attached/storage/rackspace'
3
4
 
4
5
  module Attached
5
6
  module Storage
@@ -9,14 +10,16 @@ module Attached
9
10
  #
10
11
  # Usage:
11
12
  #
12
- # Attached::Storage.storage()
13
13
  # Attached::Storage.storage(:aws)
14
- # Attached::Storage.storage(:aws, credentials)
14
+ # Attached::Storage.storage(:google)
15
+ # Attached::Storage.storage(:rackspace)
15
16
 
16
17
  def self.storage(medium = :aws, credentials = nil)
17
18
 
18
19
  case medium
19
- when :aws then return Attached::Storage::AWS.new credentials
20
+ when :aws then return Attached::Storage::AWS.new credentials
21
+ when :google then return Attached::Storage::Google.new credentials
22
+ when :rackspace then return Attached::Storage::Rackspace.new credentials
20
23
  else raise "undefined storage medium '#{medium}'"
21
24
  end
22
25
 
@@ -1,9 +1,9 @@
1
1
  require 'attached/storage/base'
2
2
 
3
3
  begin
4
- require 'aws/s3'
4
+ require 'fog'
5
5
  rescue LoadError
6
- raise "installation of 'aws/s3' is required before using 'aws' for storage"
6
+ raise "installation of 'fog' is required before using 'aws' for storage"
7
7
  end
8
8
 
9
9
 
@@ -12,7 +12,8 @@ module Attached
12
12
  class AWS < Base
13
13
 
14
14
 
15
- attr_reader :access
15
+ attr_reader :permissions
16
+
16
17
  attr_reader :bucket
17
18
  attr_reader :access_key_id
18
19
  attr_reader :secret_access_key
@@ -22,13 +23,14 @@ module Attached
22
23
  #
23
24
  # Usage:
24
25
  #
25
- # Attached::Storage::S3.new()
26
- # Attached::Storage::S3.new("s3.yml")
26
+ # Attached::Storage::AWS.new()
27
+ # Attached::Storage::AWS.new("aws.yml")
27
28
 
28
29
  def initialize(credentials)
29
30
  credentials = parse(credentials)
30
31
 
31
- @access = :public_read
32
+ @permissions = { :public => true }
33
+
32
34
  @bucket = credentials[:bucket] || credentials['bucket']
33
35
  @access_key_id = credentials[:access_key_id] || credentials['access_key_id']
34
36
  @secret_access_key = credentials[:secret_access_key] || credentials['secret_access_key']
@@ -42,7 +44,7 @@ module Attached
42
44
  # storage.host
43
45
 
44
46
  def host()
45
- "https://#{self.bucket}.s3.amazonaws.com"
47
+ "https://#{self.bucket}.s3.amazonaws.com/"
46
48
  end
47
49
 
48
50
 
@@ -54,13 +56,12 @@ module Attached
54
56
  # * path - The path to save.
55
57
 
56
58
  def save(file, path)
57
- connect()
58
- begin
59
- ::AWS::S3::S3Object.store(path, file, bucket, :access => access)
60
- rescue ::AWS::S3::NoSuchBucket => e
61
- ::AWS::S3::Bucket.create(bucket)
62
- retry
63
- end
59
+ file = File.open(file.path)
60
+
61
+ directory = connection.directories.get(self.bucket)
62
+ directory ||= connection.directories.create(self.permissions.merge(:key => self.bucket))
63
+
64
+ directory.files.create(self.permissions.merge(:body => file, :key => path))
64
65
  end
65
66
 
66
67
 
@@ -71,22 +72,22 @@ module Attached
71
72
  # * path - The path to destroy.
72
73
 
73
74
  def destroy(path)
74
- connect()
75
- begin
76
- ::AWS::S3::S3Object.delete(path, bucket)
77
- rescue ::AWS::S3::NoSuchBucket => e
78
- end
75
+ directory = connection.directories.get(self.bucket)
76
+ directory ||= connection.directories.create(self.permissions.merge(:key => self.bucket))
77
+
78
+ file = directory.files.get(path)
79
+ file.destroy if file
79
80
  end
80
81
 
81
82
 
82
83
  private
84
+
83
85
 
84
-
85
- # Connect to an AWS S3 server.
86
-
87
- def connect()
88
- @connection ||= ::AWS::S3::Base.establish_connection!(
89
- :access_key_id => access_key_id, :secret_access_key => secret_access_key
86
+ def connection
87
+ @connection ||= Fog::Storage.new(
88
+ :aws_secret_access_key => self.secret_access_key,
89
+ :aws_access_key_id => self.access_key_id,
90
+ :provider => 'AWS'
90
91
  )
91
92
  end
92
93
 
@@ -0,0 +1,97 @@
1
+ require 'attached/storage/base'
2
+
3
+ begin
4
+ require 'fog'
5
+ rescue LoadError
6
+ raise "installation of 'fog' is required before using 'google' for storage"
7
+ end
8
+
9
+
10
+ module Attached
11
+ module Storage
12
+ class Google < Base
13
+
14
+
15
+ attr_reader :permissions
16
+
17
+ attr_reader :bucket
18
+ attr_reader :access_key_id
19
+ attr_reader :secret_access_key
20
+
21
+
22
+ # Create a new AWS interface supporting save and destroy operations.
23
+ #
24
+ # Usage:
25
+ #
26
+ # Attached::Storage::Google.new()
27
+ # Attached::Storage::Google.new("google.yml")
28
+
29
+ def initialize(credentials)
30
+ credentials = parse(credentials)
31
+
32
+ @permissions = { :public => true }
33
+
34
+ @bucket = credentials[:bucket] || credentials['bucket']
35
+ @access_key_id = credentials[:access_key_id] || credentials['access_key_id']
36
+ @secret_access_key = credentials[:secret_access_key] || credentials['secret_access_key']
37
+ end
38
+
39
+
40
+ # Access the host (e.g. bucket.s3.amazonaws.com) for a storage service.
41
+ #
42
+ # Usage:
43
+ #
44
+ # storage.host
45
+
46
+ def host()
47
+ "https://#{self.bucket}.commondatastorage.googleapis.com/"
48
+ end
49
+
50
+
51
+ # Save a file to a given path on AWS S3.
52
+ #
53
+ # Parameters:
54
+ #
55
+ # * file - The file to save.
56
+ # * path - The path to save.
57
+
58
+ def save(file, path)
59
+ file = File.open(file.path)
60
+
61
+ directory = connection.directories.get(self.bucket)
62
+ directory ||= connection.directories.create(self.permissions.merge(:key => self.bucket))
63
+
64
+ directory.files.create(self.permissions.merge(:body => file, :key => path))
65
+ end
66
+
67
+
68
+ # Destroy a file at a given path on AWS S3.
69
+ #
70
+ # Parameters:
71
+ #
72
+ # * path - The path to destroy.
73
+
74
+ def destroy(path)
75
+ directory = connection.directories.get(self.bucket)
76
+ directory ||= connection.directories.create(self.permissions.merge(:key => self.bucket))
77
+
78
+ file = directory.files.get(path)
79
+ file.destroy if file
80
+ end
81
+
82
+
83
+ private
84
+
85
+
86
+ def connection
87
+ @connection ||= Fog::Storage.new(
88
+ :google_storage_secret_access_key => self.secret_access_key,
89
+ :google_storage_access_key_id => self.access_key_id,
90
+ :provider => 'Google'
91
+ )
92
+ end
93
+
94
+
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,96 @@
1
+ require 'attached/storage/base'
2
+
3
+ begin
4
+ require 'fog'
5
+ rescue LoadError
6
+ raise "installation of 'fog' is required before using 'rackspace' for storage"
7
+ end
8
+
9
+
10
+ module Attached
11
+ module Storage
12
+ class Rackspace < Base
13
+
14
+
15
+ attr_reader :permissions
16
+ attr_reader :container
17
+ attr_reader :username
18
+ attr_reader :api_key
19
+
20
+
21
+ # Create a new AWS interface supporting save and destroy operations.
22
+ #
23
+ # Usage:
24
+ #
25
+ # Attached::Storage::Rackspace.new()
26
+ # Attached::Storage::Rackspace.new("rackspace.yml")
27
+
28
+ def initialize(credentials)
29
+ credentials = parse(credentials)
30
+
31
+ @permissions = { :public => true }
32
+
33
+ @container = credentials[:container] || credentials['container']
34
+ @username = credentials[:username] || credentials['username']
35
+ @api_key = credentials[:api_key] || credentials['api_key']
36
+ end
37
+
38
+
39
+ # Access the host (e.g. bucket.s3.amazonaws.com) for a storage service.
40
+ #
41
+ # Usage:
42
+ #
43
+ # storage.host
44
+
45
+ def host()
46
+ "https://#{self.bucket}.s3.amazonaws.com/"
47
+ end
48
+
49
+
50
+ # Save a file to a given path on AWS S3.
51
+ #
52
+ # Parameters:
53
+ #
54
+ # * file - The file to save.
55
+ # * path - The path to save.
56
+
57
+ def save(file, path)
58
+ file = File.open(file.path)
59
+
60
+ directory = connection.directories.get(self.bucket)
61
+ directory ||= connection.directories.create(self.permissions.merge(:key => self.bucket))
62
+
63
+ directory.files.create(self.permissions.merge(:body => file, :key => path))
64
+ end
65
+
66
+
67
+ # Destroy a file at a given path on AWS S3.
68
+ #
69
+ # Parameters:
70
+ #
71
+ # * path - The path to destroy.
72
+
73
+ def destroy(path)
74
+ directory = connection.directories.get(self.bucket)
75
+ directory ||= connection.directories.create(self.permissions.merge(:key => self.bucket))
76
+
77
+ file = directory.files.get(path)
78
+ file.destroy if file
79
+ end
80
+
81
+
82
+ private
83
+
84
+
85
+ def connection
86
+ @connection ||= Fog::Storage.new(
87
+ :rackspace_username => self.username,
88
+ :rackspace_api_key => self.api_key,
89
+ :provider => 'Rackspace'
90
+ )
91
+ end
92
+
93
+
94
+ end
95
+ end
96
+ end
@@ -1,3 +1,3 @@
1
1
  module Attached
2
- VERSION = "0.2.1"
2
+ VERSION = "0.2.2"
3
3
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 1
9
- version: 0.2.1
8
+ - 2
9
+ version: 0.2.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Kevin Sylvestre
@@ -14,11 +14,11 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-03 00:00:00 -05:00
17
+ date: 2011-01-20 00:00:00 -04:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: aws-s3
21
+ name: fog
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
@@ -63,6 +63,8 @@ files:
63
63
  - lib/attached/storage/aws.rb
64
64
  - lib/attached/storage/base.rb
65
65
  - lib/attached/storage/error.rb
66
+ - lib/attached/storage/google.rb
67
+ - lib/attached/storage/rackspace.rb
66
68
  - lib/attached/storage.rb
67
69
  - lib/attached/version.rb
68
70
  - lib/attached.rb