lib/appifier/actors/generator.rb in appifier-0.1.0 vs lib/appifier/actors/generator.rb in appifier-0.1.1

- old
+ new

@@ -1,105 +1,95 @@ +# frozen_string_literal: true -module Appifier - - module Actors - class Generator - - attr_reader :src_paths - attr_reader :src_files - attr_reader :src_folders - attr_reader :target_folders - attr_reader :target_files - - - def initialize(src_root: , target_root:) - @src_root = src_root - @target_root = target_root - @target_folders = [] - @target_files = [] - @data = {appname: 'test'} - @src_paths = Dir.glob("#{@src_root}/**/*", File::FNM_DOTMATCH) - @src_paths.delete_if {|file| file =~ /\/\.$/} - @src_folders = @src_paths.select{|item| File::directory? item } - @src_files = @src_paths.select{|item| File::file? item } +module Appifier + module Actors + class Generator + attr_reader :src_paths, :src_files, :src_folders, :target_folders, :target_files + + def initialize(src_root:, target_root:) + @src_root = src_root + @target_root = target_root + @target_folders = [] + @target_files = [] + @data = { appname: 'test' } + @src_paths = Dir.glob("#{@src_root}/**/*", File::FNM_DOTMATCH) + @src_paths.delete_if { |file| file =~ %r{/\.$} } + @src_folders = @src_paths.select { |item| File.directory? item } + @src_files = @src_paths.select { |item| File.file? item } + end + + def generate(dry_run: false, force: false) + puts 'Running in dry_run' if dry_run + calculate + if check_folder_already_exist && !force + puts 'Folders and files already exist' + return false + end + FileUtils.rm_rf("#{@target_root}/#{@target_folders.first}") if force + puts 'Generate folders' + generate_folders dry_run: dry_run + puts 'Generate files' + generate_files dry_run: dry_run + end + + def calculate + calculate_target type: :folder + calculate_target type: :file + end + + private + + def check_folder_already_exist + File.directory?("#{@target_root}/#{@target_folders.first}") + end + + def generate_folders(dry_run:) + puts "Target path to create in #{@target_root} :" + @target_folders.each do |path| + action = dry_run ? '[SKIPPED]' : '[OK]' + FileUtils.mkdir_p "#{@target_root}/#{path}", noop: dry_run + puts "#{action} #{path}" + end + end + + def generate_files(dry_run:) + puts "Target files to create in #{@target_root} :" + @src_files.each_with_index do |path, index| + if dry_run + result = '[SKIPPED]' + else + begin + template = Template.new strict: false, + list_token: @data.keys, + template_file: path + template.map(@data) + content = template.output + File.write("#{@target_root}/#{@target_files[index]}", content) + result = '[OK]' + rescue InvalidTokenList, NotAToken, NoTemplateFile + result = '[KO]' end - - - def generate(dry_run: false, force: false ) - puts 'Running in dry_run' if dry_run - calculate - if check_folder_already_exist and !force - puts 'Folders and files already exist' - return false - end - FileUtils.rm_rf("#{@target_root}/#{@target_folders.first}") if force - puts 'Generate folders' - generate_folders dry_run: dry_run - puts 'Generate files' - generate_files dry_run: dry_run - end - - def calculate - calculate_target type: :folder - calculate_target type: :file - end - - private - - def check_folder_already_exist - File.directory?("#{@target_root}/#{@target_folders.first}") - end - - def generate_folders(dry_run:) - puts "Target path to create in #{@target_root} :" - @target_folders.each do |path| - action = (dry_run)? '[SKIPPED]' : '[OK]' - FileUtils.mkdir_p "#{@target_root}/#{path}", noop: dry_run - puts "#{action} #{path}" - end - end - - def generate_files(dry_run:) - puts "Target files to create in #{@target_root} :" - @src_files.each_with_index do |path, index| - if dry_run - result = "[SKIPPED]" - else - begin - template = Template::new strict:false, - list_token: @data.keys, - template_file: path - template.map(@data) - content = template.output - File.open("#{@target_root}/#{@target_files[index]}", 'w') { |file| file.write(content) } - result = "[OK]" - rescue InvalidTokenList, NotAToken, NoTemplateFile - result = "[KO]" - end - end - puts "#{result} #{@target_files[index]}" - end - end - - - def calculate_target(type:) - if type == :folder then - target = @target_folders - src = @src_folders - else - target = @target_files - src = @src_files - end - src.each do |folder| - template = Template::new strict:false, - list_token: @data.keys, - template_content: folder.delete_prefix("#{@src_root}/" ) - template.map(@data) - output = template.output - target.push output unless target.include? output - end - - end - + end + puts "#{result} #{@target_files[index]}" end + end + + def calculate_target(type:) + if type == :folder + target = @target_folders + src = @src_folders + else + target = @target_files + src = @src_files + end + src.each do |folder| + template = Template.new strict: false, + list_token: @data.keys, + template_content: folder.delete_prefix("#{@src_root}/") + template.map(@data) + output = template.output + target.push output unless target.include? output + end + end end + end end