multi_mime 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,30 +1,25 @@
1
- require "singleton"
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 "action_dispatch/http/mime_type" unless defined?(::Mime::Type)
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
- def type_for_extension(extension, opts={})
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 "mime/types" unless defined?(::MIME::Types)
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 "mimemagic" unless defined?(::Mimemagic)
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 "rack/mime" unless defined?(::Rack::Mime)
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
- def type_for_extension(extension, opts={})
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
@@ -1,17 +1,13 @@
1
1
  module MultiMime
2
2
  class NullType
3
-
4
- #
5
3
  def nil?
6
4
  true
7
5
  end
8
6
 
9
7
  private
10
8
 
11
- #
12
9
  def method_missing(method, *args)
13
- false if method.to_s[-1, 1] == "?"
10
+ false if method.to_s[-1, 1] == '?'
14
11
  end
15
-
16
12
  end
17
- end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module MultiMime
2
- VERSION = "0.0.2" unless defined?(MultiMime::VERSION)
3
- end
2
+ VERSION = '0.0.3' unless defined?(MultiMime::VERSION)
3
+ end
data/multi_mime.gemspec CHANGED
@@ -1,20 +1,38 @@
1
- # -*- encoding: utf-8 -*-
2
- $:.push File.expand_path("../lib", __FILE__)
3
- require "multi_mime/version"
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
@@ -1,22 +1,20 @@
1
- shared_examples_for "an adapter" do |adapter|
1
+ shared_examples_for 'an adapter' do |desired_adapter|
2
2
 
3
- before do
4
- begin
5
- MultiMime.use adapter
6
- rescue LoadError
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("text/html") }
15
- it { should eq "text/html" }
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("foo/bar") }
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("html") }
30
- it { should eq "text/html" }
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(".html") }
35
- it { should eq "text/html" }
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(".foo.bar") }
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("/usr/local/foo/bar.html") }
50
- it { should eq "text/html" }
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("/usr/local/foo/bar.foo") }
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, :fakefs => true do
59
+ describe :type_for_file, fakefs: true do
62
60
 
63
- let(:extension_file) {
64
- File.open("foo.html", "w")
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 "text/html" }
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 "should'nt raise an exception when querying for formats" do
88
- mime = MultiMime.type_for("foo/bar")
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
- $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
2
 
3
- require "bundler"
3
+ require 'bundler'
4
4
  Bundler.setup
5
- begin; require "awesome_print"; rescue LoadError; end
6
5
 
7
- require "rspec"
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
- def jruby?
31
- defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
32
- end
18
+ def jruby?
19
+ defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'
20
+ end
33
21
 
34
- end
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