Skip to content

Support initializer & instance-initializer for ES6 module compilation #522

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Mar 23, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 15 additions & 1 deletion lib/ember_rails.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,21 @@ class Railtie < ::Rails::Railtie
config.ember = ActiveSupport::OrderedOptions.new
config.ember.module_prefix = 'ember-app'
config.ember.prefix_files = %w(store router)
config.ember.prefix_dirs = %w(models controllers views routes components helpers mixins services serializers adapters transforms)
config.ember.prefix_dirs = %w(
models
controllers
views
routes
components
helpers
mixins
services
initializers
instance-initializers
serializers
adapters
transforms
)

generators do |app|
app.config.generators.assets = false
Expand Down
23 changes: 23 additions & 0 deletions lib/generators/ember/initializer_generator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
require 'generators/ember/generator_helpers'

module Ember
module Generators
class InitializerGenerator < ::Rails::Generators::NamedBase
include Ember::Generators::GeneratorHelpers

source_root File.expand_path("../../templates", __FILE__)

desc "Creates a new Ember.js initializer"

class_option :javascript_engine, :desc => "Engine for JavaScripts"
class_option :ember_path, :type => :string, :aliases => "-d", :default => false, :desc => "Custom ember app path"
class_option :app_name, :type => :string, :aliases => "-n", :default => false, :desc => "Custom ember app name"

def create_initializer_files
file_path = File.join(ember_path, 'initializers', class_path, "#{file_name.dasherize}.#{engine_extension}")

template "initializer.#{engine_extension}", file_path
end
end
end
end
23 changes: 23 additions & 0 deletions lib/generators/ember/instance_initializer_generator.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
require 'generators/ember/generator_helpers'

module Ember
module Generators
class InstanceInitializerGenerator < ::Rails::Generators::NamedBase
include Ember::Generators::GeneratorHelpers

source_root File.expand_path("../../templates", __FILE__)

desc "Creates a new Ember.js instance initializer"

class_option :javascript_engine, :desc => "Engine for JavaScripts"
class_option :ember_path, :type => :string, :aliases => "-d", :default => false, :desc => "Custom ember app path"
class_option :app_name, :type => :string, :aliases => "-n", :default => false, :desc => "Custom ember app name"

def create_instance_initializer_files
file_path = File.join(ember_path, 'instance-initializers', class_path, "#{file_name.dasherize}.#{engine_extension}")

template "instance-initializer.#{engine_extension}", file_path
end
end
end
end
6 changes: 6 additions & 0 deletions lib/generators/templates/initializer.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<%= application_name.camelize %>.initializer({
name: '<%= class_name.underscore.dasherize %>'

initialize: ->
# Write your initializer here
})
5 changes: 5 additions & 0 deletions lib/generators/templates/initializer.em
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
<%= application_name.camelize %>.initializer
name: '<%= class_name.underscore.dasherize %>'

