discourse-ember-rails 0.18.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +19 -0
  3. data/README.md +341 -0
  4. data/lib/ember-rails.rb +1 -0
  5. data/lib/ember/rails/engine.rb +25 -0
  6. data/lib/ember/rails/version.rb +5 -0
  7. data/lib/ember_rails.rb +96 -0
  8. data/lib/generators/ember/adapter_generator.rb +21 -0
  9. data/lib/generators/ember/bootstrap_generator.rb +76 -0
  10. data/lib/generators/ember/component_generator.rb +28 -0
  11. data/lib/generators/ember/controller_generator.rb +34 -0
  12. data/lib/generators/ember/generator_helpers.rb +58 -0
  13. data/lib/generators/ember/initializer_generator.rb +23 -0
  14. data/lib/generators/ember/install_generator.rb +194 -0
  15. data/lib/generators/ember/instance_initializer_generator.rb +23 -0
  16. data/lib/generators/ember/model_generator.rb +48 -0
  17. data/lib/generators/ember/resource_generator.rb +29 -0
  18. data/lib/generators/ember/resource_override.rb +38 -0
  19. data/lib/generators/ember/route_generator.rb +21 -0
  20. data/lib/generators/ember/service_generator.rb +23 -0
  21. data/lib/generators/ember/template_generator.rb +23 -0
  22. data/lib/generators/ember/view_generator.rb +24 -0
  23. data/lib/generators/templates/adapter.js +5 -0
  24. data/lib/generators/templates/adapter.js.coffee +5 -0
  25. data/lib/generators/templates/adapter.js.em +3 -0
  26. data/lib/generators/templates/app.js +11 -0
  27. data/lib/generators/templates/app.js.coffee +11 -0
  28. data/lib/generators/templates/app.js.em +11 -0
  29. data/lib/generators/templates/application.hbs +3 -0
  30. data/lib/generators/templates/application.js +11 -0
  31. data/lib/generators/templates/application.js.coffee +11 -0
  32. data/lib/generators/templates/application.js.em +10 -0
  33. data/lib/generators/templates/application_adapter.js +5 -0
  34. data/lib/generators/templates/application_adapter.js.coffee +5 -0
  35. data/lib/generators/templates/application_adapter.js.em +3 -0
  36. data/lib/generators/templates/array_controller.js +5 -0
  37. data/lib/generators/templates/array_controller.js.coffee +5 -0
  38. data/lib/generators/templates/array_controller.js.em +3 -0
  39. data/lib/generators/templates/component.js +4 -0
  40. data/lib/generators/templates/component.js.coffee +6 -0
  41. data/lib/generators/templates/component.js.em +6 -0
  42. data/lib/generators/templates/component.template.hbs +2 -0
  43. data/lib/generators/templates/controller.js +5 -0
  44. data/lib/generators/templates/controller.js.coffee +6 -0
  45. data/lib/generators/templates/controller.js.em +3 -0
  46. data/lib/generators/templates/model.js +13 -0
  47. data/lib/generators/templates/model.js.coffee +12 -0
  48. data/lib/generators/templates/model.js.em +12 -0
  49. data/lib/generators/templates/object_controller.js +5 -0
  50. data/lib/generators/templates/object_controller.js.coffee +5 -0
  51. data/lib/generators/templates/object_controller.js.em +3 -0
  52. data/lib/generators/templates/route.js +5 -0
  53. data/lib/generators/templates/route.js.coffee +5 -0
  54. data/lib/generators/templates/route.js.em +3 -0
  55. data/lib/generators/templates/router.js +5 -0
  56. data/lib/generators/templates/router.js.coffee +5 -0
  57. data/lib/generators/templates/router.js.em +5 -0
  58. data/lib/generators/templates/template.hbs +5 -0
  59. data/lib/generators/templates/view.js +5 -0
  60. data/lib/generators/templates/view.js.coffee +4 -0
  61. data/lib/generators/templates/view.js.em +4 -0
  62. metadata +329 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 00db50d88e7113d359e49c7c5675233df626a02a204b9691db1bb9ff9113b076
