rails-backbone-generator 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. data/.gitignore +19 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE +22 -0
  4. data/README.md +213 -0
  5. data/Rakefile +2 -0
  6. data/lib/generators/backbone/collection_generator.rb +70 -0
  7. data/lib/generators/backbone/model_generator.rb +56 -0
  8. data/lib/generators/backbone/namespace_generator.rb +62 -0
  9. data/lib/generators/backbone/setup_generator/templates/Guardfile +44 -0
  10. data/lib/generators/backbone/setup_generator/templates/app/assets/javascripts/application.js +14 -0
  11. data/lib/generators/backbone/setup_generator/templates/app/assets/javascripts/shared/core_extentions/collections_extentions.coffee +30 -0
  12. data/lib/generators/backbone/setup_generator/templates/app/assets/javascripts/shared/helpers/.gitkeep +0 -0
  13. data/lib/generators/backbone/setup_generator/templates/app/assets/javascripts/shared/utils/.gitkeep +0 -0
  14. data/lib/generators/backbone/setup_generator/templates/spec/javascripts/fixtures/.gitkeep +0 -0
  15. data/lib/generators/backbone/setup_generator/templates/spec/javascripts/helpers/association_helpers.coffee +3 -0
  16. data/lib/generators/backbone/setup_generator/templates/spec/javascripts/helpers/common_helpers.coffee +13 -0
  17. data/lib/generators/backbone/setup_generator/templates/spec/javascripts/helpers/fake_host.coffee +14 -0
  18. data/lib/generators/backbone/setup_generator/templates/spec/javascripts/helpers/headless_webkit_helper.coffee +9 -0
  19. data/lib/generators/backbone/setup_generator/templates/spec/javascripts/support/jasmine.yml +81 -0
  20. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/backbone/backbone-0.9.2.js +1431 -0
  21. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/backbone/backbone-bind-to-1.0.0.coffee +47 -0
  22. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/backbone/backbone-handlebars-1.0.0.js +121 -0
  23. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/backbone/backbone-query-0.2.3.coffee +314 -0
  24. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/backbone/backbone-relational-0.6.0.js +1687 -0
  25. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/backbone/handlebars-1.0.rc.1.js +1920 -0
  26. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/backbone/underscore-1.3.3.js +1059 -0
  27. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/browser_compatibility/json2.js +487 -0
  28. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/browser_compatibility/localstorage-polyfill.js +92 -0
  29. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/jquery/jquery-1.8.0.js +9227 -0
  30. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/jquery/jquery-ui.min.js +17 -0
  31. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/jquery/jquery.easing-1.3.js +205 -0
  32. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/jquery/jquery_ujs.js +368 -0
  33. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/testing/backbone-factory.js +53 -0
  34. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/testing/jasmine-jquery-1.3.1.js +288 -0
  35. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/testing/jasmine-sinon.js +43 -0
  36. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/testing/mock-ajax.js +207 -0
  37. data/lib/generators/backbone/setup_generator/templates/vendor/assets/javascripts/testing/sinon-1.4.2.js +4081 -0
  38. data/lib/generators/backbone/setup_generator.rb +90 -0
  39. data/lib/generators/backbone/templates/app/assets/javascripts/%namespace%/collections/%collection_name%.coffee.tt +4 -0
  40. data/lib/generators/backbone/templates/app/assets/javascripts/%namespace%/collections/.gitkeep +0 -0
  41. data/lib/generators/backbone/templates/app/assets/javascripts/%namespace%/models/%model_name%.coffee.tt +15 -0
  42. data/lib/generators/backbone/templates/app/assets/javascripts/%namespace%/models/.gitkeep +0 -0
  43. data/lib/generators/backbone/templates/app/assets/javascripts/%namespace%/routes/.gitkeep +0 -0
  44. data/lib/generators/backbone/templates/app/assets/javascripts/%namespace%/templates/.gitkeep +0 -0
  45. data/lib/generators/backbone/templates/app/assets/javascripts/%namespace%/views/.gitkeep +0 -0
  46. data/lib/generators/backbone/templates/app/assets/javascripts/%namespace%.coffee.tt +15 -0
  47. data/lib/generators/backbone/templates/spec/javascripts/%namespace%/collections/%collection_name%_spec.coffee.tt +8 -0
  48. data/lib/generators/backbone/templates/spec/javascripts/%namespace%/collections/.gitkeep +0 -0
  49. data/lib/generators/backbone/templates/spec/javascripts/%namespace%/factories/%model_name%_factory.coffee.tt +43 -0
  50. data/lib/generators/backbone/templates/spec/javascripts/%namespace%/factories/.gitkeep +0 -0
  51. data/lib/generators/backbone/templates/spec/javascripts/%namespace%/models/%model_name%_spec.coffee.tt +12 -0
  52. data/lib/generators/backbone/templates/spec/javascripts/%namespace%/models/.gitkeep +0 -0
  53. data/lib/generators/backbone/templates/spec/javascripts/%namespace%/views/.gitkeep +0 -0
  54. data/lib/generators/backbone_generator.rb +3 -0
  55. data/lib/rails_backbone_generator/version.rb +3 -0
  56. data/lib/rails_backbone_generator.rb +4 -0
  57. data/rails_backbone_generator.gemspec +20 -0
  58. metadata +61 -4
