# frozen_string_literal: true
namespace :tax_cloud do
desc 'Generate tax codes.' task tax_codes: :configure do filename = 'lib/tax_cloud/tax_code_constants.rb' begin groups = TaxCloud::TaxCode::Groups.all.values groups_and_tax_codes = Hash[groups.map do |group| [group, group.tax_codes.values] end] File.open filename, 'wt' do |f| f.write "module TaxCloud\n" f.write " # Tax Codes.\n" f.write " class TaxCodes\n" f.write "\n" codes = {} groups_and_tax_codes.each_pair do |group, tax_codes| puts " #{group.description}" f.write " \# #{group.description}\n\n" tax_codes.each do |tax_code| code = tax_code.description.upcase code.gsub!(/[^A-Z0-9]/, '_') code.gsub!(/_+$/, '') code.gsub!(/_+/, '_') # avoid duplicates code_id = codes[code] ? "#{code}_#{codes[code]}" : code codes[code] = (codes[code] || 0) + 1 f.write " \# #{group.description}: #{tax_code.description}\n" f.write " #{code_id} = #{tax_code.ticid}\n" end f.write "\n" end f.write " end\n" f.write "end\n" end puts "Done, #{filename}." rescue StandardError => e puts 'ERROR: Unable to generate a new list of tax codes.' puts e.message raise e end end
end