#!/usr/bin/env ruby require 'thor' require 'fileutils' require 'colorize' module Helper extend self def copy_with_path src, destionation target_dir = File.dirname(destionation) FileUtils.mkdir_p(target_dir) unless Dir.exists?(target_dir) FileUtils.cp src, destionation end def die text puts text.red exit end def glob_files root_folders Cli.die './app not found, not in Rails root' unless Dir.exists?('%s/app' % Dir.pwd) root_folder = `gem which flowcommerce-solidus`.chomp.sub('/lib/flowcommerce-solidus.rb', '/static') files = root_folders.inject([]) do |total, folder| total += Dir['%s/%s/**/*' % [root_folder, folder]] end files = files .map { |f| f.sub('%s/' % root_folder, '') } .select{ |f| f =~ /\.\w+$/ } has_different_size_file = false files.each do |file| source = [root_folder, file].join('/') target = [Dir.pwd, file].join('/') do_copy = if File.exists?(target) if File.size(target) == File.size(source) print 'same size'.rjust(15).green else print 'different size'.rjust(15).blue has_different_size_file = true end false else print 'copied'.rjust(15).green true end Helper.copy_with_path source, target if do_copy puts ' %s' % file end puts puts ' '*14+'* files with different sizes you have to first deleted or renamed'.yellow if has_different_size_file puts ' '*14+'* checked %d files'.yellow % files.length end end ### class FlowcommerceSolidus < Thor desc 'install', 'Installs Flow Solidus libs in current installation, if missing.' def install Helper.glob_files ['app/flow', 'app/views/spree/shared', 'lib'] end desc 'install_admin_views', 'Installs views (erb templates) in ./app/views/admin' def install_admin_views Helper.glob_files ['app/views/spree/admin'] end desc 'install_email_views', 'Installs custom Flow views (erb templates) for email localization' def install_email_views Helper.glob_files ['app/views/spree/order_mailer'] end desc 'dev_copy [folder]','Copy files from local solids to gem', :hide => true def copy_to_gem solidus_folder=nil Cli.die 'Solidus target folder not defined' unless solidus_folder Cli.die './app not found' unless Dir.exists?('%s/app' % solidus_folder) Cli.die 'Not executed in gem root folder' unless $0.include('/flowcommerce-solidus/bin') `rm -rf ./static` `mkdir ./static` # add flow folder files = Dir['%s/app/flow/**/*' % solidus_folder] # admin view changes files += Dir['%s/app/views/admin/*' % solidus_folder] # add rake tasks files += ['%s/lib/tasks/flow.rake' % solidus_folder] # relativise paths and remove folders files = files .map { |f| f.sub(solidus_folder+'/', '') } .select{ |f| f =~ /\.\w+$/ } # copy file to ./static dir in gem home files.each do |file| source = [solidus_folder, file].join('/') target = './static/%s' % file Helper.copy_with_path source, target end puts files puts 'Copied %d files to ./static'.green % files.length end end FlowcommerceSolidus.start ARGV