A stumble toward a 1.15 release to resync with the Perl version and the IANA lists.
This commit is contained in:
Родитель
d2fa96f8b6
Коммит
3161aa3ec8
|
@ -1,8 +1,13 @@
|
|||
Revision history for Ruby extension MIME::Types.
|
||||
= MIME::Types Change Log
|
||||
|
||||
Unless explicitly stated differently are all changes produced by Austin
|
||||
Ziegler <mime-types@halostatue.ca>.
|
||||
|
||||
== MIME::Types 1.15
|
||||
* Re-synchronized the MIME type list with the sources, focusing primarily on
|
||||
the IANA list.
|
||||
* Re-synchronized with the Perl implementation.
|
||||
|
||||
== MIME::Types 1.13.1
|
||||
* Fixed a problem with the installer running tests. This now works.
|
||||
* Improved the implementation of MIME::Type.signature?
|
||||
|
@ -75,3 +80,13 @@ Ziegler <mime-types@halostatue.ca>.
|
|||
|
||||
== MIME::Types 1.003
|
||||
* Initial release based on Perl MIME::Types 1.003.
|
||||
|
||||
#--
|
||||
# MIME::Types for Ruby
|
||||
# http://rubyforge.org/projects/mime-types/
|
||||
# Copyright 2003 - 2005 Austin Ziegler.
|
||||
# Licensed under a MIT-style licence.
|
||||
#
|
||||
# $Id$
|
||||
#++
|
||||
# vim: sts=2 sw=2 ts=4 et ai tw=77
|
||||
|
|
|
@ -1,6 +1,16 @@
|
|||
Installing this package is as simple as:
|
||||
|
||||
% ruby install.rb
|
||||
% ruby setup.rb
|
||||
|
||||
Alternatively, you can use the RubyGem version of MIME::Types available as
|
||||
mime-types-1.13.1.gem from the usual sources.
|
||||
mime-types-1.15.gem from the usual sources.
|
||||
|
||||
#--
|
||||
# MIME::Types for Ruby
|
||||
# http://rubyforge.org/projects/mime-types/
|
||||
# Copyright 2003 - 2005 Austin Ziegler.
|
||||
# Licensed under a MIT-style licence.
|
||||
#
|
||||
# $Id$
|
||||
#++
|
||||
# vim: sts=2 sw=2 ts=4 et ai tw=77
|
||||
|
|
|
@ -0,0 +1,128 @@
|
|||
#! /usr/bin/env rake
|
||||
#--
|
||||
# MIME::Types for Ruby
|
||||
# http://rubyforge.org/projects/mime-types/
|
||||
# Copyright 2003 - 2005 Austin Ziegler.
|
||||
# Licensed under a MIT-style licence.
|
||||
#
|
||||
# $Id$
|
||||
#++
|
||||
$LOAD_PATH.unshift('lib')
|
||||
|
||||
require 'rubygems'
|
||||
require 'rake/gempackagetask'
|
||||
require 'mime/types'
|
||||
require 'archive/tar/minitar'
|
||||
require 'zlib'
|
||||
|
||||
DISTDIR = "mime-types-#{MIME::Types::MIME_TYPES_VERSION}"
|
||||
TARDIST = "../#{DISTDIR}.tar.gz"
|
||||
|
||||
DATE_RE = %r<(\d{4})[./-]?(\d{2})[./-]?(\d{2})(?:[\sT]?(\d{2})[:.]?(\d{2})[:.]?(\d{2})?)?>
|
||||
|
||||
if ENV['RELEASE_DATE']
|
||||
year, month, day, hour, minute, second = DATE_RE.match(ENV['RELEASE_DATE']).captures
|
||||
year ||= 0
|
||||
month ||= 0
|
||||
day ||= 0
|
||||
hour ||= 0
|
||||
minute ||= 0
|
||||
second ||= 0
|
||||
ReleaseDate = Time.mktime(year, month, day, hour, minute, second)
|
||||
else
|
||||
ReleaseDate = nil
|
||||
end
|
||||
|
||||
task :test do |t|
|
||||
require 'test/unit/testsuite'
|
||||
require 'test/unit/ui/console/testrunner'
|
||||
|
||||
runner = Test::Unit::UI::Console::TestRunner
|
||||
|
||||
$LOAD_PATH.unshift('tests')
|
||||
$stderr.puts "Checking for test cases:" if t.verbose
|
||||
Dir['tests/tc_*.rb'].each do |testcase|
|
||||
$stderr.puts "\t#{testcase}" if t.verbose
|
||||
load testcase
|
||||
end
|
||||
|
||||
suite = Test::Unit::TestSuite.new("MIME::Types")
|
||||
|
||||
ObjectSpace.each_object(Class) do |testcase|
|
||||
suite << testcase.suite if testcase < Test::Unit::TestCase
|
||||
end
|
||||
|
||||
runner.run(suite)
|
||||
end
|
||||
|
||||
spec = eval(File.read("mime-types.gemspec"))
|
||||
spec.version = MIME::Types::MIME_TYPES_VERSION
|
||||
desc "Build the RubyGem for MIME::Types"
|
||||
task :gem => [ :test ]
|
||||
Rake::GemPackageTask.new(spec) do |g|
|
||||
g.need_tar = false
|
||||
g.need_zip = false
|
||||
g.package_dir = ".."
|
||||
end
|
||||
|
||||
desc "Build the MIME::Types manual.pdf"
|
||||
task :manual do
|
||||
PDF::TechBook.run %w(-z)
|
||||
end
|
||||
|
||||
desc "Build a MIME::Types .tar.gz distribution."
|
||||
task :tar => [ TARDIST ]
|
||||
file TARDIST => [ :test ] do |t|
|
||||
current = File.basename(Dir.pwd)
|
||||
Dir.chdir("..") do
|
||||
begin
|
||||
files = %W(bin/**/* lib/**/* demo/**/* images/**/* ChangeLog README
|
||||
LICENCE setup.rb pre-setup.rb metaconfig manual.pwd)
|
||||
files = FileList[files.map { |file| File.join(current, file) }].to_a
|
||||
files.map! do |dd|
|
||||
ddnew = dd.gsub(/^#{current}/, DISTDIR)
|
||||
mtime = ReleaseDate || File.stat(dd).mtime
|
||||
if File.directory?(dd)
|
||||
{ :name => ddnew, :mode => 0755, :dir => true, :mtime => mtime }
|
||||
else
|
||||
if dd =~ %r{bin/}
|
||||
mode = 0755
|
||||
else
|
||||
mode = 0644
|
||||
end
|
||||
data = File.open(dd, "rb") { |ff| ff.read }
|
||||
{ :name => ddnew, :mode => mode, :data => data, :size => data.size,
|
||||
:mtime => mtime }
|
||||
end
|
||||
end
|
||||
|
||||
ff = File.open(t.name.gsub(%r{^\.\./}o, ''), "wb")
|
||||
gz = Zlib::GzipWriter.new(ff)
|
||||
tw = Archive::Tar::Minitar::Writer.new(gz)
|
||||
|
||||
files.each do |entry|
|
||||
if entry[:dir]
|
||||
tw.mkdir(entry[:name], entry)
|
||||
else
|
||||
tw.add_file_simple(entry[:name], entry) { |os| os.write(entry[:data]) }
|
||||
end
|
||||
end
|
||||
ensure
|
||||
tw.close if tw
|
||||
gz.close if gz
|
||||
end
|
||||
end
|
||||
end
|
||||
task TARDIST => [ :test ]
|
||||
|
||||
desc "Build the RDoc documentation for MIME::Types"
|
||||
task :docs do
|
||||
require 'rdoc/rdoc'
|
||||
rdoc_options = %w(--title MIME::Types --main README --line-numbers)
|
||||
files = FileList[*%w(README LICENCE ChangeLog bin/**/*.rb lib/**/*.rb demo/**/*.rb)]
|
||||
rdoc_options += files.to_a
|
||||
RDoc::RDoc.new.document(rdoc_options)
|
||||
end
|
||||
|
||||
desc "Build everything."
|
||||
task :default => [ :tar, :gem ]
|
|
@ -13,3 +13,13 @@ Based on prior work copyright
|
|||
|
||||
This package is licensed under Ruby's licence, the Perl Artistic licence, or
|
||||
the GPL version 2 or later.
|
||||
|
||||
#--
|
||||
# MIME::Types for Ruby
|
||||
# http://rubyforge.org/projects/mime-types/
|
||||
# Copyright 2003 - 2005 Austin Ziegler.
|
||||
# Licensed under a MIT-style licence.
|
||||
#
|
||||
# $Id$
|
||||
#++
|
||||
# vim: sts=2 sw=2 ts=4 et ai tw=77
|
||||
|
|
|
@ -1,264 +0,0 @@
|
|||
#! /usr/bin/env ruby
|
||||
#--
|
||||
# Copyright 2004 Austin Ziegler <ruby-install@halostatue.ca>
|
||||
# Install utility. Based on the original installation script for rdoc by the
|
||||
# Pragmatic Programmers.
|
||||
#
|
||||
# This program is free software. It may be redistributed and/or modified under
|
||||
# the terms of the GPL version 2 (or later) or the Ruby licence.
|
||||
#
|
||||
# Usage
|
||||
# -----
|
||||
# In most cases, if you have a typical project layout, you will need to do
|
||||
# absolutely nothing to make this work for you. This layout is:
|
||||
#
|
||||
# bin/ # executable files -- "commands"
|
||||
# lib/ # the source of the library
|
||||
# tests/ # unit tests
|
||||
#
|
||||
# The default behaviour:
|
||||
# 1) Run all unit test files (ending in .rb) found in all directories under
|
||||
# tests/.
|
||||
# 2) Build Rdoc documentation from all files in bin/ (excluding .bat and .cmd),
|
||||
# all .rb files in lib/, ./README, ./ChangeLog, and ./Install.
|
||||
# 3) Build ri documentation from all files in bin/ (excluding .bat and .cmd),
|
||||
# and all .rb files in lib/. This is disabled by default on Win32.
|
||||
# 4) Install commands from bin/ into the Ruby bin directory. On Windows, if a
|
||||
# if a corresponding batch file (.bat or .cmd) exists in the bin directory,
|
||||
# it will be copied over as well. Otherwise, a batch file (always .bat) will
|
||||
# be created to run the specified command.
|
||||
# 5) Install all library files ending in .rb from lib/ into Ruby's
|
||||
# site_lib/version directory.
|
||||
#
|
||||
# $Id$
|
||||
#++
|
||||
|
||||
require 'rbconfig'
|
||||
require 'find'
|
||||
require 'fileutils'
|
||||
require 'rdoc/rdoc'
|
||||
require 'optparse'
|
||||
require 'ostruct'
|
||||
|
||||
InstallOptions = OpenStruct.new
|
||||
|
||||
def glob(list)
|
||||
g = list.map { |i| Dir.glob(i) }
|
||||
g.flatten!
|
||||
g.compact!
|
||||
g.reject! { |e| e =~ /CVS/ }
|
||||
g
|
||||
end
|
||||
|
||||
# Set these values to what you want installed.
|
||||
bins = glob(%w{bin/**/*}).reject { |e| e =~ /\.(bat|cmd)$/ }
|
||||
rdoc = glob(%w{bin/**/* lib/**/*.rb README ChangeLog Install}).reject { |e| e=~ /\.(bat|cmd)$/ }
|
||||
ri = glob(%w(bin/**/*.rb lib/**/*.rb)).reject { |e| e=~ /\.(bat|cmd)$/ }
|
||||
libs = glob(%w{lib/**/*.rb})
|
||||
tests = glob(%w{tests/**/*.rb})
|
||||
|
||||
def do_bins(bins, target, strip = 'bin/')
|
||||
bins.each do |bf|
|
||||
obf = bf.gsub(/#{strip}/, '')
|
||||
install_binfile(bf, obf, target)
|
||||
end
|
||||
end
|
||||
|
||||
def do_libs(libs, strip = 'lib/')
|
||||
libs.each do |lf|
|
||||
olf = File.join(InstallOptions.site_dir, lf.gsub(/#{strip}/, ''))
|
||||
op = File.dirname(olf)
|
||||
File.makedirs(op, true)
|
||||
File.chmod(0755, op)
|
||||
File.install(lf, olf, 0755, true)
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# Prepare the file installation.
|
||||
#
|
||||
def prepare_installation
|
||||
InstallOptions.rdoc = true
|
||||
if RUBY_PLATFORM == "i386-mswin32"
|
||||
InstallOptions.ri = false
|
||||
else
|
||||
InstallOptions.ri = true
|
||||
end
|
||||
InstallOptions.tests = true
|
||||
|
||||
ARGV.options do |opts|
|
||||
opts.banner = "Usage: #{File.basename($0)} [options]"
|
||||
opts.separator ""
|
||||
opts.on('--[no-]rdoc', 'Prevents the creation of RDoc output.', 'Default on.') do |onrdoc|
|
||||
InstallOptions.rdoc = onrdoc
|
||||
end
|
||||
opts.on('--[no-]ri', 'Prevents the creation of RI output.', 'Default off on mswin32.') do |onri|
|
||||
InstallOptions.ri = onri
|
||||
end
|
||||
opts.on('--[no-]tests', 'Prevents the execution of unit tests.', 'Default on.') do |ontest|
|
||||
InstallOptions.tests = ontest
|
||||
end
|
||||
opts.on('--quick', 'Performs a quick installation. Only the', 'installation is done.') do |quick|
|
||||
InstallOptions.rdoc = false
|
||||
InstallOptions.ri = false
|
||||
InstallOptions.tests = false
|
||||
end
|
||||
opts.on('--full', 'Performs a full installation. All', 'optional installation steps are run.') do |full|
|
||||
InstallOptions.rdoc = true
|
||||
InstallOptions.ri = true
|
||||
InstallOptions.tests = true
|
||||
end
|
||||
opts.separator("")
|
||||
opts.on_tail('--help', "Shows this help text.") do
|
||||
$stderr.puts opts
|
||||
exit
|
||||
end
|
||||
|
||||
opts.parse!
|
||||
end
|
||||
|
||||
bds = [".", ENV['TMP'], ENV['TEMP']]
|
||||
|
||||
version = [Config::CONFIG["MAJOR"], Config::CONFIG["MINOR"]].join(".")
|
||||
ld = File.join(Config::CONFIG["libdir"], "ruby", version)
|
||||
|
||||
sd = Config::CONFIG["sitelibdir"]
|
||||
if sd.nil?
|
||||
sd = $:.find { |x| x =~ /site_ruby/ }
|
||||
if sd.nil?
|
||||
sd = File.join(ld, "site_ruby")
|
||||
elsif sd !~ Regexp.quote(version)
|
||||
sd = File.join(sd, version)
|
||||
end
|
||||
end
|
||||
|
||||
if (destdir = ENV['DESTDIR'])
|
||||
bd = "#{destdir}#{Config::CONFIG['bindir']}"
|
||||
sd = "#{destdir}#{sd}"
|
||||
bds << bd
|
||||
|
||||
FileUtils.makedirs(bd)
|
||||
FileUtils.makedirs(sd)
|
||||
else
|
||||
bds << Config::CONFIG['bindir']
|
||||
end
|
||||
|
||||
InstallOptions.bin_dirs = bds.compact
|
||||
InstallOptions.site_dir = sd
|
||||
InstallOptions.bin_dir = bd
|
||||
InstallOptions.lib_dir = ld
|
||||
end
|
||||
|
||||
##
|
||||
# Build the rdoc documentation. Also, try to build the RI documentation.
|
||||
#
|
||||
def build_rdoc(files)
|
||||
r = RDoc::RDoc.new
|
||||
r.document(["--main", "README", "--title", "Diff::LCS -- A Diff Algorithm",
|
||||
"--line-numbers"] + files)
|
||||
|
||||
rescue RDoc::RDocError => e
|
||||
$stderr.puts e.message
|
||||
rescue Exception => e
|
||||
$stderr.puts "Couldn't build RDoc documentation\n#{e.message}"
|
||||
end
|
||||
|
||||
def build_ri(files)
|
||||
ri = RDoc::RDoc.new
|
||||
ri.document(["--ri-site", "--merge"] + files)
|
||||
rescue RDoc::RDocError => e
|
||||
$stderr.puts e.message
|
||||
rescue Exception => e
|
||||
$stderr.puts "Couldn't build Ri documentation\n#{e.message}"
|
||||
end
|
||||
|
||||
def run_tests(test_list)
|
||||
require 'test/unit/ui/console/testrunner'
|
||||
$:.unshift "lib"
|
||||
test_list.each do |test|
|
||||
next if File.directory?(test)
|
||||
require test
|
||||
end
|
||||
|
||||
tests = []
|
||||
ObjectSpace.each_object { |o| tests << o if o.kind_of?(Class) }
|
||||
tests.delete_if { |o| !o.ancestors.include?(Test::Unit::TestCase) }
|
||||
tests.delete_if { |o| o == Test::Unit::TestCase }
|
||||
|
||||
tests.each { |test| Test::Unit::UI::Console::TestRunner.run(test) }
|
||||
$:.shift
|
||||
end
|
||||
|
||||
##
|
||||
# Install file(s) from ./bin to Config::CONFIG['bindir']. Patch it on the way
|
||||
# to insert a #! line; on a Unix install, the command is named as expected
|
||||
# (e.g., bin/rdoc becomes rdoc); the shebang line handles running it. Under
|
||||
# windows, we add an '.rb' extension and let file associations do their stuff.
|
||||
def install_binfile(from, op_file, target)
|
||||
tmp_dir = nil
|
||||
InstallOptions.bin_dirs.each do |t|
|
||||
if File.directory?(t) and File.writable?(t)
|
||||
tmp_dir = t
|
||||
break
|
||||
end
|
||||
end
|
||||
|
||||
fail "Cannot find a temporary directory" unless tmp_dir
|
||||
tmp_file = File.join(tmp_dir, '_tmp')
|
||||
ruby = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
|
||||
|
||||
File.open(from) do |ip|
|
||||
File.open(tmp_file, "w") do |op|
|
||||
ruby = File.join(Config::CONFIG['bindir'], Config::CONFIG['ruby_install_name'])
|
||||
op.puts "#!#{ruby}"
|
||||
op.write ip.read
|
||||
end
|
||||
end
|
||||
|
||||
if Config::CONFIG["target_os"] =~ /win/io
|
||||
installed_wrapper = false
|
||||
|
||||
if File.exists?("#{from}.bat")
|
||||
FileUtils.install("#{from}.bat", File.join(target, "#{op_file}.bat"), :mode => 0755, :verbose => true)
|
||||
installed_wrapper = true
|
||||
end
|
||||
|
||||
if File.exists?("#{from}.cmd")
|
||||
FileUtils.install("#{from}.cmd", File.join(target, "#{op_file}.cmd"), :mode => 0755, :verbose => true)
|
||||
installed_wrapper = true
|
||||
end
|
||||
|
||||
if not installed_wrapper
|
||||
tmp_file2 = File.join(tmp_dir, '_tmp_wrapper')
|
||||
cwn = File.join(Config::CONFIG['bindir'], op_file)
|
||||
cwv = CMD_WRAPPER.gsub('<ruby>', ruby.gsub(%r{/}) { "\\" }).gsub!('<command>', cwn.gsub(%r{/}) { "\\" } )
|
||||
|
||||
File.open(tmp_file2, "wb") { |cw| cw.puts cwv }
|
||||
FileUtils.install(tmp_file2, File.join(target, "#{op_file}.bat"), :mode => 0755, :verbose => true)
|
||||
|
||||
File.unlink(tmp_file2)
|
||||
installed_wrapper = true
|
||||
end
|
||||
end
|
||||
FileUtils.install(tmp_file, File.join(target, op_file), :mode => 0755, :verbose => true)
|
||||
File.unlink(tmp_file)
|
||||
end
|
||||
|
||||
CMD_WRAPPER = <<-EOS
|
||||
@echo off
|
||||
if "%OS%"=="Windows_NT" goto WinNT
|
||||
<ruby> -x "<command>" %1 %2 %3 %4 %5 %6 %7 %8 %9
|
||||
goto done
|
||||
:WinNT
|
||||
<ruby> -x "<command>" %*
|
||||
goto done
|
||||
:done
|
||||
EOS
|
||||
|
||||
prepare_installation
|
||||
|
||||
run_tests(tests) if InstallOptions.tests
|
||||
build_rdoc(rdoc) if InstallOptions.rdoc
|
||||
build_ri(ri) if InstallOptions.ri
|
||||
do_bins(bins, Config::CONFIG['bindir'])
|
||||
do_libs(libs)
|
|
@ -10,10 +10,11 @@
|
|||
#
|
||||
# The ChangeLog contains all details on revisions.
|
||||
#++
|
||||
# TODO include ../../ChangeLog
|
||||
module MIME #:nodoc:
|
||||
# Reflects a MIME Content-Type which is in invalid format (e.g., it isn't
|
||||
# in the form of type/subtype).
|
||||
|
||||
# The namespace for MIME appplications and tools.
|
||||
module MIME
|
||||
# Reflects a MIME Content-Type which is in invalid format (e.g., it
|
||||
# isn't in the form of type/subtype).
|
||||
class InvalidContentType < RuntimeError; end
|
||||
|
||||
# == Summary
|
||||
|
@ -35,7 +36,7 @@ module MIME #:nodoc:
|
|||
# puts MIME::Type.simplified('x-appl/x-zip') # => 'appl/zip'
|
||||
#
|
||||
class Type
|
||||
VERSION = '1.13.1' #:nodoc:
|
||||
VERSION = '1.15'
|
||||
|
||||
include Comparable
|
||||
|
||||
|
@ -44,7 +45,10 @@ module MIME #:nodoc:
|
|||
ENCODING_RE = %r{^(?:base64|7bit|8bit|quoted\-printable)$}o #:nodoc:
|
||||
PLATFORM_RE = %r|#{RUBY_PLATFORM}|o #:nodoc:
|
||||
|
||||
SIGNATURES = %w(application/pgp-keys application/pgp application/pgp-signature application/pkcs10 application/pkcs7-mime application/pkcs7-signature text/vcard) #:nodoc:
|
||||
SIGNATURES = %w(application/pgp-keys application/pgp
|
||||
application/pgp-signature application/pkcs10
|
||||
application/pkcs7-mime application/pkcs7-signature
|
||||
text/vcard) #:nodoc:
|
||||
|
||||
# Returns +true+ if the simplified type matches the current
|
||||
def like?(other)
|
||||
|
@ -56,8 +60,8 @@ module MIME #:nodoc:
|
|||
end
|
||||
|
||||
# Compares the MIME::Type against the exact content type or the
|
||||
# simplified type (the simplified type will be used if comparing against
|
||||
# something that can be treated as a String with #to_s).
|
||||
# simplified type (the simplified type will be used if comparing
|
||||
# against something that can be treated as a String with #to_s).
|
||||
def <=>(other) #:nodoc:
|
||||
if other.respond_to?(:content_type)
|
||||
@content_type <=> other.content_type
|
||||
|
@ -99,23 +103,23 @@ module MIME #:nodoc:
|
|||
# The MIME types main- and sub-label can both start with <tt>x-</tt>,
|
||||
# which indicates that it is a non-registered name. Of course, after
|
||||
# registration this flag can disappear, adds to the confusing
|
||||
# proliferation of MIME types. The simplified string has the <tt>x-</tt>
|
||||
# removed and are translated to lowercase.
|
||||
# proliferation of MIME types. The simplified string has the
|
||||
# <tt>x-</tt> removed and are translated to lowercase.
|
||||
attr_reader :simplified
|
||||
# The list of extensions which are known to be used for this MIME::Type.
|
||||
# Non-array values will be coerced into an array with #to_a. Array
|
||||
# values will be flattened and +nil+ values removed.
|
||||
# The list of extensions which are known to be used for this
|
||||
# MIME::Type. Non-array values will be coerced into an array with
|
||||
# #to_a. Array values will be flattened and +nil+ values removed.
|
||||
attr_accessor :extensions
|
||||
def extensions=(ext) #:nodoc:
|
||||
@extensions = ext.to_a.flatten.compact
|
||||
end
|
||||
|
||||
# The encoding (7bit, 8bit, quoted-printable, or base64) required to
|
||||
# transport the data of this content type safely across a network, which
|
||||
# roughly corresponds to Content-Transfer-Encoding. A value of +nil+ or
|
||||
# <tt>:default</tt> will reset the #encoding to the #default_encoding
|
||||
# for the MIME::Type. Raises ArgumentError if the encoding provided is
|
||||
# invalid.
|
||||
# transport the data of this content type safely across a network,
|
||||
# which roughly corresponds to Content-Transfer-Encoding. A value of
|
||||
# +nil+ or <tt>:default</tt> will reset the #encoding to the
|
||||
# #default_encoding for the MIME::Type. Raises ArgumentError if the
|
||||
# encoding provided is invalid.
|
||||
attr_accessor :encoding
|
||||
def encoding=(enc) #:nodoc:
|
||||
if enc.nil? or enc == :default
|
||||
|
@ -144,11 +148,11 @@ module MIME #:nodoc:
|
|||
end
|
||||
|
||||
class << self
|
||||
# The MIME types main- and sub-label can both start with <tt>x-</tt>,
|
||||
# which indicates that it is a non-registered name. Of course, after
|
||||
# registration this flag can disappear, adds to the confusing
|
||||
# proliferation of MIME types. The simplified string has the
|
||||
# <tt>x-</tt> removed and are translated to lowercase.
|
||||
# The MIME types main- and sub-label can both start with
|
||||
# <tt>x-</tt>, which indicates that it is a non-registered name. Of
|
||||
# course, after registration this flag can disappear, adds to the
|
||||
# confusing proliferation of MIME types. The simplified string has
|
||||
# the <tt>x-</tt> removed and are translated to lowercase.
|
||||
def Type.simplified(content_type)
|
||||
matchdata = CONTENT_TYPE_RE.match(content_type)
|
||||
|
||||
|
@ -248,8 +252,8 @@ module MIME #:nodoc:
|
|||
# end
|
||||
#
|
||||
# === Changes
|
||||
# In MIME::Types 1.07, the constructor accepted more argument types and
|
||||
# called #instance_eval on the optional block provided. This is no
|
||||
# In MIME::Types 1.07, the constructor accepted more argument types
|
||||
# and called #instance_eval on the optional block provided. This is no
|
||||
# longer the case as of 1.13. The full changes are noted below.
|
||||
#
|
||||
# 1. The constructor +yield+s +self+ instead of using #instance_eval and
|
||||
|
@ -260,7 +264,7 @@ module MIME #:nodoc:
|
|||
#
|
||||
# # 1.07
|
||||
# MIME::Type.new(plaintext)
|
||||
# # 1.12
|
||||
# # 1.13
|
||||
# MIME::Type.from_mime_type(plaintext)
|
||||
#
|
||||
# 3. MIME::Type.new no longer accepts an Array argument. Use
|
||||
|
@ -268,7 +272,7 @@ module MIME #:nodoc:
|
|||
#
|
||||
# # 1.07
|
||||
# MIME::Type.new(["application/x-ruby", ["rb"], "8bit"])
|
||||
# # 1.12
|
||||
# # 1.13
|
||||
# MIME::Type.from_array("application/x-ruby", ['rb'], '8bit')
|
||||
# MIME::Type.from_array(["application/x-ruby", ['rb'], '8bit'])
|
||||
#
|
||||
|
@ -280,7 +284,7 @@ module MIME #:nodoc:
|
|||
# 'Content-Transfer-Encoding' => '8bit',
|
||||
# 'System' => 'linux',
|
||||
# 'Extensions' => ['yaml', 'yml'])
|
||||
# # 1.12
|
||||
# # 1.13
|
||||
# MIME::Type.from_hash('Content-Type' => 'text/x-yaml',
|
||||
# 'Content-Transfer-Encoding' => '8bit',
|
||||
# 'System' => 'linux',
|
||||
|
@ -314,24 +318,24 @@ module MIME #:nodoc:
|
|||
end
|
||||
|
||||
# MIME content-types which are not regestered by IANA nor defined in
|
||||
# RFCs are required to start with <tt>x-</tt>. This counts as well for a
|
||||
# new media type as well as a new sub-type of an existing media type. If
|
||||
# either the media-type or the content-type begins with <tt>x-</tt>,
|
||||
# this method will return +false+.
|
||||
# RFCs are required to start with <tt>x-</tt>. This counts as well for
|
||||
# a new media type as well as a new sub-type of an existing media
|
||||
# type. If either the media-type or the content-type begins with
|
||||
# <tt>x-</tt>, this method will return +false+.
|
||||
def registered?
|
||||
not (@raw_media_type =~ UNREGISTERED_RE) || (@raw_sub_type =~ UNREGISTERED_RE)
|
||||
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>.
|
||||
# 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>.
|
||||
def binary?
|
||||
@encoding == 'base64'
|
||||
end
|
||||
|
||||
# MIME types can be specified to be sent across a network in particular
|
||||
# formats. This method returns +false+ when the MIME type encoding is
|
||||
# set to <tt>base64</tt>.
|
||||
# MIME types can be specified to be sent across a network in
|
||||
# particular formats. This method returns +false+ when the MIME type
|
||||
# encoding is set to <tt>base64</tt>.
|
||||
def ascii?
|
||||
not binary?
|
||||
end
|
||||
|
@ -347,8 +351,8 @@ module MIME #:nodoc:
|
|||
not @system.nil?
|
||||
end
|
||||
|
||||
# Returns +true+ if the MIME::Type is specific to the current operating
|
||||
# system as represented by RUBY_PLATFORM.
|
||||
# Returns +true+ if the MIME::Type is specific to the current
|
||||
# operating system as represented by RUBY_PLATFORM.
|
||||
def platform?
|
||||
system? and (RUBY_PLATFORM =~ @system)
|
||||
end
|
||||
|
|
|
@ -68,9 +68,9 @@ module MIME #:nodoc:
|
|||
#
|
||||
module Types
|
||||
# The released version of Ruby MIME::Types
|
||||
VERSION = '1.13.1'
|
||||
MIME_TYPES_VERSION = '1.15'
|
||||
# The version of the data.
|
||||
DATA_VERSION = '1.13'
|
||||
DATA_VERSION = '1.15'
|
||||
|
||||
TYPE_VARIANTS = Hash.new { |h, k| h[k] = [] } #:nodoc:
|
||||
EXTENSION_INDEX = Hash.new { |h, k| h[k] = [] } #:nodoc:
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
Gem::Specification.new do |s|
|
||||
s.name = %q{mime-types}
|
||||
s.version = %q{1.13.1}
|
||||
s.version = %q{1.15}
|
||||
s.summary = %q{Manages a MIME Content-Type that will return the Content-Type for a given filename.}
|
||||
s.platform = Gem::Platform::RUBY
|
||||
|
||||
|
|
|
@ -0,0 +1,46 @@
|
|||
require 'rdoc/rdoc'
|
||||
##
|
||||
# Build the rdoc documentation. Also, try to build the RI documentation.
|
||||
#
|
||||
def build_rdoc(options)
|
||||
RDoc::RDoc.new.document(options)
|
||||
rescue RDoc::RDocError => e
|
||||
$stderr.puts e.message
|
||||
rescue Exception => e
|
||||
$stderr.puts "Couldn't build RDoc documentation\n#{e.message}"
|
||||
end
|
||||
|
||||
def build_ri(files)
|
||||
RDoc::RDoc.new(["--ri-site", "--merge"] + files)
|
||||
rescue RDoc::RDocError => e
|
||||
$stderr.puts e.message
|
||||
rescue Exception => e
|
||||
$stderr.puts "Couldn't build Ri documentation\n#{e.message}"
|
||||
end
|
||||
|
||||
def run_tests(test_list)
|
||||
return if test_list.empty?
|
||||
|
||||
require 'test/unit/ui/console/testrunner'
|
||||
$:.unshift "lib"
|
||||
test_list.each do |test|
|
||||
next if File.directory?(test)
|
||||
require test
|
||||
end
|
||||
|
||||
tests = []
|
||||
ObjectSpace.each_object { |o| tests << o if o.kind_of?(Class) }
|
||||
tests.delete_if { |o| !o.ancestors.include?(Test::Unit::TestCase) }
|
||||
tests.delete_if { |o| o == Test::Unit::TestCase }
|
||||
|
||||
tests.each { |test| Test::Unit::UI::Console::TestRunner.run(test) }
|
||||
$:.shift
|
||||
end
|
||||
|
||||
rdoc = %w(--main README --line-numbers
|
||||
--title MIME::Types)
|
||||
ri = %w(--ri-site --merge)
|
||||
dox = %w(README ChangeLog lib)
|
||||
build_rdoc rdoc + dox
|
||||
build_ri ri + dox
|
||||
run_tests Dir["tests/**/*"]
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -1,9 +1,18 @@
|
|||
#! /usr/bin/env ruby
|
||||
#--
|
||||
# MIME::Types for Ruby
|
||||
# http://rubyforge.org/projects/mime-types/
|
||||
# Copyright 2003 - 2005 Austin Ziegler.
|
||||
# Licensed under a MIT-style licence.
|
||||
#
|
||||
# $Id$
|
||||
#++
|
||||
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
|
||||
|
||||
require 'mime/types'
|
||||
require 'mime/type'
|
||||
require 'test/unit'
|
||||
|
||||
class TestMIME__Type < Test::Unit::TestCase #:nodoc:
|
||||
class Test_MIME__Type < Test::Unit::TestCase #:nodoc:
|
||||
def setup
|
||||
@zip = MIME::Type.new('x-appl/x-zip') { |t| t.extensions = ['zip', 'zp'] }
|
||||
end
|
||||
|
@ -258,67 +267,3 @@ class TestMIME__Type < Test::Unit::TestCase #:nodoc:
|
|||
assert_equal(MIME::Type.simplified('x-xyz/abc'), 'xyz/abc')
|
||||
end
|
||||
end
|
||||
|
||||
class TestMIME__Types < Test::Unit::TestCase #:nodoc:
|
||||
def test_s_AREF # singleton method '[]'
|
||||
text_plain = MIME::Type.new('text/plain') do |t|
|
||||
t.encoding = '8bit'
|
||||
t.extensions = ['asc', 'txt', 'c', 'cc', 'h', 'hh', 'cpp', 'hpp', 'dat', 'hlp']
|
||||
end
|
||||
text_plain_vms = MIME::Type.new('text/plain') do |t|
|
||||
t.encoding = '8bit'
|
||||
t.extensions = ['doc']
|
||||
t.system = 'vms'
|
||||
end
|
||||
text_vnd_fly = MIME::Type.new('text/vnd.fly')
|
||||
assert_equal(MIME::Types['text/plain'].sort,
|
||||
[text_plain, text_plain_vms].sort)
|
||||
|
||||
assert_equal(MIME::Types[/bmp$/].sort,
|
||||
[MIME::Type.from_array('image/x-bmp', ['bmp']),
|
||||
MIME::Type.from_array('image/vnd.wap.wbmp', ['wbmp']),
|
||||
MIME::Type.from_array('image/x-win-bmp')].sort)
|
||||
assert_equal(MIME::Types[/bmp$/, { :complete => true }].sort,
|
||||
[MIME::Type.from_array('image/x-bmp', ['bmp']),
|
||||
MIME::Type.from_array('image/vnd.wap.wbmp', ['wbmp'])].sort)
|
||||
assert_nothing_raised { MIME::Types['image/bmp'][0].system = RUBY_PLATFORM }
|
||||
assert_equal(MIME::Types[/bmp$/, { :platform => true }],
|
||||
[MIME::Type.from_array('image/x-bmp', ['bmp'])])
|
||||
|
||||
assert(MIME::Types['text/vnd.fly', { :complete => true }].empty?)
|
||||
assert(!MIME::Types['text/plain', { :complete => true} ].empty?)
|
||||
end
|
||||
|
||||
def test_s_add
|
||||
assert_nothing_raised do
|
||||
@eruby = MIME::Type.new("application/x-eruby") do |t|
|
||||
t.extensions = "rhtml"
|
||||
t.encoding = "8bit"
|
||||
end
|
||||
|
||||
MIME::Types.add(@eruby)
|
||||
end
|
||||
|
||||
assert_equal(MIME::Types['application/x-eruby'], [@eruby])
|
||||
end
|
||||
|
||||
def test_s_type_for
|
||||
assert_equal(MIME::Types.type_for('xml'), MIME::Types['text/xml'])
|
||||
assert_equal(MIME::Types.type_for('gif'), MIME::Types['image/gif'])
|
||||
assert_nothing_raised do
|
||||
MIME::Types['image/gif'][0].system = RUBY_PLATFORM
|
||||
end
|
||||
assert_equal(MIME::Types.type_for('gif', true), MIME::Types['image/gif'])
|
||||
assert(MIME::Types.type_for('zzz').empty?)
|
||||
end
|
||||
|
||||
def test_s_of
|
||||
assert_equal(MIME::Types.of('xml'), MIME::Types['text/xml'])
|
||||
assert_equal(MIME::Types.of('gif'), MIME::Types['image/gif'])
|
||||
assert_nothing_raised do
|
||||
MIME::Types['image/gif'][0].system = RUBY_PLATFORM
|
||||
end
|
||||
assert_equal(MIME::Types.of('gif', true), MIME::Types['image/gif'])
|
||||
assert(MIME::Types.of('zzz').empty?)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,77 @@
|
|||
#! /usr/bin/env ruby
|
||||
#--
|
||||
# MIME::Types for Ruby
|
||||
# http://rubyforge.org/projects/mime-types/
|
||||
# Copyright 2003 - 2005 Austin Ziegler.
|
||||
# Licensed under a MIT-style licence.
|
||||
#
|
||||
# $Id$
|
||||
#++
|
||||
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
|
||||
|
||||
require 'mime/types'
|
||||
require 'test/unit'
|
||||
|
||||
class TestMIME__Types < Test::Unit::TestCase #:nodoc:
|
||||
def test_s_AREF # singleton method '[]'
|
||||
text_plain = MIME::Type.new('text/plain') do |t|
|
||||
t.encoding = '8bit'
|
||||
t.extensions = ['asc', 'txt', 'c', 'cc', 'h', 'hh', 'cpp', 'hpp', 'dat', 'hlp']
|
||||
end
|
||||
text_plain_vms = MIME::Type.new('text/plain') do |t|
|
||||
t.encoding = '8bit'
|
||||
t.extensions = ['doc']
|
||||
t.system = 'vms'
|
||||
end
|
||||
text_vnd_fly = MIME::Type.new('text/vnd.fly')
|
||||
assert_equal(MIME::Types['text/plain'].sort,
|
||||
[text_plain, text_plain_vms].sort)
|
||||
|
||||
assert_equal([MIME::Type.from_array('image/x-bmp', ['bmp']),
|
||||
MIME::Type.from_array('image/vnd.wap.wbmp',
|
||||
['wbmp'])].sort, MIME::Types[/bmp$/].sort)
|
||||
assert_equal([MIME::Type.from_array('image/x-bmp', ['bmp']),
|
||||
MIME::Type.from_array('image/vnd.wap.wbmp',
|
||||
['wbmp'])].sort,
|
||||
MIME::Types[/bmp$/, { :complete => true }].sort)
|
||||
assert_nothing_raised { MIME::Types['image/bmp'][0].system = RUBY_PLATFORM }
|
||||
assert_equal([MIME::Type.from_array('image/x-bmp', ['bmp'])],
|
||||
MIME::Types[/bmp$/, { :platform => true }])
|
||||
|
||||
assert(MIME::Types['text/vnd.fly', { :complete => true }].empty?)
|
||||
assert(!MIME::Types['text/plain', { :complete => true} ].empty?)
|
||||
end
|
||||
|
||||
def test_s_add
|
||||
assert_nothing_raised do
|
||||
@eruby = MIME::Type.new("application/x-eruby") do |t|
|
||||
t.extensions = "rhtml"
|
||||
t.encoding = "8bit"
|
||||
end
|
||||
|
||||
MIME::Types.add(@eruby)
|
||||
end
|
||||
|
||||
assert_equal(MIME::Types['application/x-eruby'], [@eruby])
|
||||
end
|
||||
|
||||
def test_s_type_for
|
||||
assert_equal(MIME::Types.type_for('xml'), MIME::Types['text/xml'])
|
||||
assert_equal(MIME::Types.type_for('gif'), MIME::Types['image/gif'])
|
||||
assert_nothing_raised do
|
||||
MIME::Types['image/gif'][0].system = RUBY_PLATFORM
|
||||
end
|
||||
assert_equal(MIME::Types.type_for('gif', true), MIME::Types['image/gif'])
|
||||
assert(MIME::Types.type_for('zzz').empty?)
|
||||
end
|
||||
|
||||
def test_s_of
|
||||
assert_equal(MIME::Types.of('xml'), MIME::Types['text/xml'])
|
||||
assert_equal(MIME::Types.of('gif'), MIME::Types['image/gif'])
|
||||
assert_nothing_raised do
|
||||
MIME::Types['image/gif'][0].system = RUBY_PLATFORM
|
||||
end
|
||||
assert_equal(MIME::Types.of('gif', true), MIME::Types['image/gif'])
|
||||
assert(MIME::Types.of('zzz').empty?)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,18 @@
|
|||
#! /usr/bin/env ruby
|
||||
#--
|
||||
# MIME::Types for Ruby
|
||||
# http://rubyforge.org/projects/mime-types/
|
||||
# Copyright 2003 - 2005 Austin Ziegler.
|
||||
# Licensed under a MIT-style licence.
|
||||
#
|
||||
# $Id$
|
||||
#++
|
||||
|
||||
$LOAD_PATH.unshift("#{File.dirname(__FILE__)}/../lib") if __FILE__ == $0
|
||||
|
||||
puts "Checking for test cases:"
|
||||
Dir['tc_*.rb'].each do |testcase|
|
||||
puts "\t#{testcase}"
|
||||
require testcase
|
||||
end
|
||||
puts
|
Загрузка…
Ссылка в новой задаче