Angularjs Base Controller en Coffeescript

Travaillant actuellement sur une app full angularJS j’en profite pour me faire des helpers pour de futurs projets. Je travaille aussi avec coffeescript qui est un réel plaisir au quotidien. Le but étant de simplifier un peu la création de controller.

class BaseCtrl
	@register: (app, name) ->
    	name ?= @name || @toString().match(/function\s*(.*?)\(/)?[1]
        app.controller(name, @)
    
    @inject: (args...) ->
    	@$inject = args
    
    constructor: (args...) ->
    	for key, index in @constructor.$inject
        	@[key] = args[index]

		for key, fn of @constructor.prototype
			continue unless typeof fn is 'function'
			continue if key in ['constructor', 'initialize'] or key[0] is '_'
			@$scope[key] = fn.bind?(@) || _.bind(fn, @)
		@initialize?()

Voici un example d’utilisation:

BaseCtrl = require('./utils/baseCtrl')

class Main extends BaseCtrl
	@register(angular.module('myApp'), 'MainController')
    
    @inject('Restangular')
    
    firstScopeVar: true
    
    initialize: ->
    	// utiliser "MainController as Main" dans votre Html pour ne pas avoir besoin d'inject $scope
        @firstScopeVar = false