summaryrefslogtreecommitdiff
path: root/Rakefile
diff options
context:
space:
mode:
authorAustin Ziegler <austin@zieglers.ca>2013-10-26 18:17:06 -0400
committerAustin Ziegler <austin@zieglers.ca>2013-10-26 18:17:06 -0400
commitc2ed9d286655f5420124b4270772bd425ab00e7a (patch)
tree9af77a95f95e5d5fc300966fe5ea9e445b8caa6d /Rakefile
parentade226b48b6f7f4be5c72c33924f771365b00203 (diff)
downloadmime-types-c2ed9d286655f5420124b4270772bd425ab00e7a.tar.gz
mime-types 2.0
A substantial upgrade to the mime-types library. Major features: - No longer compatible with Ruby 1.8. - Several major API changes and deprecations. - The default mime-types registry is now stored as JSON. - Improved developer tools. - Improved repackager tools. See History.rdoc for full details.
Diffstat (limited to 'Rakefile')
-rw-r--r--Rakefile227
1 files changed, 42 insertions, 185 deletions
diff --git a/Rakefile b/Rakefile
index bc2c25a..01e5c60 100644
--- a/Rakefile
+++ b/Rakefile
@@ -14,6 +14,9 @@ Hoe.plugin :travis
spec = Hoe.spec 'mime-types' do
developer('Austin Ziegler', 'austin@rubyforge.org')
+ self.need_tar = true
+
+ self.require_ruby_version '>= 1.9.2'
self.remote_rdoc_dir = '.'
self.rsync_args << ' --exclude=statsvn/'
@@ -31,202 +34,34 @@ spec = Hoe.spec 'mime-types' do
self.extra_dev_deps << ['hoe-travis', '~> 1.2']
self.extra_dev_deps << ['minitest', '~> 4.5']
self.extra_dev_deps << ['rake', '~> 10.0']
-end
-
-def reload_mime_types(repeats = 1, force_load = false)
- repeats.times {
- Object.send(:remove_const, :MIME) if defined? MIME
- load 'lib/mime/types.rb'
- MIME::Types.send(:__types__) if force_load
- }
+ self.extra_dev_deps << ['simplecov', '~> 0.7']
end
desc 'Benchmark'
task :benchmark, :repeats do |t, args|
- repeats = args.repeats.to_i
- repeats = 50 if repeats.zero?
- require 'benchmark'
- $LOAD_PATH.unshift 'lib'
-
- cache_file = File.expand_path('../cache.mtx', __FILE__)
- rm cache_file if File.exist? cache_file
-
- Benchmark.bm(17) do |x|
- x.report("Normal:") { reload_mime_types repeats }
-
- ENV['RUBY_MIME_TYPES_LAZY_LOAD'] = 'yes'
- x.report("Lazy:") { reload_mime_types repeats }
- x.report("Lazy+Load:") { reload_mime_types repeats, true }
+ $LOAD_PATH.unshift('support')
+ require 'benchmarker'
- ENV.delete('RUBY_MIME_TYPES_LAZY_LOAD')
-
- ENV['RUBY_MIME_TYPES_CACHE'] = cache_file
- reload_mime_types
-
- x.report("Cached:") { reload_mime_types repeats }
- ENV['RUBY_MIME_TYPES_LAZY_LOAD'] = 'yes'
- x.report("Lazy Cached:") { reload_mime_types repeats }
- x.report("Lazy Cached Load:") { reload_mime_types repeats, true }
+ Benchmarker.benchmark(args.repeats)
+end
+namespace :test do
+ task :coverage do
+ spec.test_prelude = [
+ 'require "simplecov"',
+ 'SimpleCov.start("test_frameworks") { command_name "Minitest" }',
+ 'gem "minitest"'
+ ].join('; ')
+ Rake::Task['test'].execute
end
-
- rm cache_file
end
namespace :mime do
desc "Download the current MIME type registrations from IANA."
- task :iana, :save, :destination do |t, args|
- save_type = (args.save || :text).to_sym
-
- case save_type
- when :text, :both, :html
- nil
- else
- raise "Unknown save type provided. Must be one of text, both, or html."
- end
-
- destination = args.destination || "type-lists"
-
- require 'open-uri'
- require 'nokogiri'
- require 'cgi'
-
- class IANAParser
- include Comparable
-
- INDEX = %q(http://www.iana.org/assignments/media-types/)
- CONTACT_PEOPLE = %r{http://www.iana.org/assignments/contact-people.html?#(.*)}
- RFC_EDITOR = %r{http://www.rfc-editor.org/rfc/rfc(\d+).txt}
- IETF_RFC = %r{http://www.ietf.org/rfc/rfc(\d+).txt}
- IETF_RFC_TOOLS = %r{http://tools.ietf.org/html/rfc(\d+)}
-
- class << self
- def load_index
- @types ||= {}
-
- Nokogiri::HTML(open(INDEX) { |f| f.read }).xpath('//p/a').each do |tag|
- href_match = %r{^/assignments/media-types/(.+)/$}.match(tag['href'])
- next if href_match.nil?
- type = href_match.captures[0]
- @types[tag.content] = IANAParser.new(tag.content, type)
- end
- end
-
- attr_reader :types
- end
-
- def initialize(name, type)
- @name = name
- @type = type
- @url = File.join(INDEX, @type)
- end
-
- attr_reader :name
- attr_reader :type
- attr_reader :url
- attr_reader :html
-
- def download(name = nil)
- @html = Nokogiri::HTML(open(name || @url) { |f| f.read })
- end
-
- def save_html
- File.open("#@name.html", "wb") { |w| w.write @html }
- end
-
- def <=>(o)
- self.name <=> o.name
- end
-
- def parse
- nodes = html.xpath("//table//table//tr")
-
- # How many <td> children does the first node have?
- node_count = nodes.first.children.select { |n| n.elem? }.size
-
- if node_count == 1
- # The title node doesn't have what we expect. Let's try it based
- # on the first real node.
- node_count = nodes.first.next.children.select { |n| n.elem? }.size
- end
-
- @mime_types = nodes.map do |node|
- next if node == nodes.first
- elems = node.children.select { |n| n.elem? }
- next if elems.size.zero?
-
- if elems.size != node_count
- warn "size mismatch (#{elems.size} != #{node_count}) in node: #{node}"
- next
- end
-
- case elems.size
- when 3
- subtype_index = 1
- refnode_index = 2
- when 4
- subtype_index = 1
- refnode_index = 3
- else
- raise "Unknown element size."
- end
-
- subtype = elems[subtype_index].content.chomp.strip
- refnodes = elems[refnode_index].children.select { |n| n.elem? }.map { |ref|
- case ref['href']
- when CONTACT_PEOPLE
- tag = CGI::unescape($1).chomp.strip
- if tag == ref.content
- "[#{ref.content}]"
- else
- "[#{ref.content}=#{tag}]"
- end
- when RFC_EDITOR, IETF_RFC, IETF_RFC_TOOLS
- "RFC#$1"
- when %r{(https?://.*)}
- "{#{ref.content}=#$1}"
- else
- ref
- end
- }
- refs = refnodes.join(',')
-
- "#@type/#{subtype} 'IANA,#{refs}"
- end.compact
-
- @mime_types
- end
-
- def save_text
- File.open("#@name.txt", "wb") { |w| w.write @mime_types.join("\n") }
- end
- end
-
- puts "Downloading index of MIME types from #{IANAParser::INDEX}."
- IANAParser.load_index
-
- require 'fileutils'
- FileUtils.mkdir_p destination
- Dir.chdir destination do
- IANAParser.types.values.sort.each do |parser|
- next if parser.name == "example" or parser.name == "mime"
- puts "Downloading #{parser.name} from #{parser.url}"
- parser.download
-
- if :html == save_type || :both == save_type
- puts "Saving #{parser.name}.html"
- parser.save_html
- end
-
- if :text == save_type || :both == save_type
- puts "Parsing #{parser.name} HTML"
- parser.parse
-
- puts "Saving #{parser.name}.txt"
- parser.save_text
- end
- end
- end
+ task :iana, :destination do |t, args|
+ $LOAD_PATH.unshift('support')
+ require 'iana_downloader'
+ IANADownloader.download_to(args.destination)
end
desc "Shows known MIME type sources."
@@ -242,4 +77,26 @@ http://www.iana.org/assignments/media-types/
end
end
+Rake::Task['gem'].prerequisites.unshift("convert:yaml:json")
+
+namespace :convert do
+ namespace :yaml do
+ desc "Convert from YAML to JSON"
+ task :json, :source, :destination, :multiple_files do |t, args|
+ $LOAD_PATH.unshift('support')
+ require 'convert'
+ Convert.from_yaml_to_json(args)
+ end
+ end
+
+ namespace :json do
+ desc "Convert from JSON to YAML"
+ task :yaml, :source, :destination, :multiple_files do |t, args|
+ $LOAD_PATH.unshift('support')
+ require 'convert'
+ Convert.from_json_to_yaml(args)
+ end
+ end
+end
+
# vim: syntax=ruby