ember-rails 0.5.0 → 0.6.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.
data/README.md CHANGED
@@ -52,7 +52,7 @@ file to setup application namespace and initial requires:
52
52
  create app/assets/javascripts/helpers/.gitkeep
53
53
  create app/assets/javascripts/templates
54
54
  create app/assets/javascripts/templates/.gitkeep
55
- create app/assets/javascripts/app.js.coffee
55
+ create app/assets/javascripts/app.js
56
56
 
57
57
  If you want to avoid `.gitkeep` files, use the `skip git` option like
58
58
  this: `rails g ember:bootstrap -g`.
@@ -1,22 +1,23 @@
1
1
  // DOM
2
- var Element = {}
3
- Element.firstChild = function () { return Element };
4
- Element.innerHTML = function () { return Element };
2
+ var Element = {};
3
+ Element.firstChild = function () { return Element; };
4
+ Element.innerHTML = function () { return Element; };
5
5
 
6
- var document = { createRange: false, createElement: function() { return Element } };
6
+ var document = { createRange: false, createElement: function() { return Element; } };
7
7
  var window = this;
8
8
  this.document = document;
9
9
 
10
- // Console
11
- var console = window.console = {};
12
- console.log = console.info = console.warn = console.error = function(){};
10
+ // null out console.log and console.warn to avoid unexpected output
11
+ if (window.console) {
12
+ window.console.warn = function() {};
13
+ window.console.log = function() {};
14
+ }
13
15
 
14
- // jQuery
15
- var jQuery = window.jQuery = function() { return jQuery };
16
- jQuery.ready = function() { return jQuery };
17
- jQuery.inArray = function() { return jQuery };
16
+ //// jQuery
17
+ var jQuery = window.jQuery = function() { return jQuery; };
18
+ jQuery.ready = function() { return jQuery; };
19
+ jQuery.inArray = function() { return jQuery; };
18
20
  jQuery.jquery = "1.7.2";
19
- var $ = jQuery;
20
21
 
21
22
  // Precompiler
