Class: ScafGenerator

Inherits:
Rails::Generators::Base
  • Object
show all
Defined in:
lib/generators/scaf/scaf_generator.rb

Instance Method Summary collapse

Constructor Details

#initialize(*args, &block) ⇒ ScafGenerator

Returns a new instance of ScafGenerator.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/generators/scaf/scaf_generator.rb', line 10

def initialize(*args, &block)
  super

  # Inicializa la variable de instancia @attributos a partir de los argumentos
  obtener_atributos
  
  # Genera un Controller
  generate "controller", "#{plural_name} --no-assets"
  
  # Genera un Scaffold sin Controller ni Vistas ni Assets y con atributo logico <tt>es_activo<tt>
  generate("scaffold", "#{scaffold_name} #{arguments.join(' ')} es_activo:boolean --no-scaffold-controller --no-assets")

  # Encuentra el ultimo archivo de migracion creado. 
  # Es necesario porque no se puede predecir el nombre del archivo.
  # Luego pone valor por defecto de :es_activo en true.
  migracion = Dir["#{destination_root}/db/migrate/*"].max.split('/').last
  inject_into_file "db/migrate/#{migracion}", ", :default => true" ,  :after => 't.boolean :es_activo' 

  # Agrega Default Scope y Metodo Eliminar! al Modelo
  inject_into_file "app/models/#{singular_name}.rb", "\n\n  default_scope where(:es_activo => true)\n\n  def eliminar!\n    update_attributes :es_activo => false\n  end\n" ,  :after => /ActiveRecord::Base$/ 

  # Agrega controller de administracion en controllers/admin/
  template 'admin_controller.rb', "app/controllers/admin/#{plural_name}_controller.rb"
  
  # Agrega Vistas en views/admin/
  %w[index new edit _formulario].each do |action| 
    template "views/#{action}.html.erb", "app/views/admin/#{plural_name}/#{action}.html.erb"
  end
  template "views/nombre.html.erb", "app/views/admin/#{plural_name}/_#{singular_name}.html.erb"

  # Agrega Ruta en namespace :admin
  inject_into_file 'config/routes.rb', "\n    resources :#{plural_name} do\n      post :reordenar, :on => :collection\n    end" ,  :after => /namespace :admin do/ 
end