# frozen_string_literal: true require 'rubygems' require 'hoe' require 'rake/clean' Hoe.plugin :doofus Hoe.plugin :gemspec2 Hoe.plugin :git Hoe.plugin :travis Hoe.plugin :email unless ENV['CI'] or ENV['TRAVIS'] Hoe.spec 'mime-types-data' do developer('Austin Ziegler', 'halostatue@gmail.com') require_ruby_version '>= 2.0' self.history_file = 'History.md' self.readme_file = 'README.md' license 'MIT' extra_dev_deps << [ 'nokogiri', '~> 1.6' ] extra_dev_deps << [ 'hoe-doofus', '~> 1.0' ] extra_dev_deps << [ 'hoe-gemspec2', '~> 1.1' ] extra_dev_deps << [ 'hoe-git', '~> 1.6' ] extra_dev_deps << [ 'hoe-rubygems', '~> 1.0' ] extra_dev_deps << [ 'rake', '>= 10.0', '< 14' ] extra_dev_deps << [ 'mime-types', '>= 3.2.1', '< 4' ] end $LOAD_PATH.unshift 'lib' $LOAD_PATH.unshift 'support' def new_version version = IO.read('lib/mime/types/data.rb').scan(/VERSION = '(\d\.\d{4}\.\d{4})'/).flatten.first major = Gem::Version.new(version).canonical_segments.first minor = Date.today.strftime('%Y.%m%d') "#{major}.#{minor}" end def release_header "#{new_version} / #{Date.today.strftime('%Y-%m-%d')}" end namespace :mime do desc 'Download the current MIME type registrations from IANA.' task :iana, [ :destination ] do |_, args| require 'iana_registry' IANARegistry.download(to: args.destination) end desc 'Download the current MIME type configuration from Apache.' task :apache, [ :destination ] do |_, args| require 'apache_mime_types' ApacheMIMETypes.download(to: args.destination) end end namespace :release do task __pull: %w(mime:apache mime:iana convert) task __prepare: %w(update:version update:history git:manifest gemspec) task :__commit do history = IO.read('History.md') message = history.scan(%r{## (#{release_header}.+?)## \d\.\d{4}\.\d{4} /}m).flatten.first IO.popen('git commit -a -F -', 'w') { |commit| commit.puts message } end desc 'Prepare a new automatic release' task automatic: :__pull do if system('git diff --quiet --exit-code') == false Rake::Task['release:__prepare'].invoke Rake::Task['release:__commit'].invoke else warn 'No changes detected.' end # file = IO.read('History.md') # note = <<-NOTE # # ## #{new_version} / #{Date.today.strftime('%Y-%m-%d')} # - Updated the IANA media registry entries as of release date. # NOTE # updated = file.sub(/\n/, note) # IO.write('History.md', updated) end end namespace :convert do namespace :yaml do desc 'Convert from YAML to JSON' task :json, [ :source, :destination, :multiple_files ] => :support do |_, args| require 'convert' Convert.from_yaml_to_json(args) end desc 'Convert from YAML to Columnar' task :columnar, [ :source, :destination ] => :support do |_, args| require 'convert/columnar' Convert::Columnar.from_yaml_to_columnar(args) end end namespace :json do desc 'Convert from JSON to YAML' task :yaml, [ :source, :destination, :multiple_files ] => :support do |_, args| require 'convert' Convert.from_json_to_yaml(args) end end end namespace :update do desc 'Update the release version' task :version do file = IO.read('lib/mime/types/data.rb') updated = file.sub(/VERSION = '[^']+'/, "VERSION = '#{new_version}'") IO.write('lib/mime/types/data.rb', updated) end desc 'Update the history file with automatic release notes' task :history do history = IO.read('History.md') if history !~ /^## #{release_header}$/ note = <<-NOTE #{release_header} - Updated the IANA media registry entries as of release date. NOTE updated = history.sub(/\n/, note) IO.write('History.md', updated) end end end desc 'Default conversion from YAML to JSON and Columnar' task convert: [ 'convert:yaml:json', 'convert:yaml:columnar' ] Rake::Task['gem'].prerequisites.unshift('convert') Rake::Task['gem'].prerequisites.unshift('git:manifest') Rake::Task['gem'].prerequisites.unshift('gemspec') # vim: syntax=ruby