chaplin-on-rails 0.7.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.md +42 -0
- data/Rakefile +38 -0
- data/lib/chaplin-on-rails.rb +2 -0
- data/lib/chaplin-on-rails/engine.rb +6 -0
- data/lib/chaplin-on-rails/version.rb +3 -0
- data/lib/generators/chaplin/helpers.rb +94 -0
- data/lib/generators/chaplin/install/install_generator.rb +68 -0
- data/lib/generators/chaplin/install/templates/app_template.js.coffee +65 -0
- data/lib/generators/chaplin/install/templates/application.js.coffee +13 -0
- data/lib/generators/chaplin/install/templates/javascripts/controllers/base/controller.js.coffee +8 -0
- data/lib/generators/chaplin/install/templates/javascripts/lib/support.js.coffee +19 -0
- data/lib/generators/chaplin/install/templates/javascripts/lib/utils.js.coffee +18 -0
- data/lib/generators/chaplin/install/templates/javascripts/lib/view_helper.js.coffee +16 -0
- data/lib/generators/chaplin/install/templates/javascripts/models/base/collection.js.coffee +9 -0
- data/lib/generators/chaplin/install/templates/javascripts/models/base/model.js.coffee +9 -0
- data/lib/generators/chaplin/install/templates/javascripts/routes.js.coffee +9 -0
- data/lib/generators/chaplin/install/templates/javascripts/views/base/collection_view.coffee +11 -0
- data/lib/generators/chaplin/install/templates/javascripts/views/base/view.coffee +15 -0
- data/lib/generators/chaplin/install/templates/javascripts/views/layout.js.coffee +8 -0
- data/lib/generators/chaplin/install/templates/requirejs.yml +6 -0
- data/test/chaplin-on-rails_test.rb +19 -0
- data/test/dummy/README.rdoc +261 -0
- data/test/dummy/Rakefile +7 -0
- data/test/dummy/app/assets/stylesheets/application.css +13 -0
- data/test/dummy/app/controllers/application_controller.rb +3 -0
- data/test/dummy/app/controllers/home_controller.rb +5 -0
- data/test/dummy/app/helpers/application_helper.rb +2 -0
- data/test/dummy/app/helpers/home_helper.rb +2 -0
- data/test/dummy/app/views/home/index.html.erb +1 -0
- data/test/dummy/app/views/layouts/application.html.erb +14 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/config/application.rb +59 -0
- data/test/dummy/config/boot.rb +10 -0
- data/test/dummy/config/database.yml +25 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/development.rb +37 -0
- data/test/dummy/config/environments/production.rb +67 -0
- data/test/dummy/config/environments/test.rb +37 -0
- data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/test/dummy/config/initializers/inflections.rb +15 -0
- data/test/dummy/config/initializers/mime_types.rb +5 -0
- data/test/dummy/config/initializers/secret_token.rb +7 -0
- data/test/dummy/config/initializers/session_store.rb +8 -0
- data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/test/dummy/config/locales/en.yml +5 -0
- data/test/dummy/config/routes.rb +58 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +186 -0
- data/test/dummy/log/test.log +35 -0
- data/test/dummy/public/404.html +26 -0
- data/test/dummy/public/422.html +26 -0
- data/test/dummy/public/500.html +25 -0
- data/test/dummy/public/favicon.ico +0 -0
- data/test/dummy/script/rails +6 -0
- data/test/dummy/tmp/cache/assets/C75/D70/sprockets%2F1781f0919424c1d3014e066757a81eaa +0 -0
- data/test/dummy/tmp/cache/assets/C80/150/sprockets%2F0d3881005b0646df783d5c24683d34f5 +0 -0
- data/test/dummy/tmp/cache/assets/C89/4B0/sprockets%2F1f6245087eeb4c854a03a4644c964579 +0 -0
- data/test/dummy/tmp/cache/assets/C8D/980/sprockets%2F7184f95c8e290cbc2451767559f01d08 +0 -0
- data/test/dummy/tmp/cache/assets/CA8/130/sprockets%2F695a47c24c7804e27afc2208426ae133 +0 -0
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/CDE/EC0/sprockets%2F32bce1758d7525013970c7bb7d77aa28 +0 -0
- data/test/dummy/tmp/cache/assets/CEB/750/sprockets%2F72f4d157b237c37ed75f49bd217824c7 +0 -0
- data/test/dummy/tmp/cache/assets/CF6/290/sprockets%2F95f8b25659fb7a430d68b27a5f72f666 +0 -0
- data/test/dummy/tmp/cache/assets/CF9/7C0/sprockets%2F40fc2f3d2a468a00e463f1d313cb1683 +0 -0
- data/test/dummy/tmp/cache/assets/D08/A30/sprockets%2F1310a2826dcae357ba9f383e86b638a1 +0 -0
- data/test/dummy/tmp/cache/assets/D09/100/sprockets%2F4dc073204163e0850bf7fcb55ff8b552 +0 -0
- data/test/dummy/tmp/cache/assets/D0A/A40/sprockets%2F09e4e8ba330b24f9f87a63a910d422f3 +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D38/B80/sprockets%2F42c6d981cbd6ae6061c7088a2321a8ed +0 -0
- data/test/dummy/tmp/cache/assets/D3E/070/sprockets%2F45f1913b6d3645a3d166ff4ff250e4cc +0 -0
- data/test/dummy/tmp/cache/assets/D4E/D00/sprockets%2F1a6846f0a837ae2524e2f9ec89e6ef43 +0 -0
- data/test/dummy/tmp/cache/assets/D57/BC0/sprockets%2F50db33dbb1258913cb2fbd562ab1294b +0 -0
- data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/D63/C90/sprockets%2Fb70150e50cbcbc59c55ffb3c53a35575 +0 -0
- data/test/dummy/tmp/cache/assets/D6F/C70/sprockets%2F667a4890bf4c03f50b452d1db278fcfe +0 -0
- data/test/dummy/tmp/cache/assets/D79/470/sprockets%2F1cb96b862f7c7497af494aa19d0cbd55 +0 -0
- data/test/dummy/tmp/cache/assets/D7A/930/sprockets%2F3964cc67ad46beb69c444bb51f486e2f +0 -0
- data/test/dummy/tmp/cache/assets/D8B/B40/sprockets%2F11b945abcf62b02fcfb34f52f6aa1481 +0 -0
- data/test/dummy/tmp/cache/assets/D92/990/sprockets%2F4b34320d2682dc0fd9b107f3ef2cae7d +0 -0
- data/test/dummy/tmp/cache/assets/D98/8B0/sprockets%2Fedbef6e0d0a4742346cf479f2c522eb0 +0 -0
- data/test/dummy/tmp/cache/assets/DC8/010/sprockets%2F34cce381cfe1aa4be1ca560f118dd998 +0 -0
- data/test/dummy/tmp/cache/assets/DCD/ED0/sprockets%2F77ca908f86a8be3506de6fe60b1e0baa +0 -0
- data/test/dummy/tmp/cache/assets/DCE/890/sprockets%2Fd54185fb144acd9d1d15ed0e4ebf9f44 +0 -0
- data/test/dummy/tmp/cache/assets/DCE/D00/sprockets%2Fed31b7ea3cfb14d43a87c89deb0390f7 +0 -0
- data/test/dummy/tmp/cache/assets/DCF/610/sprockets%2Fda58bc8db5dd9cb124a85c507d591fd2 +0 -0
- data/test/dummy/tmp/cache/assets/E11/4E0/sprockets%2F86e145a39f85cceeaffdff91ebb61449 +0 -0
- data/test/test_helper.rb +7 -0
- data/vendor/assets/javascripts/backbone.js +1497 -0
- data/vendor/assets/javascripts/chaplin.js.coffee +2377 -0
- data/vendor/assets/javascripts/underscore.js +1222 -0
- metadata +292 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2013 Mikhail Di
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# ChaplinOnRails
|
2
|
+
|
3
|
+
Gem for using [Chaplin.js](https://github.com/chaplinjs/chaplin) with Rails asset pipeline, based on
|
4
|
+
[chaplin-rails](https://github.com/chaplinjs/chaplin-rails) boilerplate project.
|
5
|
+
|
6
|
+
Since Chaplin requires module system this gem has
|
7
|
+
[requirejs-rails](https://github.com/jwhitley/requirejs-rails) gem
|
8
|
+
in dependecy. Those, you're forced to use `requirejs` for your project :)
|
9
|
+
|
10
|
+
Gem already comes with `underscore.js` and `backbone.js`.
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
Add this line to your application's Gemfile:
|
15
|
+
|
16
|
+
gem 'chaplin-on-rails', git: 'git://github.com/eicca/chaplin-on-rails.git'
|
17
|
+
|
18
|
+
And then execute:
|
19
|
+
|
20
|
+
$ bundle
|
21
|
+
|
22
|
+
## Usage
|
23
|
+
|
24
|
+
Run
|
25
|
+
|
26
|
+
rails g chaplin:install
|
27
|
+
|
28
|
+
It should create basic application structure with some basic files.
|
29
|
+
To learn more about this see
|
30
|
+
[chaplin-rails](https://github.com/chaplinjs/chaplin-rails).
|
31
|
+
|
32
|
+
This gem generates new `application.js.coffee` for you, so you should
|
33
|
+
migrate your old `application.js` to `requirejs` config file and remove
|
34
|
+
`application.js` file.
|
35
|
+
|
36
|
+
Also, there might be a problem with replacing `requirejs_include_tag`.
|
37
|
+
Just follow for generator's output instructions.
|
38
|
+
|
39
|
+
## TODO
|
40
|
+
|
41
|
+
1. Write tests for install generator.
|
42
|
+
2. Write generators for scaffold/resource/controller/model.
|
data/Rakefile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
begin
|
8
|
+
require 'rdoc/task'
|
9
|
+
rescue LoadError
|
10
|
+
require 'rdoc/rdoc'
|
11
|
+
require 'rake/rdoctask'
|
12
|
+
RDoc::Task = Rake::RDocTask
|
13
|
+
end
|
14
|
+
|
15
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
16
|
+
rdoc.rdoc_dir = 'rdoc'
|
17
|
+
rdoc.title = 'ChaplinOnRails'
|
18
|
+
rdoc.options << '--line-numbers'
|
19
|
+
rdoc.rdoc_files.include('README.rdoc')
|
20
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
|
26
|
+
Bundler::GemHelper.install_tasks
|
27
|
+
|
28
|
+
require 'rake/testtask'
|
29
|
+
|
30
|
+
Rake::TestTask.new(:test) do |t|
|
31
|
+
t.libs << 'lib'
|
32
|
+
t.libs << 'test'
|
33
|
+
t.pattern = 'test/**/*_test.rb'
|
34
|
+
t.verbose = false
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
task :default => :test
|
@@ -0,0 +1,94 @@
|
|
1
|
+
module Chaplin
|
2
|
+
module Generators
|
3
|
+
module Helpers
|
4
|
+
|
5
|
+
def asset_path
|
6
|
+
File.join('app', 'assets')
|
7
|
+
end
|
8
|
+
|
9
|
+
def javascript_path
|
10
|
+
File.join(asset_path, 'javascripts')
|
11
|
+
end
|
12
|
+
|
13
|
+
def model_path
|
14
|
+
File.join(javascript_path, "models")
|
15
|
+
end
|
16
|
+
|
17
|
+
def view_path
|
18
|
+
File.join(javascript_path, "views")
|
19
|
+
end
|
20
|
+
|
21
|
+
def controller_path
|
22
|
+
File.join(javascript_path, "controllers")
|
23
|
+
end
|
24
|
+
|
25
|
+
def lib_path
|
26
|
+
File.join(javascript_path, "lib")
|
27
|
+
end
|
28
|
+
|
29
|
+
def base_path(path)
|
30
|
+
File.join(path, 'base')
|
31
|
+
end
|
32
|
+
|
33
|
+
def template_path
|
34
|
+
File.join(asset_path, "templates")
|
35
|
+
end
|
36
|
+
|
37
|
+
def singular_file_name
|
38
|
+
"#{file_name.singularize}#{@ext}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def plural_file_name
|
42
|
+
"#{file_name.pluralize}#{@ext}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def router_file_name
|
46
|
+
"#{file_name.pluralize}_router#{@ext}"
|
47
|
+
end
|
48
|
+
|
49
|
+
def view_file_name
|
50
|
+
"#{file_name.pluralize}_index#{@ext}"
|
51
|
+
end
|
52
|
+
|
53
|
+
def model_namespace
|
54
|
+
[app_name, "Models", file_name.singularize.camelize].join(".")
|
55
|
+
end
|
56
|
+
|
57
|
+
def collection_namespace
|
58
|
+
[app_name, "Collections", file_name.pluralize.camelize].join(".")
|
59
|
+
end
|
60
|
+
|
61
|
+
def router_namespace
|
62
|
+
[app_name, "Routers", file_name.pluralize.camelize].join(".")
|
63
|
+
end
|
64
|
+
|
65
|
+
def view_namespace
|
66
|
+
[app_name, "Views", "#{file_name.pluralize.camelize}Index"].join(".")
|
67
|
+
end
|
68
|
+
|
69
|
+
def template_namespace
|
70
|
+
File.join(file_path.pluralize, "index")
|
71
|
+
end
|
72
|
+
|
73
|
+
def app_name
|
74
|
+
rails_app_name.camelize
|
75
|
+
end
|
76
|
+
|
77
|
+
def app_filename
|
78
|
+
rails_app_name.underscore
|
79
|
+
end
|
80
|
+
|
81
|
+
def rails_app_name
|
82
|
+
Rails.application.class.name.split('::').first
|
83
|
+
end
|
84
|
+
|
85
|
+
def layout_path
|
86
|
+
Dir['app/views/layouts/application*'].first
|
87
|
+
end
|
88
|
+
|
89
|
+
def display(output, color = :green)
|
90
|
+
say(" - #{output}", color)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'generators/chaplin/helpers'
|
2
|
+
|
3
|
+
module Chaplin
|
4
|
+
module Generators
|
5
|
+
class InstallGenerator < Rails::Generators::Base
|
6
|
+
include Chaplin::Generators::Helpers
|
7
|
+
|
8
|
+
source_root File.expand_path("../templates", __FILE__)
|
9
|
+
|
10
|
+
desc "Generates a Chaplin.js skeleton directory structure and manifest"
|
11
|
+
|
12
|
+
# TODO currently only coffee works
|
13
|
+
#class_option :javascript,
|
14
|
+
#type: :boolean,
|
15
|
+
#aliases: "-j",
|
16
|
+
#default: false,
|
17
|
+
#desc: "Generate JavaScript"
|
18
|
+
|
19
|
+
def copy_app_boilerplate
|
20
|
+
# it should remove empty directories during 'destroy' command
|
21
|
+
%w(controllers lib models views).each do |dir_name|
|
22
|
+
empty_directory File.join(javascript_path, dir_name)
|
23
|
+
end
|
24
|
+
|
25
|
+
# copy all /javascripts directory
|
26
|
+
directory 'javascripts', javascript_path
|
27
|
+
|
28
|
+
# create empty 'assets/templates' directory
|
29
|
+
empty_directory template_path
|
30
|
+
end
|
31
|
+
|
32
|
+
def generate_app_files
|
33
|
+
template "application.js.coffee", "#{javascript_path}/application.js.coffee"
|
34
|
+
template "app_template.js.coffee", "#{javascript_path}/#{app_filename}.js.coffee"
|
35
|
+
end
|
36
|
+
|
37
|
+
def apply_requirejs
|
38
|
+
# copy config file
|
39
|
+
copy_file 'requirejs.yml', 'config/requirejs.yml'
|
40
|
+
|
41
|
+
# check if we can find layout file
|
42
|
+
# TODO doesn't work during 'destroy' command
|
43
|
+
if layout_path
|
44
|
+
# inject requirejs tag
|
45
|
+
unless gsub_file(layout_path, /javascript_include_tag/, 'requirejs_include_tag')
|
46
|
+
display "Can't find a javascript_include_tag in '#{layout_path}'!"
|
47
|
+
display "You must add 'requirejs_include_tag' instead of 'javascript_include_tag'"
|
48
|
+
display "in your layout(s)."
|
49
|
+
end
|
50
|
+
else
|
51
|
+
display "Can't find a layout to inject requirejs tag!"
|
52
|
+
display "You must add 'requirejs_include_tag' instead of 'javascript_include_tag'"
|
53
|
+
display "in your layout(s)."
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
def post_install_messages
|
59
|
+
if File.exists?("#{javascript_path}/application.js")
|
60
|
+
display "You have 'application.js' file in your 'assets/' folder."
|
61
|
+
display "You should migrate all dependencies to the 'requirejs.yml' config file"
|
62
|
+
display "and remove 'application.js file."
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
define [
|
2
|
+
'chaplin'
|
3
|
+
'views/layout'
|
4
|
+
'routes'
|
5
|
+
# Require base controllers manually because
|
6
|
+
# they aren’t compiled individually
|
7
|
+
# 'controllers/my_controller'
|
8
|
+
], (Chaplin, Layout, routes) ->
|
9
|
+
'use strict'
|
10
|
+
|
11
|
+
# The application object
|
12
|
+
# Choose a meaningful name for your application
|
13
|
+
class <%= app_name %> extends Chaplin.Application
|
14
|
+
|
15
|
+
# Set your application name here so the document title is set to
|
16
|
+
# “Controller title – Site title” (see Layout#adjustTitle)
|
17
|
+
title: '<%= rails_app_name %>'
|
18
|
+
|
19
|
+
initialize: ->
|
20
|
+
super
|
21
|
+
|
22
|
+
# Initialize core components
|
23
|
+
@initDispatcher()
|
24
|
+
@initLayout()
|
25
|
+
@initMediator()
|
26
|
+
|
27
|
+
# Application-specific scaffold
|
28
|
+
@initControllers()
|
29
|
+
|
30
|
+
# Register all routes and start routing
|
31
|
+
@initRouter routes
|
32
|
+
# You might pass Router/History options as the second parameter.
|
33
|
+
# Chaplin enables pushState per default and Backbone uses / as
|
34
|
+
# the root per default. You might change that in the options
|
35
|
+
# if necessary:
|
36
|
+
# @initRouter routes, pushState: false, root: '/subdir/'
|
37
|
+
|
38
|
+
# Freeze the application instance to prevent further changes
|
39
|
+
Object.freeze? this
|
40
|
+
|
41
|
+
# Override standard layout initializer
|
42
|
+
# ------------------------------------
|
43
|
+
initLayout: ->
|
44
|
+
# Use an application-specific Layout class. Currently this adds
|
45
|
+
# no features to the standard Chaplin Layout, it’s an empty placeholder.
|
46
|
+
@layout = new Layout {@title}
|
47
|
+
|
48
|
+
# Instantiate common controllers
|
49
|
+
# ------------------------------
|
50
|
+
initControllers: ->
|
51
|
+
# These controllers are active during the whole application runtime.
|
52
|
+
# You don’t need to instantiate all controllers here, only special
|
53
|
+
# controllers which do not to respond to routes. They may govern models
|
54
|
+
# and views which are needed the whole time, for example header, footer
|
55
|
+
# or navigation views.
|
56
|
+
# e.g. new NavigationController()
|
57
|
+
|
58
|
+
# Create additional mediator properties
|
59
|
+
# -------------------------------------
|
60
|
+
initMediator: ->
|
61
|
+
# Create a user property
|
62
|
+
Chaplin.mediator.user = null
|
63
|
+
# Add additional application-specific properties and methods
|
64
|
+
# Seal the mediator
|
65
|
+
Chaplin.mediator.seal()
|
@@ -0,0 +1,19 @@
|
|
1
|
+
define [
|
2
|
+
'underscore'
|
3
|
+
'lib/utils'
|
4
|
+
'chaplin'
|
5
|
+
], (_, utils, Chaplin) ->
|
6
|
+
|
7
|
+
# Application-specific feature detection
|
8
|
+
# --------------------------------------
|
9
|
+
|
10
|
+
# Delegate to Chaplin’s support module
|
11
|
+
support = utils.beget Chaplin.support
|
12
|
+
|
13
|
+
# Add additional application-specific properties and methods
|
14
|
+
|
15
|
+
# _(support).extend
|
16
|
+
# someProperty: 'foo'
|
17
|
+
# someMethod: ->
|
18
|
+
|
19
|
+
support
|
@@ -0,0 +1,18 @@
|
|
1
|
+
define [
|
2
|
+
'underscore'
|
3
|
+
'chaplin'
|
4
|
+
], (_, Chaplin) ->
|
5
|
+
|
6
|
+
# Application-specific utilities
|
7
|
+
# ------------------------------
|
8
|
+
|
9
|
+
# Delegate to Chaplin’s utils module
|
10
|
+
utils = Chaplin.utils.beget Chaplin.utils
|
11
|
+
|
12
|
+
# Add additional application-specific properties and methods
|
13
|
+
|
14
|
+
# _(utils).extend
|
15
|
+
# someProperty: 'foo'
|
16
|
+
# someMethod: ->
|
17
|
+
|
18
|
+
utils
|
@@ -0,0 +1,16 @@
|
|
1
|
+
define [
|
2
|
+
'chaplin'
|
3
|
+
'lib/utils'
|
4
|
+
], (Handlebars, Chaplin, utils) ->
|
5
|
+
'use strict'
|
6
|
+
|
7
|
+
# View helpers (HAML Coffee in this case)
|
8
|
+
# ---------------------------------------
|
9
|
+
|
10
|
+
HAML.globals = ->
|
11
|
+
{
|
12
|
+
#someProperty: 'foo'
|
13
|
+
#someMethod: ->
|
14
|
+
}
|
15
|
+
|
16
|
+
null
|