class Nali::Generator

Public Class Methods

new( args ) click to toggle source
# File lib/nali/generator.rb, line 5
def initialize( args )
  if args.first == 'new'
    if args[1] then create_application args[1]
    else puts 'Enter a name for the application' end
  elsif [ 'm', 'model' ].include?( args.first )
    if args[1] then create_model args[1]
    else puts 'Enter a name for the model' end
  elsif [ 'v', 'view' ].include?( args.first )
    if args[1] then create_view args[1]
    else puts 'Enter a name for the view' end
  end  
end

Public Instance Methods

clean_cache() click to toggle source
# File lib/nali/generator.rb, line 51
def clean_cache
  FileUtils.rm_rf File.join( Dir.pwd, 'tmp/cache' )
end
create_application( name ) click to toggle source
# File lib/nali/generator.rb, line 18
def create_application( name )
  source = File.join Nali.path, 'generator/application/.'
  target = File.join Dir.pwd, name
  FileUtils.cp_r source, target
  %w(
    db
    db/migrate
    lib
    lib/client
    lib/client/javascripts
    lib/client/stylesheets
    public
    public/client
    tmp
    vendor
    vendor/client
    vendor/client/javascripts
    vendor/client/stylesheets
    config/initializers
  ).each { |dir| unless Dir.exists?( path = File.join( target, dir ) ) then Dir.mkdir( path ) end }
  puts "Application #{ name } created"
end
create_model( name ) click to toggle source
# File lib/nali/generator.rb, line 55
def create_model( name )
  if Dir.exists?( File.join( Dir.pwd, 'app' ) )
    if name.scan( '_' ).size > 0
      return puts 'Please don\'t use the underscore'
    end
    clean_cache
    filename  = name.downcase
    classname = name.camelize
    write "app/client/javascripts/models/#{ filename }.js.coffee", render( 'client_model', classname )
    write "app/client/javascripts/controllers/#{ filename }s.js.coffee", render( 'client_controller', classname )
    write "app/server/models/#{ filename }.rb", render( 'server_model', classname )
    write "app/server/controllers/#{ filename }s_controller.rb", render( 'server_controller', classname )
    write "app/server/models/access.yml", render( 'server_model_access', classname ), 'a'
  else puts 'Please go to the application folder' end
end
create_view( name ) click to toggle source
# File lib/nali/generator.rb, line 71
def create_view( name )
  if Dir.exists?( File.join( Dir.pwd, 'app' ) )
    dirname, *filename = name.underscore.split( '_' )
    filename  = filename.join( '_' )
    classname = name.underscore.camelize
    if not dirname.empty? and not filename.empty? and not classname.empty?
      clean_cache
      [
        "app/client/javascripts/views/#{ dirname }",
        "app/client/stylesheets/#{ dirname }",
        "app/client/templates/#{ dirname }"
      ].each { |dir| unless Dir.exists?( path = File.join( Dir.pwd, dir ) ) then Dir.mkdir( path ) end }
      write "app/client/javascripts/views/#{ dirname }/#{ filename }.js.coffee", render( 'client_view', classname )
      write "app/client/stylesheets/#{ dirname }/#{ filename }.css.sass", render( 'client_view_styles', classname )
      write "app/client/templates/#{ dirname }/#{ filename }.html", ''
    else puts 'Invalid view name' end
  else puts 'Please go to the application folder' end
end
render( name, classname ) click to toggle source
# File lib/nali/generator.rb, line 41
def render( name, classname )
  require 'erb'
  ERB.new( File.read( File.join( Nali.path, 'generator/templates', "#{ name }.tpl" )  ) ).result binding
end
write( path, content, mode = 'w' ) click to toggle source
# File lib/nali/generator.rb, line 46
def write( path, content, mode = 'w' )
  File.open( File.join( Dir.pwd, path ), mode ) { |file| file.write( content ) }
  puts ( mode == 'a' ? 'Updated: ' : 'Created: ' ) + path
end