vertical-s3_swf_upload 0.3.2.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.
Files changed (37) hide show
  1. data/.gitignore +6 -0
  2. data/CHANGELOG +26 -0
  3. data/Gemfile +4 -0
  4. data/MIT-LICENSE +20 -0
  5. data/Manifest +34 -0
  6. data/README.textile +227 -0
  7. data/Rakefile +14 -0
  8. data/flex_src/bin-release/flex-config.xml +361 -0
  9. data/flex_src/compile +2 -0
  10. data/flex_src/src/Globals.as +15 -0
  11. data/flex_src/src/S3Uploader.as +204 -0
  12. data/flex_src/src/com/adobe/net/MimeTypeMap.as +196 -0
  13. data/flex_src/src/com/elctech/S3UploadOptions.as +32 -0
  14. data/flex_src/src/com/elctech/S3UploadRequest.as +259 -0
  15. data/flex_src/src/com/nathancolgate/s3_swf_upload/BrowseButton.as +55 -0
  16. data/flex_src/src/com/nathancolgate/s3_swf_upload/S3Queue.as +117 -0
  17. data/flex_src/src/com/nathancolgate/s3_swf_upload/S3Signature.as +119 -0
  18. data/flex_src/src/com/nathancolgate/s3_swf_upload/S3Upload.as +111 -0
  19. data/lib/patch/integer.rb +12 -0
  20. data/lib/s3_swf_upload.rb +10 -0
  21. data/lib/s3_swf_upload/railtie.rb +16 -0
  22. data/lib/s3_swf_upload/railties/generators/s3_swf_upload.rb +19 -0
  23. data/lib/s3_swf_upload/railties/generators/uploader/USAGE +10 -0
  24. data/lib/s3_swf_upload/railties/generators/uploader/templates/amazon_s3.yml +20 -0
  25. data/lib/s3_swf_upload/railties/generators/uploader/templates/s3_down_button.gif +0 -0
  26. data/lib/s3_swf_upload/railties/generators/uploader/templates/s3_over_button.gif +0 -0
  27. data/lib/s3_swf_upload/railties/generators/uploader/templates/s3_up_button.gif +0 -0
  28. data/lib/s3_swf_upload/railties/generators/uploader/templates/s3_upload.js +118 -0
  29. data/lib/s3_swf_upload/railties/generators/uploader/templates/s3_upload.swf +0 -0
  30. data/lib/s3_swf_upload/railties/generators/uploader/templates/s3_uploads_controller.rb +57 -0
  31. data/lib/s3_swf_upload/railties/generators/uploader/uploader_generator.rb +20 -0
  32. data/lib/s3_swf_upload/railties/tasks/crossdomain.xml +5 -0
  33. data/lib/s3_swf_upload/s3_config.rb +43 -0
  34. data/lib/s3_swf_upload/signature.rb +203 -0
  35. data/lib/s3_swf_upload/view_helpers.rb +173 -0
  36. data/s3_swf_upload.gemspec +29 -0
  37. metadata +90 -0