initialize: ->
# Write your initializer here
7 changes: 7 additions & 0 deletions lib/generators/templates/initializer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<%= application_name.camelize %>.initializer({
name: '<%= class_name.underscore.dasherize %>',

initialize: function() {
// Write your initializer here
}
});
7 changes: 7 additions & 0 deletions lib/generators/templates/initializer.module.es6
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export default {
name: '<%= class_name.underscore.dasherize %>',

initialize() {
// Write your initializer here
}
};
6 changes: 6 additions & 0 deletions lib/generators/templates/instance-initializer.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<%= application_name.camelize %>.instanceInitializer({
name: '<%= class_name.underscore.dasherize %>'

initialize: (application) ->
# Write your initializer here
})
6 changes: 6 additions & 0 deletions lib/generators/templates/instance-initializer.em
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<%= application_name.camelize %>.instanceInitializer({
name: '<%= class_name.underscore.dasherize %>'

initialize: (application) ->
# Write your initializer here
})
7 changes: 7 additions & 0 deletions lib/generators/templates/instance-initializer.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
<%= application_name.camelize %>.instanceInitializer({
name: '<%= class_name.underscore.dasherize %>',

initialize: function(application) {
// Write your initializer here
}
});
7 changes: 7 additions & 0 deletions lib/generators/templates/instance-initializer.module.es6
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
export default {
name: '<%= class_name.underscore.dasherize %>',

initialize(application) {
// Write your initializer here
}
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export default {
name: 'ping',
initialize() {
console.log('ping');
}
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export default {
name: 'ping',
initialize() {
console.log('ping');
}
};
2 changes: 1 addition & 1 deletion test/es6_module_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

class Es6ModuleTest < IntegrationTest

%w(models controllers views routes components helpers mixins services serializers adapters transforms).each do |type|
%w(models controllers views routes components helpers mixins services initializers instance-initializers serializers adapters transforms).each do |type|
test "#{type} type module should be registered with module_prefix" do
get "/assets/#{type}/user.js"
assert_response :success
Expand Down
2 changes: 1 addition & 1 deletion test/generators/bootstrap_generator_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ def assert_invoked_generators_files(options = {})
def assert_new_dirs(options = {})
path = options[:in_path] || ember_path

%W{models controllers views helpers components templates templates/components routes mixins adapters}.each do |dir|
%W{models controllers views helpers components templates templates/components routes mixins services initializers serializers adapters transforms}.each do |dir|
assert_directory "#{path}/#{dir}"
assert_file "#{path}/#{dir}/.gitkeep" unless options[:skip_git]
end
Expand Down
76 changes: 76 additions & 0 deletions test/generators/initializer_generator_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
require 'test_helper'
require 'generators/ember/initializer_generator'

class InitializerGeneratorTest < Rails::Generators::TestCase
tests Ember::Generators::InitializerGenerator

destination File.join(Rails.root, "tmp", "generator_test_output")
setup :prepare_destination

def copy_directory(dir)
source = Rails.root.join(dir)
dest = Rails.root.join("tmp", "generator_test_output", File.dirname(dir))

FileUtils.mkdir_p dest
FileUtils.cp_r source, dest
end

def prepare_destination
super

copy_directory "app/assets/javascripts"
copy_directory "config"
end

%w(js coffee em es6).each do |engine|

test "create initializer with #{engine} engine" do
run_generator ["inject-session","--javascript-engine=#{engine}"]
assert_file "app/assets/javascripts/initializers/inject-session.#{engine_to_extension(engine)}"
end

test "create namespaced initializer with #{engine} engine" do
run_generator ["user/inject-session","--javascript-engine=#{engine}"]
assert_file "#{ember_path}/initializers/user/inject-session.#{engine_to_extension(engine)}", /\.initializer|export default {/
end
end

test "Assert files are properly created" do
run_generator %w(inject-session)
assert_file "#{ember_path}/initializers/inject-session.js"
end

test "Assert files are properly created with custom path" do
custom_path = ember_path("custom")
run_generator [ "inject-session", "-d", custom_path ]
assert_file "#{custom_path}/initializers/inject-session.js"
end

test "Assert files are properly created with custom app name" do
run_generator [ "inject-session", "-n", "MyApp" ]
assert_file "#{ember_path}/initializers/inject-session.js", /MyApp\.initializer/
end

test "Uses config.ember.app_name as the app name" do
begin
old, ::Rails.configuration.ember.app_name = ::Rails.configuration.ember.app_name, 'MyApp'

run_generator %w(inject-session)
assert_file "#{ember_path}/initializers/inject-session.js", /MyApp\.initializer/
ensure
::Rails.configuration.ember.app_name = old
end
end

private

def ember_path(custom_path = nil)
"app/assets/javascripts/#{custom_path}".chomp('/')
end

def engine_to_extension(engine)
engine = "module.#{engine}" if engine == 'es6'
engine
end

end
76 changes: 76 additions & 0 deletions test/generators/instance_initializer_generator_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
require 'test_helper'
require 'generators/ember/instance_initializer_generator'

class InstanceInitializerGeneratorTest < Rails::Generators::TestCase
tests Ember::Generators::InstanceInitializerGenerator

destination File.join(Rails.root, "tmp", "generator_test_output")
setup :prepare_destination

def copy_directory(dir)
source = Rails.root.join(dir)
dest = Rails.root.join("tmp", "generator_test_output", File.dirname(dir))

FileUtils.mkdir_p dest
FileUtils.cp_r source, dest
end

def prepare_destination
super

copy_directory "app/assets/javascripts"
copy_directory "config"
end

%w(js coffee em es6).each do |engine|

test "create instance initializer with #{engine} engine" do
run_generator ["inject-session","--javascript-engine=#{engine}"]
assert_file "app/assets/javascripts/instance-initializers/inject-session.#{engine_to_extension(engine)}"
end

test "create namespaced initializer with #{engine} engine" do
run_generator ["user/inject-session","--javascript-engine=#{engine}"]
assert_file "#{ember_path}/instance-initializers/user/inject-session.#{engine_to_extension(engine)}", /\.instanceInitializer|export default {/
end
end

test "Assert files are properly created" do
run_generator %w(inject-session)
assert_file "#{ember_path}/instance-initializers/inject-session.js"
end

test "Assert files are properly created with custom path" do
custom_path = ember_path("custom")
run_generator [ "inject-session", "-d", custom_path ]
assert_file "#{custom_path}/instance-initializers/inject-session.js"
end

test "Assert files are properly created with custom app name" do
run_generator [ "inject-session", "-n", "MyApp" ]
assert_file "#{ember_path}/instance-initializers/inject-session.js", /MyApp\.instanceInitializer/
end

test "Uses config.ember.app_name as the app name" do
begin
old, ::Rails.configuration.ember.app_name = ::Rails.configuration.ember.app_name, 'MyApp'

run_generator %w(inject-session)
assert_file "#{ember_path}/instance-initializers/inject-session.js", /MyApp\.instanceInitializer/
ensure
::Rails.configuration.ember.app_name = old
end
end

private

def ember_path(custom_path = nil)
"app/assets/javascripts/#{custom_path}".chomp('/')
end

def engine_to_extension(engine)
engine = "module.#{engine}" if engine == 'es6'
engine
end

end