qoobaa-s3 0.0.3 → 0.0.4

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/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.3
1
+ 0.0.4
@@ -0,0 +1,127 @@
1
+ require "singleton"
2
+ require "s3"
3
+
4
+ module Technoweenie
5
+ module AttachmentFu
6
+ module Backends
7
+ module S3Backend
8
+ class Configuration
9
+ include Singleton
10
+
11
+ ATTRIBUTES = [:access_key_id, :secret_access_key, :use_ssl, :bucket_name]
12
+
13
+ attr_accessor *ATTRIBUTES
14
+ end
15
+
16
+ def self.configuration
17
+ if block_given?
18
+ yield Configuration.instance
19
+ end
20
+ Configuration.instance
21
+ end
22
+
23
+ def self.included(base)
24
+ include S3
25
+
26
+ service = Service.new(:access_key_id => configuration.access_key_id,
27
+ :secret_access_key => configuration.secret_access_key,
28
+ :use_ssl => configuration.use_ssl)
29
+
30
+ bucket_name = base.attachment_options[:bucket_name] || configuration.bucket_name
31
+
32
+ base.cattr_accessor :bucket
33
+ base.bucket = service.buckets.find(bucket_name)
34
+
35
+ base.before_update :rename_file
36
+ end
37
+
38
+ # The attachment ID used in the full path of a file
39
+ def attachment_path_id
40
+ ((respond_to?(:parent_id) && parent_id) || id).to_s
41
+ end
42
+
43
+ # The pseudo hierarchy containing the file relative to the bucket name
44
+ # Example: <tt>:table_name/:id</tt>
45
+ def base_path
46
+ [attachment_options[:path_prefix], attachment_path_id].join("/")
47
+ end
48
+
49
+ # The full path to the file relative to the bucket name
50
+ # Example: <tt>:table_name/:id/:filename</tt>
51
+ def full_filename(thumbnail = nil)
52
+ [base_path, thumbnail_name_for(thumbnail)].join("/")
53
+ end
54
+
55
+ # All public objects are accessible via a GET request to the S3 servers. You can generate a
56
+ # url for an object using the s3_url method.
57
+ #
58
+ # @photo.s3_url
59
+ #
60
+ # The resulting url is in the form: <tt>http(s)://:server/:bucket_name/:table_name/:id/:file</tt> where
61
+ # the <tt>:server</tt> variable defaults to <tt>AWS::S3 URL::DEFAULT_HOST</tt> (s3.amazonaws.com) and can be
62
+ # set using the configuration parameters in <tt>RAILS_ROOT/config/amazon_s3.yml</tt>.
63
+ #
64
+ # The optional thumbnail argument will output the thumbnail's filename (if any).
65
+ def s3_url(thumbnail = nil)
66
+ if attachment_options[:cname]
67
+ ["#{s3_protocol}#{bucket.name}", full_filename(thumbnail)].join("/")
68
+ else
69
+ ["#{s3_protocol}#{s3_hostname}#{bucket.path_prefix}", full_filename(thumbnail)].join("/")
70
+ end
71
+ end
72
+ alias :public_url :s3_url
73
+ alias :public_filename :s3_url
74
+
75
+ def bucket_name
76
+ self.class.bucket.name
77
+ end
78
+
79
+ def create_temp_file
80
+ write_to_temp_file current_data
81
+ end
82
+
83
+ def current_data
84
+ S3Object.value full_filename, bucket_name
85
+ end
86
+
87
+ def s3_protocol
88
+ attachment_options[:use_ssl] ? "https://" : "http://"
89
+ end
90
+
91
+ def s3_hostname
92
+ attachment_options[:cname] ? self.class.bucket.name : self.class.bucket.host
93
+ end
94
+
95
+ protected
96
+
97
+ def destroy_file
98
+ object = self.class.bucket.find(full_filename)
99
+ object.destroy
100
+ end
101
+
102
+ def rename_file
103
+ return unless filename_changed?
104
+
105
+ old_full_filename = [base_path, filename_was].join("/")
106
+
107
+ object = self.class.bucket.find(old_full_filename)
108
+ new_object = object.copy(:key => full_filename, :acl => attachment_options[:acl])
109
+ object.destroy
110
+ true
111
+ end
112
+
113
+ def save_to_storage
114
+ if save_attachment?
115
+ object = self.class.bucket.objects.build(full_filename)
116
+
117
+ object.content_type = content_type
118
+ object.acl = attachment_options[:acl]
119
+ object.content = temp_path ? File.open(temp_path) : temp_data
120
+ object.save
121
+ end
122
+ true
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
data/lib/s3/object.rb CHANGED
@@ -19,7 +19,7 @@ module S3
19
19
  end
20
20
 
21
21
  def acl=(acl)
22
- @acl = acl.to_s.gsub("_", "-")
22
+ @acl = acl.to_s.gsub("_", "-") if acl
23
23
  end
24
24
 
25
25
  def retrieve
data/s3.gemspec CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{s3}
5
- s.version = "0.0.3"
5
+ s.version = "0.0.4"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Jakub Kuźma", "Mirosław Boruta"]
@@ -22,6 +22,7 @@ Gem::Specification.new do |s|
22
22
  "Rakefile",
23
23
  "VERSION",
24
24
  "bin/s3cmd.rb",
25
+ "extras/s3_backend.rb",
25
26
  "lib/s3.rb",
26
27
  "lib/s3/bucket.rb",
27
28
  "lib/s3/connection.rb",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qoobaa-s3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - "Jakub Ku\xC5\xBAma"
@@ -31,6 +31,7 @@ files:
31
31
  - Rakefile
32
32
  - VERSION
33
33
  - bin/s3cmd.rb
34
+ - extras/s3_backend.rb
34
35
  - lib/s3.rb
35
36
  - lib/s3/bucket.rb
36
37
  - lib/s3/connection.rb