Skip to content

Commit

Permalink
IANA Provisional Registration Support
Browse files Browse the repository at this point in the history
- 1 minor enhancement:

  - Added a new field to `MIME::Type` for checking provisional registrations
    from IANA.

- Documentation:

  - Kevin Menard synced the documentation so that all examples are correct
    [#153].

- Administrivia:

  - Added Ruby 3.0 to the CI test matrix. Added `windows/jruby` to the
    CI exclusion list; it refuses to run successfully.
  - Removed the Travis CI configuration and changed it to Github Workflows
    [#150]. Removed Coveralls configuration.
  - Igor Victor added TruffleRuby to the Travis CI configuration [#149].
  - Koichi ITO loosened an excessively tight dependency [#147].
  • Loading branch information
halostatue committed Jun 2, 2021
1 parent d168d83 commit ab59149
Show file tree
Hide file tree
Showing 9 changed files with 58 additions and 44 deletions.
7 changes: 6 additions & 1 deletion History.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
# Changelog

## NEXT / 2021-MM-DD
## 3.4.0 / 2021-06-02

- 1 minor enhancement:

- Added a new field to `MIME::Type` for checking provisional registrations
from IANA.

- Documentation:

Expand Down
1 change: 1 addition & 0 deletions README.rdoc
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ files). A MIME::Type stores the known information about one MIME type.
puts text.ascii? # => true
puts text.obsolete? # => false
puts text.registered? # => true
puts text.provisional? # => false
puts text.complete? # => true

puts text # => 'text/plain'
Expand Down
15 changes: 13 additions & 2 deletions lib/mime/type.rb
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ module MIME
# puts text.ascii? # => true
# puts text.obsolete? # => false
# puts text.registered? # => true
# puts text.provisional? # => false
# puts text.complete? # => true
#
# puts text # => 'text/plain'
Expand Down Expand Up @@ -92,7 +93,7 @@ def to_s
end

# The released version of the mime-types library.
VERSION = "3.3.1"
VERSION = "3.4.0"

include Comparable

Expand Down Expand Up @@ -123,7 +124,7 @@ def to_s
# Yields the newly constructed +self+ object.
def initialize(content_type) # :yields: self
@friendly = {}
@obsolete = @registered = false
@obsolete = @registered = @provisional = false
@preferred_extension = @docs = @use_instead = nil
self.extensions = []

Expand Down Expand Up @@ -419,6 +420,14 @@ def xref_urls
attr_accessor :registered
alias_method :registered?, :registered

# Indicates whether the MIME type's registration with IANA is provisional.
attr_accessor :provisional

# Indicates whether the MIME type's registration with IANA is provisional.
def provisional?
registered? && @provisional
end

# MIME types can be specified to be sent across a network in particular
# formats. This method returns +true+ when the MIME::Type encoding is set
# to <tt>base64</tt>.
Expand Down Expand Up @@ -493,6 +502,7 @@ def encode_with(coder)
end
end
coder["registered"] = registered?
coder["provisional"] = provisional? if provisional?
coder["signature"] = signature? if signature?
coder
end
Expand All @@ -509,6 +519,7 @@ def init_with(coder)
self.preferred_extension = coder["preferred-extension"]
self.obsolete = coder["obsolete"] || false
self.registered = coder["registered"] || false
self.provisional = coder["provisional"] || false
self.signature = coder["signature"]
self.xrefs = coder["xrefs"] || {}
self.use_instead = coder["use-instead"]
Expand Down
4 changes: 2 additions & 2 deletions lib/mime/type/columnar.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ def self.column(*methods, file: nil) # :nodoc:
column :encoding, :encoding=
column :docs, :docs=
column :preferred_extension, :preferred_extension=
column :obsolete, :obsolete=, :obsolete?, :registered, :registered=,
:registered?, :signature, :signature=, :signature?, file: "flags"
column :obsolete, :obsolete=, :obsolete?, :registered, :registered=, :registered?, :signature, :signature=,
:signature?, :provisional, :provisional=, :provisional?, file: "flags"
column :xrefs, :xrefs=, :xref_urls
column :use_instead, :use_instead=

Expand Down
1 change: 1 addition & 0 deletions lib/mime/types.rb
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ class Types
# puts plaintext.ascii? # => true
# puts plaintext.obsolete? # => false
# puts plaintext.registered? # => true
# puts plaintext.provisional? # => false
# puts plaintext == 'text/plain' # => true
# puts MIME::Type.simplified('x-appl/x-zip') # => 'appl/zip'
#
Expand Down
1 change: 1 addition & 0 deletions lib/mime/types/_columnar.rb
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ def load_flags
type.instance_variable_set(:@obsolete, flag(line.shift))
type.instance_variable_set(:@registered, flag(line.shift))
type.instance_variable_set(:@signature, flag(line.shift))
type.instance_variable_set(:@provisional, flag(line.shift))
end
end

Expand Down
56 changes: 20 additions & 36 deletions mime-types.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ Gem::Specification.new do |s|
s.metadata = { "bug_tracker_uri" => "https://github.com/mime-types/ruby-mime-types/issues", "changelog_uri" => "https://github.com/mime-types/ruby-mime-types/blob/master/History.md", "homepage_uri" => "https://github.com/mime-types/ruby-mime-types/", "source_code_uri" => "https://github.com/mime-types/ruby-mime-types/" } if s.respond_to? :metadata=
s.require_paths = ["lib".freeze]
s.authors = ["Austin Ziegler".freeze]
s.date = "2021-03-24"
s.date = "2021-06-02"
s.description = "The mime-types library provides a library and registry for information about\nMIME content type definitions. It can be used to determine defined filename\nextensions for MIME types, or to use filename extensions to look up the likely\nMIME type definitions.\n\nVersion 3.0 is a major release that requires Ruby 2.0 compatibility and removes\ndeprecated functions. The columnar registry format introduced in 2.6 has been\nmade the primary format; the registry data has been extracted from this library\nand put into {mime-types-data}[https://github.com/mime-types/mime-types-data].\nAdditionally, mime-types is now licensed exclusively under the MIT licence and\nthere is a code of conduct in effect. There are a number of other smaller\nchanges described in the History file.".freeze
s.email = ["halostatue@gmail.com".freeze]
s.extra_rdoc_files = ["Code-of-Conduct.md".freeze, "Contributing.md".freeze, "History.md".freeze, "Licence.md".freeze, "Manifest.txt".freeze, "README.rdoc".freeze]
Expand All @@ -18,45 +18,29 @@ Gem::Specification.new do |s|
s.licenses = ["MIT".freeze]
s.rdoc_options = ["--main".freeze, "README.rdoc".freeze]
s.required_ruby_version = Gem::Requirement.new(">= 2.0".freeze)
s.rubygems_version = "3.0.3".freeze
s.rubygems_version = "3.1.6".freeze
s.summary = "The mime-types library provides a library and registry for information about MIME content type definitions".freeze

if s.respond_to? :specification_version then
s.specification_version = 4
end

if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
s.add_runtime_dependency(%q<mime-types-data>.freeze, ["~> 3.2015"])
s.add_development_dependency(%q<minitest>.freeze, ["~> 5.14"])
s.add_development_dependency(%q<hoe-doofus>.freeze, ["~> 1.0"])
s.add_development_dependency(%q<hoe-gemspec2>.freeze, ["~> 1.1"])
s.add_development_dependency(%q<hoe-git>.freeze, ["~> 1.6"])
s.add_development_dependency(%q<hoe-rubygems>.freeze, ["~> 1.0"])
s.add_development_dependency(%q<standard>.freeze, ["~> 1.0"])
s.add_development_dependency(%q<minitest-autotest>.freeze, ["~> 1.0"])
s.add_development_dependency(%q<minitest-focus>.freeze, ["~> 1.0"])
s.add_development_dependency(%q<minitest-bonus-assertions>.freeze, ["~> 3.0"])
s.add_development_dependency(%q<minitest-hooks>.freeze, ["~> 1.4"])
s.add_development_dependency(%q<rake>.freeze, [">= 10.0", "< 14.0"])
s.add_development_dependency(%q<simplecov>.freeze, ["~> 0.7"])
s.add_development_dependency(%q<rdoc>.freeze, [">= 4.0", "< 7"])
s.add_development_dependency(%q<hoe>.freeze, ["~> 3.22"])
else
s.add_dependency(%q<mime-types-data>.freeze, ["~> 3.2015"])
s.add_dependency(%q<minitest>.freeze, ["~> 5.14"])
s.add_dependency(%q<hoe-doofus>.freeze, ["~> 1.0"])
s.add_dependency(%q<hoe-gemspec2>.freeze, ["~> 1.1"])
s.add_dependency(%q<hoe-git>.freeze, ["~> 1.6"])
s.add_dependency(%q<hoe-rubygems>.freeze, ["~> 1.0"])
s.add_dependency(%q<standard>.freeze, ["~> 1.0"])
s.add_dependency(%q<minitest-autotest>.freeze, ["~> 1.0"])
s.add_dependency(%q<minitest-focus>.freeze, ["~> 1.0"])
s.add_dependency(%q<minitest-bonus-assertions>.freeze, ["~> 3.0"])
s.add_dependency(%q<minitest-hooks>.freeze, ["~> 1.4"])
s.add_dependency(%q<rake>.freeze, [">= 10.0", "< 14.0"])
s.add_dependency(%q<simplecov>.freeze, ["~> 0.7"])
s.add_dependency(%q<rdoc>.freeze, [">= 4.0", "< 7"])
s.add_dependency(%q<hoe>.freeze, ["~> 3.22"])
end
if s.respond_to? :add_runtime_dependency then
s.add_runtime_dependency(%q<mime-types-data>.freeze, ["~> 3.2015"])
s.add_development_dependency(%q<minitest>.freeze, ["~> 5.14"])
s.add_development_dependency(%q<hoe-doofus>.freeze, ["~> 1.0"])
s.add_development_dependency(%q<hoe-gemspec2>.freeze, ["~> 1.1"])
s.add_development_dependency(%q<hoe-git>.freeze, ["~> 1.6"])
s.add_development_dependency(%q<hoe-rubygems>.freeze, ["~> 1.0"])
s.add_development_dependency(%q<standard>.freeze, ["~> 1.0"])
s.add_development_dependency(%q<minitest-autotest>.freeze, ["~> 1.0"])
s.add_development_dependency(%q<minitest-focus>.freeze, ["~> 1.0"])
s.add_development_dependency(%q<minitest-bonus-assertions>.freeze, ["~> 3.0"])
s.add_development_dependency(%q<minitest-hooks>.freeze, ["~> 1.4"])
s.add_development_dependency(%q<rake>.freeze, [">= 10.0", "< 14.0"])
s.add_development_dependency(%q<simplecov>.freeze, ["~> 0.7"])
s.add_development_dependency(%q<rdoc>.freeze, [">= 4.0", "< 7"])
s.add_development_dependency(%q<hoe>.freeze, ["~> 3.23"])
else
s.add_dependency(%q<mime-types-data>.freeze, ["~> 3.2015"])
s.add_dependency(%q<minitest>.freeze, ["~> 5.14"])
Expand All @@ -72,6 +56,6 @@ Gem::Specification.new do |s|
s.add_dependency(%q<rake>.freeze, [">= 10.0", "< 14.0"])
s.add_dependency(%q<simplecov>.freeze, ["~> 0.7"])
s.add_dependency(%q<rdoc>.freeze, [">= 4.0", "< 7"])
s.add_dependency(%q<hoe>.freeze, ["~> 3.22"])
s.add_dependency(%q<hoe>.freeze, ["~> 3.23"])
end
end
2 changes: 1 addition & 1 deletion support/benchmarks/load_allocations.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def report_top_x
}.compact!

head = (ObjectSpace::AllocationTracer.header - [:line]).map { |h|
h.to_s.split(/_/).map(&:capitalize).join(" ")
h.to_s.split("_").map(&:capitalize).join(" ")
}
table.unshift head

Expand Down
15 changes: 13 additions & 2 deletions test/test_mime_type.rb
Original file line number Diff line number Diff line change
Expand Up @@ -461,12 +461,23 @@ def assert_priority(left, middle, right)
end

describe "#to_json" do
let(:expected) {
let(:expected_1) {
'{"content-type":"a/b","encoding":"base64","registered":false}'
}
let(:expected_2) {
'{"content-type":"a/b","encoding":"base64","registered":true,"provisional":true}'
}

it "converts to JSON when requested" do
assert_equal expected, mime_type("a/b").to_json
assert_equal expected_1, mime_type("a/b").to_json
end

it "converts to JSON with provisional when requested" do
type = mime_type("a/b") do |t|
t.registered = true
t.provisional = true
end
assert_equal expected_2, type.to_json
end
end

Expand Down

0 comments on commit ab59149

Please sign in to comment.