larsklevan_s3_swf_upload 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
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 +222 -0
  7. data/Rakefile +14 -0
  8. data/flex_src/bin-release/flex-config.xml +356 -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 +31 -0
  14. data/flex_src/src/com/elctech/S3UploadRequest.as +254 -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 +116 -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 +53 -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 +171 -0
  36. data/s3_swf_upload.gemspec +28 -0
  37. metadata +106 -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,171 @@
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 !@include_s3_upload
55
+ out << javascript_include_tag('s3_upload')
56
+ @include_s3_upload = true
57
+ end
58
+
59
+ out << "\n<script type=\"text/javascript\">\n"
60
+ out << "var s3_swf_#{@count}_object = s3_swf_init('s3_swf_#{@count}', {\n"
61
+ out << "buttonWidth: #{buttonWidth},\n" if buttonWidth
62
+ out << "buttonHeight: #{buttonHeight},\n" if buttonHeight
63
+ out << "flashVersion: '#{flashVersion}',\n" if flashVersion
64
+ out << "queueSizeLimit: #{queueSizeLimit},\n" if queueSizeLimit
65
+ out << "fileSizeLimit: #{fileSizeLimit},\n" if fileSizeLimit
66
+ out << "fileTypes: '#{fileTypes}',\n" if fileTypes
67
+ out << "fileTypeDescs: '#{fileTypeDescs}',\n" if fileTypeDescs
68
+ out << "selectMultipleFiles: #{selectMultipleFiles.to_s},\n"
69
+ out << "keyPrefix: '#{keyPrefix}',\n" if keyPrefix
70
+ out << "signaturePath: '#{signaturePath}',\n" if signaturePath
71
+ out << "swfFilePath: '#{swfFilePath}',\n" if swfFilePath
72
+ out << "buttonUpPath: '#{buttonUpPath}',\n" if buttonUpPath
73
+ out << "buttonOverPath: '#{buttonOverPath}',\n" if buttonOverPath
74
+ out << "buttonDownPath: '#{buttonDownPath}',\n" if buttonDownPath
75
+ out << "swfVarObj: 's3_swf_#{@count}_object',\n"
76
+
77
+ out << %(onFileAdd: function(file){
78
+ #{onFileAdd}
79
+ },) if onFileAdd
80
+ out << %(onFileRemove: function(file){
81
+ #{onFileRemove}
82
+ },) if onFileRemove
83
+ out << %(onFileSizeLimitReached: function(file){
84
+ #{onFileSizeLimitReached}
85
+ },) if onFileSizeLimitReached
86
+ out << %(onFileNotInQueue: function(file){
87
+ #{onFileNotInQueue}
88
+ },) if onFileNotInQueue
89
+
90
+ out << %(onQueueChange: function(queue){
91
+ #{onQueueChange}
92
+ },) if onQueueChange
93
+ out << %(onQueueSizeLimitReached: function(queue){
94
+ #{onQueueSizeLimitReached}
95
+ },) if onQueueSizeLimitReached
96
+ out << %(onQueueEmpty: function(queue){
97
+ #{onQueueEmpty}
98
+ },) if onQueueEmpty
99
+ out << %(onQueueClear: function(queue){
100
+ #{onQueueClear}
101
+ },) if onQueueClear
102
+
103
+ out << %(onUploadingStart: function(){
104
+ #{onUploadingStart}
105
+ },) if onUploadingStart
106
+ out << %(onUploadingStop: function(){
107
+ #{onUploadingStop}
108
+ },) if onUploadingStop
109
+ out << %(onUploadingFinish: function(){
110
+ #{onUploadingFinish}
111
+ },) if onUploadingFinish
112
+
113
+ out << %(onSignatureOpen: function(file,event){
114
+ #{onSignatureOpen}
115
+ },) if onSignatureOpen
116
+ out << %(onSignatureProgress: function(file,progress_event){
117
+ #{onSignatureProgress}
118
+ },) if onSignatureProgress
119
+ out << %(onSignatureSecurityError: function(file,security_error_event){
120
+ #{onSignatureSecurityError}
121
+ },) if onSignatureSecurityError
122
+ out << %(onSignatureComplete: function(file,event){
123
+ #{onSignatureComplete}
124
+ },) if onSignatureComplete
125
+ out << %(onSignatureIOError: function(file,io_error_event){
126
+ #{onSignatureIOError}
127
+ },) if onSignatureIOError
128
+ out << %(onSignatureHttpStatus: function(file,http_status_event){
129
+ #{onSignatureHttpStatus}
130
+ },) if onSignatureHttpStatus
131
+ out << %(onSignatureXMLError: function(file,error_message){
132
+ #{onSignatureXMLError}
133
+ },) if onSignatureXMLError
134
+
135
+ out << %(onUploadError: function(upload_options,error){
136
+ #{onUploadError}
137
+ },) if onUploadError
138
+ out << %(onUploadOpen: function(upload_options,event){
139
+ #{onUploadOpen}
140
+ },) if onUploadOpen
141
+ out << %(onUploadProgress: function(upload_options,progress_event){
142
+ #{onUploadProgress}
143
+ },) if onUploadProgress
144
+ out << %(onUploadIOError: function(upload_options,io_error_event){
145
+ #{onUploadIOError}
146
+ },) if onUploadIOError
147
+ out << %(onUploadHttpStatus: function(upload_options,http_status_event){
148
+ #{onUploadHttpStatus}
149
+ },) if onUploadHttpStatus
150
+ out << %(onUploadSecurityError: function(upload_options,security_error_event){
151
+ #{onUploadSecurityError}
152
+ },) if onUploadSecurityError
153
+ out << %(onUploadComplete: function(upload_options,event){
154
+ #{onUploadComplete}
155
+ },) if onUploadComplete
156
+ # This closes out the object (no comma)
157
+ out << "foo: 'bar'"
158
+ out << "});\n"
159
+ out << "</script>\n"
160
+ out << "<div id=\"s3_swf_#{@count}\">\n"
161
+ out << "Please <a href=\"http://www.adobe.com/go/getflashplayer\">Update</a> your Flash Player to Flash v#{flashVersion} or higher...\n"
162
+ out << "</div>\n"
163
+
164
+ @count += 1
165
+ out
166
+ end
167
+
168
+ end
169
+ end
170
+
171
+ ActionView::Base.send(:include, S3SwfUpload::ViewHelpers)
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = "larsklevan_s3_swf_upload"
5
+ s.version = "0.3.2"
6
+ s.rubygems_version = "1.3.6"
7
+ s.date = "2010-11-16"
8
+
9
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
10
+ s.authors = ["Nathan Colgate"]
11
+ s.email = "nathan@brandnewbox.com"
12
+ s.homepage = "https://github.com/nathancolgate/s3-swf-upload-plugin"
13
+ 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. Published by larsklevan since original is not published."
14
+ 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. Published by larsklevan since original is not published."
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "S3_swf_upload", "--main", "README.textile"]
20
+ s.require_paths = ["lib"]
21
+
22
+ if s.respond_to? :specification_version
23
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
+ s.specification_version = 3
25
+
26
+ # if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0')
27
+ end
28
+ end
metadata ADDED
@@ -0,0 +1,106 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: larsklevan_s3_swf_upload
3
+ version: !ruby/object:Gem::Version
4
+ hash: 23
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 2
10
+ version: 0.3.2
11
+ platform: ruby
12
+ authors:
13
+ - Nathan Colgate
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-11-16 00:00:00 Z
19
+ dependencies: []
20
+
21
+ 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. Published by larsklevan since original is not published.
22
+ email: nathan@brandnewbox.com
23
+ executables: []
24
+
25
+ extensions: []
26
+
27
+ extra_rdoc_files: []
28
+
29
+ files:
30
+ - .gitignore
31
+ - CHANGELOG
32
+ - Gemfile
33
+ - MIT-LICENSE
34
+ - Manifest
35
+ - README.textile
36
+ - Rakefile
37
+ - flex_src/bin-release/flex-config.xml
38
+ - flex_src/compile
39
+ - flex_src/src/Globals.as
40
+ - flex_src/src/S3Uploader.as
41
+ - flex_src/src/com/adobe/net/MimeTypeMap.as
42
+ - flex_src/src/com/elctech/S3UploadOptions.as
43
+ - flex_src/src/com/elctech/S3UploadRequest.as
44
+ - flex_src/src/com/nathancolgate/s3_swf_upload/BrowseButton.as
45
+ - flex_src/src/com/nathancolgate/s3_swf_upload/S3Queue.as
46
+ - flex_src/src/com/nathancolgate/s3_swf_upload/S3Signature.as
47
+ - flex_src/src/com/nathancolgate/s3_swf_upload/S3Upload.as
48
+ - lib/patch/integer.rb
49
+ - lib/s3_swf_upload.rb
50
+ - lib/s3_swf_upload/railtie.rb
51
+ - lib/s3_swf_upload/railties/generators/s3_swf_upload.rb
52
+ - lib/s3_swf_upload/railties/generators/uploader/USAGE
53
+ - lib/s3_swf_upload/railties/generators/uploader/templates/amazon_s3.yml
54
+ - lib/s3_swf_upload/railties/generators/uploader/templates/s3_down_button.gif
55
+ - lib/s3_swf_upload/railties/generators/uploader/templates/s3_over_button.gif
56
+ - lib/s3_swf_upload/railties/generators/uploader/templates/s3_up_button.gif
57
+ - lib/s3_swf_upload/railties/generators/uploader/templates/s3_upload.js
58
+ - lib/s3_swf_upload/railties/generators/uploader/templates/s3_upload.swf
59
+ - lib/s3_swf_upload/railties/generators/uploader/templates/s3_uploads_controller.rb
60
+ - lib/s3_swf_upload/railties/generators/uploader/uploader_generator.rb
61
+ - lib/s3_swf_upload/railties/tasks/crossdomain.xml
62
+ - lib/s3_swf_upload/s3_config.rb
63
+ - lib/s3_swf_upload/signature.rb
64
+ - lib/s3_swf_upload/view_helpers.rb
65
+ - s3_swf_upload.gemspec
66
+ homepage: https://github.com/nathancolgate/s3-swf-upload-plugin
67
+ licenses: []
68
+
69
+ post_install_message:
70
+ rdoc_options:
71
+ - --line-numbers
72
+ - --inline-source
73
+ - --title
74
+ - S3_swf_upload
75
+ - --main
76
+ - README.textile
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ none: false
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
87
+ version: "0"
88
+ required_rubygems_version: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ hash: 11
94
+ segments:
95
+ - 1
96
+ - 2
97
+ version: "1.2"
98
+ requirements: []
99
+
100
+ rubyforge_project:
101
+ rubygems_version: 1.8.10
102
+ signing_key:
103
+ specification_version: 3
104
+ 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. Published by larsklevan since original is not published.
105
+ test_files: []
106
+