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