initial commit
This commit is contained in:
commit
cfa1fbe2bf
|
@ -0,0 +1,4 @@
|
||||||
|
*.gem
|
||||||
|
.bundle
|
||||||
|
Gemfile.lock
|
||||||
|
pkg/*
|
|
@ -0,0 +1,7 @@
|
||||||
|
source "http://rubygems.org"
|
||||||
|
|
||||||
|
# Specify your gem's dependencies in backbone-generator.gemspec
|
||||||
|
gemspec
|
||||||
|
|
||||||
|
gem 'autotest'
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
Autotest.add_discovery { 'rspec2' }
|
||||||
|
|
|
@ -0,0 +1,24 @@
|
||||||
|
# -*- encoding: utf-8 -*-
|
||||||
|
$:.push File.expand_path("../lib", __FILE__)
|
||||||
|
require "backbone-generator/version"
|
||||||
|
|
||||||
|
Gem::Specification.new do |s|
|
||||||
|
s.name = "backbone-generator"
|
||||||
|
s.version = Backbone::Generator::VERSION
|
||||||
|
s.platform = Gem::Platform::RUBY
|
||||||
|
s.authors = ["John Bintz"]
|
||||||
|
s.email = ["john@coswellproductions.com"]
|
||||||
|
s.homepage = ""
|
||||||
|
s.summary = %q{Generate Backbone-related files similar to Rails generators.}
|
||||||
|
s.description = %q{Generate Backbone-related files similar to Rails generators.}
|
||||||
|
|
||||||
|
s.rubyforge_project = "backbone-generator"
|
||||||
|
|
||||||
|
s.files = `git ls-files`.split("\n")
|
||||||
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
||||||
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
||||||
|
s.require_paths = ["lib"]
|
||||||
|
|
||||||
|
s.add_dependency 'thor'
|
||||||
|
s.add_development_dependency 'rspec'
|
||||||
|
end
|
|
@ -0,0 +1,47 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
require 'rubygems'
|
||||||
|
require 'thor'
|
||||||
|
require 'thor/group'
|
||||||
|
|
||||||
|
class BackboneGenerator < Thor
|
||||||
|
include Thor::Actions
|
||||||
|
|
||||||
|
def self.source_root
|
||||||
|
File.expand_path('../../templates', __FILE__)
|
||||||
|
end
|
||||||
|
|
||||||
|
no_tasks do
|
||||||
|
def underscore_name
|
||||||
|
Thor::Util.snake_case(@name.gsub("::", "/"))
|
||||||
|
end
|
||||||
|
|
||||||
|
def object_name
|
||||||
|
@name.gsub('::', '')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'model Namespaced::Name', "Create a model"
|
||||||
|
def model(name)
|
||||||
|
@name = name
|
||||||
|
template('model.js.erb', "public/javascripts/models/#{underscore_name}.js")
|
||||||
|
template('model_spec.js.erb', "spec/javascripts/models/#{underscore_name}_spec.js")
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'view Namespaced::Name', "Create a view"
|
||||||
|
def view(name)
|
||||||
|
@name = name
|
||||||
|
template('view.js.erb', "public/javascripts/views/#{underscore_name}.js")
|
||||||
|
template('view.jst.erb', "app/views/#{underscore_name}.jst")
|
||||||
|
template('view_spec.js.erb', "spec/javascripts/views/#{underscore_name}_spec.js")
|
||||||
|
end
|
||||||
|
|
||||||
|
desc 'collection Namespaced::Name', "Create a collection"
|
||||||
|
def collection(name)
|
||||||
|
@name = name
|
||||||
|
template('collection.js.erb', "public/javascripts/collections/#{underscore_name}.js")
|
||||||
|
template('collection_spec.js.erb', "spec/javascripts/collections/#{underscore_name}_spec.js")
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
BackboneGenerator.start
|
|
@ -0,0 +1,5 @@
|
||||||
|
module Backbone
|
||||||
|
module Generator
|
||||||
|
# Your code goes here...
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
module Backbone
|
||||||
|
module Generator
|
||||||
|
VERSION = "0.0.1"
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,52 @@
|
||||||
|
require 'spec_helper'
|
||||||
|
require 'fileutils'
|
||||||
|
|
||||||
|
describe 'backbone-generator' do
|
||||||
|
def clean!
|
||||||
|
FileUtils.rm_rf 'public'
|
||||||
|
FileUtils.rm_rf 'spec/javascripts'
|
||||||
|
FileUtils.rm_rf 'app'
|
||||||
|
end
|
||||||
|
|
||||||
|
before { clean! }
|
||||||
|
after { clean! }
|
||||||
|
|
||||||
|
describe 'model' do
|
||||||
|
it "should generate the model files" do
|
||||||
|
system %{bin/backbone-generator model Section::Model}
|
||||||
|
|
||||||
|
File.file?(model = 'public/javascripts/models/section/model.js').should be_true
|
||||||
|
File.file?(spec = 'spec/javascripts/models/section/model_spec.js').should be_true
|
||||||
|
|
||||||
|
File.read(model).should match(/SectionModel/)
|
||||||
|
File.read(spec).should match(/SectionModel/)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'view' do
|
||||||
|
it "should generate the view files" do
|
||||||
|
system %{bin/backbone-generator view Section::View}
|
||||||
|
|
||||||
|
File.file?(view = 'public/javascripts/views/section/view.js').should be_true
|
||||||
|
File.file?(spec = 'spec/javascripts/views/section/view_spec.js').should be_true
|
||||||
|
File.file?(template = 'app/views/section/view.jst').should be_true
|
||||||
|
|
||||||
|
File.read(view).should match(/SectionView/)
|
||||||
|
File.read(view).should match(%r{template: JST\['section/view'\]})
|
||||||
|
File.read(spec).should match(/SectionView/)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
describe 'collection' do
|
||||||
|
it "should generate the collection files" do
|
||||||
|
system %{bin/backbone-generator collection Section::Collection}
|
||||||
|
|
||||||
|
File.file?(collection = 'public/javascripts/collections/section/collection.js').should be_true
|
||||||
|
File.file?(spec = 'spec/javascripts/collections/section/collection_spec.js').should be_true
|
||||||
|
|
||||||
|
File.read(collection).should match(/SectionCollection/)
|
||||||
|
File.read(collection).should match(%r{section/collection})
|
||||||
|
File.read(spec).should match(/SectionCollection/)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,3 @@
|
||||||
|
var <%= object_name %>Collection = Backbone.Collection.extend({
|
||||||
|
url: '/<%= underscore_name %>'
|
||||||
|
});
|
|
@ -0,0 +1,21 @@
|
||||||
|
describe('<%= object_name %>Collection', function() {
|
||||||
|
var collection, server;
|
||||||
|
|
||||||
|
beforeEach(function() {
|
||||||
|
server = sinon.fakeServer().create();
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(function() {
|
||||||
|
server.restore();
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should fetch records from the API', function() {
|
||||||
|
collection = new <%= object_name %>Collection();
|
||||||
|
|
||||||
|
server.respondWith('GET', '<%= underscore_name %>', [ 200, { 'Content-type': 'application/json' }, "[{id: 1}]" ]);
|
||||||
|
collection.fetch()
|
||||||
|
server.respond();
|
||||||
|
|
||||||
|
expect(collection.length).toEqual(1);
|
||||||
|
});
|
||||||
|
});
|
|
@ -0,0 +1,4 @@
|
||||||
|
var <%= object_name %>Model = Backbone.Model.extend({
|
||||||
|
|
||||||
|
});
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
describe('<%= object_name %>Model', function() {
|
||||||
|
var model;
|
||||||
|
|
||||||
|
it('should have some tests', function() {
|
||||||
|
model = new <%= object_name %>Model();
|
||||||
|
|
||||||
|
expect(true).toEqual(false);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
var <%= object_name %>View = Backbone.View.extend({
|
||||||
|
template: JST['<%= underscore_name %>'],
|
||||||
|
initialize: function() {
|
||||||
|
_.bindAll(this, 'render');
|
||||||
|
},
|
||||||
|
render: function() {
|
||||||
|
$(this.el).html(this.template());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
<!-- your <%= object_name %>View template goes here -->
|
|
@ -0,0 +1,10 @@
|
||||||
|
describe('<%= object_name %>View', function() {
|
||||||
|
var view;
|
||||||
|
|
||||||
|
it('should render', function() {
|
||||||
|
view = new <%= object_name %>View();
|
||||||
|
view.render();
|
||||||
|
|
||||||
|
expect($(view.el)).toContain('.something');
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue