multi_mime 0.0.2 → 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 +6 -14
- data/.gitignore +6 -7
- data/.rubocop.yml +24 -0
- data/.travis.yml +13 -11
- data/Gemfile +3 -30
- data/README.md +30 -23
- data/Rakefile +9 -19
- data/lib/multi_mime.rb +47 -32
- data/lib/multi_mime/adapter.rb +7 -12
- data/lib/multi_mime/adapters/mime_type.rb +7 -17
- data/lib/multi_mime/adapters/mime_types.rb +6 -16
- data/lib/multi_mime/adapters/mimemagic.rb +6 -16
- data/lib/multi_mime/adapters/rack_mime.rb +7 -17
- data/lib/multi_mime/null_type.rb +2 -6
- data/lib/multi_mime/version.rb +2 -2
- data/multi_mime.gemspec +36 -18
- data/spec/shared/adapter.rb +23 -30
- data/spec/spec_helper.rb +24 -23
- data/spec/support/fakefs.rb +5 -5
- data/spec/support/pry.rb +3 -3
- data/spec/support/timecop.rb +2 -0
- data/spec/unit/multi_mime_spec.rb +47 -47
- metadata +168 -14
- data/.rspec +0 -3
- data/spec/support/simplecov.rb +0 -15
data/lib/multi_mime/adapter.rb
CHANGED
@@ -1,30 +1,25 @@
|
|
1
|
-
require
|
1
|
+
require 'singleton'
|
2
|
+
require 'multi_mime/null_type'
|
2
3
|
|
3
4
|
module MultiMime
|
4
5
|
class Adapter
|
5
6
|
include Singleton
|
6
7
|
class << self
|
7
|
-
|
8
|
-
#
|
9
|
-
def type_for(mime_type, opts={})
|
8
|
+
def type_for(mime_type, opts = {})
|
10
9
|
instance.type_for(mime_type, opts)
|
11
10
|
end
|
12
11
|
|
13
|
-
|
14
|
-
def type_for_extension(extension, opts={})
|
12
|
+
def type_for_extension(extension, opts = {})
|
15
13
|
instance.type_for_extension(extension, opts)
|
16
14
|
end
|
17
15
|
|
18
|
-
|
19
|
-
def type_for_path(path, opts={})
|
16
|
+
def type_for_path(path, opts = {})
|
20
17
|
instance.type_for_path(path, opts)
|
21
18
|
end
|
22
19
|
|
23
|
-
|
24
|
-
def type_for_file(file, opts={})
|
20
|
+
def type_for_file(file, opts = {})
|
25
21
|
instance.type_for_file(file, opts)
|
26
22
|
end
|
27
|
-
|
28
23
|
end
|
29
24
|
end
|
30
|
-
end
|
25
|
+
end
|
@@ -1,35 +1,25 @@
|
|
1
|
-
require
|
2
|
-
require "multi_mime/adapter"
|
3
|
-
require "multi_mime/null_type"
|
1
|
+
require 'multi_mime/adapter'
|
4
2
|
|
5
3
|
module MultiMime
|
6
4
|
module Adapters
|
7
|
-
|
8
5
|
# Use the Mime::Type library
|
9
6
|
class MimeType < Adapter
|
10
|
-
|
11
|
-
#
|
12
|
-
def type_for(mime_type, opts={})
|
7
|
+
def type_for(mime_type, opts = {})
|
13
8
|
::Mime::Type.parse_data_with_trailing_star(mime_type).first || MultiMime::NullType.new
|
14
9
|
end
|
15
10
|
|
16
|
-
|
17
|
-
|
18
|
-
extension = extension[/(?:.*\.)(.*$)/, 1] if extension.include?(".") # requires just the extension, without the dot
|
11
|
+
def type_for_extension(extension, opts = {})
|
12
|
+
extension = extension[/(?:.*\.)(.*$)/, 1] if extension.include?('.') # requires just the extension, without the dot
|
19
13
|
::Mime::Type.lookup_by_extension(extension) || MultiMime::NullType.new
|
20
14
|
end
|
21
15
|
|
22
|
-
|
23
|
-
def type_for_path(path, opts={})
|
16
|
+
def type_for_path(path, opts = {})
|
24
17
|
type_for_extension(File.extname(path))
|
25
18
|
end
|
26
19
|
|
27
|
-
|
28
|
-
def type_for_file(file, opts={})
|
20
|
+
def type_for_file(file, opts = {})
|
29
21
|
type_for_extension(File.extname(file))
|
30
22
|
end
|
31
|
-
|
32
23
|
end
|
33
|
-
|
34
24
|
end
|
35
|
-
end
|
25
|
+
end
|
@@ -1,34 +1,24 @@
|
|
1
|
-
require
|
2
|
-
require "multi_mime/adapter"
|
3
|
-
require "multi_mime/null_type"
|
1
|
+
require 'multi_mime/adapter'
|
4
2
|
|
5
3
|
module MultiMime
|
6
4
|
module Adapters
|
7
|
-
|
8
5
|
# Use the MIME::Types library
|
9
6
|
class MimeTypes < Adapter
|
10
|
-
|
11
|
-
#
|
12
|
-
def type_for(mime_type, opts={})
|
7
|
+
def type_for(mime_type, opts = {})
|
13
8
|
::MIME::Types[mime_type].first || MultiMime::NullType.new
|
14
9
|
end
|
15
10
|
|
16
|
-
|
17
|
-
def type_for_extension(extension, opts={})
|
11
|
+
def type_for_extension(extension, opts = {})
|
18
12
|
::MIME::Types.type_for(extension).first || MultiMime::NullType.new
|
19
13
|
end
|
20
14
|
|
21
|
-
|
22
|
-
def type_for_path(path, opts={})
|
15
|
+
def type_for_path(path, opts = {})
|
23
16
|
type_for_extension(File.extname(path))
|
24
17
|
end
|
25
18
|
|
26
|
-
|
27
|
-
def type_for_file(file, opts={})
|
19
|
+
def type_for_file(file, opts = {})
|
28
20
|
type_for_extension(File.extname(file))
|
29
21
|
end
|
30
|
-
|
31
22
|
end
|
32
|
-
|
33
23
|
end
|
34
|
-
end
|
24
|
+
end
|
@@ -1,35 +1,25 @@
|
|
1
|
-
require
|
2
|
-
require "multi_mime/adapter"
|
3
|
-
require "multi_mime/null_type"
|
1
|
+
require 'multi_mime/adapter'
|
4
2
|
|
5
3
|
module MultiMime
|
6
4
|
module Adapters
|
7
|
-
|
8
5
|
# Use the Mimemagic library
|
9
6
|
class Mimemagic < Adapter
|
10
|
-
|
11
|
-
#
|
12
|
-
def type_for(mime_type, opts={})
|
7
|
+
def type_for(mime_type, opts = {})
|
13
8
|
type = ::MimeMagic::EXTENSIONS.key(mime_type) # Mimemagic actually doesnt allow you to simply verify that a mime type exists
|
14
9
|
type ? mime_type : MultiMime::NullType.new
|
15
10
|
end
|
16
11
|
|
17
|
-
|
18
|
-
def type_for_extension(extension, opts={})
|
12
|
+
def type_for_extension(extension, opts = {})
|
19
13
|
::MimeMagic.by_extension(extension) || MultiMime::NullType.new
|
20
14
|
end
|
21
15
|
|
22
|
-
|
23
|
-
def type_for_path(path, opts={})
|
16
|
+
def type_for_path(path, opts = {})
|
24
17
|
type_for_extension(File.extname(path))
|
25
18
|
end
|
26
19
|
|
27
|
-
|
28
|
-
def type_for_file(file, opts={})
|
20
|
+
def type_for_file(file, opts = {})
|
29
21
|
type_for_extension(File.extname(file))
|
30
22
|
end
|
31
|
-
|
32
23
|
end
|
33
|
-
|
34
24
|
end
|
35
|
-
end
|
25
|
+
end
|
@@ -1,36 +1,26 @@
|
|
1
|
-
require
|
2
|
-
require "multi_mime/adapter"
|
3
|
-
require "multi_mime/null_type"
|
1
|
+
require 'multi_mime/adapter'
|
4
2
|
|
5
3
|
module MultiMime
|
6
4
|
module Adapters
|
7
|
-
|
8
5
|
# Use the Rack::Mime library
|
9
6
|
class RackMime < Adapter
|
10
|
-
|
11
|
-
#
|
12
|
-
def type_for(mime_type, opts={})
|
7
|
+
def type_for(mime_type, opts = {})
|
13
8
|
type = ::Rack::Mime::MIME_TYPES.key(mime_type) # Rack::Mime actually doesnt allow you to simply verify that a mime type exists
|
14
9
|
type ? mime_type : MultiMime::NullType.new
|
15
10
|
end
|
16
11
|
|
17
|
-
|
18
|
-
|
19
|
-
extension.insert(0, ".") unless extension[0] == "." # requires the extension with a dot
|
12
|
+
def type_for_extension(extension, opts = {})
|
13
|
+
extension.insert(0, '.') unless extension[0] == '.' # requires the extension with a dot
|
20
14
|
::Rack::Mime.mime_type(extension, MultiMime::NullType.new) # set the fallback to nil
|
21
15
|
end
|
22
16
|
|
23
|
-
|
24
|
-
def type_for_path(path, opts={})
|
17
|
+
def type_for_path(path, opts = {})
|
25
18
|
type_for_extension(File.extname(path))
|
26
19
|
end
|
27
20
|
|
28
|
-
|
29
|
-
def type_for_file(file, opts={})
|
21
|
+
def type_for_file(file, opts = {})
|
30
22
|
type_for_extension(File.extname(file))
|
31
23
|
end
|
32
|
-
|
33
24
|
end
|
34
|
-
|
35
25
|
end
|
36
|
-
end
|
26
|
+
end
|
data/lib/multi_mime/null_type.rb
CHANGED
data/lib/multi_mime/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module MultiMime
|
2
|
-
VERSION =
|
3
|
-
end
|
2
|
+
VERSION = '0.0.3' unless defined?(MultiMime::VERSION)
|
3
|
+
end
|
data/multi_mime.gemspec
CHANGED
@@ -1,20 +1,38 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'multi_mime/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'multi_mime'
|
8
|
+
spec.version = MultiMime::VERSION
|
9
|
+
spec.authors = ['Karl Freeman']
|
10
|
+
spec.email = ['karlfreeman@gmail.com']
|
11
|
+
spec.summary = %q{A generic swappable back-end for Mime::Type detection}
|
12
|
+
spec.description = %q{A generic swappable back-end for Mime::Type detection}
|
13
|
+
spec.homepage = 'https://github.com/karlfreeman/multi_mime'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
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
|
+
spec.required_ruby_version = '>= 1.9.3'
|
21
|
+
|
22
|
+
spec.add_dependency 'fog', '~> 1.12'
|
23
|
+
|
24
|
+
spec.add_development_dependency 'mime-types', '~> 1.5'
|
25
|
+
spec.add_development_dependency 'actionpack', '~> 3.2'
|
26
|
+
spec.add_development_dependency 'rack'
|
27
|
+
spec.add_development_dependency 'mimemagic'
|
28
|
+
|
29
|
+
spec.add_development_dependency 'bundler', '~> 1.5'
|
30
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
31
|
+
spec.add_development_dependency 'kramdown', '>= 0.14'
|
32
|
+
spec.add_development_dependency 'rspec'
|
33
|
+
spec.add_development_dependency 'rubocop'
|
34
|
+
spec.add_development_dependency 'timecop'
|
35
|
+
spec.add_development_dependency 'pry'
|
36
|
+
spec.add_development_dependency 'yard'
|
4
37
|
|
5
|
-
Gem::Specification.new do |gem|
|
6
|
-
gem.add_development_dependency "awesome_print"
|
7
|
-
gem.add_development_dependency "bundler", "~> 1.0"
|
8
|
-
gem.name = "multi_mime"
|
9
|
-
gem.version = MultiMime::VERSION
|
10
|
-
gem.authors = ["Karl Freeman"]
|
11
|
-
gem.email = ["karlfreeman@gmail.com"]
|
12
|
-
gem.license = "MIT"
|
13
|
-
gem.description = %q{A generic swappable back-end for Mime::Type detection}
|
14
|
-
gem.summary = %q{A generic swappable back-end for Mime::Type detection}
|
15
|
-
gem.homepage = "https://github.com/karlfreeman/multi_mime"
|
16
|
-
gem.files = `git ls-files`.split("\n")
|
17
|
-
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
-
gem.require_paths = ["lib"]
|
19
|
-
gem.required_ruby_version = ">= 1.9.2"
|
20
38
|
end
|
data/spec/shared/adapter.rb
CHANGED
@@ -1,22 +1,20 @@
|
|
1
|
-
shared_examples_for
|
1
|
+
shared_examples_for 'an adapter' do |desired_adapter|
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
pending "Adapter #{adapter} couldn't be loaded (not installed?)"
|
8
|
-
end
|
3
|
+
around do |example|
|
4
|
+
desired_constants = MultiMime::REQUIREMENT_MAP.select { |adapter, library, clazz| adapter != desired_adapter }.map { |adapter, library, clazz| clazz }
|
5
|
+
undefine_constants(*desired_constants) { example.call }
|
6
|
+
MultiMime.reset_adapter
|
9
7
|
end
|
10
8
|
|
11
9
|
describe :type_for do
|
12
10
|
|
13
11
|
context :with_correct_mime_type do
|
14
|
-
subject { MultiMime.type_for(
|
15
|
-
it { should eq
|
12
|
+
subject { MultiMime.type_for('text/html') }
|
13
|
+
it { should eq 'text/html' }
|
16
14
|
end
|
17
15
|
|
18
16
|
context :with_incorrect_mime_type do
|
19
|
-
subject { MultiMime.type_for(
|
17
|
+
subject { MultiMime.type_for('foo/bar') }
|
20
18
|
it { should be_nil }
|
21
19
|
it { should be_a MultiMime::NullType }
|
22
20
|
end
|
@@ -26,17 +24,17 @@ shared_examples_for "an adapter" do |adapter|
|
|
26
24
|
describe :type_for_extension do
|
27
25
|
|
28
26
|
context :without_dot do
|
29
|
-
subject { MultiMime.type_for_extension(
|
30
|
-
it { should eq
|
27
|
+
subject { MultiMime.type_for_extension('html') }
|
28
|
+
it { should eq 'text/html' }
|
31
29
|
end
|
32
30
|
|
33
31
|
context :with_dot do
|
34
|
-
subject { MultiMime.type_for_extension(
|
35
|
-
it { should eq
|
32
|
+
subject { MultiMime.type_for_extension('.html') }
|
33
|
+
it { should eq 'text/html' }
|
36
34
|
end
|
37
35
|
|
38
36
|
context :unknown_extension do
|
39
|
-
subject { MultiMime.type_for_extension(
|
37
|
+
subject { MultiMime.type_for_extension('.foo.bar') }
|
40
38
|
it { should be_nil }
|
41
39
|
it { should be_a MultiMime::NullType }
|
42
40
|
end
|
@@ -46,30 +44,26 @@ shared_examples_for "an adapter" do |adapter|
|
|
46
44
|
describe :type_for_path do
|
47
45
|
|
48
46
|
context :known_extension do
|
49
|
-
subject { MultiMime.type_for_path(
|
50
|
-
it { should eq
|
47
|
+
subject { MultiMime.type_for_path('/usr/local/foo/bar.html') }
|
48
|
+
it { should eq 'text/html' }
|
51
49
|
end
|
52
50
|
|
53
51
|
context :unknown_extension do
|
54
|
-
subject { MultiMime.type_for_path(
|
52
|
+
subject { MultiMime.type_for_path('/usr/local/foo/bar.foo') }
|
55
53
|
it { should be_nil }
|
56
54
|
it { should be_a MultiMime::NullType }
|
57
55
|
end
|
58
56
|
|
59
57
|
end
|
60
58
|
|
61
|
-
describe :type_for_file, :
|
59
|
+
describe :type_for_file, fakefs: true do
|
62
60
|
|
63
|
-
let(:extension_file) {
|
64
|
-
|
65
|
-
}
|
66
|
-
let(:extensionless_file) {
|
67
|
-
File.open("foo", "w")
|
68
|
-
}
|
61
|
+
let(:extension_file) { File.open('foo.html', 'w') }
|
62
|
+
let(:extensionless_file) { File.open('foo', 'w') }
|
69
63
|
|
70
64
|
context :extension_file do
|
71
65
|
subject { MultiMime.type_for_file(extension_file) }
|
72
|
-
it { should eq
|
66
|
+
it { should eq 'text/html' }
|
73
67
|
end
|
74
68
|
|
75
69
|
context :extensionless_file do
|
@@ -84,8 +78,8 @@ shared_examples_for "an adapter" do |adapter|
|
|
84
78
|
|
85
79
|
context :with_incorrect_mime_type do
|
86
80
|
|
87
|
-
it
|
88
|
-
mime = MultiMime.type_for(
|
81
|
+
it 'should\'nt raise an exception when querying for formats' do
|
82
|
+
mime = MultiMime.type_for('foo/bar')
|
89
83
|
expect(mime).to be_nil
|
90
84
|
expect(mime).to be_a MultiMime::NullType
|
91
85
|
expect(mime.html?).to be false
|
@@ -95,7 +89,6 @@ shared_examples_for "an adapter" do |adapter|
|
|
95
89
|
|
96
90
|
end
|
97
91
|
|
98
|
-
|
99
92
|
end
|
100
93
|
|
101
|
-
end
|
94
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,34 +1,35 @@
|
|
1
|
-
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
2
|
|
3
|
-
require
|
3
|
+
require 'bundler'
|
4
4
|
Bundler.setup
|
5
|
-
begin; require "awesome_print"; rescue LoadError; end
|
6
5
|
|
7
|
-
|
8
|
-
|
9
|
-
require "support/pry"
|
10
|
-
require "support/fakefs"
|
11
|
-
require "support/simplecov"
|
12
|
-
|
13
|
-
require "shared/adapter"
|
14
|
-
|
15
|
-
require "multi_mime"
|
16
|
-
|
17
|
-
# used as a stupid mixin class
|
18
|
-
class DummyClass
|
6
|
+
%w(support shared).each do |dir|
|
7
|
+
Dir.glob(File.expand_path("../#{dir}/**/*.rb", __FILE__), &method(:require))
|
19
8
|
end
|
20
9
|
|
21
|
-
|
22
|
-
RSpec.configure do |config|
|
10
|
+
require 'multi_mime'
|
23
11
|
|
24
|
-
|
12
|
+
RSpec.configure do |config|
|
25
13
|
config.expect_with :rspec do |c|
|
26
14
|
c.syntax = :expect
|
27
15
|
end
|
16
|
+
end
|
28
17
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
end
|
18
|
+
def jruby?
|
19
|
+
defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
|
20
|
+
end
|
33
21
|
|
34
|
-
|
22
|
+
def undefine_constants(*consts)
|
23
|
+
values = {}
|
24
|
+
consts.each do |const|
|
25
|
+
if Object.const_defined?(const)
|
26
|
+
values[const] = Object.const_get(const)
|
27
|
+
Object.send :remove_const, const
|
28
|
+
end
|
29
|
+
end
|
30
|
+
yield
|
31
|
+
ensure
|
32
|
+
values.each do |const, value|
|
33
|
+
Object.const_set const, value
|
34
|
+
end
|
35
|
+
end
|