class ConstructorDeEsqueleto

Una instancia de esta clase es la encargada de construir el esqueleto del nuevo proyecto.

Constants

ARCHIVOS
ARCHIVOS_CUCUMBER
ARCHIVOS_RSPEC
SUBCARPETAS

todo lo que sea 'proyect' debe ser reemplazado por el nombre original del proyecto

SUBCARPETAS_CUCUMBER
SUBCARPETAS_FULL
SUBCARPETAS_MINITEST
SUBCARPETAS_RSPEC

Attributes

inconveniente[R]

Public Instance Methods

construir_esqueleto(nombre_del_proyecto) click to toggle source

@param nombre_del_proyecto [String]. @return [TrueClass or FalseClass].

# File lib/cocot/constructor_de_esqueleto.rb, line 19
def construir_esqueleto(nombre_del_proyecto)
  @nombre_del_proyecto = nombre_del_proyecto
  if !(existe_carpeta_de_mismo_nombre_que_este_proyecto_en_el_directorio_actual?)
    crear_carpeta_del_proyecto()
  else
    @inconveniente = "Skeletal structure can't be built. There's an existing folder in the working directory called #{@nombre_del_proyecto}.\n"
    return false
  end
  #me voy a pasar a la carpeta creada
  @directorio_de_trabajo_original = Dir.pwd #: String
  Dir.chdir("./#{@nombre_del_proyecto}")
  #ahí mismo creo el resto de las carpetas
  crear_subcarpetas()
  crear_archivos()
  escribir_archivos()
  #vuelvo al directorio original
  Dir.chdir(@directorio_de_trabajo_original)
  #si todo anduvo bien devuelvo true
  true
end
crear_archivos() click to toggle source
# File lib/cocot/constructor_de_esqueleto.rb, line 73
def crear_archivos
  # creo los archivos principales
  crear_archivos!(ARCHIVOS)
  # dependiendo de las opciones pasadas creo resto de archivos
  case ::COCOT.juzgador_de_argumentos.modo
    when '--rspec-only'
      crear_archivos!(ARCHIVOS_RSPEC)
    when '--cucumber-only'
      crear_archivos!(ARCHIVOS_CUCUMBER)
    when nil
      crear_archivos!(ARCHIVOS_RSPEC)
      crear_archivos!(ARCHIVOS_CUCUMBER)
  end
  # fin de creación de archivos
  ::COCOT.salida.escribir("\n")
end
crear_archivos!(archivos) click to toggle source
# File lib/cocot/constructor_de_esqueleto.rb, line 90
def crear_archivos!(archivos)
  archivos.collect {|archivo| if archivo.include?('proyect') then archivo.sub('proyect', @nombre_del_proyecto) else archivo end}.each do |archivo|
    File.new(archivo, 'w+').close
    ::COCOT.salida.escribir('.')
  end
end
crear_carpeta_del_proyecto() click to toggle source
# File lib/cocot/constructor_de_esqueleto.rb, line 40
def crear_carpeta_del_proyecto
  #creo la carpeta principal
  Dir.mkdir(@nombre_del_proyecto)
  #le digo a la aplicación que escriba en la salida un progreso
  ::COCOT.salida.escribir('.')
end
crear_subcarpetas() click to toggle source
# File lib/cocot/constructor_de_esqueleto.rb, line 47
def crear_subcarpetas
  # creo las comunes
  crear_subcarpetas!(SUBCARPETAS)
  # chequeo las extras
  case ::COCOT.juzgador_de_argumentos.modo
    when '--rspec-only'
      crear_subcarpetas!(SUBCARPETAS_RSPEC)
    when '--cucumber-only'
      crear_subcarpetas!(SUBCARPETAS_CUCUMBER)
    when '--minitest-only'
      crear_subcarpetas!(SUBCARPETAS_MINITEST)
    when nil
      crear_subcarpetas!(SUBCARPETAS_RSPEC)
      crear_subcarpetas!(SUBCARPETAS_CUCUMBER)
  end
  # chequeo si el usuario quiere las carpetas extras
  if ::COCOT.juzgador_de_argumentos.full then crear_subcarpetas!(SUBCARPETAS_FULL) end
