Class: Schofield::Generators::Schofield

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

Instance Method Summary collapse

Instance Method Details

#generateObject



22
23
24
25
26
27
28
29
30
31
# File 'lib/generators/schofield/schofield_generator.rb', line 22

def generate
  Responses.generator    = self
  Responses.re_ask       = options[:ask_questions]
  Level.tables_to_ignore = tables_to_ignore
  Levels.models          = models
  Responses.save
  Association.reference_parents
  Responses.save
  Association.report
end

#generate_controllersObject



37
38
39
40
41
42
43
# File 'lib/generators/schofield/schofield_generator.rb', line 37

def generate_controllers
  Levels.all.select(&:controllers?).each do |level|
    source = level.join? ? 'join_controller.erb' : 'controller.erb'
    destination = File.join('app/controllers/admin', "#{level.name.tableize}_controller.rb")
    template_with_context(source, Proc.new{level}, destination)
  end
end

#generate_modelsObject



56
57
58
59
60
61
# File 'lib/generators/schofield/schofield_generator.rb', line 56

def generate_models
Levels.all.select(&:models?).each do |level|
    destination = File.join('app/models', "#{level.name}.rb")
    template_with_context('model.erb', Proc.new{level}, destination)
  end
end

#generate_navigationObject



63
64
65
# File 'lib/generators/schofield/schofield_generator.rb', line 63

def generate_navigation
  inject_into_file(File.join(Rails.root, 'app/views/admin/shared', '_navigation.haml'), Navigation.generate, :after => /- if current_user\n/)
end

#generate_routesObject



33
34
35
# File 'lib/generators/schofield/schofield_generator.rb', line 33

def generate_routes
  inject_into_file(File.join(Rails.root, 'config', 'routes.rb'), Routes.generate, :before => /end\s*\Z/)
end

#generate_tablesObject



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/generators/schofield/schofield_generator.rb', line 67

def generate_tables
  tables = []
  Levels.all.select(&:tables?).each do |level|
    columns_level = level.subclass? ? level.superclass : level
    columns = columns_level.attributes.select{ |a| columns_level.form_field?(a) && !a.text? }.sort_by(&:weight).map(&:to_column)
    if level.nested?
      tables << <<-STRING.gsub(/^ {12}/, '')
        def #{level.name.pluralize}_table
          [
            #{columns.join(",\n                  ")}
          ]
        end
      STRING
    else
      tables << <<-STRING.gsub(/^ {12}/, '')
        def render_#{level.name.pluralize} collection
          table_renderer(:#{level.name.pluralize}, collection).render(
            #{columns.join(",\n                  ")}
          )
        end
      STRING
    end
  end
  create_file 'app/helpers/admin/table_definitions_helper.rb' do
    "module Admin::TableDefinitionsHelper\n\n#{tables.join("\n\n")}\nend"
  end
end

#generate_viewsObject



45
46
47
48
49
50
51
52
53
54
# File 'lib/generators/schofield/schofield_generator.rb', line 45

def generate_views
  Levels.all.select(&:views?).each do |level|
    template_with_context('form.erb', Proc.new{level}, view_path(level, '_form.haml'))
    create_file(view_path(level, 'new.haml'), %q(= render :partial => 'form', :layout => 'admin/shared/module_layout'))
    template_with_context('show.erb', Proc.new{level}, view_path(level, 'show.haml'))
    if !level.nested?
      template_with_context('index.erb', Proc.new{level}, view_path(level, 'index.haml'))
    end
  end
end