Class: ConstructorDeEsqueleto

Inherits:
Object
  • Object
show all
Defined in:
lib/cocot/constructor_de_esqueleto.rb

Overview

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

Constant Summary collapse

SUBCARPETAS =

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

%w{bin lib lib/proyect doc}
SUBCARPETAS_RSPEC =
%w{spec spec/proyect}
SUBCARPETAS_CUCUMBER =
%w{features features/support features/step_definitions}
SUBCARPETAS_MINITEST =
%w{test}
SUBCARPETAS_FULL =
%w{data share ext}
ARCHIVOS =
%w{CHANGELOG.md Gemfile Gemfile.lock LICENSE.md Rakefile README.md bin/proyect lib/proyect.rb}
ARCHIVOS_RSPEC =
%w{spec/spec_helper.rb}
ARCHIVOS_CUCUMBER =
%w{features/support/env.rb}

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#inconvenienteObject (readonly)

Returns the value of attribute inconveniente.



6
7
8
# File 'lib/cocot/constructor_de_esqueleto.rb', line 6

def inconveniente
  @inconveniente
end

Instance Method Details

#construir_esqueleto(nombre_del_proyecto) ⇒ Object

Parameters:

  • nombre_del_proyecto (String)

    . @return [TrueClass or FalseClass].



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 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_archivosObject



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# 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) ⇒ Object



90
91
92
93
94
95
# 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_proyectoObject



40
41
42
43
44
45
# 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_subcarpetasObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# 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) ⇒ Object



66
67
68
69
70
71
# 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_archivosObject



97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# 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?Boolean

Returns:

  • (Boolean)


144
145
146
# 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_inconvenienteObject



148
149
150
# File 'lib/cocot/constructor_de_esqueleto.rb', line 148

def explicar_inconveniente
  @inconveniente || "No troubles.\n"
end