foldscaf 1.0.6 → 2.0.0.beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (36) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +3 -0
  3. data/CHANGELOG.md +4 -0
  4. data/Gemfile +5 -0
  5. data/README.md +5 -5
  6. data/Rakefile +1 -1
  7. data/foldscaf.gemspec +8 -4
  8. data/lib/foldscaf.rb +0 -1
  9. data/lib/generators/fold/USAGE +18 -13
  10. data/lib/generators/fold/fold_generator.rb +44 -62
  11. data/lib/generators/fold/helpers/fold.rb +9 -0
  12. data/lib/generators/fold/helpers/paths.rb +43 -0
  13. data/lib/generators/fold/helpers/routes.rb +30 -0
  14. data/lib/generators/fold/helpers/templates.rb +35 -0
  15. data/lib/generators/fold/templates/admin_controller.rb +51 -0
  16. data/lib/generators/fold/templates/controller.rb +8 -0
  17. data/lib/generators/fold/templates/migration.rb +23 -0
  18. data/lib/generators/fold/templates/model.rb +62 -0
  19. data/lib/generators/fold/templates/views/_form.html.erb +9 -0
  20. data/lib/generators/fold/templates/views/_partial.html.erb +6 -0
  21. data/lib/generators/fold/templates/views/edit.html.erb +11 -0
  22. data/lib/generators/fold/templates/views/index.html.erb +15 -0
  23. data/lib/generators/fold/templates/views/new.html.erb +8 -0
  24. data/lib/version.rb +1 -1
  25. metadata +94 -22
  26. data/lib/generators/fold/atributo.rb +0 -54
  27. data/lib/generators/fold/templates/admin_controller.erb +0 -53
  28. data/lib/generators/fold/templates/cargar.erb +0 -9
  29. data/lib/generators/fold/templates/controller.erb +0 -4
  30. data/lib/generators/fold/templates/migration.erb +0 -23
  31. data/lib/generators/fold/templates/model.erb +0 -25
  32. data/lib/generators/fold/templates/views/_form.erb +0 -9
  33. data/lib/generators/fold/templates/views/edit.erb +0 -8
  34. data/lib/generators/fold/templates/views/index.erb +0 -22
  35. data/lib/generators/fold/templates/views/new.erb +0 -13
  36. data/lib/generators/fold/templates/views/nombre.erb +0 -10
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NjFjOWZhMmRlNjZmNGQ1YjJiMjA1NGNjODkxZGViYTQzM2E5NTM4OA==
5
+ data.tar.gz: !binary |-
6
+ ODMyODFjYWVmZjM1MjNlMGIzNDI1NzMzMGNlNDIyZDJiOWFiYjVmZg==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ YmU0ZGMxMTk3MzY3OWUxNWJlMjZiOWU5NGM1NjBjYzc3MWU0NzExMWNjMzVk
10
+ YmIzMWZjNzkwZDliOTZlM2VmMTZjMjY2NTllNjcxZDVhZjkwYzE3Yjg4YTQw
11
+ OWUyNGU0NjY1NDUyZTYxZTdjOWM1YzMwMjk3ODRhODFkNjc0OTE=
12
+ data.tar.gz: !binary |-
13
+ ODBhZDIzYzZjYzBhNTY2NDc0NDI5MThhNDZhN2FmMWQ0YzQ5MjFmMDY4ODdm
14
+ NjRhZTU3OWVmNjI3Mjc5Mjk3NWRlZmZjZjM0MGY2ZTZiODhkMmViNGFhMTM4
15
+ MDdmNTdlNzM3MDUxZGE5MDVjODc5ZWI1MDUyZmE2YWZkZWJhYzE=
data/.gitignore CHANGED
@@ -2,3 +2,6 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ /nbproject/
6
+ /nbproject/*
7
+ /nbproject/private/
data/CHANGELOG.md CHANGED
@@ -1,3 +1,7 @@
1
+ ## v2.0.0.beta
2
+ * Refactorización general.
3
+ * Archivos
4
+
1
5
  ## v1.0.6
2
6
  * Fix. Index no usa wrapper mini
3
7
 
data/Gemfile CHANGED
@@ -2,3 +2,8 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in foldscaf.gemspec
4
4
  gemspec
5
+ gem 'sorcery'
6
+ gem 'simple_form'
7
+ gem 'friendly_id'
8
+ gem 'cancan'
9
+ gem 'dragonfly'
data/README.md CHANGED
@@ -2,15 +2,15 @@
2
2
 
3
3
  Incluye varios generadores adaptados a las necesidades de Xaver.
4
4
  Debe usarse en conjunto con el template de Xaver.
5
- Versión 1.0.0 Presenta incompatibilidades con versiones pasadas y con XaverTemplates <= 1.0.0
6
- Con recaudos, puede usarse en versiones anteriores de XaverTemplate,
7
5
 
8
6
  ## Instalación
9
7
 
10
- Agrega al Gemfile y ejecuta el comando `bundle` para instalarlo.
8
+ Agrega al Gemfile y ejecuta el comando `bundle install` para instalarlo.
11
9
 
12
10
  ```ruby
13
- gem "foldscaf"
11
+ group :development do
12
+ gem "foldscaf"
13
+ end
14
14
  ```
15
15
 
16
- **Requiere Ruby 1.9.2 o superior.**
16
+ **Requiere Ruby 1.9.2 o superior.**
data/Rakefile CHANGED
@@ -1 +1 @@
1
- require "bundler/gem_tasks"
1
+ require "bundler/gem_tasks"
data/foldscaf.gemspec CHANGED
@@ -5,9 +5,9 @@ require "version"
5
5
  Gem::Specification.new do |s|
6
6
  s.name = "foldscaf"
7
7
  s.version = Foldscaf::VERSION
8
- s.authors = ["Nicanor Perera"]
9
- s.email = ["nicanorperera@gmail.com"]
10
- s.homepage = "http://github.com/nicanorperera/foldscaf"
8
+ s.authors = ["Nicanor Perera", "Gustavo Molinari"]
9
+ s.email = ["nicanorperera@gmail.com", "gustavo.molinari@xaver.com.ar"]
10
+ s.homepage = "http://github.com/Xaver/foldscaf"
11
11
  s.summary = %q{Generadores adaptados a las necesidades de Xaver}
12
12
  s.description = %q{Generadores adaptados a las necesidades de Xaver}
13
13
 
@@ -20,5 +20,9 @@ Gem::Specification.new do |s|
20
20
 
21
21
  # specify any dependencies here; for example:
22
22
  # s.add_development_dependency "rspec"
23
- # s.add_runtime_dependency "rest-client"
23
+ s.add_runtime_dependency "sorcery"
24
+ s.add_runtime_dependency "simple_form"
25
+ s.add_runtime_dependency "friendly_id"
26
+ s.add_runtime_dependency "cancan"
27
+ s.add_runtime_dependency "dragonfly"
24
28
  end
data/lib/foldscaf.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require "version"
2
2
 
3
3
  module Foldscaf
4
- # Your code goes here...
5
4
  end
@@ -1,18 +1,23 @@
1
- Description:
1
+ Descripción:
2
2
  Generador Scaffold-Like adaptado a las necesidades de Xaver.
3
3
 
4
- Example:
5
- rails generate fold Thing
4
+ Ejemplo:
5
+ rails generate fold recurso nombre descripcion contenido:text es_destacado:boolean:true
6
6
 
7
- This will create:
8
- app/controllers/admin/things_controller.rb
9
- app/models/thing.rb
10
- app/helpers/thing_helper.rb
7
+ Esto generará:
8
+ app/models/recurso
9
+ db/migration/<<fecha>>_create_recursos.rb
11
10
 
12
- app/views/admin/_form.rb
13
- app/views/admin/_mini_form.rb
14
- app/views/admin/_thing.rb
15
- app/views/admin/edit.rb
16
- app/views/admin/index.rb
17
- app/views/admin/show.rb
11
+ app/controllers/recursos_controller.rb
12
+ app/controllers/admin/recursos_controller.rb
18
13
 
14
+ app/views/admin/_form.html.erb
15
+ app/views/admin/_mini_form.html.erb
16
+ app/views/admin/_recurso.html.erb
17
+ app/views/admin/edit.html.erb
18
+ app/views/admin/new.html.erb
19
+ app/views/admin/index.html.erb
20
+
21
+ Se pueden utilizar muchas opciones. Por ejemplo:
22
+
23
+ rails generate fold recurso nombre:index categoria:string{100}:uniq contenido:text precio:decimal{15.2} -O -A -S
@@ -1,79 +1,61 @@
1
1
  # -*- encoding : utf-8 -*-
2
+ require 'rails/generators/active_record'
3
+ require 'rails/generators/resource_helpers'
4
+ require 'generators/fold/helpers/fold'
2
5
 
3
- require 'generators/fold/atributo'
6
+ class FoldGenerator < ActiveRecord::Generators::Base
7
+ include Rails::Generators::ResourceHelpers
8
+ include Fold
4
9
 
5
- class FoldGenerator < Rails::Generators::Base
6
10
  source_root File.expand_path('../templates', __FILE__)
7
11
 
8
- argument :name, :type => :string, :required => true, :banner => 'Nombre'
9
- argument :args, :type => :array , :default => [] , :banner => 'Atributos'
12
+ check_class_collision
13
+
14
+ argument :attributes, :type => :array, :required => true, :banner => "nombre descripcion contenido:text es_destacado:boolean:index precio:decimal{15.2}"
15
+
16
+ class_option :ordenable, :desc => 'el modelo se puede reordenar', :type => :boolean, :aliases => "-O", :default => false
17
+ class_option :archivable, :desc => 'el modelo tiene archivos', :type => :boolean, :aliases => "-A", :default => false
18
+ class_option :sluggable, :desc => 'el modelo tiene una url amigable', :type => :boolean, :aliases => "-S", :default => false
19
+ class_option :padre, :desc => "el padre del modelo", :type => :string, :aliases => "-P"
20
+
21
+ class_option :orm, :type => :string, :required => true
10
22
 
11
- class_option :orden , :desc => 'Soporte para Ordenable.' , :type => :boolean, :aliases => "-o", :default => false
12
- class_option :slug , :desc => 'Soporte pare FriendlyId.' , :type => :boolean, :aliases => "-i", :default => false
13
-
14
23
  def initialize(*arguments, &block)
15
24
  super
16
-
17
- @con_orden = options.orden?
18
- @con_slug = options.slug?
19
-
20
- @singular = @name.downcase
21
- @plural = @singular.pluralize
22
- @class = @name.camelize
23
- @classes = @plural.camelize
24
-
25
- @singular_path = "admin_#{@singular}_path"
26
- @plural_path = "admin_#{@plural}_path"
27
- @new_path = "new_admin_#{@singular}_path"
28
- @edit_path = "edit_admin_#{@singular}_path"
29
- @reordenar_path = "reordenar_admin_#{@plural}_path"
30
-
31
- @atributos = []
32
- arguments.first.drop(1).each do |arg|
33
- @atributos << Atributo.new(arg)
34
- end
35
- @identificador = @atributos.first.nombre
25
+ @paths = paths
26
+ end
36
27
 
28
+ def ejecutar
29
+ aplicar_templates
30
+ aplicar_rutas
37
31
  end
38
-
39
- def body
40
- template 'model.erb' , "app/models/#{@singular}.rb"
41
- template 'migration.erb' , "db/migrate/#{fecha}_create_#{@plural}.rb"
42
- template 'controller.erb', "app/controllers/#{@plural}_controller.rb"
43
- template 'admin_controller.erb', "app/controllers/admin/#{@plural}_controller.rb"
44
-
45
- %w[_form edit index new].each do |action|
46
- template "views/#{action}.erb", "app/views/admin/#{@plural}/#{action}.html.erb"
47
- end
48
- template "views/nombre.erb", "app/views/admin/#{@plural}/_#{@singular}.html.erb"
49
-
50
- resources_route = @con_orden ? "\n resources :#{@plural} do\n post :reordenar, :on => :collection\n end" : "\n resources :#{@plural}"
51
- add_admin_route resources_route
52
-
53
- template 'cargar.erb', "lib/tasks/cargar_#{@plural}.rake"
32
+
33
+ def navegacion
34
+ insert_into_file "app/views/admin/admin/_nav_lateral.html.erb", "\n <li><%= link_to '#{plural_name.humanize}', #{@paths[:index]} if can? :index, #{class_name} %></li>", :after => '<li class="nav-header">General</li>'
54
35
  end
55
-
36
+
56
37
  private
57
-
58
- # Agrega Ruta en namespace :admin
59
- def add_admin_route(ruta)
60
- inject_into_file 'config/routes.rb', ruta , :after => /namespace :admin do/
38
+
39
+ def attributes_with_index
40
+ attributes.select { |a| a.has_index? || a.reference? }
61
41
  end
62
-
63
- def self.next_migration_number(dirname) #:nodoc:
64
- if ActiveRecord::Base.timestamped_migrations
65
- Time.now.utc.strftime("%Y%m%d%H%M%S")
66
- else
67
- "%.3d" % (current_migration_number(dirname) + 1)
68
- end
42
+
43
+ def reference_attributes
44
+ attributes.select &:reference?
69
45
  end
70
-
71
- def fecha
72
- Time.now.utc.strftime("%Y%m%d%H%M%S")
46
+
47
+ def parent_class_name
48
+ options[:padre] || "ActiveRecord::Base"
73
49
  end
74
-
75
- def atributos_con_referencia
76
- @atributos.select {|a| a.clase == :references}
50
+
51
+ def parent_controller_name(namespace = nil)
52
+ if options.padre?
53
+ [namespace.to_s.camelize, options[:padre].pluralize.camelize + "Controller"].compact.join("::")
54
+ elsif namespace.present?
55
+ [namespace.to_s.camelize, namespace.to_s.camelize + "Controller"].join("::")
56
+ else
57
+ "ApplicationController"
58
+ end
77
59
  end
78
-
60
+
79
61
  end
@@ -0,0 +1,9 @@
1
+ require 'generators/fold/helpers/paths'
2
+ require 'generators/fold/helpers/routes'
3
+ require 'generators/fold/helpers/templates'
4
+
5
+ module Fold
6
+ include Paths
7
+ include Routes
8
+ include Templates
9
+ end
@@ -0,0 +1,43 @@
1
+ module Fold
2
+ module Paths
3
+
4
+ def paths
5
+ {
6
+ :index => [:admin, table_name.to_sym],
7
+ :new => [:new, :admin, file_name.to_sym],
8
+ :reordenar => [:reordenar, :admin, table_name.to_sym]
9
+ }
10
+ end
11
+
12
+ def model_path
13
+ File.join 'app/models', class_path, "#{file_name}.rb"
14
+ end
15
+
16
+ def controller_path(namespace = nil)
17
+ File.join 'app/controllers', namespace.to_s, class_path, "#{controller_file_name}_controller.rb"
18
+ end
19
+
20
+ def migration_path
21
+ File.join 'db/migrate', "create_#{table_name}.rb"
22
+ end
23
+
24
+ def view_path(action, namespace = nil)
25
+ File.join 'app/views', namespace.to_s, class_path, table_name, "#{action}.erb"
26
+ end
27
+
28
+ private
29
+
30
+ def fecha
31
+ Time.zone.now.strftime("%Y%m%d%H%M%S")
32
+ end
33
+
34
+ def self.next_migration_number(dirname) #:nodoc:
35
+ if ActiveRecord::Base.timestamped_migrations
36
+ Time.zone.now.strftime("%Y%m%d%H%M%S")
37
+ else
38
+ "%.3d" % (current_migration_number(dirname) + 1)
39
+ end
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,30 @@
1
+ module Fold
2
+ module Routes
3
+
4
+ def aplicar_rutas
5
+ ruta_admin
6
+ ruta_publica
7
+ end
8
+
9
+ private
10
+
11
+ def ruta_admin
12
+ ruta = "\n resources :#{table_name}"
13
+ ruta += concerns.to_s
14
+ inject_into_file 'config/routes.rb', ruta, :after => /namespace :admin do/
15
+ end
16
+
17
+ def ruta_publica
18
+ ruta = "resources :#{table_name}\n\n "
19
+ inject_into_file 'config/routes.rb', ruta, :before => /namespace :admin do/
20
+ end
21
+
22
+ def concerns
23
+ modulos = []
24
+ modulos.push ":ordenable" if options.ordenable?
25
+ modulos.push ":archivable" if options.archivable?
26
+ return ", :concerns => [#{modulos.compact.join(", ")}]" if modulos.present?
27
+ end
28
+
29
+ end
30
+ end
@@ -0,0 +1,35 @@
1
+ module Fold
2
+ module Templates
3
+
4
+ def aplicar_templates
5
+ models
6
+ !options.padre? ? migrations : puts("Recuerde que debe agregar la columna :type a la tabla :#{options[:padre].tableize}")
7
+ controllers
8
+ views
9
+ end
10
+
11
+ private
12
+
13
+ def models
14
+ template 'model.rb', model_path
15
+ end
16
+
17
+ def migrations
18
+ migration_template 'migration.rb', migration_path
19
+ end
20
+
21
+ def controllers
22
+ template 'controller.rb', controller_path
23
+ template 'admin_controller.rb', controller_path(:admin)
24
+ end
25
+
26
+ def views
27
+ %w[_form edit index new].each do |action|
28
+ action += ".html"
29
+ template File.join('views', "#{action}.erb"), view_path(action, :admin)
30
+ end
31
+ template "views/_partial.html.erb", view_path("_#{file_name}.html", :admin)
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,51 @@
1
+ # -*- encoding : utf-8 -*-
2
+ <% if namespaced? -%>
3
+ require_dependency "<%= namespaced_file_path %>/application_controller"
4
+
5
+ <% end -%>
6
+ <% module_namespacing do -%>
7
+ class Admin::<%= controller_class_name %>Controller < <%= parent_controller_name(:admin) %>
8
+ <% if !options.padre? -%>
9
+ load_and_authorize_resource
10
+ <% end -%>
11
+ <%- if options.ordenable? -%>
12
+ include Ordenable
13
+ <%- end -%>
14
+
15
+ def index
16
+ # @q = <%= singular_table_name.camelize %>.search params[:q]
17
+ # @<%= plural_table_name %> = @q.relation.page(params[:page]).per(50)
18
+ @<%= plural_table_name%> = <%= singular_table_name.camelize %>.page(params[:page]).per(50)
19
+ end
20
+
21
+ def new
22
+ end
23
+
24
+ def create
25
+ @<%= singular_table_name %> = <%= orm_class.build(class_name, "params[:#{singular_table_name}]") %>
26
+ @<%= orm_instance.save %>!
27
+ redirect_to [:admin, :<%= plural_table_name %>], notice: mensaje
28
+ end
29
+
30
+ def edit
31
+ end
32
+
33
+ def update
34
+ @<%= singular_table_name %>.update_attributes! params[:<%= singular_table_name %>]
35
+ redirect_to [:edit, :admin, @<%= singular_table_name %>], notice: mensaje
36
+ end
37
+
38
+ def destroy
39
+ @<%= orm_instance.destroy %>
40
+ mensaje
41
+ end
42
+
43
+ <%- if options.ordenable? -%>
44
+ private
45
+
46
+ def sort_coleccion
47
+ <%= orm_class.all(class_name) %>
48
+ end
49
+
50
+ <%- end -%>
51
+ end<%- end -%>
@@ -0,0 +1,8 @@
1
+ # -*- encoding : utf-8 -*-
2
+ <% if namespaced? -%>
3
+ require_dependency "<%= namespaced_file_path %>/application_controller"
4
+
5
+ <% end -%>
6
+ <% module_namespacing do -%>
7
+ class <%= controller_class_name %>Controller < ApplicationController
8
+ end<%- end -%>
@@ -0,0 +1,23 @@
1
+ class <%= migration_class_name %> < ActiveRecord::Migration
2
+ def change
3
+ create_table :<%= table_name %> do |t|
4
+ <% attributes.each do |attribute| -%>
5
+ t.<%= attribute.type %> :<%= attribute.name %><%= attribute.inject_options %>
6
+ <% end -%>
7
+
8
+ <% if options.ordenable? %>
9
+ t.integer :orden
10
+ <% end -%>
11
+ <%- if options.sluggable? -%>
12
+ t.string :slug
13
+ <% end -%>
14
+ t.timestamps
15
+ end
16
+ <% attributes_with_index.each do |attribute| -%>
17
+ add_index :<%= table_name %>, :<%= attribute.index_name %><%= attribute.inject_index_options %>
18
+ <% end -%>
19
+ <%- if options.sluggable? -%>
20
+ add_index :<%= table_name %>, :slug, :unique => true
21
+ <% end -%>
22
+ end
23
+ end
@@ -0,0 +1,62 @@
1
+ <% module_namespacing do -%>
2
+ class <%= class_name %> < <%= parent_class_name.classify %>
3
+
4
+ ##############################################################################
5
+ #### CONFIGURACIONES Y RELACIONES
6
+ ##############################################################################
7
+ <% if options.sluggable? %>
8
+ extend FriendlyId
9
+ friendly_id <%= ":#{attributes.first.name}" if attributes.first.name != "nombre" %>
10
+ <%- end -%>
11
+ <% if attributes.any? %>
12
+ attr_accessible <%= attributes.map { |a| ":#{a.name}#{"_id" if a.reference?}" }.join(', ') %>
13
+ <%- end -%>
14
+ <% reference_attributes.each do |attribute| %>
15
+ belongs_to :<%= attribute.name %>
16
+ <%- end -%>
17
+ <% if options.archivable? %>
18
+ has_many :archivos, :as => :propietario, :dependent => :destroy
19
+ has_many :fotos, :as => :propietario
20
+ has_many :adjuntos, :as => :propietario
21
+ has_many :videos, :as => :propietario
22
+ accepts_nested_attributes_for :fotos, :adjuntos, :videos
23
+ <% end %>
24
+ ##############################################################################
25
+ #### SCOPES Y VALIDACIONES
26
+ ##############################################################################
27
+ <% if options.ordenable? %>
28
+ default_scope -> { order{orden} }
29
+ <% else %>
30
+ default_scope -> { order{<%= attributes.first.name %>} }
31
+ <% end %>
32
+ ##############################################################################
33
+ #### MÉTODOS PÚBLICOS
34
+ ##############################################################################
35
+ <% if options.archivable? %>
36
+ def carpeta
37
+ File.join Rails.env, self.class.name.tableize, id.to_s
38
+ end
39
+ <% end %>
40
+ def se_puede_eliminar?
41
+ true
42
+ end
43
+
44
+ def destroy
45
+ super if se_puede_eliminar?
46
+ end
47
+
48
+ ##############################################################################
49
+ #### ALIAS E IMPRESIONES
50
+ ##############################################################################
51
+
52
+ alias_attribute :to_label, :<%= attributes.first.name %>
53
+ alias_attribute :to_s, :<%= attributes.first.name %>
54
+
55
+ ##############################################################################
56
+ #### MÉTODOS PRIVADOS
57
+ ##############################################################################
58
+
59
+ private
60
+
61
+ end
62
+ <% end -%>
@@ -0,0 +1,9 @@
1
+ <%%= simple_form_for <%= singular_table_name %>, :url => [:admin, <%= singular_table_name %>], :html => { :class => 'form-horizontal' }, :defaults => { :input_html => { :class => 'input-xlarge' } } do |f| %>
2
+ <%- attributes.each_with_index do |atributo, i| -%>
3
+ <%%= f.<%= atributo.reference? ? :association : :input %> :<%= atributo.name %><%= ", :autofocus => true" if i.zero? %> %>
4
+ <%- end -%>
5
+
6
+ <div class="form-actions">
7
+ <%%= f.button :submit, :name => nil, :data => { :disable_with => t('espere') }, :class => 'btn btn-primary' %>
8
+ </div>
9
+ <%% end %>
@@ -0,0 +1,6 @@
1
+ <%%= tr_for <%= singular_table_name %> do %>
2
+ <%- for atributo in attributes.first(3) -%>
3
+ <td><%%= <%= "number_to_currency " if atributo.name =~ /precio/ %><%= singular_table_name %>.<%= atributo.name %> %></td>
4
+ <%- end -%>
5
+ <td><%%= acciones <%= ":mover => boton_mover(#{class_name}), " if options.ordenable? %><%= ":archivos => boton_archivos(#{singular_table_name}), " if options.archivable? %>:editar => boton_editar(<%= singular_table_name %>), :eliminar => boton_eliminar(<%= singular_table_name %>) %></td>
6
+ <%% end %>
@@ -0,0 +1,11 @@
1
+ <div class="page-header">
2
+ <nav class="pull-right">
3
+ <%%= boton_volver <%= class_name %> %>
4
+ </nav>
5
+ <h1>
6
+ <%= plural_name.humanize %>
7
+ <small><%%= @<%= singular_table_name %>.to_label %></small>
8
+ </h1>
9
+ </div>
10
+
11
+ <%%= render "form", :<%= singular_table_name %> => @<%= singular_table_name %> %>
@@ -0,0 +1,15 @@
1
+ <div class="page-header">
2
+ <nav class="pull-right">
3
+ <%%= boton_new <%= class_name %> %>
4
+ </nav>
5
+ <h1><%= plural_name.humanize %></h1>
6
+ </div>
7
+
8
+ <%%= content_tag :table, :id => nombre_tabla(<%= class_name %>), :class => [:table, :"table-striped"<%= ", :ordenable" if options.ordenable? %>] do %>
9
+ <%%= thead <%= attributes.first(3).map{ |a| ":#{a.name}" }.join(", ") %> %>
10
+ <%%= content_tag :tbody, render(@<%= plural_table_name %>) %>
11
+ <%- if options.ordenable? -%>
12
+ <%%= hidden_field_tag :url, url_for(<%= @paths[:reordenar] %>), :class => :url %>
13
+ <%- end -%>
14
+ <%% end %>
15
+ <%%= paginate @<%= plural_table_name %>, :theme => :bootstrap %>
@@ -0,0 +1,8 @@
1
+ <div class="page-header">
2
+ <nav class="pull-right">
3
+ <%%= boton_volver <%= class_name %> %>
4
+ </nav>
5
+ <h1><%= plural_name.humanize %></h1>
6
+ </div>
7
+
8
+ <%%= render "form", :<%= singular_table_name %> => @<%= singular_table_name %> %>
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Foldscaf
2
- VERSION = "1.0.6"
2
+ VERSION = "2.0.0.beta"
3
3
  end
metadata CHANGED
@@ -1,19 +1,90 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foldscaf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
5
- prerelease:
4
+ version: 2.0.0.beta
6
5
  platform: ruby
7
6
  authors:
8
7
  - Nicanor Perera
8
+ - Gustavo Molinari
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-09-20 00:00:00.000000000 Z
13
- dependencies: []
12
+ date: 2013-02-28 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: sorcery
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ! '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ! '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: simple_form
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ! '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: friendly_id
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ! '>='
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: cancan
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: dragonfly
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ! '>='
82
+ - !ruby/object:Gem::Version
83
+ version: '0'
14
84
  description: Generadores adaptados a las necesidades de Xaver
15
85
  email:
16
86
  - nicanorperera@gmail.com
87
+ - gustavo.molinari@xaver.com.ar
17
88
  executables: []
18
89
  extensions: []
19
90
  extra_rdoc_files: []
@@ -26,41 +97,42 @@ files:
26
97
  - foldscaf.gemspec
27
98
  - lib/foldscaf.rb
28
99
  - lib/generators/fold/USAGE
29
- - lib/generators/fold/atributo.rb
30
100
  - lib/generators/fold/fold_generator.rb
31
- - lib/generators/fold/templates/admin_controller.erb
32
- - lib/generators/fold/templates/cargar.erb
33
- - lib/generators/fold/templates/controller.erb
34
- - lib/generators/fold/templates/migration.erb
35
- - lib/generators/fold/templates/model.erb
36
- - lib/generators/fold/templates/views/_form.erb
37
- - lib/generators/fold/templates/views/edit.erb
38
- - lib/generators/fold/templates/views/index.erb
39
- - lib/generators/fold/templates/views/new.erb
40
- - lib/generators/fold/templates/views/nombre.erb
101
+ - lib/generators/fold/helpers/fold.rb
102
+ - lib/generators/fold/helpers/paths.rb
103
+ - lib/generators/fold/helpers/routes.rb
104
+ - lib/generators/fold/helpers/templates.rb
105
+ - lib/generators/fold/templates/admin_controller.rb
106
+ - lib/generators/fold/templates/controller.rb
107
+ - lib/generators/fold/templates/migration.rb
108
+ - lib/generators/fold/templates/model.rb
109
+ - lib/generators/fold/templates/views/_form.html.erb
110
+ - lib/generators/fold/templates/views/_partial.html.erb
111
+ - lib/generators/fold/templates/views/edit.html.erb
112
+ - lib/generators/fold/templates/views/index.html.erb
113
+ - lib/generators/fold/templates/views/new.html.erb
41
114
  - lib/version.rb
42
- homepage: http://github.com/nicanorperera/foldscaf
115
+ homepage: http://github.com/Xaver/foldscaf
43
116
  licenses: []
117
+ metadata: {}
44
118
  post_install_message:
45
119
  rdoc_options: []
46
120
  require_paths:
47
121
  - lib
48
122
  required_ruby_version: !ruby/object:Gem::Requirement
49
- none: false
50
123
  requirements:
51
124
  - - ! '>='
52
125
  - !ruby/object:Gem::Version
53
126
  version: '0'
54
127
  required_rubygems_version: !ruby/object:Gem::Requirement
55
- none: false
56
128
  requirements:
57
- - - ! '>='
129
+ - - ! '>'
58
130
  - !ruby/object:Gem::Version
59
- version: '0'
131
+ version: 1.3.1
60
132
  requirements: []
61
133
  rubyforge_project: foldscaf
62
- rubygems_version: 1.8.15
134
+ rubygems_version: 2.0.0
63
135
  signing_key:
64
- specification_version: 3
136
+ specification_version: 4
65
137
  summary: Generadores adaptados a las necesidades de Xaver
66
138
  test_files: []
@@ -1,54 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- class Atributo
3
- CLASES = [:string, :text, :integer, :float, :decimal, :datetime, :timestamp, :time, :date, :binary, :boolean, :references]
4
- VALORES = [:true, :false, :nil]
5
- OPCIONES = [:unique, :index, :polymorphic]
6
- ANCHO = 15
7
- attr_accessor :nombre, :clase, :default, :opciones
8
-
9
- def initialize(s)
10
- parametros = s.split(':')
11
-
12
- @nombre = parametros.shift
13
- @clase = :string if parametros.empty?
14
- @opciones = []
15
-
16
- parametros.each do |parametro|
17
- incluir parametro.to_sym
18
- end
19
-
20
- end
21
-
22
- def incluir(parametro)
23
- if CLASES.include? parametro
24
- @clase = parametro
25
- end
26
-
27
- if VALORES.include? parametro
28
- @clase ||= :boolean
29
- @default = parametro
30
- end
31
-
32
- if OPCIONES.include? parametro
33
- @opciones << parametro
34
- end
35
- end
36
-
37
- def es?(opcion)
38
- @opciones.include? opcion
39
- end
40
-
41
- def tiene_opciones?
42
- ! @opciones.empty?
43
- end
44
-
45
- def ejemplo
46
- case @clase
47
- when :string then "'Lorem Ipsum'"
48
- when :integer then rand(50)
49
- when :boolean then 'true'
50
- else false
51
- end
52
- end
53
-
54
- end
@@ -1,53 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- class Admin::<%= @classes %>Controller < Admin::AdminController
3
- load_and_authorize_resource
4
- <%- if @con_orden -%>
5
- include Ordenable
6
- <%- end -%>
7
-
8
- def index
9
- @q = <%= @class %>.search params[:q]
10
- @<%= @plural %> = @q.relation.page(params[:page]).per(50)
11
- end
12
-
13
- def new
14
- @<%= @plural %> = <%= @class %>.last(5)
15
- end
16
-
17
- def create
18
- @<%= @singular %> = <%= @class %>.new params[:<%= @singular %>]
19
- @<%= @singular %>.save!
20
- notice = mensaje
21
-
22
- respond_to do |format|
23
- format.html { redirect_to <%= @plural_path %>, notice: notice }
24
- format.js { @elemento = @<%= @singular %> }
25
- end
26
- end
27
-
28
- def edit
29
- end
30
-
31
- def update
32
- @<%= @singular %>.update_attributes! params[:<%= @singular %>]
33
- redirect_to <%= @edit_path %>(@<%= @singular %>), notice: mensaje
34
- end
35
-
36
- def destroy
37
- @id = @<%= @singular %>.id
38
- @<%= @singular %>.destroy
39
- notice = mensaje
40
-
41
- respond_to do |format|
42
- format.html { redirect_to <%= @plural_path %>, notice: notice }
43
- format.js
44
- end
45
- end
46
-
47
- <%- if @con_orden -%>
48
- private
49
- def sort_coleccion
50
- <%= @class %>.all
51
- end
52
- <%- end -%>
53
- end
@@ -1,9 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- <%- atributos = @atributos.select {|x| x.ejemplo }.collect {|a| ":#{a.nombre} => #{a.ejemplo}" } -%>
3
- namespace :cargar do
4
- task :<%= @plural %> => :environment do
5
- <%- 10.times do-%>
6
- <%= @class %>.create! <%= atributos.join(', ') %>
7
- <%- end -%>
8
- end
9
- end
@@ -1,4 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- class <%= @classes %>Controller < ApplicationController
3
-
4
- end
@@ -1,23 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- class Create<%= @classes %> < ActiveRecord::Migration
3
- def change
4
- create_table :<%= @plural %> do |t|
5
- <%- @atributos.each do |a| -%>
6
- t.<%= a.clase %> :<%= a.nombre %><%= ", :default => #{a.default}" if (a.default && a.ejemplo) %>
7
- <%- end -%>
8
-
9
- <%- if @con_slug -%>
10
- t.string :slug
11
- <%- end -%>
12
- <%- if @con_orden -%>
13
- t.integer :orden
14
- <%- end -%>
15
-
16
- t.boolean :es_activo, :default => true
17
- t.timestamps
18
- end
19
- <%- if @con_slug -%>
20
- add_index :<%= @plural %>, :slug, :unique => true
21
- <%- end -%>
22
- end
23
- end
@@ -1,25 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- class <%= @class %> < ActiveRecord::Base
3
- <%- if @con_slug -%>
4
- extend FriendlyId
5
- friendly_id :<%= @identificador %>
6
- <%- end -%>
7
- <%- atributos_con_referencia.each do |a| -%>
8
- belongs_to :<%= a.nombre %>
9
- <%- end -%>
10
- default_scope -> { where{es_activo.eq true}<%= ".order('#{@plural}.orden')" if @con_orden %> }
11
-
12
- def se_puede_eliminar?
13
- true
14
- end
15
-
16
- def destroy
17
- if se_puede_eliminar?
18
- run_callbacks :destroy do
19
- update_attribute :es_activo, false
20
- end
21
- end
22
- end
23
-
24
- alias_attribute :to_s, :<%= @identificador %>
25
- end
@@ -1,9 +0,0 @@
1
- <%%= simple_form_for <%= @singular %>, :url => url, :remote => remote, :html => { :class => 'form-horizontal' } do |f| %>
2
- <%- @atributos.each do |a| -%>
3
- <%%= f.<%= a.clase == :references ? :association : :input %> :<%= a.nombre %> %>
4
- <%- end -%>
5
-
6
- <div class="controls">
7
- <%%= f.button :submit, :name => nil, :data => { :disable_with => t('espere') }, :class => 'btn btn-primary' %>
8
- </div>
9
- <%% end %>
@@ -1,8 +0,0 @@
1
- <div class="page-header">
2
- <nav class="pull-right">
3
- <%%= link_to icono('arrow-left', :blanco) + ' Volver', <%= @plural_path %>, :class => 'btn btn-primary btn-large' %>
4
- </nav>
5
- <h1>Editar <%= @class %></h1>
6
- </div>
7
-
8
- <%%= render "form", :<%= @singular %> => @<%= @singular %>, :url => <%= @singular_path %>(@<%= @singular %>), :remote => false %>
@@ -1,22 +0,0 @@
1
- <div class="page-header">
2
- <nav class="pull-right">
3
- <%%= link_to icono('plus', :blanco) + " Agregar <%= @singular %>", <%= @new_path %>, :class => 'btn btn-primary btn-large' %>
4
- </nav>
5
- <h1><%= @classes %></h1>
6
- </div>
7
-
8
- <%%= simple_form_for @q, :as => :q, :url => <%= @plural_path %>, :method => :get do |f| %>
9
- <%%= f.input :<%= @identificador %>_contains, :placeholder => '<%= @identificador.humanize %>', :required => false, :autofocus => true %>
10
- <%%= f.button :submit, "Buscar", :name => nil, :disable_with => t("espere"), :class => 'btn btn-primary' %>
11
- <%% end %>
12
-
13
- <%%= paginate @<%= @plural %>, :theme => :bootstrap %>
14
-
15
- <%%= content_tag :table, :id => nombre_tabla(<%= @class %>), :class => [:table, :"table-striped", :ordenable] do %>
16
- <%%= thead :<%= @identificador %> %>
17
- <%%= content_tag :tbody, render(@<%= @plural %>) %>
18
- <%% end %>
19
-
20
- <%- if @con_orden -%>
21
- <%%= hidden_field_tag :url, <%= @reordenar_path %>, :class => :url %>
22
- <%- end -%>
@@ -1,13 +0,0 @@
1
- <div class="page-header">
2
- <nav class="pull-right">
3
- <%%= link_to icono('arrow-left', :blanco) + ' Volver', <%= @plural_path %>, :class => 'btn btn-primary btn-large' %>
4
- </nav>
5
- <h1>Agregar <%= @class %>
6
- </div>
7
-
8
- <%%= content_tag :table, :id => nombre_tabla(<%= @class %>), :class => [:table, :"table-striped", :ordenable] do %>
9
- <%%= thead :<%= @identificador %> %>
10
- <%%= content_tag :tbody, render(@<%= @plural %>) %>
11
- <%% end %>
12
-
13
- <%%= render "form", :<%= @singular %> => @<%= @singular %>, :url => <%= @plural_path %>, :remote => true %>
@@ -1,10 +0,0 @@
1
- <%%= content_tag :tr, :id => "elementos_#{<%= @singular %>.id}" do %>
2
- <td><%%= <%= @singular %>.<%= @identificador %> %></td>
3
- <td style="text-align:right;">
4
- <%- if @con_orden -%>
5
- <%%= link_to icono('move', :black) + " Mover", "#", :class => 'btn btn-mini handle', :title => 'Mantenga click y arrastre para reordenar' %>
6
- <%- end -%>
7
- <%%= link_to 'Editar', <%= @edit_path %>(<%= @singular %>), :class => 'btn btn-mini' if can? :update, <%= @singular %> %>
8
- <%%= link_to 'Eliminar', <%= @singular_path %>(<%= @singular %>), :method => :delete, :data => { :confirm => t('confirmacion') }, :remote => true, :class => 'btn btn-mini btn-danger' if <%= @singular %>.se_puede_eliminar? && can?(:destroy, <%= @singular %>) %>
9
- </td>
10
- <%% end %>