require 'yaml' require File.join(File.dirname(__FILE__), '..', '..', 'lib/undercase/pattern')

namespace :fonts do

desc 'Compile fonts'
task :compile do
  system 'fontcustom compile -c config/undercase-icons-regular.yml'
end

end

namespace :undercase do

desc 'Compile and commit assets'
task :package do
  system "rm public/undercase-*.tar.gz"
  system "cd spec/dummy/public; rake assets:precompile > /dev/null 2>&1"
  system "cd public; (tar -C ../spec/dummy/public/assets -cvzf undercase-#{bumped_version}.tar.gz .)> /dev/null 2>&1"
  system "git add 'public/undercase-*.tar.gz'"
  system "git commit -m 'Add packaged assets for v#{bumped_version}'"
end

desc 'Push to github and heroku'
task :deploy do
  system "git push origin head --tags"
  system "git push heroku master"
end

desc 'Tag and package assets - defaults to incrementing current version number unless passed VERSION as an argument'
task release: [:package, :bump, :tag, :deploy]

desc 'Create tag'
task :tag do
  system "git tag v#{bumped_version}"
end

desc 'Bump undercase version'
task :bump do
  puts "Bumping undercase version to #{bumped_version}"

  version_file_text = <<-VERSION_FILE

module Undercase

VERSION = '#{bumped_version}'

end

  VERSION_FILE

  File.open("lib/undercase/version.rb", 'w') { |file| file.write(version_file_text) }
  system "git add lib/undercase/version.rb"
  system "bundle install > /dev/null 2>&1"

  system "git add Gemfile.lock"
  system "git commit -m 'Bump undercase to v#{bumped_version}'"
end

end

namespace :pattern do

desc 'Combine import statements for all existing, new, and changed patterns into a manifest file. Overwrites existing manifest.'
task :manifest do
  scss = Undercase::Pattern.all.inject('') do |sum, pattern|
    sum << "@import 'undercase/patterns/#{pattern.key}';\n"
    sum
  end
  File.open(Undercase::Pattern::SCSS_FILE, 'w') {|f| f.write(scss) }
  puts "Generated SCSS import manifest at #{Undercase::Pattern::SCSS_FILE}"
end

desc "Create scaffolding for a new pattern. Usage: pattern:create[NAME,'DISPLAY NAME']"
task :create, :pattern_name, :display_name do |t, args|
  name = args[:pattern_name]
  display_name = args[:display_name]
  puts "Creating #{name}, #{display_name}..."

  yaml = "#{Undercase::Pattern::YAML_PATH}#{name}.yml"
  content = <<-TEXT

name: #{display_name} description: add description usage: add usage notes for #{name} pattern category: :choose_one

  TEXT

  File.open(yaml, 'w') {|f| f.write(content) }
  puts "Created #{yaml}"

  scss = "#{Undercase::Pattern::SCSS_PATH}_#{name}.scss"
  system('touch', scss)
  puts "Created #{scss}"

  haml = "#{Undercase::Pattern::HAML_PATH}_#{name}.html.haml"
  system('touch', haml)
  puts "Created #{haml}"

  Rake::Task['pattern:manifest'].execute

  puts 'Done'
end

end

def bumped_version

@bumped_version ||= (ENV['VERSION'] || calculate_new_version)

end

def calculate_new_version

major, minor, patch = "#{Undercase::VERSION}".split(".")
incremented_patch = patch.to_i + 1
[major, minor, incremented_patch.to_s].join(".")

end