end
crear_subcarpetas!(subcarpetas) click to toggle source
# File lib/cocot/constructor_de_esqueleto.rb, line 66
def crear_subcarpetas!(subcarpetas)
  subcarpetas.collect {|carpeta| if carpeta.include?('proyect') then carpeta.sub('proyect', @nombre_del_proyecto) else carpeta end}.each do |carpeta|
    Dir.mkdir(carpeta)
    ::COCOT.salida.escribir('.')
  end
end
escribir_archivos() click to toggle source
# File lib/cocot/constructor_de_esqueleto.rb, line 97
def escribir_archivos
  obtener_contenido_de_archivos() #: Hash
  @contenido_de_archivos.each_pair do |nombre_del_archivo, contenido|
    _nombre_del_archivo = nombre_del_archivo.to_s.sub('proyect', @nombre_del_proyecto)
    # chequeo si el archivo existe
    if(File.exist?(_nombre_del_archivo))
      # existe, lo escribo
      File.open(_nombre_del_archivo, 'w+') do |archivo|
        content_to_write = contenido.gsub('name_of_the_proyect', @nombre_del_proyecto)
        content_to_write.gsub!('name_of_the_project_upcased', @nombre_del_proyecto.upcase)
        content_to_write.gsub!('current_date', Time.now.strftime('%Y-%m-%d'))
        archivo.write(content_to_write)
      end
    end
  end
  # re-escribo el Rakefile
  File.open('Rakefile', 'w') do |archivo|
    case ::COCOT.juzgador_de_argumentos.modo
      when '--rspec-only'
        archivo.write(@contenido_de_archivos[:rakefile_rspec_only])
      when '--cucumber-only'
        archivo.write(@contenido_de_archivos[:rakefile_cucumber_only])
      when '--minitest-only'
        archivo.write(@contenido_de_archivos[:rakefile_minitest_only])
      when '--clean'
        archivo.write(@contenido_de_archivos[:rakefile_clean])
      else
        archivo.write(@contenido_de_archivos[:rakefile])
    end
  end
  # re-escribo el Gemfile
  File.open('Gemfile', 'w') do |archivo|
    case ::COCOT.juzgador_de_argumentos.modo
      when '--rspec-only'
        archivo.write(@contenido_de_archivos[:gemfile_rspec_only])
      when '--cucumber-only'
        archivo.write(@contenido_de_archivos[:gemfile_cucumber_only])
      when '--minitest-only'
        archivo.write(@contenido_de_archivos[:gemfile_clean])
      when '--clean'
        archivo.write(@contenido_de_archivos[:gemfile_clean])
      else
        archivo.write(@contenido_de_archivos[:gemfile])
    end
  end
end
existe_carpeta_de_mismo_nombre_que_este_proyecto_en_el_directorio_actual?() click to toggle source
# File lib/cocot/constructor_de_esqueleto.rb, line 144
def existe_carpeta_de_mismo_nombre_que_este_proyecto_en_el_directorio_actual?
  Dir.exists?("./#{@nombre_del_proyecto}")
end
explicar_inconveniente() click to toggle source
# File lib/cocot/constructor_de_esqueleto.rb, line 148
def explicar_inconveniente
  @inconveniente || "No troubles.\n"
end

Private Instance Methods

obtener_contenido_de_archivos() click to toggle source
# File lib/cocot/constructor_de_esqueleto.rb, line 154
def obtener_contenido_de_archivos
  File.open(File.expand_path('../../../data/contenido_de_archivos.cocot', __FILE__), 'r+b') do |archivo|
    @contenido_de_archivos = Marshal.load(archivo) #: Hash
  end
end