data/.gitignore ADDED
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ .DS_Store
19
+ spec/playground/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rails_backbone_generator.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 Chip Miller
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,213 @@
1
+ # RailsBackboneGenerator [![Gem Version](https://badge.fury.io/rb/rails-backbone-generator.png)](http://badge.fury.io/rb/rails-backbone-generator)
2
+ Inspired by ``rails generate`` - Generates [Backbone.js](/documentcloud/backbone) models and collections with [BackboneFactory](/SupportBee/Backbone-Factory) and [Jasmine](/pivotal/jasmine) tests.
3
+ The gem adds Backbone: [Setup](#backbonesetup) | [Namespace](#backbonenamespace) | [Model](#backbonemodel) | [Collection](#backbonecollection)
4
+
5
+
6
+ ```
7
+ $ rails generate backbone:collection Dashboard::Widget
8
+
9
+ app/assets/javascripts/dashboard
10
+ ├── collections
11
+ │ └── widgets.coffee
12
+ └── models
13
+ └── widget.coffee
14
+
15
+ spec/javascripts/dashboard
16
+ ├── collections
17
+ │ └── widgets_spec.coffee
18
+ ├── factories
19
+ │ └── widget_factory.coffee
20
+ └── models
21
+ └── widget_spec.coffee
22
+ ```
23
+ ## Installation
24
+ Add this line to your application's Gemfile:
25
+
26
+ gem 'rails_backbone_generator'
27
+
28
+ And then execute:
29
+
30
+ $ bundle
31
+
32
+ Or install it yourself as:
33
+
34
+ $ gem install rails_backbone_generator
35
+
36
+
37
+
38
+
39
+ ## Usage
40
+ The gem has three main generators (and one for setup):
41
+ [backbone:setup](#backbonesetup) | [backbone:namespace](#backbonenamespace) | [backbone:model](#backbonemodel) | [backbone:collection](#backbonecollection)
42
+ ```
43
+ $ rails g # for generate
44
+
45
+ Backbone:
46
+ backbone:collection
47
+ backbone:model
48
+ backbone:namespace
49
+ backbone:setup
50
+ ```
51
+
52
+
53
+ ## backbone:namespace
54
+ Creates a namespaced directory structure
55
+ ```
56
+ $ rails g backbone:namespace dashboard
57
+
58
+ app/assets/javascripts/dashboard
59
+ │ ├── collections
60
+ │ ├── models
61
+ │ ├── routes
62
+ │ ├── templates
63
+ │ └── views
64
+ └── dashboard.coffee
65
+
66
+ spec/javascripts/dashboard/
67
+ ├── collections
68
+ ├── factories
69
+ ├── models
70
+ └── views
71
+ ```
72
+
73
+
74
+ ## backbone:collection
75
+ Creates a model and plural-collection
76
+ ```
77
+ $ rails g backbone:collection Dashboard::Widgets
78
+
79
+ app/assets/javascripts/dashboard
80
+ ├── collections
81
+ │ └── widgets.coffee
82
+ └── models
83
+ └── widget.coffee
84
+
85
+ spec/javascripts/dashboard/
86
+ ├── collections
87
+ │ └── widgets_spec.coffee
88
+ ├── factories
89
+ │ └── widget_factory.coffee
90
+ └── models
91
+ └── widget_spec.coffee
92
+ ```
93
+
94
+
95
+ ## backbone:model
96
+ Creates a model w/out a collection
97
+ ```
98
+ $ rails g backbone:model Dashboard::Widget
99
+
100
+ app/assets/javascript/dashboard
101
+ └── models
102
+ └── widget.coffee
103
+
104
+ spec/javascripts/dashboard
105
+ ├── factories
106
+ │ └── widget_factory.coffee
107
+ └── models
108
+ └── widget_spec.coffee
109
+ ```
110
+
111
+
112
+ ## backbone:setup
113
+ __[ Optional ]__: Prepares the app for Backbone/Jasmine development.
114
+ * Vendors and requires core frameworks
115
+ * Adds common plugins and Jasmine helpers
116
+ * Configures Jasmine and adds a Guard file. Run ``bundle exec guard`` to run tests.
117
+
118
+ __Runtime Dependency__
119
+ ``brew install qt --build-from-source`` [\[ Details \]](https://github.com/thoughtbot/capybara-webkit/wiki/Installing-Qt-and-compiling-capybara-webkit)
120
+ * required to run Jasmine specs with guard-jasmine-headless-webkit
121
+ * other generators do not require this option
122
+
123
+ ```
124
+ $ rails g backbone:setup
125
+
126
+ app/assets/javascripts
127
+ ├── application.js
128
+ └── shared
129
+ ├── core_extentions
130
+ │ └── collections_extentions.coffee
131
+ ├── helpers
132
+ └── utils
133
+
134
+ spec/javascripts/
135
+ ├── fixtures
136
+ ├── helpers
137
+ │   ├── association_helpers.coffee
138
+ │   ├── common_helpers.coffee
139
+ │   ├── fake_host.coffee
140
+ │   └── headless_webkit_helper.coffee
141
+ └── support
142
+    └── jasmine.yml
143
+
144
+ vendor/javascripts/
145
+ ├── backbone
146
+ │   ├── backbone-0.9.2.js
147
+ │   ├── backbone-bind-to-1.0.0.coffee
148
+ │   ├── backbone-handlebars-1.0.0.coffee
149
+ │   ├── backbone-query-0.1.2.js
150
+ │   ├── backbone-relational-0.6.0.js
151
+ │   ├── handlebars-1.0.rc.1.js
152
+ │   └── underscore-1.3.3.js
153
+ ├── browser_compatibility
154
+ │   ├── json2.js
155
+ │   └── localstorage-polyfill.js
156
+ ├── jquery
157
+ │   ├── jquery-1.8.0.js
158
+ │   ├── jquery-ui.min.js
159
+ │   ├── jquery.easing-1.3.js
160
+ │   └── jquery_ujs.js
161
+ └── testing
162
+ ├── backbone-factory.js
163
+ ├── jasmine-jquery-1.3.1.js
164
+ ├── jasmine-sinon.js
165
+ ├── mock-ajax.js
166
+ └── sinon-1.4.2.js
167
+
168
+ ```
169
+ ## Factories
170
+ Similar to ruby's FactoryGirl, [BackboneFactory](/SupportBee/Backbone-Factory) adds factories to Jasmine.js.
171
+ The generator adds ``Factory.model_name({optional:override})`` and ``Factory.collection_name({optional:override})``
172
+ ```
173
+ # spec/javascripts/dashboard/factories/widget_factory.coffee
174
+
175
+ BackboneFactory.define 'widget', Dashboard.Models.Widget, ->
176
+ reminder: 'Remember to update with attributes'
177
+ hint: 'attributes can be other factories'
178
+ ```
179
+
180
+ ## External Docs
181
+ **[Backbone.js](http://backbonejs.org/)** and it's foundation **[Underscore.js](http://underscorejs.org/)**
182
+ * [Backbone Relational](https://github.com/PaulUithol/Backbone-relational/#backbone-relational): Associations for Backbone Models <tt>Bundle.get('books')</tt>
183
+ * [Backbone Query](https://github.com/davidgtonge/backbone_query#usage): A query DSL inspired by MongoDB. Includes matchers, logical operators, sorting, and paging.
184
+ * [Backbone BindTo](https://github.com/RStankov/backbone-bind-to#backbonebindto): Cleans-up the pattern of adding and *removing* event listeners to <tt>Backbone.Views</tt>
185
+ * [Backbone Handlebars](https://github.com/RStankov/backbone-handlebars/blob/master/README.md#backbonehandlebars): Extension for better integration with [Handlebars.js](http://handlebarsjs.com/) including nested views
186
+
187
+ **[Handlebars JS Templates](http://handlebarsjs.com/)**
188
+ * [Handlebars TextMate Bundle](https://github.com/drnic/Handlebars.tmbundle)
189
+
190
+ **[Jasmine.js](http://pivotal.github.com/jasmine/)** | [Cheat Sheat](https://github.com/mattfysh/cheat-sinon-jasmine)
191
+ * [Backbone Factory](https://github.com/SupportBee/Backbone-Factory#backbone-factory)
192
+ * [Jasmine Jquery](https://github.com/velesin/jasmine-jquery/)
193
+ * [Sinon](http://sinonjs.org/): Spies, stubs, mock ajax, and time/animation
194
+ * [Sinon-Jasmine](https://github.com/froots/jasmine-sinon#sinonjs-matchers): Test expectations for mocks and stubs
195
+
196
+ **Best Practices**: [Backbone Patterns](http://ricostacruz.com/backbone-patterns/)
197
+ **Testing Backbone**: [Part 1: Introduction](http://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine-sinon.html) | [Part 2: Models & Collections](http://tinnedfruit.com/2011/03/25/testing-backbone-apps-with-jasmine-sinon-2.html) | [Part 3: Routers & Views](http://tinnedfruit.com/2011/04/26/testing-backbone-apps-with-jasmine-sinon-3.html)
198
+ **Hackers Guide to Backbone**: [Part 1: Models & Events](http://dailyjs.com/2012/07/19/mvstar-2/) | [Part 2: Collections](http://dailyjs.com/2012/07/26/mvstar-3/) | [Part 3: Router and History](http://dailyjs.com/2012/08/02/mvstar-4/) | [Part 4: Sync](http://dailyjs.com/2012/08/09/mvstar-5/)
199
+
200
+
201
+
202
+ ## Contributing
203
+
204
+ 1. Fork it
205
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
206
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
207
+ 4. Push to the branch (`git push origin my-new-feature`)
208
+ 5. Create new Pull Request
209
+
210
+ <hr/>
211
+ [![BookRenter.com Logo](http://www.rafter.com/common/images/header_logo.png "BookRenter.com")](http://http://www.rafter.com/)
212
+ RailsBackboneGenerator is maintained by [Chip Miller](/chip-miller) and and funded by [Rafter](http://http://www.rafter.com/)
213
+
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require "bundler/gem_tasks"
@@ -0,0 +1,70 @@
1
+ # encoding: utf-8
2
+ require 'rails/generators'
3
+
4
+ module Backbone
5
+ class CollectionGenerator < Rails::Generators::Base
6
+ source_root File.expand_path('../templates', __FILE__)
7
+ desc "Creates a BackboneModel, BackboneCollection, & Jasmine tests/factory\nrails g backbone:collection Navigation::Buttons"
8
+ argument :raw_collection_name, required: true, type: 'string'
9
+
10
+ def create_collection
11
+ destination_dir = File.join( ['app/assets/javascripts', namespace, 'collections', "#{collection_name}.coffee"].compact )
12
+ template 'app/assets/javascripts/%namespace%/collections/%collection_name%.coffee.tt', destination_dir
13
+ end
14
+
15
+ def create_model
16
+ destination_dir = File.join( ['app/assets/javascripts', namespace, 'models', "#{model_name}.coffee"].compact )
17
+ template 'app/assets/javascripts/%namespace%/models/%model_name%.coffee.tt', destination_dir
18
+ end
19
+
20
+ def create_specs
21
+ destination_dir = File.join( ['spec/javascripts', namespace].compact )
22
+ spec_paths = ['collections/%collection_name%_spec.coffee', 'factories/%model_name%_factory.coffee', 'models/%model_name%_spec.coffee']
23
+ spec_paths.each do |path|
24
+ template "spec/javascripts/%namespace%/#{path}.tt", "spec/javascripts/%namespace%/#{path}"
25
+ end
26
+ end
27
+
28
+ def print_tree
29
+ tree = <<-TREE
30
+
31
+ app/assets/javascripts/dashboard
32
+ ├── collections
33
+ │ └── widgets.coffee
34
+ └── models
35
+ └── widget.coffee
36
+
37
+ spec/javascripts/dashboard
38
+ ├── collections
39
+ │ └── widgets_spec.coffee
40
+ ├── factories
41
+ │ └── widget_factory.coffee
42
+ └── models
43
+ └── widget_spec.coffee
44
+ TREE
45
+ say tree.gsub(/dashboard/, namespace.to_s).gsub(/widget/, model_name)
46
+ end
47
+
48
+ # Helpers
49
+ def collection_name(classify=false)
50
+ style = classify ? :camelize : :underscore
51
+ _collection_name, _namespace = raw_collection_name.split('::').reverse
52
+ _collection_name.pluralize.send(style)
53
+ end
54
+
55
+ # Use the extended class if availiable ( recommended )
56
+ def collection_base_class
57
+ File.exists?(Rails.root.join('app/assets/javascripts/shared/core_extentions/collections_extentions.coffee')) ? 'Backbone.ExtendedCollection' : 'Backbone.Collection'
58
+ end
59
+
60
+ def namespace(classify=false)
61
+ style = classify ? :camelize : :underscore
62
+ _collection_name, _namespace = raw_collection_name.split('::').reverse
63
+ _namespace && _namespace.singularize.send(style)
64
+ end
65
+
66
+ def model_name(classify=false)
67
+ collection_name(classify).singularize
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,56 @@
1
+ # encoding: utf-8
2
+ require 'rails/generators'
3
+
4
+ module Backbone
5
+ class ModelGenerator < Rails::Generators::Base
6
+ source_root File.expand_path('../templates', __FILE__)
7
+ desc "Creates a BackboneModel, Jasmine tests/factory"
8
+ argument :raw_model_name, required: true, type: 'string'
9
+
10
+ def create_model
11
+ destination_dir = File.join( ['app/assets/javascripts', namespace, "models/#{model_name}.coffee"].compact )
12
+ template 'app/assets/javascripts/%namespace%/models/%model_name%.coffee.tt', destination_dir
13
+ end
14
+
15
+ def create_specs
16
+ destination_dir = File.join( ['spec/javascripts', namespace].compact )
17
+ spec_paths = ['factories/%model_name%_factory.coffee', 'models/%model_name%_spec.coffee']
18
+ spec_paths.each do |path|
19
+ template "spec/javascripts/%namespace%/#{path}.tt", "spec/javascripts/%namespace%/#{path}"
20
+ end
21
+ end
22
+
23
+ def print_tree
24
+ tree = <<-TREE
25
+
26
+ app/assets/javascript/dashboard
27
+ └── models
28
+ └── widget.coffee
29
+
30
+ spec/javascripts/dashboard
31
+ ├── factories
32
+ │ └── widget_factory.coffee
33
+ └── models
34
+ └── widget_spec.coffee
35
+ TREE
36
+ say tree.gsub(/\/dashboard/, namespace.to_s).gsub(/widget/, model_name)
37
+ end
38
+
39
+ # Helpers
40
+ def namespace(classify=false)
41
+ @model_name, @namespace = raw_model_name.split('::').reverse
42
+ style = classify ? :camelize : :underscore
43
+ @namespace && @namespace.singularize.send(style)
44
+ end
45
+
46
+ def model_name(classify=false)
47
+ @model_name, @namespace = raw_model_name.split('::').reverse
48
+ style = classify ? :camelize : :underscore
49
+ @model_name.singularize.send(style)
50
+ end
51
+
52
+ def collection_name(classify=false)
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,62 @@
1
+ # encoding: utf-8
2
+ require 'rails/generators'
3
+ require 'find'
4
+
5
+ module Backbone
6
+ class NamespaceGenerator < Rails::Generators::Base
7
+ source_root File.expand_path('../templates', __FILE__)
8
+ desc "Setup a Backbone namespace"
9
+ argument :raw_namespace, :type => :string, :required => true
10
+
11
+ def setup_dir_structure
12
+ Dir.glob(File.join(source_paths, "**/.gitkeep")) do |keep_path|
13
+ template keep_path, keep_path.gsub(/^.*backbone\/templates\//, "")
14
+ end
15
+
16
+ # build and require a namespace initializer
17
+ template "app/assets/javascripts/%namespace%.coffee.tt", "app/assets/javascripts/%namespace%.coffee"
18
+ path = File.join(destination_root, 'app/assets/javascripts/application.js')
19
+ content =(
20
+ if behavior == :revoke # destroy
21
+ File.read(path).sub(/\/\/= require \.\/#{namespace}\n/, '')
22
+ else
23
+ File.read(path).sub(/(^\/\/[\S| ]*\n)([^\/])/) do |match|
24
+ "#{match.strip}\n//= require ./#{namespace}\n\n"
25
+ end
26
+ end )
27
+ File.open(path, 'wb') { |file| file.write(content) }
28
+ say_status :gsub, 'app/assets/javascripts/application.js'
29
+ end
30
+
31
+
32
+
33
+ def print_tree
34
+ tree = <<-TREE
35
+
36
+ app/assets/javascripts/dashboard
37
+ │ ├── collections
38
+ │ ├── models
39
+ │ ├── routes
40
+ │ ├── templates
41
+ │ └── views
42
+ └── dashboard.coffee
43
+
44
+
45
+ spec/javascripts/dashboard/
46
+ ├── collections
47
+ ├── factories
48
+ ├── models
49
+ └── views
50
+ TREE
51
+ say tree.gsub(/dashboard/, namespace).gsub(/widget/, model_name)
52
+ end
53
+
54
+ def namespace(classify=false)
55
+ style = classify ? :camelize : :underscore
56
+ raw_namespace.send(style)
57
+ end
58
+
59
+ def model_name(classify=false); '__delte__' ;end
60
+ def collection_name(classify=false); '__delte__' ;end
61
+ end
62
+ end
@@ -0,0 +1,44 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ # Run JS and CoffeeScript files in a typical Rails 3.1 fashion, placing Underscore templates in app/views/*.jst
5
+ # Your spec files end with _spec.{js,coffee}.
6
+
7
+ spec_location = "spec/javascripts/%s_spec"
8
+
9
+
10
+ guard 'jasmine-headless-webkit' do
11
+ watch(%r{^app/views/.*\.jst$})
12
+
13
+ # Run All
14
+ watch(%r{^spec/javascripts/factories\..*}) { spec_location }
15
+ watch(%r{^spec/javascripts/helpers(.*)\.(js|coffee)$}) { spec_location }
16
+ watch(%r{^app/assets/javascripts/([^/]*)\.(js|coffee)$}) { spec_location }
17
+ watch(%r{^app/assets/javascripts/fixtures(.*)\.(js|coffee)$}) { spec_location }
18
+
19
+ # Single Spec
20
+ watch(%r{^public/javascripts/(.*)\.js$}) { |m| newest_js_file(spec_location % m[1]) }
21
+ watch(%r{^app/assets/javascripts/(.*)\.(js|coffee)$}) { |m| newest_js_file(spec_location % m[1]) }
22
+ watch(%r{^spec/javascripts/(.*)_spec\..*}) { |m| newest_js_file(spec_location % m[1]) }
23
+ end
24
+
25
+
26
+
27
+ # guard 'rspec', :version => 2 do
28
+ # watch(%r{^spec/.+_spec\.rb$})
29
+ # watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
30
+ # watch('spec/spec_helper.rb') { "spec" }
31
+ # watch(%r{spec/factories/.*_factory.rb'}) { "spec" }
32
+ #
33
+ # # Rails example
34
+ # watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
35
+ # watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
36
+ # watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
37
+ # watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
38
+ # watch('config/routes.rb') { "spec/routing" }
39
+ # watch('app/controllers/application_controller.rb') { "spec/controllers" }
40
+ #
41
+ # # Capybara request specs
42
+ # watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
43
+ #
44
+ # end
@@ -0,0 +1,14 @@
1
+ // This is a manifest file that'll be compiled into application.js
2
+ //
3
+ //= require_tree ../../../vendor/assets/javascripts/browser_compatibility
4
+ //= require ../../../vendor/assets/javascripts/jquery/jquery-1.8.0
5
+ //= require ../../../vendor/assets/javascripts/jquery/jquery-ui.min
6
+ //= require ../../../vendor/assets/javascripts/jquery/jquery.easing-1.3
7
+ //= require ../../../vendor/assets/javascripts/backbone/handlebars-1.0.rc.1
8
+ //= require ../../../vendor/assets/javascripts/backbone/underscore-1.3.3
9
+ //= require ../../../vendor/assets/javascripts/backbone/backbone-0.9.2
10
+ //= require ../../../vendor/assets/javascripts/backbone/backbone-relational-0.6.0
11
+ //= require ../../../vendor/assets/javascripts/backbone/backbone-query-0.2.3
12
+ //= require ../../../vendor/assets/javascripts/backbone/backbone-bind-to-1.0.0
13
+ //= require ../../../vendor/assets/javascripts/backbone/backbone-handlebars-1.0.0
14
+ //= require_tree ./shared
@@ -0,0 +1,30 @@
1
+ class Backbone.ExtendedCollection extends Backbone.Collection
2
+
3
+ # Backwards compatable interface update
4
+ # Allows the Backbone.Collection#constructor to accept a single hash of attributes.
5
+ # The 'models' attribute is used as the collection's enumerable
6
+ #
7
+ # new Sample({
8
+ # models:[ model1, model2],
9
+ # title: 'great for factories'
10
+ # })
11
+ #
12
+ constructor: (models=[], other_options={})->
13
+ unless models instanceof Array
14
+ _(other_options).extend( _(models).tap (obj)->
15
+ models = models.models
16
+ delete obj.options
17
+ )
18
+
19
+ # store attributes
20
+ @attributes = _.clone @defaults || {}
21
+ _.chain(@attributes).keys().each (attr)=>
22
+ @attributes[attr]= other_options[attr] if other_options[attr]?
23
+
24
+ # continue building obj
25
+ super( models, other_options )
26
+
27
+
28
+ toJSON: => { collection: @models }
29
+
30
+ first: => @at(0)
@@ -0,0 +1,3 @@
1
+ beforeEach ->
2
+ @addMatchers toHaveAssociated: (expectedAssociation) ->
3
+ @actual.get(expectedAssociation)?
@@ -0,0 +1,13 @@
1
+ beforeEach ->
2
+ @addMatchers toBeEmpty: ->
3
+ _(@actual).isEmpty()
4
+
5
+ @addMatchers toBeA: (expeced) ->
6
+ @actual instanceof expeced
7
+
8
+ @addMatchers toBeValid: () ->
9
+ @actual.isValid()
10
+
11
+ # Non-recursive version of toContain()
12
+ @addMatchers toInclude: (expeced) ->
13
+ _(@actual).include(expeced)
@@ -0,0 +1,14 @@
1
+ #= require_tree ../fixtures
2
+ #= require ../../../vendor/assets/javascripts/testing/sinon-1.4.2
3
+
4
+ # FakeHost.respond() to complete request
5
+ beforeEach ->
6
+
7
+ localStorage.clear()
8
+ window.FakeHost = sinon.fakeServer.create();
9
+ # window.FakeHost.respondWith("GET", Dashboard.Routes.widget_search_path(), [200, { "Content-Type": "application/json" }, JSON.stringify( Fixtures.search_results )] )
10
+ # window.FakeHost.respondWith("GET", new RegExp(Dashboard.Routes.widget_search_path("[\\d]+$")), [200, { "Content-Type": "application/json" }, JSON.stringify( Fixtures.search_results )] )
11
+
12
+
13
+ afterEach ->
14
+ window.FakeHost.restore()
@@ -0,0 +1,9 @@
1
+ is_headless = ->
2
+ /jasmine-headless-webkit/.test(navigator.userAgent)
3
+
4
+
5
+ if is_headless()
6
+ # Things that need to change here
7
+
8
+ else
9
+ jasmine.getFixtures().fixturesPath = 'assets/javascripts/fixtures'