22
23
  var EmberRails = {
@@ -21,7 +21,14 @@ module Ember
21
21
  end
22
22
 
23
23
  def contents
24
- @contents ||= [File.read(precompiler_path), File.read(path)].join("\n")
24
+ @contents ||= begin
25
+ config = ::Rails.application.config.ember
26
+ handlebars = File.read(config.handlebars_location)
27
+ ember = File.read(config.ember_location)
28
+ precompiler = File.read(precompiler_path)
29
+
30
+ [precompiler, handlebars, ember].join("\n")
31
+ end
25
32
  end
26
33
 
27
34
  def handlebars_version
@@ -40,7 +47,6 @@ module Ember
40
47
 
41
48
  class << self
42
49
  def compile(template)
43
- template = template.read if template.respond_to?(:read)
44
50
  Source.context.call('EmberRails.precompile', template)
45
51
  end
46
52
  end
@@ -2,6 +2,6 @@ require 'ember/handlebars/source'
2
2
 
3
3
  module Ember
4
4
  module Handlebars
5
- VERSION = Ember::Handlebars::Source.handlebars_version
5
+ VERSION = "1.0.rc.1"
6
6
  end
7
7
  end
@@ -5,7 +5,8 @@ module Ember
5
5
  module Rails
6
6
  class Engine < ::Rails::Engine
7
7
  config.handlebars = ActiveSupport::OrderedOptions.new
8
- config.handlebars.precompile = ::Rails.env.production?
8
+
9
+ config.handlebars.precompile = true
9
10
  config.handlebars.templates_root = "templates"
10
11
  config.handlebars.templates_path_separator = '/'
11
12
 
@@ -18,7 +19,14 @@ module Ember
18
19
  app.assets.register_engine '.hjs', Ember::Handlebars::Template
19
20
 
20
21
  # Add the gem's vendored ember to the end of the asset search path
21
- app.config.assets.paths << Ember::Rails.ember_path
22
+ variant = app.config.ember.variant
23
+
24
+ if variant.nil?
25
+ warn "[EMBER-RAILS] `ember.variant` was not found in your current environment"
26
+ end
27
+
28
+ ember_path = File.expand_path("../../../../vendor/ember/#{variant}", __FILE__)
29
+ app.config.assets.paths.unshift ember_path
22
30
  end
23
31
  end
24
32
  end
@@ -1,5 +1,5 @@
1
1
  module Ember
2
2
  module Rails
3
- VERSION = '0.5.0'
3
+ VERSION = '0.6.0'
4
4
  end
5
5
  end
data/lib/ember/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'ember/handlebars/source'
2
2
 
3
3
  module Ember
4
- VERSION = Ember::Handlebars::Source.ember_version
4
+ VERSION = "1.0.beta"
5
5
  end
data/lib/ember_rails.rb CHANGED
@@ -5,33 +5,37 @@ require 'ember/rails/engine'
5
5
 
6
6
  module Ember
7
7
  module Rails
8
- # Create a map from Rails environments to versions of Ember.
9
- mattr_accessor :map
10
-
11
- # By default, production and test will both use minified Ember.
12
- # Add mappings in your environment files like so:
13
- # Ember::Rails.map["staging"] = "production"
14
- # To use ember-spade, map development to spade:
15
- # Ember::Rails.map["development"] = "spade"
16
- self.map ||= {"test" => "production"}
17
-
18
- # Returns the asset path containing Ember for the current Rails
19
- # environment. Defaults to development if no other version is found.
20
- def self.ember_path
21
- @ember_path ||= begin
22
- # Check for an enviroment mapping
23
- mapped_dir = Ember::Rails.map[::Rails.env]
24
-
25
- # Get the location, either mapped or based on Rails.env
26
- ember_root = File.expand_path("../../vendor/ember", __FILE__)
27
- ember_path = File.join(ember_root, mapped_dir || ::Rails.env)
28
-
29
- # Fall back on development if we couldn't find another version
30
- unless File.exist?(ember_path)
31
- ember_path = File.join(ember_root, "development")
8
+ class Railtie < ::Rails::Railtie
9
+ config.ember = ActiveSupport::OrderedOptions.new
10
+
11
+ generators do |app|
12
+ app ||= ::Rails.application # Rails 3.0.x does not yield `app`
13
+
14
+ app.config.generators.assets = false
15
+
16
+ ::Rails::Generators.configure!(app.config.generators)
17
+ ::Rails::Generators.hidden_namespaces.uniq!
18
+ require "generators/ember/resource_override"
19
+ end
20
+
21
+ initializer "ember_rails.setup_vendor", :after => "ember_rails.setup", :group => :all do |app|
22
+ # Add the gem's vendored ember to the end of the asset search path
23
+ variant = app.config.ember.variant
24
+ ember_path = app.root.join("vendor/assets/ember/#{variant}")
25
+ app.config.assets.paths.unshift(ember_path.to_s) if ember_path.exist?
26
+ end
27
+
28
+ initializer "ember_rails.find_ember", :after => "ember_rails.setup_vendor", :group => :all do |app|
29
+ config.ember.ember_location = location_for(app, "ember.js")
30
+ config.ember.handlebars_location = location_for(app, "handlebars.js")
31
+ end
32
+
33
+ def location_for(app, file)
34
+ path = app.config.assets.paths.find do |dir|
35
+ Pathname.new(dir).join(file).exist?
32
36
  end
33
37
 
34
- ember_path
38
+ File.join(path, file) if path
35
39
  end
36
40
  end
37
41
  end
@@ -16,6 +16,9 @@ module Ember
16
16
 
17
17
  inject_into_file(application_file, :before => "//= require_tree") do
18
18
  dependencies = [
19
+ # this should eventually become handlebars-runtime when we remove
20
+ # the runtime dependency on compilation
21
+ "//= require handlebars",
19
22
  "//= require ember",
20
23
  "//= require ember-data",
21
24
  "//= require_self",
@@ -27,7 +30,7 @@ module Ember
27
30
  end
28
31
 
29
32
  def create_dir_layout
30
- %W{models controllers views states helpers templates}.each do |dir|
33
+ %W{models controllers views routes helpers templates}.each do |dir|
31
34
  empty_directory "#{ember_path}/#{dir}"
32
35
  create_file "#{ember_path}/#{dir}/.gitkeep" unless options[:skip_git]
33
36
  end
@@ -37,8 +40,30 @@ module Ember
37
40
  template "app.js", "#{ember_path}/#{application_name.underscore}.js"
38
41
  end
39
42
 
40
- def create_state_manager_file
41
- template "states.js", "#{ember_path}/states/app_states.js"
43
+ def create_router_file
44
+ template "router.js", "#{ember_path}/routes/app_router.js"
45
+ end
46
+
47
+ def create_store_file
48
+ template "store.js", "#{ember_path}/store.js"
49
+ end
50
+
51
+ def create_app_stubs
52
+ generate "ember:view", "application"
53
+ end
54
+
55
+ def inject_proper_ember_version
56
+ environment <<-RUBY.strip_heredoc, :env => :development
57
+ config.ember.variant = :development
58
+ RUBY
59
+
60
+ environment <<-RUBY.strip_heredoc, :env => :test
61
+ config.ember.variant = :development
62
+ RUBY
63
+
64
+ environment <<-RUBY.strip_heredoc, :env => :production
65
+ config.ember.variant = :production
66
+ RUBY
42
67
  end
43
68
  end
44
69
  end
@@ -3,21 +3,8 @@ require 'ember/version'
3
3
  module Ember
4
4
  module Generators
5
5
  class InstallGenerator < ::Rails::Generators::Base
6
-
7
- EMBER_FILES = [ "ember.js", "ember-dev.js" ]
8
- RUNTIME_FILES = [ "ember-runtime.js", "ember-runtime-dev.js" ]
9
- ALL_FILES = [ *EMBER_FILES, *RUNTIME_FILES ]
10
-
11
6
  desc "Install Ember.js into your vendor folder"
12
7
  class_option :head, :type => :boolean, :default => false, :desc => "Download latest Ember.js from GitHub and copy it into your project"
13
- class_option :runtime, :type => :boolean, :default => false, :desc => "Include the Ember.js runtime only"
14
-
15
- def remove_ember
16
- ALL_FILES.each do |name|
17
- file = "vendor/assets/javascripts/#{name}"
18
- remove_file file if File.exist?(file)
19
- end
20
- end
21
8
 
22
9
  def copy_ember
23
10
  if options.head?
@@ -33,7 +20,7 @@ module Ember
33
20
  cmd command
34
21
  else
35
22
  Dir.chdir git_root do
36
- command = "git fetch --force --quiet --tags && git reset HEAD --hard"
23
+ command = "git fetch --force --quiet --tags && git reset origin/master --hard"
37
24
  say_status("updating", command, :green)
38
25
 
39
26
  cmd command
@@ -50,34 +37,13 @@ module Ember
50
37
 
51
38
  self.class.source_root File.join(git_root, "dist")
52
39
 
53
- ember_files.each do |name|
54
- source_file = if name.match /-dev/
55
- name.gsub /-dev/, '.debug'
56
- else
57
- name.gsub /.js/, '.prod.js'
58
- end
59
-
60
- copy_file source_file, "vendor/assets/javascripts/#{name}"
61
- end
62
-
63
- else
64
-
65
- self.class.source_root File.expand_path('../../../../../vendor/assets/javascripts', __FILE__)
66
- say_status("copying", "Ember.js (#{Ember::VERSION})", :green)
67
-
68
- ember_files.each do |name|
69
- copy_file name, "vendor/assets/javascripts/#{name}"
70
- end
71
-
40
+ copy_file "ember.js", "vendor/assets/ember/development/ember.js"
41
+ copy_file "ember.min.js", "vendor/assets/ember/production/ember.js"
72
42
  end
73
43
  end
74
44
 
75
45
  private
76
46
 
77
- def ember_files
78
- options.runtime? ? RUNTIME_FILES : EMBER_FILES
79
- end
80
-
81
47
  def cmd(command)
82
48
  out = `#{command}`
83
49
 
@@ -5,22 +5,22 @@ module Ember
5
5
  class ModelGenerator < ::Rails::Generators::NamedBase
6
6
  source_root File.expand_path("../../templates", __FILE__)
7
7
  argument :attributes, :type => :array, :default => [], :banner => "field[:type] field[:type] ..."
8
-
8
+
9
9
  desc "Creates a new Ember.js model"
10
-
10
+
11
11
  def create_model_files
12
12
  template 'model.js', File.join('app/assets/javascripts/models', class_path, "#{file_name}.js")
13
13
  end
14
-
15
- private
16
-
14
+
15
+ private
16
+
17
17
  def parse_attributes!
18
18
  self.attributes = (attributes || []).map do |attr|
19
- attr = attr.split(':')
20
- { name: attr[0], type: attr[1] }
19
+ name, type = attr.split(':')
20
+ type = 'string' if type == 'text'
21
+ { name: name, type: type }
21
22
  end
22
23
  end
23
-
24
24
  end
25
25
  end
26
26
  end
@@ -0,0 +1,32 @@
1
+ require "rails/generators"
2
+ require "rails/generators/rails/resource/resource_generator"
3
+ require "generators/ember/controller_generator"
4
+ require "generators/ember/view_generator"
5
+
6
+ module Rails
7
+ module Generators
8
+ ResourceGenerator.class_eval do
9
+ def add_ember
10
+ say_status :invoke, "ember:model", :white
11
+ with_padding do
12
+ invoke "ember:model"
13
+ end
14
+
15
+ say_status :invoke, "ember controller and view (singular)", :white
16
+ with_padding do
17
+ invoke "ember:view"
18
+ end
19
+
20
+ @_invocations[Ember::Generators::ControllerGenerator].delete "create_controller_files"
21
+ @_invocations[Ember::Generators::ViewGenerator].delete "create_view_files"
22
+
23
+ say_status :invoke, "ember controller and view (plural)", :white
24
+ with_padding do
25
+ invoke "ember:view", [plural_name], :array => true
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+
@@ -4,15 +4,16 @@ module Ember
4
4
  module Generators
5
5
  class ViewGenerator < ::Rails::Generators::NamedBase
6
6
  source_root File.expand_path("../../templates", __FILE__)
7
- argument :controller_name, :type => :string, :required => true, :desc => "The controller name for this view"
8
-
7
+
9
8
  desc "Creates a new Ember.js view and associated Handlebars template"
10
-
11
- def create_model_files
12
- template 'view.js', File.join('app/assets/javascripts/views/' + controller_name, class_path, "#{file_name}_view.js")
13
- template 'view.handlebars', File.join('app/assets/javascripts/templates/' + controller_name, class_path, "#{file_name}.handlebars")
9
+ class_option :array, :type => :boolean, :default => false, :desc => "Create an Ember.ArrayController to represent multiple objects"
10
+
11
+ def create_view_files
12
+ template 'view.js', File.join('app/assets/javascripts/views', class_path, "#{file_name}_view.js")
13
+ template 'view.handlebars', File.join('app/assets/javascripts/templates', class_path, "#{file_name}.handlebars")
14
+ invoke('ember:controller', [ file_name ], options)
14
15
  end
15
-
16
+
16
17
  end
17
18
  end
18
19
  end
@@ -1,17 +1,15 @@
1
+ //= require ./store
1
2
  //= require_tree ./models
2
3
  //= require_tree ./controllers
3
4
  //= require_tree ./views
4
5
  //= require_tree ./helpers
5
6
  //= require_tree ./templates
6
- //= require_tree ./states
7
+ //= require_tree ./routes
7
8
  //= require_self
8
9
 
9
- // <%= application_name.camelize %>.stateManager is useful for debugging,
10
- // but don't use it directly in application code.
11
- var stateManager = <%= application_name.camelize %>.stateManager = <%= application_name.camelize %>.StateManager.create();
12
- <%= application_name.camelize %>.initialize(stateManager);
13
-
14
- jQuery(function() {
15
- stateManager.send('ready');
10
+ var router = <%= application_name.camelize %>.router = <%= application_name.camelize %>.Router.create({
11
+ location: 'hash'
16
12
  });
17
13
 
14
+ <%= application_name.camelize %>.initialize(router);
15
+
@@ -0,0 +1,3 @@
1
+ <h1><%= application_name %></h1>
2
+
3
+ {{outlet}}
@@ -2,6 +2,6 @@
2
2
  // Implement your controller here.
3
3
  //
4
4
  // An ArrayController has a `content` property, which you should
5
- // set up in your state manager.
5
+ // set up in your router.
6
6
  });
7
7
 
@@ -1,4 +1,4 @@
1
- <%= application_name.camelize %>.<%= class_name %>Controller = Ember.Object.extend({
1
+ <%= application_name.camelize %>.<%= class_name %>Controller = Ember.ObjectController.extend({
2
2
  // Implement your controller here.
3
3
  });
4
4
 
@@ -0,0 +1,15 @@
1
+ <%= application_name.camelize %>.Router = Ember.Router.extend({
2
+ root: Ember.State.extend({
3
+ index: Ember.State.extend({
4
+ route: '/'
5
+
6
+ // You'll likely want to connect a view here.
7
+ // connectOutlets: function(router) {
8
+ // router.get('applicationController').connectOutlet(App.MainView);
9
+ // }
10
+
11
+ // Layout your routes here...
12
+ })
13
+ })
14
+ });
15
+