4
+ data.tar.gz: 7b9eca1cb3c5018f341b2bd6fdf32243326fbcb62e115915e3d1ad5ab8ab16dc
5
+ SHA512:
6
+ metadata.gz: 542df7c08633fba64400c1d7b0453590d01718fb2486e9212f23d719fe67c125e42bf56776bd4ec997de8ce4ac09a1a3a8268dd3f80a7dd31d9c201814122d7e
7
+ data.tar.gz: 8a808aaf33b2a11c743adee3915a80e91b07aad6579c4c2ded90b7f1497e8f3444bd99838f425408b707712abb7fc0f265e27c92ae96b6aeae17862630a01f87
data/LICENSE ADDED
@@ -0,0 +1,19 @@
1
+ Copyright (c) 2012 Keith Pitt, Rob Monie, Joao Carlos, Paul Chavard and ember-rails contributors
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
4
+ this software and associated documentation files (the "Software"), to deal in
5
+ the Software without restriction, including without limitation the rights to
6
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7
+ of the Software, and to permit persons to whom the Software is furnished to do
8
+ so, subject to the following conditions:
9
+
10
+ The above copyright notice and this permission notice shall be included in all
11
+ copies or substantial portions of the Software.
12
+
13
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19
+ SOFTWARE.
@@ -0,0 +1,341 @@
1
+ # ember-rails [![Build Status](https://secure.travis-ci.org/emberjs/ember-rails.svg?branch=master)](http://travis-ci.org/emberjs/ember-rails) [![Dependency Status](https://gemnasium.com/emberjs/ember-rails.png)](https://gemnasium.com/emberjs/ember-rails) [![Code Climate](https://codeclimate.com/github/emberjs/ember-rails/badges/gpa.svg)](https://codeclimate.com/github/emberjs/ember-rails)
2
+
3
+ ember-rails makes developing an [Ember.JS](http://emberjs.com/) application much easier in Rails 3.1+.
4
+
5
+ The following functionalities are included in this gem:
6
+ - Pre-compiling of your handlebars templates when building your asset pipeline.
7
+ - Inclusion of development and production copies of Ember, [Ember Data](https://github.com/emberjs/data) and [Handlebars](https://github.com/wycats/handlebars.js).
8
+ - Inclusion of [ActiveModel::Serializer](https://github.com/rails-api/active_model_serializers) for integration with Ember Data.
9
+
10
+ You can see an example of how to use the gem [here](https://github.com/keithpitt/ember-rails-example). There is also a great tutorial by [Dan Gebhardt](https://twitter.com/#!/dgeb) called "[Beginning Ember.js on Rails](http://www.cerebris.com/blog/2012/01/24/beginning-ember-js-on-rails-part-1/)" which is a great read if you're just starting out with Rails and Ember.js.
11
+
12
+ ## Getting started
13
+ * Add the gem to your application Gemfile:
14
+
15
+ ```ruby
16
+ gem 'ember-rails'
17
+ gem 'ember-source', '~> 1.9.0' # or the version you need
18
+ ```
19
+
20
+ * Run `bundle install`
21
+ * Next, generate the application structure:
22
+
23
+ ```shell
24
+ rails generate ember:bootstrap
25
+ ```
26
+
27
+ * Restart your server (if it's running)
28
+
29
+ ## Building a new project from scratch
30
+
31
+ Rails supports the ability to build projects from a template source ruby file.
32
+
33
+ To build an Ember centric Rails project you can simply type the following into your command line:
34
+
35
+ ```
36
+ rails new my_app -m http://emberjs.com/edge_template.rb
37
+ ```
38
+
39
+ Read more about [Rails application templates](http://edgeguides.rubyonrails.org/rails_application_templates.html) and take a look at the edge_template.rb [source code](https://github.com/emberjs/website/blob/master/source/edge_template.rb).
40
+
41
+ Notes:
42
+
43
+ To install the latest builds of ember and ember-data. It should be noted that the
44
+ examples in the [getting started guide](http://emberjs.com/guides/getting-started/)
45
+ have been designed to use the released version of ember:
46
+
47
+ ```shell
48
+ rails generate ember:install
49
+ ```
50
+
51
+ You'll probably need to clear out your cache after doing this with:
52
+
53
+ ```shell
54
+ rake tmp:clear
55
+ ```
56
+
57
+ Also, ember-rails includes some flags for the bootstrap generator:
58
+
59
+ ```
60
+ --ember-path or -d # custom ember path
61
+ --skip-git or -g # skip git keeps
62
+ --javascript-engine # engine for javascript (js, coffee or em)
63
+ --app-name or -n # custom ember app name
64
+ ```
65
+
66
+
67
+ ## For CoffeeScript support
68
+
69
+ Add coffee-rails to the Gemfile
70
+ ```ruby
71
+ gem 'coffee-rails'
72
+ ```
73
+
74
+ Run the bootstrap generator in step 4 with an extra flag instead:
75
+ ```sh
76
+ rails g ember:bootstrap -g --javascript-engine coffee
77
+ ```
78
+
79
+ ## For EmberScript support
80
+
81
+ [EmberScript](http://www.emberscript.com) is a dialect of CoffeeScript
82
+ with extra support for computed properties (which do not have to be
83
+ explicitly declared), the `class` / `extends` syntax, and extra syntax
84
+ to support observers and mixins.
85
+
86
+ To get EmberScript support, make sure you have the following in your
87
+ Gemfile:
88
+
89
+ ```ruby
90
+ gem 'ember_script-rails', :github => 'ghempton/ember-script-rails'
91
+ ```
92
+
93
+ You can now use the flag `--javascript-engine=em` to specify EmberScript
94
+ assets in your generators, but all of the generators will default to
95
+ using an EmberScript variant first.
96
+
97
+
98
+ ## Configuration Options
99
+
100
+ The following options are available for configuration in your application or environment-level
101
+ config files (`config/application.rb`, `config/environments/development.rb`, etc.):
102
+
103
+ | Configuration Option | Description |
104
+ |----------------------------------------------|---------------------------------------------------------------------------------------------------------------------|
105
+ | `config.ember.variant` | Determines which Ember variant to use. Valid options: `:development`, `:production`. Defaults to `:production` in production, and `:development` everywhere else. |
106
+ | `config.ember.app_name` | Specificies a default application name for all generators. |
107
+ | `config.ember.ember_path` | Specifies a default custom root path for all generators. |
108
+ | `config.handlebars.precompile` | Enables or disables precompilation. Default value: `true`. |
109
+ | `config.handlebars.templates_root` | Sets the root path (under `app/assets/javascripts`) for templates to be looked up in. Default value: `"templates"`. |
110
+ | `config.handlebars.templates_path_separator` | The path separator to use for templates. Default value: `'/'`. |
111
+ | `config.handlebars.output_type` | Configures the style of output (options are `:amd` and `:global`). Default value: `:global`. |
112
+ | `config.handlebars.amd_namespace` | Configures the module prefix for AMD formatted output. Default value: `nil`. |
113
+ | `config.handlebars.ember_template` | Default which Ember template type to compile. Valid options: `'Handlebars', `HTMLBars`. Defaults to 'Handlebars`' when `Ember::VERSION` is under 1.10.0, `HTMLBars` when `Ember::VERSION` is over 1.10.0. |
114
+
115
+ Note:
116
+
117
+ In a mountable engine, ember-rails will not recognize any configurations.
118
+ Instead, use command line options.
119
+
120
+ ## Enabling Features with Feature Flags
121
+ See [the guide](http://emberjs.com/guides/configuring-ember/feature-flags/#toc_flagging-details) and check [features.json](https://github.com/emberjs/ember.js/blob/master/features.json) for the version of Ember you're using.
122
+
123
+ If a feature is set to false, you will need to compile ember from source yourself to include it.
124
+
125
+ ### Important note for projects that render JSON responses
126
+
127
+ ember-rails includes [active_model_serializers](https://github.com/rails-api/active_model_serializers) which affects how ActiveModel and ActiveRecord objects get serialized to JSON, such as when using `render json:` or `respond_with`. By default active_model_serializers adds root elements to these responses (such as adding `{"posts": [...]}` for `render json: @posts`) which will affect the structure of your JSON responses.
128
+
129
+ To disable this effect on your JSON responses, put this in an initializer:
130
+ ```Ruby
131
+ # Stop active_model_serializers from adding root elements to JSON responses.
132
+ ActiveModel::Serializer.root = false
133
+ ActiveModel::ArraySerializer.root = false
134
+ ```
135
+
136
+ See the [active_model_serializers](https://github.com/rails-api/active_model_serializers) documentation for a more complete understanding of other effects this dependency might have on your app.
137
+
138
+ ## Architecture
139
+
140
+ Ember does not require an organized file structure. However, ember-rails allows you
141
+ to use `rails g ember:bootstrap` to create the following directory structure under `app/assets/javascripts`:
142
+
143
+ ```
144
+ ├── adapters
145
+ ├── components
146
+ ├── controllers
147
+ ├── helpers
148
+ ├── mixins
149
+ ├── models
150
+ ├── practicality.js.coffee
151
+ ├── router.js.coffee
152
+ ├── routes
153
+ ├── store.js.coffee
154
+ ├── templates
155
+ │ └── components
156
+ └── views
157
+ ```
158
+
159
+ Additionally, it will add the following lines to `app/assets/javascripts/application.js`.
160
+ By default, it uses the Rails Application's name and creates an `rails_app_name.js`
161
+ file to set up application namespace and initial requires:
162
+
163
+ ```javascript
164
+ //= require handlebars
165
+ //= require ember
166
+ //= require ember-data
167
+ //= require_self
168
+ //= require rails_app_name
169
+ RailsAppName = Ember.Application.create();
170
+ ```
171
+
172
+ *Example:*
173
+
174
+ rails g ember:bootstrap
175
+ insert app/assets/javascripts/application.js
176
+ create app/assets/javascripts/models
177
+ create app/assets/javascripts/models/.gitkeep
178
+ create app/assets/javascripts/controllers
179
+ create app/assets/javascripts/controllers/.gitkeep
180
+ create app/assets/javascripts/views
181
+ create app/assets/javascripts/views/.gitkeep
182
+ create app/assets/javascripts/helpers
183
+ create app/assets/javascripts/helpers/.gitkeep
184
+ create app/assets/javascripts/components
185
+ create app/assets/javascripts/components/.gitkeep
186
+ create app/assets/javascripts/templates
187
+ create app/assets/javascripts/templates/.gitkeep
188
+ create app/assets/javascripts/templates/components
189
+ create app/assets/javascripts/templates/components/.gitkeep
190
+ create app/assets/javascripts/mixins
191
+ create app/assets/javascripts/mixins/.gitkeep
192
+ create app/assets/javascripts/adapters
193
+ create app/assets/javascripts/adapters/.gitkeep
194
+ create app/assets/javascripts/app.js
195
+
196
+ If you want to avoid `.gitkeep` files, use the `skip git` option like
197
+ this: `rails g ember:bootstrap -g`.
198
+
199
+ Ask Rails to serve HandlebarsJS and pre-compile templates to Ember
200
+ by putting each template in a dedicated ".js.hjs", ".hbs" or ".handlebars" file
201
+ (e.g. `app/assets/javascripts/templates/admin_panel.handlebars`)
202
+ and including the assets in your layout:
203
+
204
+ <%= javascript_include_tag "templates/admin_panel" %>
205
+
206
+ If you want to avoid the `templates` prefix, set the `templates_root` option in your application configuration block:
207
+
208
+ config.handlebars.templates_root = 'ember_templates'
209
+
210
+ If you store templates in a file like `app/assets/javascripts/ember_templates/admin_panel.handlebars` after setting the above config,
211
+ it will be made available to Ember as the `admin_panel` template.
212
+
213
+ _(Note: you must clear the local sprockets cache after modifying `templates_root`, stored by default in `tmp/cache/assets`)_
214
+
215
+ Default behavior for ember-rails is to precompile handlebars templates.
216
+ If you don't want this behavior you can turn it off in your application configuration (or per environment in: `config/environments/development.rb`) block:
217
+
218
+ config.handlebars.precompile = false
219
+
220
+ _(Note: you must clear the local sprockets cache if you disable precompilation, stored by default in `tmp/cache/assets`)_
221
+
222
+ Bundle all templates together thanks to Sprockets,
223
+ e.g create `app/assets/javascripts/templates/all.js` with:
224
+
225
+ //= require_tree .
226
+
227
+ Now a single line in the layout loads everything:
228
+
229
+ <%= javascript_include_tag "templates/all" %>
230
+
231
+ ### Note about ember components
232
+
233
+ When necessary, ember-rails adheres to a conventional folder structure. To create an ember component you must define the handlebars file *inside* the *components* folder under the templates folder of your project to properly register your handlebars component file.
234
+
235
+ *Example*
236
+
237
+ Given the following folder structure:
238
+
239
+ ```
240
+ ├── adapters
241
+ ├── components
242
+ ├── controllers
243
+ ├── helpers
244
+ ├── mixins
245
+ ├── models
246
+ ├── practicality.js.coffee
247
+ ├── router.js.coffee
248
+ ├── routes
249
+ ├── store.js.coffee
250
+ ├── templates
251
+ │ └── components
252
+ │ └── my-component.handlebars
253
+ └── views
254
+ ```
255
+
256
+ and a `my-component.handlebars` file with the following contents:
257
+
258
+ <h1>My Component</h1>
259
+
260
+ It will produce the following handlebars output:
261
+
262
+ <script type="text/x-handlebars" id="components/my-component">
263
+ <h1>My Component</h1>
264
+ </script>
265
+
266
+ You can reference your component inside your other handlebars template files by the handlebars file name:
267
+
268
+ {{ my-component }}
269
+
270
+ ## Specifying Different Versions of Ember/Handlebars/Ember-Data
271
+
272
+ By default, ember-rails ships with the latest version of
273
+ [Ember](https://rubygems.org/gems/ember-source/versions),
274
+ [Handlebars](https://rubygems.org/gems/handlebars-source/versions),
275
+ and [Ember-Data](https://rubygems.org/gems/ember-data-source/versions).
276
+
277
+ To specify a different version that'll be used for both template
278
+ precompilation and serving to the browser, you can specify the desired
279
+ version of one of the above-linked gems in the Gemfile, e.g.:
280
+
281
+ gem 'ember-source', '1.7.0'
282
+
283
+ You can also specify versions of 'handlebars-source' and
284
+ 'ember-data-source', but note that an appropriate 'handlebars-source'
285
+ will be automatically chosen depending on the version of 'ember-source'
286
+ that's specified.
287
+
288
+ You can also override the specific ember.js, handlebars.js, and
289
+ ember-data.js files that'll be `require`d by the Asset pipeline by
290
+ placing these files in `vendor/assets/ember/development` and
291
+ `vendor/assets/ember/production`, depending on the `config.ember.variant`
292
+ you've specified in your app's configuration, e.g.:
293
+
294
+ config.ember.variant = :production
295
+ #config.ember.variant = :development
296
+
297
+ ## Updating Ember
298
+
299
+ If at any point you need to update Ember.js from any of the release channels, you can do that with
300
+
301
+ rails generate ember:install --channel=<channel>
302
+
303
+ This will fetch both Ember.js and Ember Data from [http://builds.emberjs.com/](http://builds.emberjs.com/) and copy to the right directory. You can choose between the following channels:
304
+ * canary - This references the 'master' branch and is not recommended for production use.
305
+ * beta - This references the 'beta' branch, and will ultimately become the next stable version. It is not recommended for production use.
306
+ * release - This references the 'stable' branch, and is recommended for production use.
307
+
308
+ When you don't specify a channel, the release channel is used.
309
+
310
+ It is also possible to download a specific tagged release. To do this, use the following syntax:
311
+
312
+
313
+ rails generate ember:install --tag=v1.2.0-beta.2 --ember
314
+
315
+ or for ember-data
316
+
317
+ rails generate ember:install --tag=v1.0.0-beta.2 --ember-data
318
+
319
+ ## CSRF Token
320
+
321
+ Rails [`protect_from_forgery`](http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection/ClassMethods.html#method-i-protect_from_forgery) requires CSRF token for every XHR except GET.
322
+ The CSRF token is normally found in `app/views/layouts/application.html.*` inserted with the rails helper: [`csrf_meta_tags`](http://api.rubyonrails.org/classes/ActionView/Helpers/CsrfHelper.html#method-i-csrf_meta_tags).
323
+
324
+ When you use [jquery-ujs](https://github.com/rails/jquery-ujs),
325
+ the CSRF token will be sent to the rails application on every XHR automatically.
326
+ If not so, the following JavaScript is required in your code.
327
+
328
+ ``` javascript
329
+ $.ajaxPrefilter(function(options, originalOptions, xhr) {
330
+ var token = $('meta[name="csrf-token"]').attr('content');
331
+ xhr.setRequestHeader('X-CSRF-Token', token);
332
+ });
333
+ ```
334
+
335
+ ## Note on Patches/Pull Requests
336
+
337
+ 1. Fork the project.
338
+ 2. Make your feature addition or bug fix.
339
+ 3. Add tests for it. This is important so I don't break it in a future version unintentionally.
340
+ 4. Commit, do not mess with rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
341
+ 5. Send me a pull request. Bonus points for topic branches.
@@ -0,0 +1 @@
1
+ require 'ember_rails'
@@ -0,0 +1,25 @@
1
+ require 'ember/handlebars/template'
2
+ require 'active_model_serializers'
3
+ require 'sprockets/railtie'
4
+
5
+ module Ember
6
+ module Rails
7
+ class Engine < ::Rails::Engine
8
+ Ember::Handlebars::Template.configure do |handlebars_config|
9
+ config.handlebars = handlebars_config
10
+
11
+ config.handlebars.precompile = true
12
+ config.handlebars.templates_root = 'templates'
13
+ config.handlebars.templates_path_separator = '/'
14
+ config.handlebars.output_type = :global
15
+ config.handlebars.ember_template = Ember::VERSION =~ /\A1.[0-9]\./ ? 'Handlebars' : 'HTMLBars'
16
+ end
17
+
18
+ config.before_initialize do |app|
19
+ Sprockets::Engines #force autoloading
20
+
21
+ Ember::Handlebars::Template.setup Sprockets
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,5 @@
1
+ module Ember
2
+ module Rails
3
+ VERSION = '0.18.6'
4
+ end
5
+ end
@@ -0,0 +1,96 @@
1
+ require 'rails'
2
+ require 'ember/source'
3
+ require 'ember/data/source'
4
+ require 'ember/rails/version'
5
+ require 'ember/rails/engine'
6
+
7
+ # Use handlebars if it possible. Because it is an optional feature.
8
+ begin
9
+ require 'handlebars/source'
10
+ rescue LoadError => e
11
+ raise e unless ['cannot load such file -- handlebars/source', 'no such file to load -- handlebars/source'].include?(e.message)
12
+ end
13
+
14
+ module Ember
15
+ module Rails
16
+ class Railtie < ::Rails::Railtie
17
+ config.ember = ActiveSupport::OrderedOptions.new
18
+
19
+ generators do |app|
20
+ app ||= ::Rails.application # Rails 3.0.x does not yield `app`
21
+
22
+ app.config.generators.assets = false
23
+
24
+ ::Rails::Generators.configure!(app.config.generators)
25
+ ::Rails::Generators.hidden_namespaces.uniq!
26
+ require "generators/ember/resource_override"
27
+ end
28
+
29
+ def configure_assets(app)
30
+ if config.respond_to?(:assets) && config.assets.respond_to?(:configure)
31
+ # Rails 4.x
32
+ config.assets.configure do |env|
33
+ yield env
34
+ end
35
+ else
36
+ # Rails 3.2
37
+ yield app.assets
38
+ end
39
+ end
40
+
41
+ initializer "ember_rails.setup_vendor_on_locale", :after => "ember_rails.setup", :group => :all do |app|
42
+ variant = app.config.ember.variant || (::Rails.env.production? ? :production : :development)
43
+
44
+ # Allow a local variant override
45
+ ember_path = app.root.join("vendor/assets/ember/#{variant}")
46
+
47
+ configure_assets app do |env|
48
+ env.prepend_path(ember_path.to_s) if ember_path.exist?
49
+ end
50
+ end
51
+
52
+ initializer "ember_rails.copy_vendor_to_local", :after => "ember_rails.setup", :group => :all do |app|
53
+ variant = app.config.ember.variant || (::Rails.env.production? ? :production : :development)
54
+
55
+ # Copy over the desired ember and ember-data bundled in
56
+ # ember-source and ember-data-source to a tmp folder.
57
+ tmp_path = app.root.join("tmp/ember-rails")
58
+ FileUtils.mkdir_p(tmp_path)
59
+
60
+ if variant == :production
61
+ ember_ext = ".prod.js"
62
+ else
63
+ ember_ext = ".debug.js"
64
+ ember_ext = ".js" unless File.exist?(::Ember::Source.bundled_path_for("ember#{ember_ext}")) # Ember.js 1.9.0 or earlier has no "ember.debug.js"
65
+ end
66
+ FileUtils.cp(::Ember::Source.bundled_path_for("ember#{ember_ext}"), tmp_path.join("ember.js"))
67
+ ember_data_ext = variant == :production ? ".prod.js" : ".js"
68
+ FileUtils.cp(::Ember::Data::Source.bundled_path_for("ember-data#{ember_data_ext}"), tmp_path.join("ember-data.js"))
69
+
70
+ configure_assets app do |env|
71
+ env.append_path tmp_path
72
+ end
73
+ end
74
+
75
+ initializer "ember_rails.setup_vendor", :after => "ember_rails.copy_vendor_to_local", :group => :all do |app|
76
+ configure_assets app do |env|
77
+ env.append_path ::Ember::Source.bundled_path_for(nil)
78
+ env.append_path ::Ember::Data::Source.bundled_path_for(nil)
79
+ env.append_path File.expand_path('../', ::Handlebars::Source.bundled_path) if defined?(::Handlebars::Source)
80
+ end
81
+ end
82
+
83
+ initializer "ember_rails.setup_ember_template_compiler", :after => "ember_rails.setup_vendor", :group => :all do |app|
84
+ configure_assets app do |env|
85
+ Ember::Handlebars::Template.setup_ember_template_compiler(env.resolve('ember-template-compiler.js'))
86
+ end
87
+ end
88
+
89
+ initializer "ember_rails.es5_default", :group => :all do |app|
90
+ if defined?(Closure::Compiler) && app.config.assets.js_compressor == :closure
91
+ Closure::Compiler::DEFAULT_OPTIONS[:language_in] = 'ECMASCRIPT5'
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end