@@ -0,0 +1,203 @@
1
+ module S3SwfUpload
2
+ module Signature
3
+ $hexcase = false # hex output format. false - lowercase; true - uppercase
4
+ $b64pad = "=" # base-64 pad character. "=" for strict RFC compliance
5
+ $chrsz = 8 # bits per input character. 8 - ASCII; 16 - Unicode
6
+
7
+ def hex_sha1(s)
8
+ return binb2hex(core_sha1(str2binb(s), s.length * $chrsz))
9
+ end
10
+
11
+ def b64_hmac_sha1(key, data)
12
+ return binb2b64(core_hmac_sha1(key, data))
13
+ end
14
+
15
+ # Absolute barebones "unit" tests
16
+ def assert(expr)
17
+ raise 'Assertion failed' unless (expr)
18
+ end
19
+
20
+ def self_test
21
+ num, cnt = [1732584193, 5]
22
+
23
+ assert(core_sha1(str2binb('abc'), 'abc'.length) == [-519653305, -1566383753, -2070791546, -753729183, -204968198])
24
+ assert(rol(num, cnt) == -391880660)
25
+ assert(safe_add(2042729798, num) == -519653305)
26
+ assert((num.js_shl(cnt)) == -391880672)
27
+ assert((num.js_shr_zf(32 - cnt)) == 12)
28
+ assert(sha1_ft(0, -271733879, -1732584194, 271733878) == -1732584194)
29
+ assert(sha1_kt(0) == 1518500249)
30
+ assert(safe_add(safe_add(rol(num, cnt), sha1_ft(0, -271733879, -1732584194, 271733878)), safe_add(safe_add(-1009589776, 1902273280), sha1_kt(0))) == 286718899)
31
+ assert(str2binb('foo bar hey there') == [1718578976, 1650553376, 1751480608, 1952998770, 1694498816])
32
+ assert(hex_sha1("abc") == "a9993e364706816aba3e25717850c26c9cd0d89d")
33
+ assert(b64_hmac_sha1("foo", "abc") == "frFXMR9cNoJdsSPnjebZpBhUKzI=")
34
+ end
35
+
36
+ # Calculate the SHA-1 of an array of big-endian words, and a bit length
37
+ def core_sha1(x, len)
38
+ # append padding
39
+ x[len >> 5] ||= 0
40
+ x[len >> 5] |= 0x80 << (24 - len % 32)
41
+ x[((len + 64 >> 9) << 4) + 15] = len
42
+
43
+ w = Array.new(80, 0)
44
+ a = 1732584193
45
+ b = -271733879
46
+ c = -1732584194
47
+ d = 271733878
48
+ e = -1009589776
49
+
50
+ #for(var i = 0; i < x.length; i += 16)
51
+ i = 0
52
+ while(i < x.length)
53
+ olda = a
54
+ oldb = b
55
+ oldc = c
56
+ oldd = d
57
+ olde = e
58
+
59
+ #for(var j = 0; j < 80; j++)
60
+ j = 0
61
+ while(j < 80)
62
+ if(j < 16)
63
+ w[j] = x[i + j] || 0
64
+ else
65
+ w[j] = rol(w[j-3] ^ w[j-8] ^ w[j-14] ^ w[j-16], 1)
66
+ end
67
+
68
+ t = safe_add(safe_add(rol(a, 5), sha1_ft(j, b, c, d)),
69
+ safe_add(safe_add(e, w[j]), sha1_kt(j)))
70
+ e = d
71
+ d = c
72
+ c = rol(b, 30)
73
+ b = a
74
+ a = t
75
+ j += 1
76
+ end
77
+
78
+ a = safe_add(a, olda)
79
+ b = safe_add(b, oldb)
80
+ c = safe_add(c, oldc)
81
+ d = safe_add(d, oldd)
82
+ e = safe_add(e, olde)
83
+ i += 16
84
+ end
85
+ return [a, b, c, d, e]
86
+ end
87
+
88
+ # Perform the appropriate triplet combination function for the current
89
+ # iteration
90
+ def sha1_ft(t, b, c, d)
91
+ return (b & c) | ((~b) & d) if(t < 20)
92
+ return b ^ c ^ d if(t < 40)
93
+ return (b & c) | (b & d) | (c & d) if(t < 60)
94
+ return b ^ c ^ d;
95
+ end
96
+
97
+ # Determine the appropriate additive constant for the current iteration
98
+ def sha1_kt(t)
99
+ return (t < 20) ? 1518500249 : (t < 40) ? 1859775393 :
100
+ (t < 60) ? -1894007588 : -899497514
101
+ end
102
+
103
+ # Calculate the HMAC-SHA1 of a key and some data
104
+ def core_hmac_sha1(key, data)
105
+ bkey = str2binb(key)
106
+ if(bkey.length > 16)
107
+ bkey = core_sha1(bkey, key.length * $chrsz)
108
+ end
109
+
110
+ ipad = Array.new(16, 0)
111
+ opad = Array.new(16, 0)
112
+ #for(var i = 0; i < 16; i++)
113
+ i = 0
114
+ while(i < 16)
115
+ ipad[i] = (bkey[i] || 0) ^ 0x36363636
116
+ opad[i] = (bkey[i] || 0) ^ 0x5C5C5C5C
117
+ i += 1
118
+ end
119
+
120
+ hash = core_sha1((ipad + str2binb(data)), 512 + data.length * $chrsz)
121
+ return core_sha1((opad + hash), 512 + 160)
122
+ end
123
+
124
+ # Add integers, wrapping at 2^32. This uses 16-bit operations internally
125
+ # to work around bugs in some JS interpreters.
126
+ def safe_add(x, y)
127
+ v = (x+y) % (2**32)
128
+ return v > 2**31 ? v- 2**32 : v
129
+ end
130
+
131
+ # Bitwise rotate a 32-bit number to the left.
132
+ def rol(num, cnt)
133
+ #return (num << cnt) | (num >>> (32 - cnt))
134
+ return (num.js_shl(cnt)) | (num.js_shr_zf(32 - cnt))
135
+ end
136
+
137
+ # Convert an 8-bit or 16-bit string to an array of big-endian words
138
+ # In 8-bit function, characters >255 have their hi-byte silently ignored.
139
+ def str2binb(str)
140
+ bin = []
141
+ mask = (1 << $chrsz) - 1
142
+ #for(var i = 0; i < str.length * $chrsz; i += $chrsz)
143
+ i = 0
144
+ while(i < str.length * $chrsz)
145
+ bin[i>>5] ||= 0
146
+ bin[i>>5] |= (str[i / $chrsz].ord & mask) << (32 - $chrsz - i%32)
147
+ i += $chrsz
148
+ end
149
+ return bin
150
+ end
151
+
152
+ # Convert an array of big-endian words to a string
153
+ # function binb2str(bin)
154
+ # {
155
+ # var str = "";
156
+ # var mask = (1 << $chrsz) - 1;
157
+ # for(var i = 0; i < bin.length * 32; i += $chrsz)
158
+ # str += String.fromCharCode((bin[i>>5] >>> (32 - $chrsz - i%32)) & mask);
159
+ # return str;
160
+ # }
161
+ #
162
+
163
+ # Convert an array of big-endian words to a hex string.
164
+ def binb2hex(binarray)
165
+ hex_tab = $hexcase ? "0123456789ABCDEF" : "0123456789abcdef"
166
+ str = ""
167
+ #for(var i = 0; i < binarray.length * 4; i++)
168
+ i = 0
169
+ while(i < binarray.length * 4)
170
+ str += hex_tab[(binarray[i>>2] >> ((3 - i%4)*8+4)) & 0xF].chr +
171
+ hex_tab[(binarray[i>>2] >> ((3 - i%4)*8 )) & 0xF].chr
172
+ i += 1
173
+ end
174
+ return str;
175
+ end
176
+
177
+ # Convert an array of big-endian words to a base-64 string
178
+ def binb2b64(binarray)
179
+ tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
180
+ str = ""
181
+
182
+ #for(var i = 0; i < binarray.length * 4; i += 3)
183
+ i = 0
184
+ while(i < binarray.length * 4)
185
+ triplet = (((binarray[i >> 2].to_i >> 8 * (3 - i %4)) & 0xFF) << 16) |
186
+ (((binarray[i+1 >> 2].to_i >> 8 * (3 - (i+1)%4)) & 0xFF) << 8 ) |
187
+ ((binarray[i+2 >> 2].to_i >> 8 * (3 - (i+2)%4)) & 0xFF)
188
+ #for(var j = 0; j < 4; j++)
189
+ j = 0
190
+ while(j < 4)
191
+ if(i * 8 + j * 6 > binarray.length * 32)
192
+ str += $b64pad
193
+ else
194
+ str += tab[(triplet >> 6*(3-j)) & 0x3F].chr
195
+ end
196
+ j += 1
197
+ end
198
+ i += 3
199
+ end
200
+ return str
201
+ end
202
+ end
203
+ end
@@ -0,0 +1,173 @@
1
+ module S3SwfUpload
2
+ module ViewHelpers
3
+ def s3_swf_upload_tag(options = {})
4
+ buttonWidth = options[:buttonWidth] || 100
5
+ buttonHeight = options[:buttonHeight] || 30
6
+ flashVersion = options[:height] || '9.0.0'
7
+ queueSizeLimit = options[:queueSizeLimit] || 100
8
+ fileSizeLimit = options[:fileSizeLimit] || 524288000
9
+ fileTypes = options[:fileTypes] || '*.*'
10
+ fileTypeDescs = options[:fileTypeDescs] || 'All Files'
11
+ selectMultipleFiles = options.has_key?(:selectMultipleFiles) ? options[:selectMultipleFiles] : true
12
+ keyPrefix = options[:keyPrefix] || ''
13
+ signaturePath = options[:signaturePath] || '/s3_uploads.xml'
14
+ swfFilePath = options[:swfFilePath] || '/flash/s3_upload.swf'
15
+ buttonUpPath = options[:buttonUpPath] || '/flash/s3_up_button.gif'
16
+ buttonOverPath = options[:buttonOverPath] || '/flash/s3_over_button.gif'
17
+ buttonDownPath = options[:buttonDownPath] || '/flash/s3_down_button.gif'
18
+
19
+ onFileAdd = options[:onFileAdd] || false
20
+ onFileRemove = options[:onFileRemove] || false
21
+ onFileSizeLimitReached = options[:onFileSizeLimitReached] || false
22
+ onFileNotInQueue = options[:onFileNotInQueue] || false
23
+
24
+ onQueueChange = options[:onQueueChange] || false
25
+ onQueueClear = options[:onQueueClear] || false
26
+ onQueueSizeLimitReached = options[:onQueueSizeLimitReached] || false
27
+ onQueueEmpty = options[:onQueueEmpty] || false
28
+
29
+ onUploadingStop = options[:onUploadingStop] || false
30
+ onUploadingStart = options[:onUploadingStart] || false
31
+ onUploadingFinish = options[:onUploadingFinish] || false
32
+
33
+ onSignatureOpen = options[:onSignatureOpen] || false
34
+ onSignatureProgress = options[:onSignatureProgress] || false
35
+ onSignatureHttpStatus = options[:onSignatureHttpStatus] || false
36
+ onSignatureComplete = options[:onSignatureComplete] || false
37
+ onSignatureSecurityError= options[:onSignatureSecurityError] || false
38
+ onSignatureIOError = options[:onSignatureIOError] || false
39
+ onSignatureXMLError = options[:onSignatureXMLError] || false
40
+
41
+ onUploadOpen = options[:onUploadOpen] || false
42
+ onUploadProgress = options[:onUploadProgress] || false
43
+ onUploadHttpStatus = options[:onUploadHttpStatus] || false
44
+ onUploadComplete = options[:onUploadComplete] || false
45
+ onUploadIOError = options[:onUploadIOError] || false
46
+ onUploadSecurityError = options[:onUploadSecurityError] || false
47
+ onUploadError = options[:onUploadError] || false
48
+
49
+ @include_s3_upload ||= false
50
+ @count ||= 1
51
+
52
+ out = ''
53
+
54
+ if Rails.version < '3.1.0'
55
+ if !@include_s3_upload
56
+ out << javascript_include_tag('s3_upload')
57
+ @include_s3_upload = true
58
+ end
59
+ end
60
+
61
+ out << "\n<script type=\"text/javascript\">\n"
62
+ out << "var s3_swf_#{@count}_object = s3_swf_init('s3_swf_#{@count}', {\n"
63
+ out << "buttonWidth: #{buttonWidth},\n" if buttonWidth
64
+ out << "buttonHeight: #{buttonHeight},\n" if buttonHeight
65
+ out << "flashVersion: '#{flashVersion}',\n" if flashVersion
66
+ out << "queueSizeLimit: #{queueSizeLimit},\n" if queueSizeLimit
67
+ out << "fileSizeLimit: #{fileSizeLimit},\n" if fileSizeLimit
68
+ out << "fileTypes: '#{fileTypes}',\n" if fileTypes
69
+ out << "fileTypeDescs: '#{fileTypeDescs}',\n" if fileTypeDescs
70
+ out << "selectMultipleFiles: #{selectMultipleFiles.to_s},\n"
71
+ out << "keyPrefix: '#{keyPrefix}',\n" if keyPrefix
72
+ out << "signaturePath: '#{signaturePath}',\n" if signaturePath
73
+ out << "swfFilePath: '#{swfFilePath}',\n" if swfFilePath
74
+ out << "buttonUpPath: '#{buttonUpPath}',\n" if buttonUpPath
75
+ out << "buttonOverPath: '#{buttonOverPath}',\n" if buttonOverPath
76
+ out << "buttonDownPath: '#{buttonDownPath}',\n" if buttonDownPath
77
+ out << "swfVarObj: 's3_swf_#{@count}_object',\n"
78
+
79
+ out << %(onFileAdd: function(file){
80
+ #{onFileAdd}
81
+ },) if onFileAdd
82
+ out << %(onFileRemove: function(file){
83
+ #{onFileRemove}
84
+ },) if onFileRemove
85
+ out << %(onFileSizeLimitReached: function(file){
86
+ #{onFileSizeLimitReached}
87
+ },) if onFileSizeLimitReached
88
+ out << %(onFileNotInQueue: function(file){
89
+ #{onFileNotInQueue}
90
+ },) if onFileNotInQueue
91
+
92
+ out << %(onQueueChange: function(queue){
93
+ #{onQueueChange}
94
+ },) if onQueueChange
95
+ out << %(onQueueSizeLimitReached: function(queue){
96
+ #{onQueueSizeLimitReached}
97
+ },) if onQueueSizeLimitReached
98
+ out << %(onQueueEmpty: function(queue){
99
+ #{onQueueEmpty}
100
+ },) if onQueueEmpty
101
+ out << %(onQueueClear: function(queue){
102
+ #{onQueueClear}
103
+ },) if onQueueClear
104
+
105
+ out << %(onUploadingStart: function(){
106
+ #{onUploadingStart}
107
+ },) if onUploadingStart
108
+ out << %(onUploadingStop: function(){
109
+ #{onUploadingStop}
110
+ },) if onUploadingStop
111
+ out << %(onUploadingFinish: function(){
112
+ #{onUploadingFinish}
113
+ },) if onUploadingFinish
114
+
115
+ out << %(onSignatureOpen: function(file,event){
116
+ #{onSignatureOpen}
117
+ },) if onSignatureOpen
118
+ out << %(onSignatureProgress: function(file,progress_event){
119
+ #{onSignatureProgress}
120
+ },) if onSignatureProgress
121
+ out << %(onSignatureSecurityError: function(file,security_error_event){
122
+ #{onSignatureSecurityError}
123
+ },) if onSignatureSecurityError
124
+ out << %(onSignatureComplete: function(file,event){
125
+ #{onSignatureComplete}
126
+ },) if onSignatureComplete
127
+ out << %(onSignatureIOError: function(file,io_error_event){
128
+ #{onSignatureIOError}
129
+ },) if onSignatureIOError
130
+ out << %(onSignatureHttpStatus: function(file,http_status_event){
131
+ #{onSignatureHttpStatus}
132
+ },) if onSignatureHttpStatus
133
+ out << %(onSignatureXMLError: function(file,error_message){
134
+ #{onSignatureXMLError}
135
+ },) if onSignatureXMLError
136
+
137
+ out << %(onUploadError: function(upload_options,error){
138
+ #{onUploadError}
139
+ },) if onUploadError
140
+ out << %(onUploadOpen: function(upload_options,event){
141
+ #{onUploadOpen}
142
+ },) if onUploadOpen
143
+ out << %(onUploadProgress: function(upload_options,progress_event){
144
+ #{onUploadProgress}
145
+ },) if onUploadProgress
146
+ out << %(onUploadIOError: function(upload_options,io_error_event){
147
+ #{onUploadIOError}
148
+ },) if onUploadIOError
149
+ out << %(onUploadHttpStatus: function(upload_options,http_status_event){
150
+ #{onUploadHttpStatus}
151
+ },) if onUploadHttpStatus
152
+ out << %(onUploadSecurityError: function(upload_options,security_error_event){
153
+ #{onUploadSecurityError}
154
+ },) if onUploadSecurityError
155
+ out << %(onUploadComplete: function(upload_options,event){
156
+ #{onUploadComplete}
157
+ },) if onUploadComplete
158
+ # This closes out the object (no comma)
159
+ out << "foo: 'bar'"
160
+ out << "});\n"
161
+ out << "</script>\n"
162
+ out << "<div id=\"s3_swf_#{@count}\">\n"
163
+ out << "Please <a href=\"http://www.adobe.com/go/getflashplayer\">Update</a> your Flash Player to Flash v#{flashVersion} or higher...\n"
164
+ out << "</div>\n"
165
+
166
+ @count += 1
167
+ out
168
+ end
169
+
170
+ end
171
+ end
172
+
173
+ ActionView::Base.send(:include, S3SwfUpload::ViewHelpers)
@@ -0,0 +1,29 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "vertical-s3_swf_upload"
5
+ s.rubyforge_project = "s3_swf_upload"
6
+ s.version = "0.3.2.1"
7
+ s.rubygems_version = "1.3.6"
8
+ s.date = "2010-11-16"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Nathan Colgate"]
12
+ s.email = "nathan@brandnewbox.com"
13
+ s.homepage = "https://github.com/nathancolgate/s3-swf-upload-plugin"
14
+ s.description = "Rails 3 gem that allows you to upload files directly to S3 from your application using flex for file management, css for presentation, and javascript for behavior."
15
+ s.summary = "Rails 3 gem that allows you to upload files directly to S3 from your application using flex for file management, css for presentation, and javascript for behavior."
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "S3_swf_upload", "--main", "README.textile"]
21
+ s.require_paths = ["lib"]
22
+
23
+ if s.respond_to? :specification_version
24
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
25
+ s.specification_version = 3
26
+
27
+ # if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0')
28
+ end
29
+ end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: vertical-s3_swf_upload
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.2.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Nathan Colgate
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2010-11-16 00:00:00.000000000 Z
13
+ dependencies: []
14
+ description: Rails 3 gem that allows you to upload files directly to S3 from your
15
+ application using flex for file management, css for presentation, and javascript
16
+ for behavior.
17
+ email: nathan@brandnewbox.com
18
+ executables: []
19
+ extensions: []
20
+ extra_rdoc_files: []
21
+ files:
22
+ - .gitignore
23
+ - CHANGELOG
24
+ - Gemfile
25
+ - MIT-LICENSE
26
+ - Manifest
27
+ - README.textile
28
+ - Rakefile
29
+ - flex_src/bin-release/flex-config.xml
30
+ - flex_src/compile
31
+ - flex_src/src/Globals.as
32
+ - flex_src/src/S3Uploader.as
33
+ - flex_src/src/com/adobe/net/MimeTypeMap.as
34
+ - flex_src/src/com/elctech/S3UploadOptions.as
35
+ - flex_src/src/com/elctech/S3UploadRequest.as
36
+ - flex_src/src/com/nathancolgate/s3_swf_upload/BrowseButton.as
37
+ - flex_src/src/com/nathancolgate/s3_swf_upload/S3Queue.as
38
+ - flex_src/src/com/nathancolgate/s3_swf_upload/S3Signature.as
39
+ - flex_src/src/com/nathancolgate/s3_swf_upload/S3Upload.as
40
+ - lib/patch/integer.rb
41
+ - lib/s3_swf_upload.rb
42
+ - lib/s3_swf_upload/railtie.rb
43
+ - lib/s3_swf_upload/railties/generators/s3_swf_upload.rb
44
+ - lib/s3_swf_upload/railties/generators/uploader/USAGE
45
+ - lib/s3_swf_upload/railties/generators/uploader/templates/amazon_s3.yml
46
+ - lib/s3_swf_upload/railties/generators/uploader/templates/s3_down_button.gif
47
+ - lib/s3_swf_upload/railties/generators/uploader/templates/s3_over_button.gif
48
+ - lib/s3_swf_upload/railties/generators/uploader/templates/s3_up_button.gif
49
+ - lib/s3_swf_upload/railties/generators/uploader/templates/s3_upload.js
50
+ - lib/s3_swf_upload/railties/generators/uploader/templates/s3_upload.swf
51
+ - lib/s3_swf_upload/railties/generators/uploader/templates/s3_uploads_controller.rb
52
+ - lib/s3_swf_upload/railties/generators/uploader/uploader_generator.rb
53
+ - lib/s3_swf_upload/railties/tasks/crossdomain.xml
54
+ - lib/s3_swf_upload/s3_config.rb
55
+ - lib/s3_swf_upload/signature.rb
56
+ - lib/s3_swf_upload/view_helpers.rb
57
+ - s3_swf_upload.gemspec
58
+ homepage: https://github.com/nathancolgate/s3-swf-upload-plugin
59
+ licenses: []
60
+ post_install_message:
61
+ rdoc_options:
62
+ - --line-numbers
63
+ - --inline-source
64
+ - --title
65
+ - S3_swf_upload
66
+ - --main
67
+ - README.textile
68
+ require_paths:
69
+ - lib
70
+ required_ruby_version: !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ! '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ none: false
78
+ requirements:
79
+ - - ! '>='
80
+ - !ruby/object:Gem::Version
81
+ version: '1.2'
82
+ requirements: []
83
+ rubyforge_project: s3_swf_upload
84
+ rubygems_version: 1.8.11
85
+ signing_key:
86
+ specification_version: 3
87
+ summary: Rails 3 gem that allows you to upload files directly to S3 from your application
88
+ using flex for file management, css for presentation, and javascript for behavior.
89
+ test_files: []
90
+ has_rdoc: