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.
@@ -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