s3_swf_upload 0.3.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.
- data/.gitignore +6 -0
- data/CHANGELOG +26 -0
- data/Gemfile +4 -0
- data/MIT-LICENSE +20 -0
- data/Manifest +34 -0
- data/README.textile +223 -0
- data/Rakefile +14 -0
- data/flex_src/bin-release/flex-config.xml +361 -0
- data/flex_src/compile +2 -0
- data/flex_src/src/Globals.as +15 -0
- data/flex_src/src/S3Uploader.as +204 -0
- data/flex_src/src/com/adobe/net/MimeTypeMap.as +196 -0
- data/flex_src/src/com/elctech/S3UploadOptions.as +32 -0
- data/flex_src/src/com/elctech/S3UploadRequest.as +259 -0
- data/flex_src/src/com/nathancolgate/s3_swf_upload/BrowseButton.as +55 -0
- data/flex_src/src/com/nathancolgate/s3_swf_upload/S3Queue.as +117 -0
- data/flex_src/src/com/nathancolgate/s3_swf_upload/S3Signature.as +118 -0
- data/flex_src/src/com/nathancolgate/s3_swf_upload/S3Upload.as +111 -0
- data/lib/patch/integer.rb +12 -0
- data/lib/s3_swf_upload/railtie.rb +16 -0
- data/lib/s3_swf_upload/railties/generators/s3_swf_upload.rb +19 -0
- data/lib/s3_swf_upload/railties/generators/uploader/USAGE +10 -0
- data/lib/s3_swf_upload/railties/generators/uploader/templates/amazon_s3.yml +20 -0
- data/lib/s3_swf_upload/railties/generators/uploader/templates/s3_down_button.gif +0 -0
- data/lib/s3_swf_upload/railties/generators/uploader/templates/s3_over_button.gif +0 -0
- data/lib/s3_swf_upload/railties/generators/uploader/templates/s3_up_button.gif +0 -0
- data/lib/s3_swf_upload/railties/generators/uploader/templates/s3_upload.js +118 -0
- data/lib/s3_swf_upload/railties/generators/uploader/templates/s3_upload.swf +0 -0
- data/lib/s3_swf_upload/railties/generators/uploader/templates/s3_uploads_controller.rb +53 -0
- data/lib/s3_swf_upload/railties/generators/uploader/uploader_generator.rb +20 -0
- data/lib/s3_swf_upload/railties/tasks/crossdomain.xml +5 -0
- data/lib/s3_swf_upload/s3_config.rb +43 -0
- data/lib/s3_swf_upload/signature.rb +203 -0
- data/lib/s3_swf_upload/view_helpers.rb +171 -0
- data/lib/s3_swf_upload.rb +10 -0
- data/s3_swf_upload.gemspec +29 -0
- metadata +103 -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,10 @@
|
|
1
|
+
require 'patch/integer'
|
2
|
+
require 's3_swf_upload/signature'
|
3
|
+
require 's3_swf_upload/s3_config'
|
4
|
+
require 's3_swf_upload/view_helpers'
|
5
|
+
|
6
|
+
module S3SwfUpload
|
7
|
+
# Rails 3 Railties!
|
8
|
+
# https://gist.github.com/af7e572c2dc973add221
|
9
|
+
require 's3_swf_upload/railtie' if defined?(Rails)
|
10
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |s|
|
4
|
+
s.name = "s3_swf_upload"
|
5
|
+
s.rubyforge_project = "s3_swf_upload"
|
6
|
+
s.version = "0.3.2"
|
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,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: s3_swf_upload
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 3
|
8
|
+
- 2
|
9
|
+
version: 0.3.2
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Nathan Colgate
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-11-16 00:00:00 -08:00
|
18
|
+
default_executable:
|
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.
|
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
|
+
has_rdoc: true
|
67
|
+
homepage: https://github.com/nathancolgate/s3-swf-upload-plugin
|
68
|
+
licenses: []
|
69
|
+
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options:
|
72
|
+
- --line-numbers
|
73
|
+
- --inline-source
|
74
|
+
- --title
|
75
|
+
- S3_swf_upload
|
76
|
+
- --main
|
77
|
+
- README.textile
|
78
|
+
require_paths:
|
79
|
+
- lib
|
80
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
segments:
|
85
|
+
- 0
|
86
|
+
version: "0"
|
87
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
segments:
|
92
|
+
- 1
|
93
|
+
- 2
|
94
|
+
version: "1.2"
|
95
|
+
requirements: []
|
96
|
+
|
97
|
+
rubyforge_project: s3_swf_upload
|
98
|
+
rubygems_version: 1.3.6
|
99
|
+
signing_key:
|
100
|
+
specification_version: 3
|
101
|
+
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.
|
102
|
+
test_files: []
|
103
|
+
|