mini_mime 1.0.1 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6418281c1f9518b9e7afc48f4243db64e69b2b7102f7b5b75ef6222cc71597a7
4
- data.tar.gz: 98a2802a299bea38149948706d8375211be7de314af5afcbf6fd07d50c185c06
3
+ metadata.gz: 55bbfe99751f28efbb29008a1cbff40f7e16f6f376aa08be5b0928ca19e57fe3
4
+ data.tar.gz: e99bc29ec1a02a7ce08fe3cc6d997cdce7a073750ba728d97400fe41a9024799
5
5
  SHA512:
6
- metadata.gz: ced08523dacb58cd959d3ad4f54b331e6b7332682166477e9a32e5dbd8583071e27c10d6b2c570db29d2d736579c13404d85589466d330de41862faf7c630c63
7
- data.tar.gz: eca14d12f6b9a1408f8754fc59fc10faa0440b34ed0e7ade60d3114ec2ab933dab453fbfa1ae1ac63b765538710d31a224b1d195637c631c1725542f320083dc
6
+ metadata.gz: f6b99913c9255b3d71114bdb8c221d583b5d257669cb4f3f06ea9826143906a184f81b34e62b8c6502a7f65827709e4b0c5634323c2f6636aa05c776fd6df294
7
+ data.tar.gz: 3a61ba35ba3cba331415df05034724025e917b6fccfc9aa78268a9cffe44887758f8c049bb67c4e4635f88a180ec93bd7ce2339130a034a361a3a54503b432a0
@@ -0,0 +1,40 @@
1
+ name: Mini Mime Tests
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches:
7
+ - master
8
+
9
+ jobs:
10
+ build:
11
+ runs-on: ubuntu-latest
12
+ name: "Ruby ${{ matrix.ruby }} / Failure allowed: ${{ matrix.experimental }}"
13
+ continue-on-error: ${{ matrix.experimental }}
14
+ strategy:
15
+ fail-fast: false
16
+ matrix:
17
+ ruby: ["2.4", "2.5", "2.6", "2.7"]
18
+ experimental: [false]
19
+ include:
20
+ - ruby: "ruby-head"
21
+ experimental: true
22
+ - ruby: "truffleruby-head"
23
+ experimental: true
24
+ - ruby: "jruby-head"
25
+ experimental: true
26
+ - ruby: "jruby-9.1.17.0"
27
+ experimental: true
28
+ - ruby: "jruby-9.2.13.0"
29
+ experimental: true
30
+ steps:
31
+ - uses: actions/checkout@v2
32
+ - uses: ruby/setup-ruby@v1
33
+ with:
34
+ ruby-version: ${{ matrix.ruby }}
35
+ bundler-cache: true
36
+ - name: Rubocop
37
+ run: bundle exec rubocop
38
+ if: "!contains(matrix.ruby, 'jruby')"
39
+ - name: Tests
40
+ run: bundle exec rake test
@@ -0,0 +1,26 @@
1
+ name: Update MIME type DB
2
+
3
+ on:
4
+ schedule:
5
+ # 10am on the 1st every month https://crontab.guru/#0_10_1_*_*
6
+ - cron: "0 10 1 * *"
7
+ workflow_dispatch:
8
+
9
+ jobs:
10
+ update_db:
11
+ runs-on: ubuntu-latest
12
+ name: "Update MIME type DB"
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+ - uses: ruby/setup-ruby@v1
16
+ with:
17
+ ruby-version: "2.7"
18
+ bundler-cache: true
19
+ - name: Update mime-types-data
20
+ run: bundle update mime-types-data
21
+ - name: Update DB
22
+ run: bundle exec rake rebuild_db
23
+ - name: Create PR
24
+ run: bin/db_pull_request
25
+ env:
26
+ GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
data/.rubocop.yml ADDED
@@ -0,0 +1,5 @@
1
+ inherit_gem:
2
+ rubocop-discourse: default.yml
3
+ inherit_mode:
4
+ merge:
5
+ - Exclude
data/CHANGELOG CHANGED
@@ -1,3 +1,19 @@
1
+ 23-08-2021
2
+ - Version 1.1.1
3
+ - update mime types from upstream
4
+
5
+ 05-04-2021
6
+ - Version 1.1.0
7
+ - MiniMime.lookup_by_extension is now case insensitive
8
+
9
+ 26-03-2021
10
+ - Version 1.0.3
11
+ - Update mime types from upstream
12
+
13
+ 08-07-2019
14
+ - Version 1.0.2
15
+ - Update mime types from upstream
16
+
1
17
  14-08-2018
2
18
  - Version 1.0.1
