=begin
CapicuaGen
CapicuaGen es un software que ayuda a la creación automática de
sistemas empresariales a través de la definición y ensamblado de
diversos generadores de características.
El proyecto fue iniciado por José Luis Bautista Martin, el 6 de enero
del 2016.
Puede modificar y distribuir este software, según le plazca, y usarlo
para cualquier fin ya sea comercial, personal, educativo, o de cualquier
índole, siempre y cuando incluya este mensaje, y se permita acceso el
código fuente.
Este software es código libre, y se licencia bajo LGPL.
Para más información consultar http://www.gnu.org/licenses/lgpl.html
=end
require 'active_support/core_ext/object/blank'
require 'uuidtools'
require_relative '../../../Mixins/main_form_mixin'
require_relative '../../../Mixins/splash_mixin'
require_relative '../../../gaspar'
module CapicuaGen::Gaspar
# Caracteristica generadora para proyectos Windows de CS.
class CSProyectFeature < CapicuaGen::TemplateFeature
include CapicuaGen
include CapicuaGen::Gaspar
public
# Inicializa la caracteristica
def initialize(values= {})
super(values)
end
# Resetea los atributos personalizados de la caracteristica (antes de establecer el generador)
def reset_attributes
self.generation_attributes[:out_dir] = nil
self.generation_attributes[:namespace]= nil
end
# Configura los atributos personalizados de la caracteristica (antes de establecer el generador)
def configure_attributes()
self.generation_attributes[:out_dir]= "#{self.generation_attributes[:out_dir]}/#{self.generation_attributes[:namespace]}" unless self.generation_attributes.has_in_self?(:out)
end
# Obtiene los archivos que se incluiran en este proyeto
def get_proyect_files()
resultado= ''
template_target= get_template_target_by_name('proyect')
directory_base= File.dirname(File.join(self.generation_attributes[:out_dir], template_target.out_file))
# Recorro todas las caracteristicas
generator.features().each do |f|
#Obtengo todos los archivos asociados
f.get_relative_out_files(:directory_base => directory_base, :types => :proyect_file).each do |unix_path|
p = unix_path.gsub /\//, '\\'
extension= File.extname(p).downcase
file_type= :proyect_file
Dir.chdir directory_base do
file_type= get_type(p)
end
case extension
when '.cs'
case file_type
when :proyect_file
if p=~ /(?:.+\\)?(.+)\.Designer.cs/i
resultado << " " << $/
resultado << " #{$1}.cs" << $/
resultado << " " << $/
elsif p=~ /(?:.+\\)?(.+)\.svc\.cs/i
resultado << " " << $/
resultado << " #{$1}.svc" << $/
resultado << " " << $/
else
resultado << " " << $/
end
when :form_proyect_file
resultado << " " << $/
resultado << " Form" << $/
resultado << " " << $/
end
when '.resx'
if p=~ /(?:.+\\)?(.+)\.resx/i
resultado << " " << $/
resultado << " #{$1}.cs" << $/
resultado << " " << $/
end
when '.config', '.svc'
resultado << " " << $/
else
resultado << " " << $/
end
end
end
return resultado
end
# Devuelve el tipo de archivo de un elemento.
def get_type(file)
return :proyect_file unless file=~/.cs$/
# Compruebo si es un archivo de Windows
designed= file.sub(/\.cs$/, ".designer.cs")
return :proyect_file if file==designed
return :proyect_file if not File.exist?(designed)
text= File.open(designed).read
if text=~/:\s*(Form|System.Windows.Form)/
return :form_proyect_file
else
return :proyect_file
end
end
end
end