Skip to content

Commit

Permalink
Start an ember-rails cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
tomhuda committed May 26, 2012
1 parent 84709f9 commit f48a589
Show file tree
Hide file tree
Showing 9 changed files with 1,825 additions and 65 deletions.
4 changes: 3 additions & 1 deletion lib/ember/rails/engine.rb
Expand Up @@ -18,7 +18,9 @@ class Engine < ::Rails::Engine
app.assets.register_engine '.hjs', Ember::Handlebars::Template

# Add the gem's vendored ember to the end of the asset search path
app.config.assets.paths << Ember::Rails.ember_path
variant = app.config.ember.variant
ember_path = File.expand_path("../../../../vendor/ember/#{variant}", __FILE__)
app.config.assets.paths.unshift ember_path
end
end
end
Expand Down
38 changes: 16 additions & 22 deletions lib/ember_rails.rb
Expand Up @@ -5,33 +5,27 @@

module Ember
module Rails
# Create a map from Rails environments to versions of Ember.
mattr_accessor :map
class Railtie < ::Rails::Railtie
config.ember = ActiveSupport::OrderedOptions.new

# By default, production and test will both use minified Ember.
# Add mappings in your environment files like so:
# Ember::Rails.map["staging"] = "production"
# To use ember-spade, map development to spade:
# Ember::Rails.map["development"] = "spade"
self.map ||= {"test" => "production"}

# Returns the asset path containing Ember for the current Rails
# environment. Defaults to development if no other version is found.
def self.ember_path
@ember_path ||= begin
# Check for an enviroment mapping
mapped_dir = Ember::Rails.map[::Rails.env]
initializer "ember_rails.setup_vendor", :after => "ember_rails.setup", :group => :all do |app|
# Add the gem's vendored ember to the end of the asset search path
variant = app.config.ember.variant
ember_path = app.root.join("vendor/assets/ember/#{variant}")
app.config.assets.paths.unshift(ember_path.to_s) if ember_path.exist?
end

# Get the location, either mapped or based on Rails.env
ember_root = File.expand_path("../../vendor/ember", __FILE__)
ember_path = File.join(ember_root, mapped_dir || ::Rails.env)
initializer "ember_rails.find_ember", :after => "ember_rails.setup_vendor", :group => :all do |app|
config.ember.ember_location = location_for(app, "ember.js")
config.ember.handlebars_location = location_for(app, "handlebars.js")
end

# Fall back on development if we couldn't find another version
unless File.exist?(ember_path)
ember_path = File.join(ember_root, "development")
def location_for(app, file)
path = app.config.assets.paths.find do |dir|
Pathname.new(dir).join(file).exist?
end

ember_path
File.join(path, file) if path
end
end
end
Expand Down
15 changes: 15 additions & 0 deletions lib/generators/ember/bootstrap_generator.rb
Expand Up @@ -16,6 +16,7 @@ def inject_ember

inject_into_file(application_file, :before => "//= require_tree") do
dependencies = [
"//= require handlebars-runtime",
"//= require ember",
"//= require ember-data",
"//= require_self",
Expand All @@ -40,6 +41,20 @@ def create_app_file
def create_state_manager_file
template "states.js", "#{ember_path}/states/app_states.js"
end

def inject_proper_ember_version
environment <<-RUBY.strip_heredoc, :env => :development
config.ember.variant = :development
RUBY

environment <<-RUBY.strip_heredoc, :env => :test
config.ember.variant = :development
RUBY

environment <<-RUBY.strip_heredoc, :env => :production
config.ember.variant = :production
RUBY
end
end
end
end
40 changes: 3 additions & 37 deletions lib/generators/ember/install_generator.rb
Expand Up @@ -3,21 +3,8 @@
module Ember
module Generators
class InstallGenerator < ::Rails::Generators::Base

EMBER_FILES = [ "ember.js", "ember-dev.js" ]
RUNTIME_FILES = [ "ember-runtime.js", "ember-runtime-dev.js" ]
ALL_FILES = [ *EMBER_FILES, *RUNTIME_FILES ]

desc "Install Ember.js into your vendor folder"
class_option :head, :type => :boolean, :default => false, :desc => "Download latest Ember.js from GitHub and copy it into your project"
class_option :runtime, :type => :boolean, :default => false, :desc => "Include the Ember.js runtime only"

def remove_ember
ALL_FILES.each do |name|
file = "vendor/assets/javascripts/#{name}"
remove_file file if File.exist?(file)
end
end

def copy_ember
if options.head?
Expand All @@ -33,7 +20,7 @@ def copy_ember
cmd command
else
Dir.chdir git_root do
command = "git fetch --force --quiet --tags && git reset HEAD --hard"
command = "git fetch --force --quiet --tags && git reset origin/master --hard"
say_status("updating", command, :green)

cmd command
Expand All @@ -50,34 +37,13 @@ def copy_ember

self.class.source_root File.join(git_root, "dist")

ember_files.each do |name|
source_file = if name.match /-dev/
name.gsub /-dev/, '.debug'
else
name.gsub /.js/, '.prod.js'
end

copy_file source_file, "vendor/assets/javascripts/#{name}"
end

else

self.class.source_root File.expand_path('../../../../../vendor/assets/javascripts', __FILE__)
say_status("copying", "Ember.js (#{Ember::VERSION})", :green)

ember_files.each do |name|
copy_file name, "vendor/assets/javascripts/#{name}"
end

copy_file "ember.js", "vendor/assets/ember/development/ember.js"
copy_file "ember.min.js", "vendor/assets/ember/production/ember.js"
end
end

private

def ember_files
options.runtime? ? RUNTIME_FILES : EMBER_FILES
end

def cmd(command)
out = `#{command}`

Expand Down
15 changes: 10 additions & 5 deletions test/generators/bootstrap_generator_test.rb
Expand Up @@ -7,16 +7,21 @@ class BootstrapGeneratorTest < Rails::Generators::TestCase

setup :prepare_destination

def prepare_destination
super

source = Rails.root.join("app/assets/javascripts")
dest = Rails.root.join("tmp/app/assets")
def copy_directory(dir)
source = Rails.root.join(dir)
dest = Rails.root.join("tmp", 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

test "Assert folder layout and .gitkeep files are properly created" do
run_generator

Expand Down

0 comments on commit f48a589

Please sign in to comment.