yanker 0.0.3
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.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/.rspec +1 -0
- data/.travis.yml +4 -0
- data/Gemfile +13 -0
- data/LICENSE.txt +22 -0
- data/README.md +9 -0
- data/Rakefile +20 -0
- data/autotest/discover.rb +1 -0
- data/bin/upload.rb +10 -0
- data/config/s3.yaml +3 -0
- data/file_uploader.gemspec +26 -0
- data/lib/file_uploader/version.rb +3 -0
- data/lib/file_uploader.rb +6 -0
- data/lib/resource/resource.rb +47 -0
- data/lib/resource/resource_file.rb +19 -0
- data/lib/resource/resource_http.rb +25 -0
- data/lib/resource/resource_s3.rb +36 -0
- data/lib/resource.rb +4 -0
- data/spec/resource_spec.rb +77 -0
- data/spec/spec_helper.rb +4 -0
- data/test/fixtures/Videodrome_poster.jpg +0 -0
- data/test/fixtures/c43a8cbe52fecbe6fa25f0b85abb44f6_o.jpg +0 -0
- data/test/fixtures/tumblr_mkbbve8idF1ry4cgeo1_1280.jpg +0 -0
- data/test/test_resource.rb +66 -0
- data/test/test_send_to_datastore.rb +27 -0
- data/test/test_temp_files.rb +11 -0
- metadata +135 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 13887aa6fa62ccf09e53e0248663081bad125814
|
4
|
+
data.tar.gz: d93cb5185b8a74c0cf432e9aaad6b5228ea869c2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 539b675e7e949de24edf700e672264d1e12ced4f775465d344df2396e28684b1356d0cd099cb4e29593e619da4c017bfffb763c6cc457bacbc9036d46b60cece
|
7
|
+
data.tar.gz: c6ac8603280bf4508f35dca515a29233bffc00c82a92407c97f0f3011a24d7f82eb99b356981cd1e6fa89bfaadbc4632402fc6d414b1f1a2a243a79457c5bae4
|
data/.gitignore
ADDED
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
--require spec_helper
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Noah Chase
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
Dwemthy's Cloud File Uploader
|
2
|
+
=============================
|
3
|
+
|
4
|
+
A simple file uploader that uses Amazon S3 for remote storage.
|
5
|
+
|
6
|
+
[](https://travis-ci.org/nchase/file_uploader) [](https://coveralls.io/r/nchase/file_uploader)
|
7
|
+
|
8
|
+
|
9
|
+
Be sure to run and use the specs! autotest has been included if you're into that kind of thing.
|
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rake/testtask'
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
require 'bundler'
|
4
|
+
|
5
|
+
task :default => :spec
|
6
|
+
|
7
|
+
Rake::TestTask.new do |task|
|
8
|
+
task.libs << "test"
|
9
|
+
task.test_files = FileList['test/test*.rb']
|
10
|
+
task.verbose = true
|
11
|
+
end
|
12
|
+
|
13
|
+
RSpec::Core::RakeTask.new(:spec)
|
14
|
+
|
15
|
+
task :coverage do
|
16
|
+
`rake spec`
|
17
|
+
`open coverage/index.html`
|
18
|
+
end
|
19
|
+
|
20
|
+
Bundler::GemHelper.install_tasks
|
@@ -0,0 +1 @@
|
|
1
|
+
Autotest.add_discovery { "rspec2" }
|
data/bin/upload.rb
ADDED
data/config/s3.yaml
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'file_uploader/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "yanker"
|
8
|
+
spec.version = FileUploader::VERSION
|
9
|
+
spec.authors = ["Noah Chase"]
|
10
|
+
spec.email = ["nchase@gmail.com"]
|
11
|
+
spec.description = %q{a little file uploader}
|
12
|
+
spec.summary = %q{uploads files}
|
13
|
+
spec.homepage = "http://github.com/nchase/file_uploader"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_dependency 'mime-types'
|
22
|
+
spec.add_dependency 'aws-s3'
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
25
|
+
spec.add_development_dependency "rake"
|
26
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module FileUploader
|
2
|
+
class Resource
|
3
|
+
include S3Resource
|
4
|
+
|
5
|
+
require 'mime-types'
|
6
|
+
require 'digest/md5'
|
7
|
+
require 'fileutils'
|
8
|
+
|
9
|
+
attr_accessor :tempfile
|
10
|
+
|
11
|
+
def self.create(resource)
|
12
|
+
if resource.class == File
|
13
|
+
return FileUploader::FileResource.new(resource)
|
14
|
+
end
|
15
|
+
|
16
|
+
FileUploader::HTTPResource.new(resource)
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(resource)
|
20
|
+
@file = resource
|
21
|
+
end
|
22
|
+
|
23
|
+
def extension
|
24
|
+
self.uri.chomp.downcase.gsub(/.*\./o, '')
|
25
|
+
end
|
26
|
+
|
27
|
+
def path
|
28
|
+
@file.path
|
29
|
+
end
|
30
|
+
|
31
|
+
def uri
|
32
|
+
@file
|
33
|
+
end
|
34
|
+
|
35
|
+
def mime_type(uri)
|
36
|
+
clean_uri = uri.split("?").first
|
37
|
+
|
38
|
+
MIME::Types.type_for(clean_uri).first
|
39
|
+
end
|
40
|
+
|
41
|
+
def destroy
|
42
|
+
# destroys local temporary file
|
43
|
+
|
44
|
+
FileUtils.rm(self.tempfile)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module FileUploader
|
2
|
+
class FileResource < Resource
|
3
|
+
def initialize(resource)
|
4
|
+
super
|
5
|
+
|
6
|
+
FileUtils.copy(self.uri, self.basename)
|
7
|
+
|
8
|
+
self.tempfile = File.open(self.basename)
|
9
|
+
end
|
10
|
+
|
11
|
+
def uri
|
12
|
+
self.path
|
13
|
+
end
|
14
|
+
|
15
|
+
def basename
|
16
|
+
File.basename(@file)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module FileUploader
|
2
|
+
class HTTPResource < Resource
|
3
|
+
require 'net/http'
|
4
|
+
|
5
|
+
def initialize(resource)
|
6
|
+
super
|
7
|
+
|
8
|
+
status, file = Net::HTTP.get_response(URI.parse(self.uri))
|
9
|
+
|
10
|
+
File.open(self.basename, 'wb') do |open_file|
|
11
|
+
open_file.print(file)
|
12
|
+
end
|
13
|
+
|
14
|
+
self.tempfile = File.open(self.basename)
|
15
|
+
end
|
16
|
+
|
17
|
+
def basename
|
18
|
+
File.basename(self.uri)
|
19
|
+
end
|
20
|
+
|
21
|
+
def path
|
22
|
+
File.realdirpath(self.tempfile)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'aws/s3'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
module S3Resource
|
5
|
+
S3_CONFIG = YAML.load_file(File.expand_path('../../../config/s3.yaml', __FILE__))
|
6
|
+
S3_KEY = S3_CONFIG['access_key_id']
|
7
|
+
S3_SECRET = S3_CONFIG['secret_access_key']
|
8
|
+
S3_BUCKET = S3_CONFIG['bucket']
|
9
|
+
|
10
|
+
class S3Object < AWS::S3::S3Object
|
11
|
+
set_current_bucket_to S3_BUCKET
|
12
|
+
end
|
13
|
+
|
14
|
+
def destroy_s3
|
15
|
+
S3Object.delete(self.basename)
|
16
|
+
end
|
17
|
+
|
18
|
+
def send(arguments = {})
|
19
|
+
key = arguments[:key] || S3_KEY
|
20
|
+
secret = arguments[:secret] || S3_SECRET
|
21
|
+
bucket = arguments[:bucket] || S3_BUCKET
|
22
|
+
|
23
|
+
AWS::S3::Base.establish_connection!(
|
24
|
+
:access_key_id => key,
|
25
|
+
:secret_access_key => secret
|
26
|
+
)
|
27
|
+
|
28
|
+
S3Object.store(
|
29
|
+
self.basename,
|
30
|
+
File.open(self.path),
|
31
|
+
S3_BUCKET,
|
32
|
+
:access => :public_read,
|
33
|
+
:use_virtual_directories => true
|
34
|
+
)
|
35
|
+
end
|
36
|
+
end
|
data/lib/resource.rb
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
require 'debugger'
|
2
|
+
require 'resource'
|
3
|
+
|
4
|
+
describe FileUploader::Resource do
|
5
|
+
FILENAME = "c43a8cbe52fecbe6fa25f0b85abb44f6_o.jpg"
|
6
|
+
PARAM = "?#{Time.now.to_i}&whyisthisurlsoLong=true&thisistotallyaRealURI.bleh"
|
7
|
+
|
8
|
+
before(:each) do
|
9
|
+
resource_file = File.open(File.expand_path("../../test/fixtures/#{FILENAME}", __FILE__))
|
10
|
+
resource_url = "http://content.internetvideoarchive.com/content/photos/6894/28955235_.jpg"
|
11
|
+
|
12
|
+
@resource_file = FileUploader::Resource.create(resource_file)
|
13
|
+
@resource_url = FileUploader::Resource.create(resource_url)
|
14
|
+
@resources = [@resource_file, @resource_url]
|
15
|
+
end
|
16
|
+
|
17
|
+
after(:each) do
|
18
|
+
@resources.each { |resource| resource.destroy }
|
19
|
+
end
|
20
|
+
|
21
|
+
it "knows its extension" do
|
22
|
+
@resources.each { |resource|
|
23
|
+
expect(resource.extension).to eq('jpg')
|
24
|
+
}
|
25
|
+
end
|
26
|
+
|
27
|
+
it "even knows its extension when URL has fairly-funky params" do
|
28
|
+
@resources.each { |resource|
|
29
|
+
expect(paramify(resource.extension).split("?").first.match(/(\?|\.|&)/)).to be_nil
|
30
|
+
}
|
31
|
+
end
|
32
|
+
|
33
|
+
it "knows its mimetype" do
|
34
|
+
@resources.each { |resource|
|
35
|
+
expect(resource.mime_type(paramify(resource.uri))).to eq("image/jpeg")
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
it "has a reasonable basename, no matter where it's from" do
|
40
|
+
@resources.each { |resource|
|
41
|
+
expect(resource.basename).to be_a_kind_of(String)
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
it "generates a local tempfile, no matter where it's from" do
|
46
|
+
@resources.each { |resource|
|
47
|
+
expect(File.exist?(resource.basename)).to be_true
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
it "knows it's local path" do
|
52
|
+
expect(@resource_url.path).to eq(File.realdirpath(@resource_url.tempfile))
|
53
|
+
end
|
54
|
+
|
55
|
+
it "mock-sends to the datastore" do
|
56
|
+
stub_const("S3_KEY", "your_key")
|
57
|
+
stub_const("S3_SECRET", "your_secret")
|
58
|
+
stub_const("S3_BUCKET", "your_bucketname")
|
59
|
+
|
60
|
+
class S3Object < AWS::S3::S3Object
|
61
|
+
set_current_bucket_to S3_BUCKET
|
62
|
+
end
|
63
|
+
|
64
|
+
@resources.each { |resource|
|
65
|
+
resource.stub(:send).and_return(true)
|
66
|
+
resource.send(S3_KEY, S3_SECRET, S3_BUCKET)
|
67
|
+
|
68
|
+
S3Object.stub(:exists?).and_return(true)
|
69
|
+
|
70
|
+
expect(S3Object.exists?(resource.basename)).to be_true
|
71
|
+
}
|
72
|
+
end
|
73
|
+
|
74
|
+
def paramify(string)
|
75
|
+
string + PARAM
|
76
|
+
end
|
77
|
+
end
|
data/spec/spec_helper.rb
ADDED
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'debugger'
|
3
|
+
|
4
|
+
require_relative '../lib/resource'
|
5
|
+
|
6
|
+
class TestResource < Test::Unit::TestCase
|
7
|
+
FILENAME = "c43a8cbe52fecbe6fa25f0b85abb44f6_o.jpg"
|
8
|
+
PARAM = "?#{Time.now.to_i}&whyisthisurlsoLong=true&thisistotallyaRealURI.bleh"
|
9
|
+
|
10
|
+
def setup
|
11
|
+
resource_file = File.open(File.expand_path("../../test/fixtures/#{FILENAME}", __FILE__))
|
12
|
+
resource_url = "http://content.internetvideoarchive.com/content/photos/6894/28955235_.jpg"
|
13
|
+
|
14
|
+
@resource_file = FileUploader::Resource.create(resource_file)
|
15
|
+
@resource_url = FileUploader::Resource.create(resource_url)
|
16
|
+
@resources = [@resource_file, @resource_url]
|
17
|
+
end
|
18
|
+
|
19
|
+
def teardown
|
20
|
+
@resources.each { |resource| resource.destroy }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
class TestBaseMethods < TestResource
|
25
|
+
def test_uri_is_string
|
26
|
+
@resources.each { |resource|
|
27
|
+
assert_equal(resource.uri.class, String, "test uri is a string")
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_additional_uri_params
|
32
|
+
@resources.each { |resource|
|
33
|
+
assert_equal(nil, paramify(resource.extension).split("?").first.match(/(\?|\.|&)/), "uri is properly split on extension")
|
34
|
+
}
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_extension
|
38
|
+
@resources.each { |resource|
|
39
|
+
assert_equal("jpg", resource.extension, "resource knows its extension")
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_uri_mimetype_is_expected
|
44
|
+
@resources.each { |resource|
|
45
|
+
assert_equal(resource.mime_type(paramify(@resource_file.uri)), "image/jpeg")
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_uuid_is_expected
|
50
|
+
# note: this might not actually be globally unique.
|
51
|
+
# figure out whether or not this is true and improve
|
52
|
+
# if necessary.
|
53
|
+
|
54
|
+
assert_equal("4381aa9d0489dc3bd0096bfac7364629", @resource_file.pseudo_uuid)
|
55
|
+
# we need another test here for http resources.
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_file_basename_is_correct
|
59
|
+
assert_equal(FILENAME, @resource_file.basename)
|
60
|
+
end
|
61
|
+
|
62
|
+
def paramify(string)
|
63
|
+
string + PARAM
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'test_resource'
|
2
|
+
|
3
|
+
class TestDataStore < TestResource
|
4
|
+
S3_CONFIG = YAML.load_file(File.expand_path('../../config/s3.yaml', __FILE__))
|
5
|
+
S3_KEY = S3_CONFIG['access_key_id']
|
6
|
+
S3_SECRET = S3_CONFIG['secret_access_key']
|
7
|
+
S3_BUCKET = S3_CONFIG['bucket']
|
8
|
+
|
9
|
+
class S3Object < AWS::S3::S3Object
|
10
|
+
set_current_bucket_to S3_BUCKET
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
@resources.each { |resource|
|
15
|
+
resource.destroy
|
16
|
+
resource.destroy_s3
|
17
|
+
}
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_sends_to_datastore
|
21
|
+
@resources.each { |resource|
|
22
|
+
resource.send(S3_KEY, S3_SECRET, S3_BUCKET)
|
23
|
+
|
24
|
+
assert(S3Object.exists?(resource.basename))
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
metadata
ADDED
@@ -0,0 +1,135 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yanker
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.3
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Noah Chase
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-05-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mime-types
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ! '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: aws-s3
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: a little file uploader
|
70
|
+
email:
|
71
|
+
- nchase@gmail.com
|
72
|
+
executables:
|
73
|
+
- upload.rb
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- .gitignore
|
78
|
+
- .rspec
|
79
|
+
- .travis.yml
|
80
|
+
- Gemfile
|
81
|
+
- LICENSE.txt
|
82
|
+
- README.md
|
83
|
+
- Rakefile
|
84
|
+
- autotest/discover.rb
|
85
|
+
- bin/upload.rb
|
86
|
+
- config/s3.yaml
|
87
|
+
- file_uploader.gemspec
|
88
|
+
- lib/file_uploader.rb
|
89
|
+
- lib/file_uploader/version.rb
|
90
|
+
- lib/resource.rb
|
91
|
+
- lib/resource/resource.rb
|
92
|
+
- lib/resource/resource_file.rb
|
93
|
+
- lib/resource/resource_http.rb
|
94
|
+
- lib/resource/resource_s3.rb
|
95
|
+
- spec/resource_spec.rb
|
96
|
+
- spec/spec_helper.rb
|
97
|
+
- test/fixtures/Videodrome_poster.jpg
|
98
|
+
- test/fixtures/c43a8cbe52fecbe6fa25f0b85abb44f6_o.jpg
|
99
|
+
- test/fixtures/tumblr_mkbbve8idF1ry4cgeo1_1280.jpg
|
100
|
+
- test/test_resource.rb
|
101
|
+
- test/test_send_to_datastore.rb
|
102
|
+
- test/test_temp_files.rb
|
103
|
+
homepage: http://github.com/nchase/file_uploader
|
104
|
+
licenses:
|
105
|
+
- MIT
|
106
|
+
metadata: {}
|
107
|
+
post_install_message:
|
108
|
+
rdoc_options: []
|
109
|
+
require_paths:
|
110
|
+
- lib
|
111
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
112
|
+
requirements:
|
113
|
+
- - ! '>='
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
117
|
+
requirements:
|
118
|
+
- - ! '>='
|
119
|
+
- !ruby/object:Gem::Version
|
120
|
+
version: '0'
|
121
|
+
requirements: []
|
122
|
+
rubyforge_project:
|
123
|
+
rubygems_version: 2.0.3
|
124
|
+
signing_key:
|
125
|
+
specification_version: 4
|
126
|
+
summary: uploads files
|
127
|
+
test_files:
|
128
|
+
- spec/resource_spec.rb
|
129
|
+
- spec/spec_helper.rb
|
130
|
+
- test/fixtures/Videodrome_poster.jpg
|
131
|
+
- test/fixtures/c43a8cbe52fecbe6fa25f0b85abb44f6_o.jpg
|
132
|
+
- test/fixtures/tumblr_mkbbve8idF1ry4cgeo1_1280.jpg
|
133
|
+
- test/test_resource.rb
|
134
|
+
- test/test_send_to_datastore.rb
|
135
|
+
- test/test_temp_files.rb
|