3
19
  - Update mime types from upstream
data/Gemfile CHANGED
@@ -1,6 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  source 'https://rubygems.org'
2
3
 
3
4
  # Specify your gem's dependencies in mini_mime.gemspec
4
5
  gemspec
5
6
 
6
7
  gem "mime-types", "~> 3" if RUBY_VERSION > '2'
8
+ gem "memory_profiler"
9
+ gem "benchmark-ips"
data/README.md CHANGED
@@ -26,6 +26,9 @@ require 'mini_mime'
26
26
  MiniMime.lookup_by_filename("a.txt").content_type
27
27
  # => "text/plain"
28
28
 
29
+ MiniMime.lookup_by_extension("txt").content_type
30
+ # => "text/plain"
31
+
29
32
  MiniMime.lookup_by_content_type("text/plain").extension
30
33
  # => "txt"
31
34
 
@@ -34,46 +37,63 @@ MiniMime.lookup_by_content_type("text/plain").binary?
34
37
 
35
38
  ```
36
39
 
40
+ ## Configuration
41
+
42
+ If you'd like to add your own mime types, try using custom database files:
43
+
44
+ ```
45
+ MiniMime::Configuration.ext_db_path = "path_to_file_extension_db"
46
+ MiniMime::Configuration.content_type_db_path = "path_to_content_type_db"
47
+ ```
48
+
49
+ Check out the [default databases](lib/db) for proper formatting and structure hints.
50
+
37
51
  ## Performance
38
52
 
39
- MiniMime is optimised to minimize memory usage. It keeps a cache of 100 mime type lookups (and 100 misses). There are benchmarks in the [bench directory](https://github.com/discourse/mini_mime/bench/bench.rb)
53
+ MiniMime is optimised to minimize memory usage. It keeps a cache of 100 mime type lookups (and 100 misses). There are benchmarks in the [bench directory](https://github.com/discourse/mini_mime/blob/master/bench/bench.rb)
40
54
 
41
55
  ```
42
56
  Memory stats for requiring mime/types/columnar
43
- Total allocated: 9869358 bytes (109796 objects)
44
- Total retained: 3138198 bytes (31165 objects)
57
+ Total allocated: 8712144 bytes (98242 objects)
58
+ Total retained: 3372545 bytes (33599 objects)
45
59
 
46
60
  Memory stats for requiring mini_mime
47
- Total allocated: 58898 bytes (398 objects)
48
- Total retained: 7784 bytes (62 objects)
61
+ Total allocated: 42625 bytes (369 objects)
62
+ Total retained: 8992 bytes (72 objects)
49
63
  Warming up --------------------------------------
50
64
  cached content_type lookup MiniMime
51
- 52.136k i/100ms
65
+ 85.109k i/100ms
52
66
  content_type lookup MIME::Types
53
- 32.701k i/100ms
67
+ 17.879k i/100ms
54
68
  Calculating -------------------------------------
55
69
  cached content_type lookup MiniMime
56
- 641.305k3.2%) i/s - 3.232M in 5.045630s
70
+ 1.105M4.1%) i/s - 5.532M in 5.014895s
57
71
  content_type lookup MIME::Types
58
- 361.041k (± 1.5%) i/s - 1.831M in 5.073290s
72
+ 193.528k7.1%) i/s - 965.466k in 5.013925s
59
73
  Warming up --------------------------------------
60
74
  uncached content_type lookup MiniMime
61
- 3.333k i/100ms
75
+ 1.410k i/100ms
62
76
  content_type lookup MIME::Types
63
- 33.177k i/100ms
77
+ 18.012k i/100ms
64
78
  Calculating -------------------------------------
65
79
  uncached content_type lookup MiniMime
66
- 33.660k1.7%) i/s - 169.983k in 5.051415s
80
+ 14.689k4.2%) i/s - 73.320k in 5.000779s
67
81
  content_type lookup MIME::Types
