# encoding: utf-8 # frozen_string_literal: false BASIC = <<-CODE # encoding: utf-8 # frozen_string_literal: false require 'propane' class %s < Propane::App def setup size %s, %s end def draw end end %s.new title: '%s' CODE MODE = <<-CODE # encoding: utf-8 # frozen_string_literal: false require 'propane' class %s < Propane::App def setup size %s, %s, %s end def draw end end %s.new title: '%s' CODE INNER = <<-CODE # encoding: utf-8 # frozen_string_literal: false class %s include Propane::Proxy end CODE # processing wrapper module module Propane require_relative '../helpers/string_extra' # Write file to disk class SketchWriter attr_reader :file def initialize(path) underscore = StringExtra.new(path).underscore @file = "#{File.dirname(path)}/#{underscore}.rb" end def save(template) File.open(file, 'w+') do |f| f.write(template) end end end # An abstract class providing common methods for real creators class Creator ALL_DIGITS = /\A\d+\Z/ def already_exist(path) underscore = StringExtra.new(path).underscore new_file = "#{File.dirname(path)}/#{underscore}.rb" return if !FileTest.exist?(path) && !FileTest.exist?(new_file) puts 'That file already exists!' exit end # Show the help/usage message for create. def usage puts <<-USAGE Usage: propane --create <sketch_to_generate> <width> <height> <mode> optional mode can be P2D / P3D. Use --inner to generated a ruby version of 'java' Inner class Examples: propane --create app 800 600 propane --create app 800 600 p3d propane --create inner_class --inner USAGE end end # This class creates bare sketches, with an optional render mode class BasicSketch < Creator def template_default format(BASIC, @name, @width, @height, @name, @title) end def template_mode format(MODE, @name, @width, @height, @mode, @name, @title) end # Create a class wrapped sketch, given a path. def create!(path, args) return usage if /\?/ =~ path || /--help/ =~ path main_file = File.basename(path, '.rb') # allow uneeded extension input # Check to make sure that the main file doesn't exist already already_exist(path) @name = StringExtra.new(main_file).camelize writer = SketchWriter.new(main_file) @title = StringExtra.new(main_file).titleize @width, @height = args[0], args[1] @mode = args[2].upcase unless args[2].nil? template = @mode.nil? ? template_default : template_mode writer.save(template) end end # This class creates a pseudo 'java inner class' of the sketch class Inner < Creator def inner_class_template format(INNER, @name) end # Create a pseudo inner class, given a path. def create!(path, _args_) return usage if /\?/ =~ path || /--help/ =~ path main_file = File.basename(path, '.rb') # allow uneeded extension input # Check to make sure that the main file doesn't exist already already_exist(path) @name = main_file.camelize writer = SketchWriter.new(main_file) template = inner_class_template writer.save(template) end end end