emberjs-rails 0.1.0
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.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +43 -0
- data/app/assets/javascripts/ember-rails/application.module.es6 +20 -0
- data/app/assets/javascripts/ember-rails/module_prefix.module.es6.erb +1 -0
- data/app/assets/javascripts/ember-rails/shims.js +11 -0
- data/lib/ember/rails/engine.rb +32 -0
- data/lib/ember/rails/version.rb +7 -0
- data/lib/ember_rails.rb +137 -0
- data/lib/emberjs-rails.rb +3 -0
- data/lib/generators/ember/adapter_generator.rb +23 -0
- data/lib/generators/ember/bootstrap_generator.rb +95 -0
- data/lib/generators/ember/component_generator.rb +28 -0
- data/lib/generators/ember/controller_generator.rb +35 -0
- data/lib/generators/ember/generator_helpers.rb +76 -0
- data/lib/generators/ember/initializer_generator.rb +25 -0
- data/lib/generators/ember/install_generator.rb +186 -0
- data/lib/generators/ember/instance_initializer_generator.rb +26 -0
- data/lib/generators/ember/model_generator.rb +51 -0
- data/lib/generators/ember/resource_generator.rb +30 -0
- data/lib/generators/ember/resource_override.rb +37 -0
- data/lib/generators/ember/route_generator.rb +23 -0
- data/lib/generators/ember/service_generator.rb +25 -0
- data/lib/generators/ember/template_generator.rb +22 -0
- data/lib/generators/ember/view_generator.rb +25 -0
- data/lib/generators/templates/adapter.coffee +5 -0
- data/lib/generators/templates/adapter.em +3 -0
- data/lib/generators/templates/adapter.js +5 -0
- data/lib/generators/templates/app.coffee +11 -0
- data/lib/generators/templates/app.em +11 -0
- data/lib/generators/templates/app.js +11 -0
- data/lib/generators/templates/app.module.es6 +17 -0
- data/lib/generators/templates/application.coffee +12 -0
- data/lib/generators/templates/application.em +12 -0
- data/lib/generators/templates/application.es6 +15 -0
- data/lib/generators/templates/application.hbs +3 -0
- data/lib/generators/templates/application.js +22 -0
- data/lib/generators/templates/application_adapter.coffee +4 -0
- data/lib/generators/templates/application_adapter.em +3 -0
- data/lib/generators/templates/application_adapter.js +4 -0
- data/lib/generators/templates/application_adapter.module.es6 +4 -0
- data/lib/generators/templates/array_controller.coffee +5 -0
- data/lib/generators/templates/array_controller.em +3 -0
- data/lib/generators/templates/array_controller.js +5 -0
- data/lib/generators/templates/array_controller.module.es6 +7 -0
- data/lib/generators/templates/component.coffee +5 -0
- data/lib/generators/templates/component.em +5 -0
- data/lib/generators/templates/component.js +4 -0
- data/lib/generators/templates/component.module.es6 +7 -0
- data/lib/generators/templates/component.template.hbs +1 -0
- data/lib/generators/templates/controller.coffee +5 -0
- data/lib/generators/templates/controller.em +3 -0
- data/lib/generators/templates/controller.js +5 -0
- data/lib/generators/templates/controller.module.es6 +7 -0
- data/lib/generators/templates/environment.coffee +7 -0
- data/lib/generators/templates/environment.em +7 -0
- data/lib/generators/templates/environment.js +7 -0
- data/lib/generators/templates/environment.module.es6 +9 -0
- data/lib/generators/templates/initializer.coffee +6 -0
- data/lib/generators/templates/initializer.em +5 -0
- data/lib/generators/templates/initializer.js +7 -0
- data/lib/generators/templates/initializer.module.es6 +7 -0
- data/lib/generators/templates/instance-initializer.coffee +6 -0
- data/lib/generators/templates/instance-initializer.em +6 -0
- data/lib/generators/templates/instance-initializer.js +7 -0
- data/lib/generators/templates/instance-initializer.module.es6 +7 -0
- data/lib/generators/templates/model.coffee +12 -0
- data/lib/generators/templates/model.em +12 -0
- data/lib/generators/templates/model.js +13 -0
- data/lib/generators/templates/model.module.es6 +15 -0
- data/lib/generators/templates/object_controller.coffee +5 -0
- data/lib/generators/templates/object_controller.em +3 -0
- data/lib/generators/templates/object_controller.js +5 -0
- data/lib/generators/templates/object_controller.module.es6 +7 -0
- data/lib/generators/templates/route.coffee +5 -0
- data/lib/generators/templates/route.em +3 -0
- data/lib/generators/templates/route.js +5 -0
- data/lib/generators/templates/route.module.es6 +7 -0
- data/lib/generators/templates/router.coffee +4 -0
- data/lib/generators/templates/router.em +4 -0
- data/lib/generators/templates/router.js +5 -0
- data/lib/generators/templates/router.module.es6 +13 -0
- data/lib/generators/templates/service.coffee +3 -0
- data/lib/generators/templates/service.em +1 -0
- data/lib/generators/templates/service.js +3 -0
- data/lib/generators/templates/service.module.es6 +5 -0
- data/lib/generators/templates/template.hbs +5 -0
- data/lib/generators/templates/view.coffee +4 -0
- data/lib/generators/templates/view.em +4 -0
- data/lib/generators/templates/view.js +5 -0
- data/lib/generators/templates/view.module.es6 +7 -0
- metadata +413 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 7100d7049f3dd0a1922dd9c446d8a84a7f3a6b597c325bc5a89f2c23dfb4110e
|
4
|
+
data.tar.gz: f22d98b60438ef2c887614fa1243b762229b9016e0c5f0c5081ed47688397c40
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e39f817e21069d8f6f6c7e10349c80acf2fb4e2a7aa87a32fe1411045924b42d5bf6d52a52aef56042f4a376788f72d7eef787342401289e819744d990e14aef
|
7
|
+
data.tar.gz: e79113bcfb1e9bf1d6fd0ce1943fb7f823ca56776af6fc5c3427b6d16102bc953f691dea5d730aa27c9fc3c485b8b2f8d799f787ed568fd968af2c513dc3232c
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2021 lunaisnotaboy
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# Emberjs::Rails
|
2
|
+
|
3
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/emberjs/rails`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
|
+
|
5
|
+
TODO: Delete this and the text above, and describe your gem
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'emberjs-rails'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle install
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install emberjs-rails
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
TODO: Write usage instructions here
|
26
|
+
|
27
|
+
## Development
|
28
|
+
|
29
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
|
+
|
31
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
|
+
|
33
|
+
## Contributing
|
34
|
+
|
35
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/emberjs-rails. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/emberjs-rails/blob/master/CODE_OF_CONDUCT.md).
|
36
|
+
|
37
|
+
## License
|
38
|
+
|
39
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
40
|
+
|
41
|
+
## Code of Conduct
|
42
|
+
|
43
|
+
Everyone interacting in the Emberjs::Rails project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/emberjs-rails/blob/master/CODE_OF_CONDUCT.md).
|
@@ -0,0 +1,20 @@
|
|
1
|
+
//= require ember/loader
|
2
|
+
//= require emberjs-rails/shims
|
3
|
+
//= require ember/resolver
|
4
|
+
//= require ember/load-initializers
|
5
|
+
//
|
6
|
+
//= require emberjs-rails/module_prefix
|
7
|
+
|
8
|
+
import Ember from 'ember';
|
9
|
+
import Resolver from 'ember/resolver';
|
10
|
+
import loadInitializers from 'ember/load-initializers';
|
11
|
+
import modulePrefix from 'emberjs-rails/module_prefix';
|
12
|
+
|
13
|
+
let App = Ember.Application.extend({
|
14
|
+
modulePrefix: modulePrefix,
|
15
|
+
Resolver: Resolver
|
16
|
+
});
|
17
|
+
|
18
|
+
loadInitializers(App, modulePrefix);
|
19
|
+
|
20
|
+
export default App;
|
@@ -0,0 +1 @@
|
|
1
|
+
export default <%= Rails.application.config.ember.module_prefix.to_json %>;
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ember/handlebars/template'
|
4
|
+
require 'active_model_serializers'
|
5
|
+
require 'ember/es6_template'
|
6
|
+
require 'ember/cli/assets'
|
7
|
+
|
8
|
+
require 'sprockets/railtie'
|
9
|
+
|
10
|
+
module Ember
|
11
|
+
module Rails
|
12
|
+
class Engine < ::Rails::Engine
|
13
|
+
Ember::Handlebars::Template.configure do |handlebars_config|
|
14
|
+
config.handlebars = handlebars_config
|
15
|
+
|
16
|
+
config.handlebars.precompile = true
|
17
|
+
config.handlebars.templates_root = 'templates'
|
18
|
+
config.handlebars.templates_path_separator = '/'
|
19
|
+
config.handlebars.output_type = :global
|
20
|
+
config.handlebars.ember_template = Ember::VERSION =~ /\A1.[0-9]\./ ? 'Handlebars' : 'HTMLBars'
|
21
|
+
end
|
22
|
+
|
23
|
+
config.before_initialize do |_app|
|
24
|
+
Ember::ES6Template.configure do |ember_config|
|
25
|
+
ember_config.module_prefix = config.ember.module_prefix
|
26
|
+
ember_config.prefix_files = config.ember.prefix_files
|
27
|
+
ember_config.prefix_dirs = config.ember.prefix_dirs
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/ember_rails.rb
ADDED
@@ -0,0 +1,137 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails'
|
4
|
+
require 'ember/source'
|
5
|
+
require 'ember/data/source'
|
6
|
+
require 'ember/rails/version'
|
7
|
+
require 'ember/rails/engine'
|
8
|
+
require 'ember/data/active_model/adapter/source'
|
9
|
+
|
10
|
+
# Use handlebars if it possible. Because it is an optional feature.
|
11
|
+
begin
|
12
|
+
require 'handlebars/source'
|
13
|
+
rescue LoadError => e
|
14
|
+
raise e unless ['cannot load such file -- handlebars/source',
|
15
|
+
'no such file to load -- handlebars/source'].include?(e.message)
|
16
|
+
end
|
17
|
+
|
18
|
+
module Ember
|
19
|
+
module Rails
|
20
|
+
class Railtie < ::Rails::Railtie
|
21
|
+
config.ember = ActiveSupport::OrderedOptions.new
|
22
|
+
config.ember.module_prefix = 'ember-app'
|
23
|
+
config.ember.prefix_files = %w[store router]
|
24
|
+
config.ember.prefix_dirs = %w[
|
25
|
+
models
|
26
|
+
controllers
|
27
|
+
views
|
28
|
+
routes
|
29
|
+
components
|
30
|
+
helpers
|
31
|
+
mixins
|
32
|
+
services
|
33
|
+
initializers
|
34
|
+
instance-initializers
|
35
|
+
serializers
|
36
|
+
adapters
|
37
|
+
transforms
|
38
|
+
]
|
39
|
+
|
40
|
+
generators do |app|
|
41
|
+
app.config.generators.assets = false
|
42
|
+
|
43
|
+
::Rails::Generators.configure!(app.config.generators)
|
44
|
+
::Rails::Generators.hidden_namespaces.uniq!
|
45
|
+
require 'generators/ember/resource_override'
|
46
|
+
end
|
47
|
+
|
48
|
+
def configure_assets(app, &block)
|
49
|
+
if config.respond_to?(:assets) && config.assets.respond_to?(:configure)
|
50
|
+
# Rails 4.x
|
51
|
+
config.assets.configure(&block)
|
52
|
+
else
|
53
|
+
# Rails 3.2
|
54
|
+
yield app.assets
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
initializer 'ember_rails.setup_vendor_on_locale', after: 'ember_rails.setup', group: :all do |app|
|
59
|
+
variant = app.config.ember.variant || (::Rails.env.production? ? :production : :development)
|
60
|
+
|
61
|
+
# Allow a local variant override
|
62
|
+
ember_path = app.root.join("vendor/assets/ember/#{variant}")
|
63
|
+
|
64
|
+
configure_assets app do |env|
|
65
|
+
env.prepend_path(ember_path.to_s) if ember_path.exist?
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
initializer 'ember_rails.copy_vendor_to_local', after: 'ember_rails.setup', group: :all do |app|
|
70
|
+
variant = app.config.ember.variant || (::Rails.env.production? ? :production : :development)
|
71
|
+
|
72
|
+
# Copy over the desired ember and ember-data bundled in
|
73
|
+
# ember-source and ember-data-source to a tmp folder.
|
74
|
+
tmp_path = app.root.join('tmp/ember-rails')
|
75
|
+
FileUtils.mkdir_p(tmp_path)
|
76
|
+
|
77
|
+
if variant == :production
|
78
|
+
ember_ext = '.prod.js'
|
79
|
+
else
|
80
|
+
ember_ext = '.debug.js'
|
81
|
+
ember_ext = '.js' unless File.exist?(::Ember::Source.bundled_path_for("ember#{ember_ext}"))
|
82
|
+
end
|
83
|
+
FileUtils.cp(::Ember::Source.bundled_path_for("ember#{ember_ext}"), tmp_path.join('ember.js'))
|
84
|
+
ember_data_ext = variant == :production ? '.prod.js' : '.js'
|
85
|
+
FileUtils.cp(::Ember::Data::Source.bundled_path_for("ember-data#{ember_data_ext}"),
|
86
|
+
tmp_path.join('ember-data.js'))
|
87
|
+
FileUtils.cp(::Ember::Data::ActiveModel::Adapter::Source.bundled_path_for('active-model-adapter.js'),
|
88
|
+
tmp_path.join('active-model-adapter.js'))
|
89
|
+
|
90
|
+
configure_assets app do |env|
|
91
|
+
env.append_path tmp_path
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
initializer 'ember_rails.setup_vendor', after: 'ember_rails.copy_vendor_to_local', group: :all do |app|
|
96
|
+
configure_assets app do |env|
|
97
|
+
env.append_path ::Ember::Source.bundled_path_for(nil)
|
98
|
+
env.append_path ::Ember::Data::Source.bundled_path_for(nil)
|
99
|
+
env.append_path ::Ember::Data::ActiveModel::Adapter::Source.bundled_path_for(nil)
|
100
|
+
env.append_path File.expand_path('../', ::Handlebars::Source.bundled_path) if defined?(::Handlebars::Source)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
initializer 'ember_rails.setup_ember_template_compiler', after: 'ember_rails.setup_vendor',
|
105
|
+
group: :all do |app|
|
106
|
+
configure_assets app do |env|
|
107
|
+
Ember::Handlebars::Template.setup_ember_template_compiler(env.find_asset('ember-template-compiler.js').filename)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
initializer 'ember_rails.setup_ember_cli_assets', after: 'ember_rails.setup_vendor', group: :all do |app|
|
112
|
+
configure_assets app do |env|
|
113
|
+
env.append_path Ember::CLI::Assets.root
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
initializer 'ember_rails.setup_ember_handlebars_template', after: 'ember_rails.setup_vendor',
|
118
|
+
group: :all do |app|
|
119
|
+
configure_assets app do |env|
|
120
|
+
Ember::Handlebars::Template.setup env
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
initializer 'ember_rails.setup_ember_es6_template', after: 'ember_rails.setup_vendor', group: :all do |app|
|
125
|
+
configure_assets app do |env|
|
126
|
+
Ember::ES6Template.setup env
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
initializer 'ember_rails.es5_default', group: :all do |app|
|
131
|
+
if defined?(Closure::Compiler) && app.config.assets.js_compressor == :closure
|
132
|
+
Closure::Compiler::DEFAULT_OPTIONS[:language_in] = 'ECMASCRIPT5'
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'generators/ember/generator_helpers'
|
4
|
+
|
5
|
+
module Ember
|
6
|
+
module Generators
|
7
|
+
class AdapterGenerator < ::Rails::Generators::NamedBase
|
8
|
+
include Ember::Generators::GeneratorHelpers
|
9
|
+
|
10
|
+
source_root File.expand_path('../templates', __dir__)
|
11
|
+
|
12
|
+
desc 'Creates a new Ember.js adapter'
|
13
|
+
class_option :ember_path, type: :string, aliases: '-d', desc: 'Custom ember app path'
|
14
|
+
class_option :javascript_engine, desc: 'Engine for JavaScripts'
|
15
|
+
class_option :app_name, type: :string, aliases: '-n', desc: 'Custom ember app name'
|
16
|
+
|
17
|
+
def create_adapter_files
|
18
|
+
file_path = File.join(ember_path, 'adapters', class_path, "#{file_name}.#{engine_extension}")
|
19
|
+
template "adapter.#{engine_extension}", file_path
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'generators/ember/generator_helpers'
|
4
|
+
|
5
|
+
module Ember
|
6
|
+
module Generators
|
7
|
+
class BootstrapGenerator < ::Rails::Generators::Base
|
8
|
+
include Ember::Generators::GeneratorHelpers
|
9
|
+
|
10
|
+
source_root File.expand_path('../templates', __dir__)
|
11
|
+
|
12
|
+
desc 'Creates a default Ember.js folder layout in app/assets/javascripts'
|
13
|
+
|
14
|
+
class_option :ember_path, type: :string, aliases: '-d', desc: 'Custom ember app path'
|
15
|
+
class_option :skip_git, type: :boolean, aliases: '-g', default: false, desc: 'Skip Git keeps'
|
16
|
+
class_option :javascript_engine,
|
17
|
+
desc: 'Engine for JavaScripts (js for JavaScript, coffee for CoffeeScript, etc)'
|
18
|
+
class_option :app_name, type: :string, aliases: '-n', desc: 'Custom ember app name'
|
19
|
+
|
20
|
+
def inject_ember
|
21
|
+
if javascript_engine == 'es6'
|
22
|
+
inject_into_application_file('es6') # Don't use `.module.es6`.
|
23
|
+
else
|
24
|
+
inject_into_application_file(engine_extension)
|
25
|
+
end
|
26
|
+
rescue Exception
|
27
|
+
inject_into_application_file('js')
|
28
|
+
end
|
29
|
+
|
30
|
+
def create_dir_layout
|
31
|
+
ember_prefix_dirs.each do |dir|
|
32
|
+
empty_directory "#{ember_path}/#{dir}"
|
33
|
+
create_file "#{ember_path}/#{dir}/.gitkeep" unless options[:skip_git]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_app_file
|
38
|
+
template "app.#{engine_extension}", "#{ember_path}/#{application_name.underscore.dasherize}.#{engine_extension}"
|
39
|
+
end
|
40
|
+
|
41
|
+
def create_router_file
|
42
|
+
template "router.#{engine_extension}", "#{ember_path}/router.#{engine_extension}"
|
43
|
+
end
|
44
|
+
|
45
|
+
def create_adapter_file
|
46
|
+
template "application_adapter.#{engine_extension}", "#{ember_path}/adapters/application.#{engine_extension}"
|
47
|
+
end
|
48
|
+
|
49
|
+
def create_env_file
|
50
|
+
template "environment.#{engine_extension}", "#{ember_path}/environment.#{engine_extension}"
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def inject_into_application_file(safe_extension)
|
56
|
+
application_file = "application.#{safe_extension}"
|
57
|
+
full_path = Pathname.new(destination_root).join(ember_path, application_file)
|
58
|
+
|
59
|
+
if full_path.exist?
|
60
|
+
injection_options = get_options_from_contents(full_path.read)
|
61
|
+
|
62
|
+
inject_into_file(full_path.to_s, injection_options) do
|
63
|
+
context = instance_eval('binding', __FILE__, __LINE__)
|
64
|
+
source = File.expand_path(find_in_source_paths(application_file))
|
65
|
+
ERB.new(::File.binread(source), trim_mode: '-', eoutvar: '@output_buffer').result(context)
|
66
|
+
end
|
67
|
+
else
|
68
|
+
template application_file, full_path
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def get_options_from_contents(contents)
|
73
|
+
regex = /^.*require_tree.*$/
|
74
|
+
return { before: regex } if contents =~ regex
|
75
|
+
|
76
|
+
regex = /^\s*$/
|
77
|
+
return { before: regex } if contents =~ regex
|
78
|
+
|
79
|
+
regex = /\z/
|
80
|
+
{ after: regex }
|
81
|
+
end
|
82
|
+
|
83
|
+
def ember_prefix_dirs
|
84
|
+
dirs =
|
85
|
+
if configuration
|
86
|
+
Array(configuration.prefix_dirs)
|
87
|
+
else
|
88
|
+
%w[models controllers views routes components helpers mixins serializers adapters transforms]
|
89
|
+
end
|
90
|
+
|
91
|
+
dirs + %w[templates templates/components]
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'generators/ember/generator_helpers'
|
4
|
+
|
5
|
+
module Ember
|
6
|
+
module Generators
|
7
|
+
class ComponentGenerator < ::Rails::Generators::NamedBase
|
8
|
+
include Ember::Generators::GeneratorHelpers
|
9
|
+
|
10
|
+
source_root File.expand_path('../templates', __dir__)
|
11
|
+
|
12
|
+
desc "Creates a new Ember.js component and component template\nCustom Ember Components require at least two descriptive names separated by a dash. Use CamelCase or dash-case to name your component.\n\nExample,\n\trails generate ember:component PostChart [options]\n\trails generate ember:component post-chart [options]"
|
13
|
+
|
14
|
+
class_option :javascript_engine, desc: 'Engine for JavaScripts'
|
15
|
+
class_option :ember_path, type: :string, aliases: '-d', desc: 'Custom ember app path'
|
16
|
+
class_option :app_name, type: :string, aliases: '-n', desc: 'Custom ember app name'
|
17
|
+
|
18
|
+
def create_component_files
|
19
|
+
dashed_file_name = file_name.dasherize
|
20
|
+
comp_path = File.join(ember_path, 'components', class_path, "#{dashed_file_name}.#{engine_extension}")
|
21
|
+
template "component.#{engine_extension}", comp_path
|
22
|
+
|
23
|
+
templ_path = File.join(ember_path, 'templates/components', class_path, "#{dashed_file_name}.hbs")
|
24
|
+
template 'component.template.hbs', templ_path
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'generators/ember/generator_helpers'
|
4
|
+
|
5
|
+
module Ember
|
6
|
+
module Generators
|
7
|
+
class ControllerGenerator < ::Rails::Generators::NamedBase
|
8
|
+
include Ember::Generators::GeneratorHelpers
|
9
|
+
|
10
|
+
source_root File.expand_path('../templates', __dir__)
|
11
|
+
|
12
|
+
desc 'Creates a new Ember.js controller'
|
13
|
+
|
14
|
+
class_option :javascript_engine, desc: 'Engine for JavaScripts'
|
15
|
+
class_option :array, type: :boolean, default: false,
|
16
|
+
desc: 'Create an Ember.ArrayController to represent multiple objects'
|
17
|
+
class_option :ember_path, type: :string, aliases: '-d', desc: 'Custom ember app path'
|
18
|
+
class_option :object, type: :boolean, default: false,
|
19
|
+
desc: 'Create an Ember.Controller to represent a single object'
|
20
|
+
class_option :app_name, type: :string, aliases: '-n', desc: 'Custom ember app name'
|
21
|
+
|
22
|
+
def create_controller_files
|
23
|
+
file_path = File.join(ember_path, 'controllers', class_path, "#{file_name.dasherize}.#{engine_extension}")
|
24
|
+
|
25
|
+
if options.array?
|
26
|
+
template "array_controller.#{engine_extension}", file_path
|
27
|
+
elsif options.object?
|
28
|
+
template "object_controller.#{engine_extension}", file_path
|
29
|
+
else
|
30
|
+
template "controller.#{engine_extension}", file_path
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ember
|
4
|
+
module Generators
|
5
|
+
module GeneratorHelpers
|
6
|
+
def ember_path
|
7
|
+
if options[:ember_path]
|
8
|
+
options[:ember_path]
|
9
|
+
elsif rails_engine?
|
10
|
+
"app/assets/javascripts/#{engine_name}"
|
11
|
+
elsif configuration.ember_path
|
12
|
+
configuration.ember_path
|
13
|
+
else
|
14
|
+
'app/assets/javascripts'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def rails_engine?
|
19
|
+
defined?(ENGINE_PATH)
|
20
|
+
end
|
21
|
+
|
22
|
+
def engine_name
|
23
|
+
ENGINE_PATH.split('/')[-2]
|
24
|
+
end
|
25
|
+
|
26
|
+
def application_name
|
27
|
+
if options[:app_name]
|
28
|
+
options[:app_name]
|
29
|
+
elsif rails_engine?
|
30
|
+
engine_name
|
31
|
+
elsif configuration.app_name
|
32
|
+
configuration.app_name
|
33
|
+
elsif defined?(::Rails) && ::Rails.application
|
34
|
+
::Rails.application.class.name.split('::').first
|
35
|
+
else
|
36
|
+
'App'
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def class_name
|
41
|
+
(class_path + [file_name]).map!(&:camelize).join
|
42
|
+
end
|
43
|
+
|
44
|
+
def handlebars_template_path
|
45
|
+
File.join(class_path, file_name).gsub(%r{^/}, '')
|
46
|
+
end
|
47
|
+
|
48
|
+
def engine_extension
|
49
|
+
@engine_extension ||= begin
|
50
|
+
extension_table = {
|
51
|
+
'js' => 'js',
|
52
|
+
'coffee' => 'coffee',
|
53
|
+
'em' => 'em',
|
54
|
+
'es6' => 'module.es6'
|
55
|
+
}
|
56
|
+
|
57
|
+
extension = extension_table[javascript_engine]
|
58
|
+
|
59
|
+
if extension.nil?
|
60
|
+
raise "Unsupported javascript engine: `#{javascript_engine}` (Supported engines are: [#{extension_table.keys.join(', ')}])"
|
61
|
+
end
|
62
|
+
|
63
|
+
extension
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def javascript_engine
|
68
|
+
options[:javascript_engine].to_s
|
69
|
+
end
|
70
|
+
|
71
|
+
def configuration
|
72
|
+
::Rails.configuration.ember if defined?(::Rails) && ::Rails.configuration
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'generators/ember/generator_helpers'
|
4
|
+
|
5
|
+
module Ember
|
6
|
+
module Generators
|
7
|
+
class InitializerGenerator < ::Rails::Generators::NamedBase
|
8
|
+
include Ember::Generators::GeneratorHelpers
|
9
|
+
|
10
|
+
source_root File.expand_path('../templates', __dir__)
|
11
|
+
|
12
|
+
desc 'Creates a new Ember.js initializer'
|
13
|
+
|
14
|
+
class_option :javascript_engine, desc: 'Engine for JavaScripts'
|
15
|
+
class_option :ember_path, type: :string, aliases: '-d', desc: 'Custom ember app path'
|
16
|
+
class_option :app_name, type: :string, aliases: '-n', desc: 'Custom ember app name'
|
17
|
+
|
18
|
+
def create_initializer_files
|
19
|
+
file_path = File.join(ember_path, 'initializers', class_path, "#{file_name.dasherize}.#{engine_extension}")
|
20
|
+
|
21
|
+
template "initializer.#{engine_extension}", file_path
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|