68
- 364.931k2.8%) i/s - 1.825M in 5.004112s
82
+ 193.459k6.9%) i/s - 972.648k in 5.050731s
69
83
  ```
70
84
 
71
- As a general guideline, cached lookups are 2x faster than MIME::Types equivelent. Uncached lookups are 10x slower.
85
+ As a general guideline, cached lookups are 6x faster than MIME::Types equivalent. Uncached lookups are 10x slower.
72
86
 
87
+ Note: It was run on macOS 10.14.2, and versions of Ruby and gems are below.
88
+
89
+ - Ruby 2.6.0
90
+ - mini_mime (1.0.1)
91
+ - mime-types (3.2.2)
92
+ - mime-types-data (3.2018.0812)
73
93
 
74
94
  ## Development
75
95
 
76
- MiniMime uses the officially maintained list of mime types at [mime-types-data](https://github.com/mime-types/mime-types-data)repo to build the internal database.
96
+ MiniMime uses the officially maintained list of mime types at [mime-types-data](https://github.com/mime-types/mime-types-data) repo to build the internal database.
77
97
 
78
98
  To update the database run:
79
99
 
@@ -89,7 +109,6 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
89
109
 
90
110
  Bug reports and pull requests are welcome on GitHub at https://github.com/discourse/mini_mime. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
91
111
 
92
-
93
112
  ## License
94
113
 
95
114
  The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
data/Rakefile CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "bundler/gem_tasks"
2
3
  require "rake/testtask"
3
4
 
@@ -7,7 +8,7 @@ Rake::TestTask.new(:test) do |t|
7
8
  t.test_files = FileList['test/**/*_test.rb']
8
9
  end
9
10
 
10
- task :default => :test
11
+ task default: :test
11
12
 
12
13
  def pad(array)
13
14
  max = []
@@ -36,11 +37,11 @@ task :rebuild_db do
36
37
  index = {}
37
38
 
38
39
  MIME::Types.each do |type|
39
- type.extensions.each {|ext| (index[ext.downcase] ||= []) << type}
40
+ type.extensions.each { |ext| (index[ext.downcase] ||= []) << type }
40
41
  end
41
42
 
42
- index.each do |k,list|
43
- list.sort!{|a,b| a.priority_compare(b)}
43
+ index.each do |k, list|
44
+ list.sort! { |a, b| a.priority_compare(b) }
44
45
  end
45
46
 
46
47
  buffer = []
@@ -54,9 +55,9 @@ task :rebuild_db do
54
55
 
55
56
  pad(buffer)
56
57
 
57
- buffer.sort!{|a,b| a[0] <=> b[0]}
58
+ buffer.sort! { |a, b| a[0] <=> b[0] }
58
59
 
59
- File.open("lib/db/ext_mime.db", File::CREAT|File::TRUNC|File::RDWR) do |f|
60
+ File.open("lib/db/ext_mime.db", File::CREAT | File::TRUNC | File::RDWR) do |f|
60
61
  buffer.each do |row|
61
62
  f.write "#{row[0]} #{row[1]} #{row[2]}\n"
62
63
  end
@@ -64,7 +65,7 @@ task :rebuild_db do
64
65
 
65
66
  puts "#{buffer.count} rows written to lib/db/ext_mime.db"
66
67
 
67
- buffer.sort!{|a,b| [a[1], a[0]] <=> [b[1], b[0]]}
68
+ buffer.sort! { |a, b| [a[1], a[0]] <=> [b[1], b[0]] }
68
69
 
69
70
  # strip cause we are going to re-pad
70
71
  buffer.each do |row|
@@ -80,7 +81,7 @@ task :rebuild_db do
80
81
 
81
82
  pad(buffer)
82
83
 
83
- File.open("lib/db/content_type_mime.db", File::CREAT|File::TRUNC|File::RDWR) do |f|
84
+ File.open("lib/db/content_type_mime.db", File::CREAT | File::TRUNC | File::RDWR) do |f|
84
85
  last = nil
85
86
  count = 0
86
87
  buffer.each do |row|
data/bench/bench.rb CHANGED
@@ -1,9 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  require 'memory_profiler'
2
3
  require 'benchmark/ips'
3
4
 
4
5
  $: << File.expand_path('../../lib', __FILE__)
5
6
 
6
-
7
7
  puts
8
8
  puts "Memory stats for requiring mime/types/columnar"
9
9
  result = MemoryProfiler.report do
@@ -22,7 +22,6 @@ end
22
22
  puts "Total allocated: #{result.total_allocated_memsize} bytes (#{result.total_allocated} objects)"
23
23
  puts "Total retained: #{result.total_retained_memsize} bytes (#{result.total_retained} objects)"
24
24
 
25
-
26
25
  Benchmark.ips do |bm|
27
26
  bm.report 'cached content_type lookup MiniMime' do
28
27
  MiniMime.lookup_by_filename("a.txt").content_type
data/bin/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require "bundler/setup"
4
5
  require "mini_mime"
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "time"
5
+
6
+ if `git status --porcelain lib/db`.empty?
7
+ puts "Skipping, no DB changes to commit..."
8
+ return
9
+ end
10
+
11
+ moment = Time.now.utc
12
+ branch_name = "db-updates-#{moment.strftime("%Y%m%d%H%M%S")}"
13
+
14
+ system("git", "checkout", "-b", branch_name) || abort("Unable to create branch")
15
+ system("git", "add", "lib/db")
16
+ system("git", "config", "--local", "user.email", "actions@github.com")
17
+ system("git", "config", "--local", "user.name", "github-actions")
18
+ system("git", "commit", "-m", "DB updates #{moment.iso8601}") || abort("Unable to commit changes")
19
+ system("git", "push", "-u", "origin", branch_name) || abort("Unable to push branch")
20
+ system("gh", "pr", "create", "--title", "DB updates #{moment.iso8601}", "--body", "From Github Actions") || abort("Unable to create PR")
@@ -35,6 +35,7 @@ jsonml application/jsonml+json
35
35
  lostxml application/lost+xml base64
36
36
  hqx application/mac-binhex40 8bit
37
37
  mads application/mads+xml base64
38
+ webmanifest application/manifest+json base64
38
39
  mrc application/marc base64
39
40
  mrcx application/marcxml+xml base64
40
41
  ma application/mathematica base64
@@ -71,7 +72,7 @@ crl application/pkix-crl
71
72
  pkipath application/pkix-pkipath base64
72
73
  pki application/pkixcmp base64
73
74
  pls application/pls+xml base64
74
- ai application/postscript 8bit
75
+ eps application/postscript 8bit
75
76
  cw application/prs.cww base64
76
77
  rnd application/prs.nprend base64
77
78
  pskcxml application/pskc+xml base64
@@ -487,6 +488,7 @@ cmp application/vnd.yellowriver-custom-menu
487
488
  zir application/vnd.zul base64
488
489
  zaz application/vnd.zzazz.deck+xml base64
489
490
  vxml application/voicexml+xml base64
491
+ wasm application/wasm 8bit
490
492
  wif application/watcherinfo+xml base64
491
493
  wgt application/widget base64
492
494
  wp5 application/wordperfect5.1 base64
@@ -560,6 +562,7 @@ cpt application/x-mac-compactpro
560
562
  mie application/x-mie base64
561
563
  mobi application/x-mobipocket-ebook base64
562
564
  application application/x-ms-application base64
565
+ exe application/x-ms-dos-executable base64
563
566
  lnk application/x-ms-shortcut base64
564
567
  wmd application/x-ms-wmd base64
565
568
  wmz application/x-ms-wmz base64
@@ -594,6 +597,7 @@ sh application/x-sh
594
597
  shar application/x-shar 8bit
595
598
  swf application/x-shockwave-flash base64
596
599
  xap application/x-silverlight-app base64
600
+ notebook application/x-smarttech-notebook base64
597
601
  sav application/x-spss base64
598
602
  sql application/x-sql base64
599
603
  sit application/x-stuffit base64
@@ -663,6 +667,7 @@ ecelp9600 audio/vnd.nuera.ecelp9600
663
667
  qcp audio/vnd.qcelp base64
664
668
  rip audio/vnd.rip base64
665
669
  smp3 audio/vnd.sealedmedia.softseal.mpeg base64
670
+ wav audio/wav base64
666
671
  weba audio/webm base64
667
672
  aac audio/x-aac base64
668
673
  aif audio/x-aiff base64
@@ -675,7 +680,6 @@ wma audio/x-ms-wma
675
680
  wmv audio/x-ms-wmv base64
676
681
  ra audio/x-pn-realaudio base64
677
682
  rmp audio/x-pn-realaudio-plugin base64
678
- wav audio/x-wav base64
679
683
  xm audio/xm base64
680
684
  cdx chemical/x-cdx base64
681
685
  cif chemical/x-cif base64
@@ -687,9 +691,14 @@ otf font/otf
687
691
  ttf font/ttf base64
688
692
  woff font/woff base64
689
693
  woff2 font/woff2 base64
694
+ avif image/avif base64
690
695
  cgm image/cgm base64
691
696
  g3 image/g3fax base64
692
697
  gif image/gif base64
698
+ heic image/heic base64
699
+ heics image/heic-sequence base64
700
+ heif image/heif base64
701
+ heifs image/heif-sequence base64
693
702
  ief image/ief base64
694
703
  jp2 image/jp2 base64
695
704
  jpeg image/jpeg base64
@@ -721,21 +730,37 @@ wbmp image/vnd.wap.wbmp
721
730
  xif image/vnd.xiff base64
722
731
  webp image/webp base64
723
732
  3ds image/x-3ds base64
733
+ dng image/x-adobe-dng base64
724
734
  bmp image/x-bmp base64
735
+ cr2 image/x-canon-cr2 base64
736
+ crw image/x-canon-crw base64
725
737
  ras image/x-cmu-raster base64
726
738
  cmx image/x-cmx base64
727
739
  xcfbz2 image/x-compressed-xcf base64
740
+ erf image/x-epson-erf base64
728
741
  fh image/x-freehand base64
742
+ raf image/x-fuji-raf base64
729
743
  3fr image/x-hasselblad-3fr base64
744
+ k25 image/x-kodak-k25 base64
745
+ kdc image/x-kodak-kdc base64
746
+ mrw image/x-minolta-mrw base64
730
747
  sid image/x-mrsid-image base64
748
+ nef image/x-nikon-nef base64
749
+ orf image/x-olympus-orf base64
731
750
  psp image/x-paintshoppro base64
751
+ raw image/x-panasonic-raw base64
732
752
  pcx image/x-pcx base64
753
+ pef image/x-pentax-pef base64
733
754
  pct image/x-pict base64
734
755
  pnm image/x-portable-anymap base64
735
756
  pbm image/x-portable-bitmap base64
736
757
  pgm image/x-portable-graymap base64
737
758
  ppm image/x-portable-pixmap base64
738
759
  rgb image/x-rgb base64
760
+ x3f image/x-sigma-x3f base64
761
+ arw image/x-sony-arw base64
762
+ sr2 image/x-sony-sr2 base64
763
+ srf image/x-sony-srf base64
739
764
  tga image/x-targa base64
740
765
  dgn image/x-vnd.dgn base64
741
766
  xbm image/x-xbitmap 7bit
data/lib/db/ext_mime.db CHANGED
@@ -24,7 +24,7 @@ aep application/vnd.audiograph
24
24
  afm application/x-font-type1 base64
25
25
  afp application/vnd.ibm.modcap base64
26
26
  ahead application/vnd.ahead.space base64
27
- ai application/postscript 8bit
27
+ ai application/pdf base64
28
28
  aif audio/x-aiff base64
29
29
  aifc audio/x-aiff base64
30
30
  aiff audio/x-aiff base64
@@ -38,6 +38,7 @@ appcache text/cache-manifest
38
38
  application application/x-ms-application base64
39
39
  apr application/vnd.lotus-approach base64
40
40
  arc application/x-freearc base64
41
+ arw image/x-sony-arw base64
41
42
  asc application/pgp-signature base64
42
43
  asf application/vnd.ms-asf base64
43
44
  asm text/x-asm quoted-printable
@@ -50,6 +51,7 @@ atomsvc application/atomsvc+xml
50
51
  atx application/vnd.antix.game-component base64
51
52
  au audio/basic base64
52
53
  avi video/x-msvideo base64
54
+ avif image/avif base64
53
55
  aw application/applixware base64
54
56
  awb audio/AMR-WB base64
55
57
  azf application/vnd.airzip.filesecure.azf base64
@@ -142,9 +144,11 @@ cpi video/MP2T
142
144
  cpio application/x-cpio base64
143
145
  cpp text/plain quoted-printable
144
146
  cpt application/x-mac-compactpro base64
147
+ cr2 image/x-canon-cr2 base64
145
148
  crd application/x-mscardfile base64
146
149
  crl application/pkix-crl base64
147
150
  crt application/x-x509-ca-cert base64
151
+ crw image/x-canon-crw base64
148
152
  crx application/x-chrome-extension base64
149
153
  cryptonote application/vnd.rig.cryptonote base64
150
154
  csh application/x-csh 8bit
@@ -192,6 +196,7 @@ dmg application/x-apple-diskimage
192
196
  dmp application/vnd.tcpdump.pcap base64
193
197
  dms application/octet-stream base64
194
198
  dna application/vnd.dna base64
199
+ dng image/x-adobe-dng base64
195
200
  doc application/msword base64
196
201
  docm application/vnd.ms-word.document.macroEnabled.12 base64
197
202
  docx application/vnd.openxmlformats-officedocument.wordprocessingml.document base64
@@ -237,6 +242,8 @@ eol audio/vnd.digital-winds
237
242
  eot application/vnd.ms-fontobject base64
238
243
  eps application/postscript 8bit
239
244
  epub application/epub+zip base64
245
+ erf image/x-epson-erf base64
246
+ es application/ecmascript base64
240
247
  es3 application/vnd.eszigno3+xml base64
241
248
  esa application/vnd.osgi.subsystem base64
242
249
  esf application/vnd.epson.esf base64
@@ -245,7 +252,7 @@ etx text/x-setext
245
252
  eva application/x-eva base64
246
253
  evc audio/EVRC base64
247
254
  evy application/x-envoy base64
248
- exe application/octet-stream base64
255
+ exe application/x-ms-dos-executable base64
249
256
  exi application/exi base64
250
257
  ext application/vnd.novadigm.EXT base64
251
258
  ez application/andrew-inset base64
@@ -339,8 +346,13 @@ hal application/vnd.hal+xml
339
346
  hbc application/vnd.hbci base64
340
347
  hbci application/vnd.hbci base64
341
348
  hdf application/x-hdf base64
349
+ heic image/heic base64
350
+ heics image/heic-sequence base64
351
+ heif image/heif base64
352
+ heifs image/heif-sequence base64
342
353
  hep application/x-hep base64
343
354
  hh text/plain quoted-printable
355
+ hif image/heic base64
344
356
  hlp text/plain quoted-printable
345
357
  hpgl application/vnd.hp-HPGL base64
346
358
  hpid application/vnd.hp-hpid base64
@@ -410,12 +422,14 @@ jpgm image/jpm
410
422
  jpgv video/JPEG base64
411
423
  jpm image/jpm base64
412
424
  jpx image/jpx base64
413
- js application/ecmascript base64
425
+ js application/javascript 8bit
414
426
  json application/json 8bit
415
427
  jsonml application/jsonml+json base64
428
+ k25 image/x-kodak-k25 base64
416
429
  kar audio/midi base64
417
430
  karbon application/vnd.kde.karbon base64
418
431
  kcm application/vnd.nervana base64
432
+ kdc image/x-kodak-kdc base64
419
433
  key application/x-iwork-keynote-sffkey base64
420
434
  kfo application/vnd.kde.kformula base64
421
435
  kia application/vnd.kidspiration base64
@@ -507,7 +521,7 @@ mj2 video/MJ2
507
521
  mjp2 video/MJ2 base64
508
522
  mjpeg video/x-motion-jpeg base64
509
523
  mjpg video/x-motion-jpeg base64
510
- mjs application/ecmascript base64
524
+ mjs application/javascript 8bit
511
525
  mk3d video/x-matroska base64
512
526
  mka audio/x-matroska base64
513
527
  mkd text/markdown quoted-printable
@@ -549,6 +563,7 @@ mpy application/vnd.ibm.MiniPay
549
563
  mqy application/vnd.Mobius.MQY base64
550
564
  mrc application/marc base64
551
565
  mrcx application/marcxml+xml base64
566
+ mrw image/x-minolta-mrw base64
552
567
  ms text/troff 8bit
553
568
  mscml application/mediaservercontrol+xml base64
554
569
  mseed application/vnd.fdsn.mseed base64
@@ -576,6 +591,7 @@ nb application/mathematica
576
591
  nbp application/vnd.wolfram.player base64
577
592
  nc application/netcdf base64
578
593
  ncx application/x-dtbncx+xml base64
594
+ nef image/x-nikon-nef base64
579
595
  nfo text/x-nfo quoted-printable
580
596
  ngdat application/vnd.nokia.n-gage.data base64
581
597
  nim video/vnd.nokia.interleaved-multimedia base64
@@ -585,6 +601,7 @@ nml application/vnd.enliven
585
601
  nnd application/vnd.noblenet-directory base64
586
602
  nns application/vnd.noblenet-sealer base64
587
603
  nnw application/vnd.noblenet-web base64
604
+ notebook application/x-smarttech-notebook base64
588
605
  npx image/vnd.net-fpx base64
589
606
  nsc application/x-conference base64
590
607
  nsf application/vnd.lotus-notes base64
@@ -620,6 +637,8 @@ onetoc2 application/onenote
620
637
  opf application/oebps-package+xml base64
621
638
  opml text/x-opml quoted-printable
622
639
  oprc application/vnd.palm base64
640
+ opus audio/ogg base64
641
+ orf image/x-olympus-orf base64
623
642
  org application/vnd.lotus-organizer base64
624
643
  osf application/vnd.yamaha.openscoreformat base64
625
644
  osfpvg application/vnd.yamaha.openscoreformat.osfpvg+xml base64
@@ -657,6 +676,7 @@ pcurl application/vnd.curl.pcurl
657
676
  pcx image/x-pcx base64
658
677
  pdb application/vnd.palm base64
659
678
  pdf application/pdf base64
679
+ pef image/x-pentax-pef base64
660
680
  pfa application/x-font-type1 base64
661
681
  pfb application/x-font-type1 base64
662
682
  pfm application/x-font-type1 base64
@@ -735,9 +755,11 @@ qxd application/vnd.Quark.QuarkXPress
735
755
  qxl application/vnd.Quark.QuarkXPress 8bit
736
756
  qxt application/vnd.Quark.QuarkXPress 8bit
737
757
  ra audio/x-pn-realaudio base64
758
+ raf image/x-fuji-raf base64
738
759
  ram audio/x-pn-realaudio base64
739
760
  rar application/x-rar-compressed base64
740
761
  ras image/x-cmu-raster base64
762
+ raw image/x-panasonic-raw base64
741
763
  rb application/x-ruby 8bit
742
764
  rbw application/x-ruby 8bit
743
765
  rcprofile application/vnd.ipunplugged.rcprofile base64
@@ -882,7 +904,9 @@ spq application/scvp-vp-request
882
904
  sps application/x-spss base64
883
905
  spx audio/ogg base64
884
906
  sql application/x-sql base64
907
+ sr2 image/x-sony-sr2 base64
885
908
  src application/x-wais-source base64
909
+ srf image/x-sony-srf base64
886
910
  srt application/x-subrip base64
887
911
  sru application/sru+xml base64
888
912
  srx application/sparql-results+xml base64
@@ -1035,7 +1059,8 @@ vtu model/vnd.vtu
1035
1059
  vxml application/voicexml+xml base64
1036
1060
  w3d application/x-director base64
1037
1061
  wad application/x-doom base64
1038
- wav audio/x-wav base64
1062
+ wasm application/wasm 8bit
1063
+ wav audio/wav base64
1039
1064
  wax audio/x-ms-wax base64
1040
1065
  wbmp image/vnd.wap.wbmp base64
1041
1066
  wbs application/vnd.criticaltools.wbs+xml base64
@@ -1046,6 +1071,7 @@ wdp image/vnd.ms-photo
1046
1071
  weba audio/webm base64
1047
1072
  webapp application/x-web-app-manifest+json base64
1048
1073
  webm audio/webm base64
1074
+ webmanifest application/manifest+json base64
1049
1075
  webp image/webp base64
1050
1076
  wg application/vnd.pmi.widget base64
1051
1077
  wgt application/widget base64
@@ -1089,6 +1115,7 @@ x3dbz model/x3d+binary
1089
1115
  x3dv model/x3d+vrml base64
1090
1116
  x3dvz model/x3d+vrml base64
1091
1117
  x3dz model/x3d+xml base64
1118
+ x3f image/x-sigma-x3f base64
1092
1119
  x_b model/vnd.parasolid.transmit.binary base64
1093
1120
  x_t model/vnd.parasolid.transmit.text quoted-printable
1094
1121
  xaml application/xaml+xml base64
data/lib/mini_mime.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require "mini_mime/version"
2
3
  require "thread"
3
4
 
@@ -14,6 +15,16 @@ module MiniMime
14
15
  Db.lookup_by_content_type(mime)
15
16
  end
16
17
 
18
+ module Configuration
19
+ class << self
20
+ attr_accessor :ext_db_path
21
+ attr_accessor :content_type_db_path
22
+ end
23
+
24
+ self.ext_db_path = File.expand_path("../db/ext_mime.db", __FILE__)
25
+ self.content_type_db_path = File.expand_path("../db/content_type_mime.db", __FILE__)
26
+ end
27
+
17
28
  class Info
18
29
  BINARY_ENCODINGS = %w(base64 8bit)
19
30
 
@@ -45,14 +56,14 @@ module MiniMime
45
56
  extension = File.extname(filename)
46
57
  return if extension.empty?
47
58
  extension = extension[1..-1]
48
- extension.downcase!
49
59
  lookup_by_extension(extension)
50
60
  end
51
61
 
52
62
  def self.lookup_by_extension(extension)
53
63
  LOCK.synchronize do
54
64
  @db ||= new
55
- @db.lookup_by_extension(extension)
65
+ @db.lookup_by_extension(extension) ||
66
+ @db.lookup_by_extension(extension.downcase)
56
67
  end
57
68
  end
58
69
 
@@ -83,8 +94,8 @@ module MiniMime
83
94
  class RandomAccessDb
84
95
  MAX_CACHED = 100
85
96
 
86
- def initialize(name, sort_order)
87
- @path = File.expand_path("../db/#{name}", __FILE__)
97
+ def initialize(path, sort_order)
98
+ @path = path
88
99
  @file = File.open(@path)
89
100
 
90
101
  @row_length = @file.readline.length
@@ -119,7 +130,7 @@ module MiniMime
119
130
  result = nil
120
131
 
121
132
  while from <= to do
122
- midpoint = from + (to-from).div(2)
133
+ midpoint = from + (to - from).div(2)
123
134
  current = resolve(midpoint)
124
135
  data = current[@sort_order]
125
136
  if data > val
@@ -135,14 +146,14 @@ module MiniMime
135
146
  end
136
147
 
137
148
  def resolve(row)
138
- @file.seek(row*@row_length)
149
+ @file.seek(row * @row_length)
139
150
  Info.new(@file.readline)
140
151
  end
141
152
  end
142
153
 
143
154
  def initialize
144
- @ext_db = RandomAccessDb.new("ext_mime.db", 0)
145
- @content_type_db = RandomAccessDb.new("content_type_mime.db", 1)
155
+ @ext_db = RandomAccessDb.new(Configuration.ext_db_path, 0)
156
+ @content_type_db = RandomAccessDb.new(Configuration.content_type_db_path, 1)
146
157
  end
147
158
 
148
159
  def lookup_by_extension(extension)
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  module MiniMime
2
- VERSION = "1.0.1"
3
+ VERSION = "1.1.1"
3
4
  end
data/mini_mime.gemspec CHANGED
@@ -22,7 +22,9 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ["lib"]
24
24
 
25
- spec.add_development_dependency "bundler", "~> 1.13"
26
- spec.add_development_dependency "rake", "~> 10.0"
27
- spec.add_development_dependency "minitest", "~> 5.0"
25
+ spec.add_development_dependency "bundler"
26
+ spec.add_development_dependency "rake"
27
+ spec.add_development_dependency "minitest"
28
+ spec.add_development_dependency "rubocop"
29
+ spec.add_development_dependency "rubocop-discourse"
28
30
  end
metadata CHANGED
@@ -1,57 +1,85 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mini_mime
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-14 00:00:00.000000000 Z
11
+ date: 2021-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '1.13'
19
+ version: '0'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '1.13'
26
+ version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.0'
33
+ version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '10.0'
40
+ version: '0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '5.0'
47
+ version: '0'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - "~>"
52
+ - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: '5.0'
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rubocop
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
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop-discourse
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
55
83
  description: A lightweight mime type lookup toy
56
84
  email:
57
85
  - sam.saffron@gmail.com
@@ -59,8 +87,10 @@ executables: []
59
87
  extensions: []
60
88
  extra_rdoc_files: []
61
89
  files:
90
+ - ".github/workflows/ci.yml"
91
+ - ".github/workflows/db.yml"
62
92
  - ".gitignore"
63
- - ".travis.yml"
93
+ - ".rubocop.yml"
64
94
  - CHANGELOG
65
95
  - CODE_OF_CONDUCT.md
66
96
  - Gemfile
@@ -69,6 +99,7 @@ files:
69
99
  - Rakefile
70
100
  - bench/bench.rb
71
101
  - bin/console
102
+ - bin/db_pull_request
72
103
  - bin/setup
73
104
  - lib/db/content_type_mime.db
74
105
  - lib/db/ext_mime.db
@@ -79,7 +110,7 @@ homepage: https://github.com/discourse/mini_mime
79
110
  licenses:
80
111
  - MIT
81
112
  metadata: {}
82
- post_install_message:
113
+ post_install_message:
83
114
  rdoc_options: []
84
115
  require_paths:
85
116
  - lib
@@ -94,9 +125,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
125
  - !ruby/object:Gem::Version
95
126
  version: '0'
96
127
  requirements: []
97
- rubyforge_project:
98
- rubygems_version: 2.7.6
99
- signing_key:
128
+ rubygems_version: 3.1.6
129
+ signing_key:
100
130
  specification_version: 4
101
131
  summary: A lightweight mime type lookup toy
102
132
  test_files: []
data/.travis.yml DELETED
@@ -1,30 +0,0 @@
1
- language: ruby
2
- sudo: false
3
- cache: bundler
4
-
5
- before_install: gem install bundler -v 1.13.6
6
-
7
- rvm:
8
- - 1.8.7
9
- - 1.9.2
10
- - 1.9.3
11
- - 2.0.0
12
- - 2.1.10
13
- - 2.2.7
14
- - 2.3.4
15
- - 2.4.1
16
- - ruby-head
17
- - jruby
18
- - jruby-9.0.5.0
19
- - jruby-9.1.6.0
20
- - jruby-head
21
- - rbx-2
22
-
23
- matrix:
24
- allow_failures:
25
- - rvm: ruby-head
26
- - rvm: jruby-9.0.5.0
27
- - rvm: jruby-9.1.6.0
28
- - rvm: jruby-head
29
- - rvm: rbx-2
30
- fast_finish: true