require 'generators/ember/model_generator' module Ember module Generators class ScaffoldGenerator < ModelGenerator source_root File.expand_path("../../templates", __FILE__) desc "Scaffolds a new Ember CRUD" class_option :skip_route, :type => :boolean, :default => false, :desc => "Don't create route" class_option :array, :type => :boolean, :default => false, :desc => "Create an Ember.ArrayController to represent multiple objects" class_option :object, :type => :boolean, :default => false, :desc => "Create an Ember.ObjectController to represent a single object" def create_route_files create_resource_files_for(:route, 'es6') inject_into_router_file(file_name) end def create_template_files create_resource_files_for(:template, 'hbs') template "scaffold/template.hbs", File.join(app_path, 'templates', "#{file_name.pluralize}.hbs") template "scaffold/template/form.hbs", File.join(app_path, 'templates', file_name.pluralize, 'form.hbs') end def create_tests ["route"].each do |type| create_test_files_for(type) end end private def create_resource_files_for(type, extension) dir = type.to_s.pluralize resource = file_name.pluralize [:edit, :index, :new, :show].each do |action| template "scaffold/#{type}/#{action}.#{extension}", File.join(app_path, dir, "#{resource}/#{action}.#{extension}") end end def create_test_files_for(type) resource = file_name.pluralize [:edit, :index, :new, :show].each do |action| object = "#{resource}_#{action}_#{type}".camelize template "test/#{type}.es6", File.join('test', type.pluralize, "#{resource}/#{action}_test.es6"), object: object, action: action end end def inject_into_router_file(name) router_file = "#{config_path}/router.es6" js = <<-JS this.resource('#{name.pluralize}', function() { this.route('new'); this.route('show', {path: ':#{file_name.singularize}_id'}); this.route('edit', {path: ':#{file_name.singularize}_id/edit'}); }); JS inject_into_file(router_file, :after => /^.*Router.map\(function\(\) \{*$/) do js.rstrip end end end end end