RailsBackboneGenerator Gem Version

Inspired by rails generate - Generates Backbone.js models and collections with BackboneFactory and Jasmine tests.
The gem adds Backbone: Setup | Namespace | Model | Collection

    $ rails generate backbone_generator:collection Dashboard::Widget 

    app/assets/javascripts/dashboard
    ├── collections
    │   └── widgets.coffee
    └── models
        └── widget.coffee

    spec/javascripts/dashboard
    ├── collections
    │   └── widgets_spec.coffee
    ├── factories
    │   └── widget_factory.coffee
    └── models
        └── widget_spec.coffee

Installation

Add this line to your application's Gemfile:

gem 'rails-backbone-generator'

And then execute:

$ bundle

Or install it yourself as:

$ gem install rails-backbone-generator

Usage

The gem has three main generators (and one for setup):
backbone:setup | backbone:namespace | backbone:model | backbone:collection

$ rails g # for generate

  BackboneGenerator:
    backbone_generator:collection
    backbone_generator:model
    backbone_generator:namespace
    backbone_generator:setup

backbone:namespace

Creates a namespaced directory structure

$ rails g backbone_generator:namespace dashboard

  app/assets/javascripts/dashboard
  │   ├── collections
  │   ├── models
  │   ├── routes
  │   ├── templates
  │   └── views
  └── dashboard.coffee

  spec/javascripts/dashboard/
  ├── collections
  ├── factories
  ├── models
  └── views

backbone:collection

Creates a model and plural-collection

$ rails g backbone_generator:collection Dashboard::Widgets

  app/assets/javascripts/dashboard
  ├── collections
  │   └── widgets.coffee
  └── models
      └── widget.coffee

  spec/javascripts/dashboard/
  ├── collections
  │   └── widgets_spec.coffee
  ├── factories
  │   └── widget_factory.coffee
  └── models
      └── widget_spec.coffee

backbone:model

Creates a model w/out a collection

$ rails g backbone_generator:model Dashboard::Widget

  app/assets/javascript/dashboard
  └── models
      └── widget.coffee

  spec/javascripts/dashboard
  ├── factories
  │   └── widget_factory.coffee
  └── models
      └── widget_spec.coffee

backbone:setup

[ Optional ]: Prepares the app for Backbone/Jasmine development.

  • Vendors and requires core frameworks
  • Adds common plugins and Jasmine helpers
  • Configures Jasmine and adds a Guard file. Run bundle exec guard to run tests.

Runtime Dependency
brew install qt --build-from-source [ Details ]

  • required to run Jasmine specs with guard-jasmine-headless-webkit
  • other generators do not require this option
$ rails g backbone_generator:setup

      app/assets/javascripts
      ├── application.js
      └── shared
          ├── core_extentions
          │   └── collections_extentions.coffee
          ├── helpers
          └── utils

      spec/javascripts/
      ├── fixtures
      ├── helpers
      │   ├── association_helpers.coffee
      │   ├── common_helpers.coffee
      │   ├── fake_host.coffee
      │   └── headless_webkit_helper.coffee
      └── support
          └── jasmine.yml

      vendor/javascripts/
      ├── backbone
      │   ├── backbone-1.1.0.js
      │   ├── backbone-bind-to-1.1.0.coffee
      │   ├── backbone-handlebars-1.0.0.coffee
      │   ├── backbone-query-0.2.3.coffee
      │   ├── backbone-relational-0.8.6.js
      │   ├── handlebars-1.1.2.js
      │   └── underscore-1.5.2.js
      ├── browser_compatibility
      │   ├── json2.js
      │   └── localstorage-polyfill.js
      ├── jquery
      │   ├── jquery-1.10.2.js
      │   ├── jquery-ui-1.10.3.js
      │   ├── jquery.easing-1.3.js
      │   └── jquery_ujs.js
      └── testing
          ├── backbone-factory.js
          ├── jasmine-jquery-1.5.93.js
          ├── jasmine-sinon-0.2.1.js
          ├── mock-ajax-2.0.0.js
          └── sinon-1.7.3.js

Factories

Similar to ruby's FactoryGirl, BackboneFactory adds factories to Jasmine.js.
The generator adds Factory.model_name({optional:override}) and Factory.collection_name({optional:override})

  # spec/javascripts/dashboard/factories/widget_factory.coffee

  BackboneFactory.define 'widget', Dashboard.Models.Widget, ->
    reminder:  'Remember to update with attributes'
        hint:  'attributes can be other factories'

External Docs

Backbone.js and it's foundation Underscore.js

Handlebars JS Templates

Jasmine.js | Cheat Sheat

Best Practices: Backbone Patterns
Testing Backbone: Part 1: Introduction | Part 2: Models & Collections | Part 3: Routers & Views
Hackers Guide to Backbone: Part 1: Models & Events | Part 2: Collections | Part 3: Router and History | Part 4: Sync

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

TODO

add jasmine to config/routes.rb # mount JasmineRails::Engine => "/specs" unless Rails.env.production?


Rafter.com Logo RailsBackboneGenerator is maintained by Chip Miller and and funded by Rafter