lib/adyen-skinbuilder/tasks/skin.rake in adyen-skinbuilder-0.2.2 vs lib/adyen-skinbuilder/tasks/skin.rake in adyen-skinbuilder-0.2.3

- old
+ new

@@ -16,34 +16,50 @@ desc 'Build adyen skin zip file for upload. Provide SKIN and TARGET environment variables along the way.' task :build, :skin_directory, :target_directory do |t, args| skin_directory = File.expand_path(args[:skin_directory] || ENV['SKIN']) base_directory = File.expand_path(File.join(skin_directory, '..', 'base')) + # Allow the folder of a skin to have a meaningful name in this format: + # some-nice-name-SKINCODE (use a dash as last charachter before SKINCODE) + # Give the zip the full name, but give the top level directory in the zip + # archive only the SKINCODE, otherwise adyen will not accept it skin_name = File.basename(skin_directory) + skin_code = skin_name[/(?<=\-)[a-zA-Z0-9]+$/] || skin_name target_directory = File.expand_path((args[:target_directory] || ENV['TARGET'])) + # Whether we do or do not have/use a base directory + use_base = File.directory?(base_directory) + puts use_base ? "Using base directory" : "Not using a base directory" + if File.directory?(skin_directory) and File.directory?(target_directory) Zip::ZipOutputStream::open(File.join(target_directory, "#{skin_name}.zip")) do |io| %w(css img inc js res).each do |d| - if File.directory?(File.join(base_directory, d)) + # First see what files the skin itself provides: + if File.directory?(File.join(skin_directory, d)) + Dir.new(File.join(skin_directory, d)).each do |file| + if File.file?(File.join(skin_directory, d, file)) + io.put_next_entry("#{skin_code}/#{d}/#{file}") + io.write File.read(File.join(skin_directory, d, file)) + end + end + end + # Then, let's see whether the base directory has more than what we got already: + if use_base && File.directory?(File.join(base_directory, d)) Dir.new(File.join(base_directory, d)).each do |file| - if File.file?(File.join(base_directory, d, file)) - io.put_next_entry("#{skin_name}/#{d}/#{file}") - - if File.file?(File.join(skin_directory, d, file)) - io.write File.read(File.join(skin_directory, d, file)) - else + # Only use base file if skin does not provide it itself: + if !File.file?(File.join(skin_directory, d, file)) && File.file?(File.join(base_directory, d, file)) + io.put_next_entry("#{skin_code}/#{d}/#{file}") + if File.file?(File.join(base_directory, d, file)) io.write File.read(File.join(base_directory, d, file)) end end end end end end - puts "Skin zip package was created to #{File.join(target_directory, "#{skin_name}.zip")}" else - puts "Usage: rake adyen:buildskin[<skin_directory>,<target_directory>] or rake:adyen:buildskin FROM=/from/dir TO=/to/dir" + puts "Usage: rake adyen:buildskin[<skin_directory>,<target_directory>] or rake:adyen:buildskin SKIN=/from/dir TARGET=/to/dir" end end end end