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.
Files changed (92) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/README.md +43 -0
  4. data/app/assets/javascripts/ember-rails/application.module.es6 +20 -0
  5. data/app/assets/javascripts/ember-rails/module_prefix.module.es6.erb +1 -0
  6. data/app/assets/javascripts/ember-rails/shims.js +11 -0
  7. data/lib/ember/rails/engine.rb +32 -0
  8. data/lib/ember/rails/version.rb +7 -0
  9. data/lib/ember_rails.rb +137 -0
  10. data/lib/emberjs-rails.rb +3 -0
  11. data/lib/generators/ember/adapter_generator.rb +23 -0
  12. data/lib/generators/ember/bootstrap_generator.rb +95 -0
  13. data/lib/generators/ember/component_generator.rb +28 -0
  14. data/lib/generators/ember/controller_generator.rb +35 -0
  15. data/lib/generators/ember/generator_helpers.rb +76 -0
  16. data/lib/generators/ember/initializer_generator.rb +25 -0
  17. data/lib/generators/ember/install_generator.rb +186 -0
  18. data/lib/generators/ember/instance_initializer_generator.rb +26 -0
  19. data/lib/generators/ember/model_generator.rb +51 -0
  20. data/lib/generators/ember/resource_generator.rb +30 -0
  21. data/lib/generators/ember/resource_override.rb +37 -0
  22. data/lib/generators/ember/route_generator.rb +23 -0
  23. data/lib/generators/ember/service_generator.rb +25 -0
  24. data/lib/generators/ember/template_generator.rb +22 -0
  25. data/lib/generators/ember/view_generator.rb +25 -0
  26. data/lib/generators/templates/adapter.coffee +5 -0
  27. data/lib/generators/templates/adapter.em +3 -0
  28. data/lib/generators/templates/adapter.js +5 -0
  29. data/lib/generators/templates/app.coffee +11 -0
  30. data/lib/generators/templates/app.em +11 -0
  31. data/lib/generators/templates/app.js +11 -0
  32. data/lib/generators/templates/app.module.es6 +17 -0
  33. data/lib/generators/templates/application.coffee +12 -0
  34. data/lib/generators/templates/application.em +12 -0
  35. data/lib/generators/templates/application.es6 +15 -0
  36. data/lib/generators/templates/application.hbs +3 -0
  37. data/lib/generators/templates/application.js +22 -0
  38. data/lib/generators/templates/application_adapter.coffee +4 -0
  39. data/lib/generators/templates/application_adapter.em +3 -0
  40. data/lib/generators/templates/application_adapter.js +4 -0
  41. data/lib/generators/templates/application_adapter.module.es6 +4 -0
  42. data/lib/generators/templates/array_controller.coffee +5 -0
  43. data/lib/generators/templates/array_controller.em +3 -0
  44. data/lib/generators/templates/array_controller.js +5 -0
  45. data/lib/generators/templates/array_controller.module.es6 +7 -0
  46. data/lib/generators/templates/component.coffee +5 -0
  47. data/lib/generators/templates/component.em +5 -0
  48. data/lib/generators/templates/component.js +4 -0
  49. data/lib/generators/templates/component.module.es6 +7 -0
  50. data/lib/generators/templates/component.template.hbs +1 -0
  51. data/lib/generators/templates/controller.coffee +5 -0
  52. data/lib/generators/templates/controller.em +3 -0
  53. data/lib/generators/templates/controller.js +5 -0
  54. data/lib/generators/templates/controller.module.es6 +7 -0
  55. data/lib/generators/templates/environment.coffee +7 -0
  56. data/lib/generators/templates/environment.em +7 -0
  57. data/lib/generators/templates/environment.js +7 -0
  58. data/lib/generators/templates/environment.module.es6 +9 -0
  59. data/lib/generators/templates/initializer.coffee +6 -0
  60. data/lib/generators/templates/initializer.em +5 -0
  61. data/lib/generators/templates/initializer.js +7 -0
  62. data/lib/generators/templates/initializer.module.es6 +7 -0
  63. data/lib/generators/templates/instance-initializer.coffee +6 -0
  64. data/lib/generators/templates/instance-initializer.em +6 -0
  65. data/lib/generators/templates/instance-initializer.js +7 -0
  66. data/lib/generators/templates/instance-initializer.module.es6 +7 -0
  67. data/lib/generators/templates/model.coffee +12 -0
  68. data/lib/generators/templates/model.em +12 -0
  69. data/lib/generators/templates/model.js +13 -0
  70. data/lib/generators/templates/model.module.es6 +15 -0
  71. data/lib/generators/templates/object_controller.coffee +5 -0
  72. data/lib/generators/templates/object_controller.em +3 -0
  73. data/lib/generators/templates/object_controller.js +5 -0
  74. data/lib/generators/templates/object_controller.module.es6 +7 -0
  75. data/lib/generators/templates/route.coffee +5 -0
  76. data/lib/generators/templates/route.em +3 -0
  77. data/lib/generators/templates/route.js +5 -0
  78. data/lib/generators/templates/route.module.es6 +7 -0
  79. data/lib/generators/templates/router.coffee +4 -0
  80. data/lib/generators/templates/router.em +4 -0
  81. data/lib/generators/templates/router.js +5 -0
  82. data/lib/generators/templates/router.module.es6 +13 -0
  83. data/lib/generators/templates/service.coffee +3 -0
  84. data/lib/generators/templates/service.em +1 -0
  85. data/lib/generators/templates/service.js +3 -0
  86. data/lib/generators/templates/service.module.es6 +5 -0
  87. data/lib/generators/templates/template.hbs +5 -0
  88. data/lib/generators/templates/view.coffee +4 -0
  89. data/lib/generators/templates/view.em +4 -0
  90. data/lib/generators/templates/view.js +5 -0
  91. data/lib/generators/templates/view.module.es6 +7 -0
  92. 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,11 @@
1
+ define('ember', [], function() {
2
+ return {
3
+ 'default': Ember
4
+ };
5
+ });
6
+
7
+ define('ember-data', [], function() {
8
+ return {
9
+ 'default': DS
10
+ };
11
+ });
@@ -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
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Ember
4
+ module Rails
5
+ VERSION = '0.1.0'
6
+ end
7
+ end
@@ -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,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'ember_rails'
@@ -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