Skip to content

Support Ember.Service as ES6 module syntax #517

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 2 commits into from
Mar 20, 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
2 changes: 1 addition & 1 deletion lib/ember_rails.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ 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 serializers adapters transforms)
config.ember.prefix_dirs = %w(models controllers views routes components helpers mixins services serializers adapters transforms)

generators do |app|
app.config.generators.assets = false
Expand Down
23 changes: 23 additions & 0 deletions lib/generators/ember/service_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 ServiceGenerator < ::Rails::Generators::NamedBase
include Ember::Generators::GeneratorHelpers

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

desc "Creates a new Ember.js service"

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_service_files
file_path = File.join(ember_path, 'services', class_path, "#{file_name.dasherize}.#{engine_extension}")

template "service.#{engine_extension}", file_path
end
end
end
end
3 changes: 3 additions & 0 deletions lib/generators/templates/service.coffee
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<%= application_name.camelize %>.<%= class_name %>Service = Ember.Service.extend({

})
1 change: 1 addition & 0 deletions lib/generators/templates/service.em
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
class <%= application_name.camelize %>.<%= class_name %>Service extends Ember.Service
3 changes: 3 additions & 0 deletions lib/generators/templates/service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<%= application_name.camelize %>.<%= class_name %>Service = Ember.Service.extend({

});
5 changes: 5 additions & 0 deletions lib/generators/templates/service.module.es6
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import Ember from 'ember';

export default Ember.Service.extend({

});
5 changes: 5 additions & 0 deletions test/dummy/app/assets/javascripts/services/user.module.es6
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import Ember from 'ember';

export default Ember.Service.extend({

});
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 serializers adapters transforms).each do |type|
%w(models controllers views routes components helpers mixins services 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
76 changes: 76 additions & 0 deletions test/generators/service_generator_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
require 'test_helper'
require 'generators/ember/service_generator'

class ServiceGeneratorTest < Rails::Generators::TestCase
tests Ember::Generators::ServiceGenerator

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 service with #{engine} engine" do
run_generator ["session","--javascript-engine=#{engine}"]
assert_file "app/assets/javascripts/services/session.#{engine_to_extension(engine)}"
end

test "create namespaced service with #{engine} engine" do
run_generator ["user/session","--javascript-engine=#{engine}"]
assert_file "#{ember_path}/services/user/session.#{engine_to_extension(engine)}", /UserSessionService|export default Ember\.Service\.extend/
end
end

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

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

test "Assert files are properly created with custom app name" do
run_generator [ "session", "-n", "MyApp" ]
assert_file "#{ember_path}/services/session.js", /MyApp\.SessionService/
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(session)
assert_file "#{ember_path}/services/session.js", /MyApp\.SessionService/
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