ember-appkit-rails 0.4.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ember/appkit/rails.rb +4 -0
  3. data/lib/ember/appkit/rails/engine.rb +6 -1
  4. data/lib/ember/appkit/rails/teaspoon.rb +5 -0
  5. data/lib/ember/appkit/rails/teaspoon/engine.rb +3 -0
  6. data/lib/ember/appkit/rails/teaspoon/suite.rb +7 -0
  7. data/lib/ember/appkit/rails/version.rb +1 -1
  8. data/lib/ember/appkit/rails/views/teaspoon/spec/_eak_rails.html.erb +10 -0
  9. data/lib/generators/ember/bootstrap_generator.rb +27 -9
  10. data/lib/generators/ember/component_generator.rb +2 -2
  11. data/lib/generators/ember/controller_generator.rb +4 -4
  12. data/lib/generators/ember/generator_helpers.rb +4 -0
  13. data/lib/generators/ember/install_generator.rb +150 -0
  14. data/lib/generators/ember/model_generator.rb +7 -2
  15. data/lib/generators/ember/resource_generator.rb +1 -1
  16. data/lib/generators/ember/route_generator.rb +2 -2
  17. data/lib/generators/ember/scaffold_generator.rb +17 -3
  18. data/lib/generators/ember/serializer_override.rb +18 -0
  19. data/lib/generators/ember/view_generator.rb +2 -2
  20. data/{test/dummy/config/adapters/application.js.es6.erb → lib/generators/templates/adapters/application.es6.erb} +0 -0
  21. data/lib/generators/templates/application.js.erb +1 -0
  22. data/lib/generators/templates/{array_controller.js.es6 → array_controller.es6} +0 -0
  23. data/lib/generators/templates/{component.js.es6 → component.es6} +0 -0
  24. data/lib/generators/templates/{controller.js.es6 → controller.es6} +0 -0
  25. data/lib/generators/templates/environment.js.erb +2 -0
  26. data/lib/generators/templates/environments/development.js.erb +5 -5
  27. data/lib/generators/templates/environments/production.js.erb +2 -2
  28. data/lib/generators/templates/environments/test.js.erb +1 -1
  29. data/lib/generators/templates/initializers/teaspoon.rb +63 -0
  30. data/lib/generators/templates/{model.js.es6 → model.es6} +0 -0
  31. data/lib/generators/templates/{object_controller.js.es6 → object_controller.es6} +0 -0
  32. data/lib/generators/templates/{route.js.es6 → route.es6} +0 -0
  33. data/lib/generators/templates/{router.js.es6 → router.es6} +0 -0
  34. data/lib/generators/templates/scaffold/route/{edit.js.es6 → edit.es6} +1 -1
  35. data/lib/generators/templates/scaffold/route/{index.js.es6 → index.es6} +1 -1
  36. data/lib/generators/templates/scaffold/route/{new.js.es6 → new.es6} +1 -1
  37. data/lib/generators/templates/scaffold/route/{show.js.es6 → show.es6} +1 -1
  38. data/lib/generators/templates/scaffold/template/form.hbs +3 -4
  39. data/lib/generators/templates/scaffold/template/index.hbs +2 -2
  40. data/lib/generators/templates/scaffold/template/show.hbs +2 -2
  41. data/lib/generators/templates/scaffold_controller/controller.rb +2 -2
  42. data/lib/generators/templates/test/model.es6 +7 -0
  43. data/lib/generators/templates/test/route.es6 +23 -0
  44. data/lib/generators/templates/test/teaspoon_env.rb +38 -0
  45. data/lib/generators/templates/test/test_helper.js +55 -0
  46. data/lib/generators/templates/{view.js.es6 → view.es6} +0 -0
  47. data/test/dummy/config/adapters/application.es6.erb +3 -0
  48. data/test/dummy/config/application.js +1 -0
  49. data/test/dummy/config/environment.js.erb +2 -0
  50. data/test/dummy/config/environments/development.js.erb +5 -5
  51. data/test/dummy/config/environments/production.js.erb +2 -2
  52. data/test/dummy/config/environments/test.js.erb +1 -1
  53. data/test/dummy/config/initializers/secret_token.rb +1 -1
  54. data/test/dummy/config/initializers/teaspoon.rb +63 -0
  55. data/test/dummy/config/{router.js.es6 → router.es6} +0 -0
  56. data/test/dummy/log/test.log +71 -8
  57. data/test/dummy/test/teaspoon_env.rb +38 -0
  58. data/test/dummy/test/test_helper.js +55 -0
  59. data/test/dummy/tmp/cache/assets/test/sprockets/{eeb5bd38d1dad0d908461fd114f702bc → 08230536deeb8bca57aa54c1cf9a8a67} +0 -0
  60. data/test/dummy/tmp/cache/assets/test/sprockets/0f4e288e1e01cda64059f8f521519f5a +0 -0
  61. data/test/dummy/tmp/cache/assets/test/sprockets/{492d1909e24832f58ebca96dade2a876 → 1318d49b0a8b80264cc6d140438953bf} +0 -0
  62. data/test/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
  63. data/test/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
  64. data/test/dummy/tmp/cache/assets/test/sprockets/39492898b23538577ff8db562a35fb7c +0 -0
  65. data/test/dummy/tmp/cache/assets/test/sprockets/3f9cb5a26b08b9e25de91fe142228ad2 +0 -0
  66. data/test/dummy/tmp/cache/assets/test/sprockets/4a1d4e32cd7b9fd1c62bfd553ae56051 +0 -0
  67. data/test/dummy/tmp/cache/assets/test/sprockets/4d3cadf0ab91b4a77adf81282a5550a1 +0 -0
  68. data/test/dummy/tmp/cache/assets/test/sprockets/{1f15c49a05b13c3a7ee50d2ac3900f38 → 571f65ff5db500e9ad70fc11060270a8} +0 -0
  69. data/test/dummy/tmp/cache/assets/test/sprockets/660bc633c8899c6c1b20514637fa0169 +0 -0
  70. data/test/dummy/tmp/cache/assets/test/sprockets/67afcba9807cd5e57b80b5fdf9f26758 +0 -0
  71. data/test/dummy/tmp/cache/assets/test/sprockets/{47fb03bce147145961cb3deeafca54d7 → 7190c4707840ff0d7c60920ae9739c79} +0 -0
  72. data/test/dummy/tmp/cache/assets/test/sprockets/7ca4966e0a480430a858a7ab74518c75 +0 -0
  73. data/test/dummy/tmp/cache/assets/test/sprockets/83030d43d9bff738a1a01366d61d7691 +0 -0
  74. data/test/dummy/tmp/cache/assets/test/sprockets/83af35bb6b852de883a26a9458fd4e3a +0 -0
  75. data/test/dummy/tmp/cache/assets/test/sprockets/8adfb5e646dca2c629e5d3dc88e2c2e9 +0 -0
  76. data/test/dummy/tmp/cache/assets/test/sprockets/9160f792acb62d1f7721c714681fcfe6 +0 -0
  77. data/test/dummy/tmp/cache/assets/test/sprockets/a6a0d79927cb0ec286aa0afb9812685c +0 -0
  78. data/test/dummy/tmp/cache/assets/test/sprockets/bb4a2293175928af3e23c47488077098 +0 -0
  79. data/test/dummy/tmp/cache/assets/test/sprockets/bf689240392e7355c0de5cfd47272146 +0 -0
  80. data/test/dummy/tmp/cache/assets/test/sprockets/{66c0ce49a71def0f29dcf0bcaf8fb28d → c4eca8931f39b747ea9f916a3b42d8da} +0 -0
  81. data/test/dummy/tmp/cache/assets/test/sprockets/cdbe9110f011148cc7a1f172dc18a883 +0 -0
  82. data/test/dummy/tmp/cache/assets/test/sprockets/d5a48c6656341c56cac8a8e42bb925a5 +0 -0
  83. data/test/dummy/tmp/cache/assets/test/sprockets/{d4cb455bee790d041fb3111fb1636531 → d5b1e7219e29c039a8ebb0a4e5b19a2b} +0 -0
  84. data/test/dummy/tmp/cache/assets/test/sprockets/{ce7582379ff02bb25cee3ac0486fe1f2 → d5ce5243d4ca4a3739a15e60e3c685ba} +0 -0
  85. data/test/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
  86. data/test/dummy/tmp/cache/assets/test/sprockets/de0932670a6c856bc6eda1586fd29061 +0 -0
  87. data/test/dummy/tmp/cache/assets/test/sprockets/e9abb671d48f6ff2be6ffb463ea652bf +0 -0
  88. data/test/dummy/tmp/cache/assets/test/sprockets/{e36a853a1349d7f33f6c0083c05f897b → fb43f1b92235ac87bedc9ac12be00188} +0 -0
  89. data/test/dummy/tmp/generator_test_output/app/views/{post.js.es6 → post.es6} +0 -0
  90. data/test/fixtures/vcr_cassettes/fetch_ember_beta.yml +39609 -0
  91. data/test/fixtures/vcr_cassettes/fetch_ember_canary.yml +41381 -0
  92. data/test/fixtures/vcr_cassettes/fetch_ember_data_tagged.yml +4283 -0
  93. data/test/fixtures/vcr_cassettes/fetch_ember_release.yml +38824 -0
  94. data/test/fixtures/vcr_cassettes/fetch_ember_tagged.yml +29518 -0
  95. data/test/generators/bootstrap_generator_test.rb +12 -4
  96. data/test/generators/component_generator_test.rb +6 -6
  97. data/test/generators/controller_generator_test.rb +5 -5
  98. data/test/generators/install_generator_test.rb +163 -0
  99. data/test/generators/model_generator_test.rb +29 -7
  100. data/test/generators/resource_generator_test.rb +6 -6
  101. data/test/generators/route_generator_test.rb +1 -1
  102. data/test/generators/scaffold_generator_test.rb +59 -10
  103. data/test/generators/serializer_override_test.rb +19 -0
  104. data/test/generators/view_generator_test.rb +6 -6
  105. data/test/integration/engine_test.rb +4 -0
  106. data/test/support/generator_test_support.rb +2 -2
  107. data/vendor/assets/javascripts/{app.js.es6.erb → app.es6.erb} +3 -1
  108. data/vendor/assets/javascripts/ember-appkit/index.js +0 -1
  109. data/vendor/assets/javascripts/ember-appkit/resolver.js +235 -32
  110. data/vendor/assets/javascripts/fake_xml_http_request.js +473 -0
  111. data/vendor/assets/javascripts/fakehr.js +52 -0
  112. data/vendor/assets/javascripts/httpRespond.js +24 -0
  113. metadata +126 -55
  114. data/lib/generators/templates/adapter.js.erb +0 -3
  115. data/test/dummy/tmp/cache/assets/test/sprockets/10fe949cc641775f5630b5dad6deb5fc +0 -0
  116. data/test/dummy/tmp/cache/assets/test/sprockets/129b422236f443119233cdb0a4525a06 +0 -0
  117. data/test/dummy/tmp/cache/assets/test/sprockets/25b8b60341168a02f48dabd2b0aa82ad +0 -0
  118. data/test/dummy/tmp/cache/assets/test/sprockets/827fafc13575b345cc572fd041ef1fba +0 -0
  119. data/test/dummy/tmp/cache/assets/test/sprockets/83a9a7d15d681a382363d2bccb9528bb +0 -0
  120. data/test/dummy/tmp/cache/assets/test/sprockets/de94a60b438eb5bf57653f3a220acd80 +0 -0
  121. data/vendor/assets/javascripts/ember-appkit/resolver_ext.js +0 -40
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 87955b857b074b7c1732bfdf4083590744543d9b
4
- data.tar.gz: 9e28182f503839a37b534dba4632ec4d84042c7f
3
+ metadata.gz: 4d4fe1e8ce27cb4f95d4b4c30f9c2aaf94e69350
4
+ data.tar.gz: ab980b71bd234c9f9d1ed61e397be7d51ae2a791
5
5
  SHA512:
6
- metadata.gz: 586f71fdfb2e89ad5bead93d2e25ae464989d6a1583058c3f442abbfcd2f217b90eeba2276518f4bdf47ed8e49f3a88818b123563c0c7f13a7133530693a7590
7
- data.tar.gz: a372fab61645c6a64aba60450edaa6a8b05ade49e4fe0d6d2cfcda2d9b9730145b3c7717fc9823b5ebc3f45e767f5b1e7a1ea521839f0caf85a417191ca527cd
6
+ metadata.gz: e50c2af8ceffd072f9004f356f099249727560558269010074da492cc67ec7ae279125fc5de73640c8f5dd354f68669ad6b99f3bb7594c3729d061dd72aa2e60
7
+ data.tar.gz: 90e012ed5359a4268bc52730723af7224d7c80c1b2c5c73bd852ebbde83068f9610f332923627ace524f709579fe28d5576804cd2c3864a4b2b6a6835c833981
@@ -17,3 +17,7 @@ require 'ember/appkit/rails/engine'
17
17
  require 'ember/appkit/rails/sprockets'
18
18
  require 'ember/appkit/rails/template'
19
19
  require 'ember/appkit/rails/active_support'
20
+
21
+ if [:development, :test].include?(Rails.env.to_sym)
22
+ require 'ember/appkit/rails/teaspoon'
23
+ end
@@ -20,6 +20,7 @@ class Ember::Appkit::Rails::Engine < ::Rails::Engine
20
20
  require 'generators/ember/resource_override'
21
21
  require 'generators/ember/scaffold_override'
22
22
  require 'generators/ember/scaffold_controller_override'
23
+ require 'generators/ember/serializer_override'
23
24
  end
24
25
 
25
26
  initializer :appkit_transpiler do
@@ -57,13 +58,17 @@ class Ember::Appkit::Rails::Engine < ::Rails::Engine
57
58
  end
58
59
  end
59
60
 
61
+ initializer :appkit_serializer, before: :set_autoload_paths do |app|
62
+ app.config.paths.add File.join(Rails.root, 'config/serializers'), eager_load: true
63
+ end
64
+
60
65
  initializer :appkit_sprockets do
61
66
  assets = Sprockets::Railtie.config.assets
62
67
 
63
68
  precompile_index = config.assets.precompile.index { |i| i =~ File.join(Rails.root, 'app/assets/javascripts/application.js') }
64
69
  config.assets.precompile[precompile_index] = /(?<!assets\/javascripts)(?:\/|\\|\A)application\.(css|js)$/
65
70
 
66
- assets_javascript = assets.paths.delete(::Rails.root.join('app','assets','javascripts').to_s)
71
+ assets.paths.delete(::Rails.root.join('app','assets','javascripts').to_s)
67
72
  assets.paths.delete(::Rails.root.join('lib', 'assets','javascript').to_s)
68
73
 
69
74
  index_of_last_app_assets = assets.paths.rindex { |path| path.to_s.start_with?(::Rails.root.join('app').to_s) } + 1
@@ -0,0 +1,5 @@
1
+ module Ember::Appkit::Rails::Teaspoon; end
2
+
3
+ require 'teaspoon'
4
+ require 'ember/appkit/rails/teaspoon/engine'
5
+ require 'ember/appkit/rails/teaspoon/suite'
@@ -0,0 +1,3 @@
1
+ class Ember::Appkit::Rails::Teaspoon::Engine < ::Rails::Engine
2
+ paths["app/views"] << Ember::Appkit::Rails::Engine.root.join('lib', 'ember', 'appkit', 'rails', 'views')
3
+ end
@@ -0,0 +1,7 @@
1
+ module Ember::Appkit::Rails::Teaspoon::Suite
2
+ def asset_from_file(filename)
3
+ super.gsub(/(\.js\.es6|.es6)$/, '.js')
4
+ end
5
+ end
6
+
7
+ Teaspoon::Suite.send(:prepend, Ember::Appkit::Rails::Teaspoon::Suite) if defined?(Teaspoon::Suite)
@@ -1,7 +1,7 @@
1
1
  module Ember
2
2
  module Appkit
3
3
  module Rails
4
- VERSION = '0.4.0'
4
+ VERSION = '0.5.0'
5
5
  end
6
6
  end
7
7
  end
@@ -0,0 +1,10 @@
1
+ <%= javascript_include_tag_for_teaspoon *@suite.spec_javascripts, @javascript_options %>
2
+
3
+ <script type="text/javascript">
4
+ Teaspoon.onWindowLoad(function () {
5
+ <% @suite.spec_javascripts_for_require.map(&:dasherize).each do |test| %>
6
+ require(<%=raw test.to_json %>);
7
+ <% end %>
8
+ Teaspoon.execute();
9
+ });
10
+ </script>
@@ -3,6 +3,9 @@ require 'generators/ember/generator_helpers'
3
3
  module Ember
4
4
  module Generators
5
5
  class BootstrapGenerator < ::Rails::Generators::Base
6
+ APP_FOLDERS = %W{models controllers views routes components templates templates/components mixins}
7
+ CONFIG_FOLDERS = %W{serializers}
8
+
6
9
  include Ember::Generators::GeneratorHelpers
7
10
 
8
11
  source_root File.expand_path("../../templates", __FILE__)
@@ -13,15 +16,16 @@ module Ember
13
16
  class_option :config_path, :type => :string, :aliases => "-c", :default => false, :desc => "Custom ember config path"
14
17
  class_option :app_name, :type => :string, :aliases => "-n", :default => false, :desc => "Custom ember app name"
15
18
 
16
- def create_dir_layout
17
- %W{routes components templates templates/components mixins}.each do |dir|
18
- empty_directory "#{app_path}/#{dir}"
19
- create_file "#{app_path}/#{dir}/.gitkeep" unless options[:skip_git]
20
- end
19
+ def create_app_dir_layout
20
+ create_layout(APP_FOLDERS)
21
+ end
22
+
23
+ def create_config_dir_layout
24
+ create_layout(CONFIG_FOLDERS, config_path)
21
25
  end
22
26
 
23
27
  def create_router_file
24
- template "router.js.es6", "#{config_path}/router.js.es6"
28
+ template "router.es6", "#{config_path}/router.es6"
25
29
  end
26
30
 
27
31
  def create_application_file
@@ -29,7 +33,7 @@ module Ember
29
33
  end
30
34
 
31
35
  def create_ember_adapter_file
32
- template "adapter.js.erb", "#{config_path}/adapters/application.js.es6.erb"
36
+ copy_file "adapters/application.es6.erb", "#{config_path}/adapters/application.es6.erb"
33
37
  end
34
38
 
35
39
  def create_ember_environment_files
@@ -63,19 +67,33 @@ module Ember
63
67
  def add_custom_paths
64
68
  if app_path != configuration.paths.app
65
69
  insert_into_file 'config/application.rb', before: /\s\send\nend/ do
66
- " config.ember.appkit.paths.app = '#{app_path}'\n"
70
+ " config.ember.paths.app = '#{app_path}'\n"
67
71
  end
68
72
  end
69
73
 
70
74
  if config_path != configuration.paths.config
71
75
  insert_into_file 'config/application.rb', before: /\s\send\nend/ do
72
- " config.ember.appkit.paths.config = '#{config_path}'\n"
76
+ " config.ember.paths.config = '#{config_path}'\n"
73
77
  end
74
78
  end
75
79
  end
76
80
 
81
+ def add_teaspoon_files
82
+ copy_file "initializers/teaspoon.rb", "config/initializers/teaspoon.rb"
83
+ copy_file "test/teaspoon_env.rb", "test/teaspoon_env.rb"
84
+ copy_file "test/test_helper.js", "test/test_helper.js"
85
+ empty_directory "test/integration"
86
+ end
87
+
77
88
  private
78
89
 
90
+ def create_layout(directories, path = app_path)
91
+ directories.each do |dir|
92
+ empty_directory "#{path}/#{dir}"
93
+ create_file "#{path}/#{dir}/.gitkeep" unless options[:skip_git]
94
+ end
95
+ end
96
+
79
97
  def remove_turbolinks_from_layout
80
98
  path = Pathname.new(destination_root).join('app','views','layouts','application.html.erb')
81
99
  return unless path.exist?
@@ -11,8 +11,8 @@ module Ember
11
11
 
12
12
  def create_component_files
13
13
  dashed_file_name = file_name.gsub(/_/, '-')
14
- component_path = File.join(app_path, 'components', class_path, "#{dashed_file_name}.js.es6")
15
- template "component.js.es6", component_path
14
+ component_path = File.join(app_path, 'components', class_path, "#{dashed_file_name}.es6")
15
+ template "component.es6", component_path
16
16
 
17
17
  template_path = File.join(app_path, 'templates/components', class_path, "#{dashed_file_name}.hbs")
18
18
  template "component.template.hbs", template_path
@@ -13,14 +13,14 @@ module Ember
13
13
  class_option :object, :type => :boolean, :default => false, :desc => "Create an Ember.ObjectController to represent a single object."
14
14
 
15
15
  def create_controller_files
16
- file_path = File.join(app_path, 'controllers', class_path, "#{file_name}.js.es6")
16
+ file_path = File.join(app_path, 'controllers', class_path, "#{file_name}.es6")
17
17
 
18
18
  if options.array?
19
- template "array_controller.js.es6", file_path
19
+ template "array_controller.es6", file_path
20
20
  elsif options.object?
21
- template "object_controller.js.es6", file_path
21
+ template "object_controller.es6", file_path
22
22
  else
23
- template "controller.js.es6", file_path
23
+ template "controller.es6", file_path
24
24
  end
25
25
  end
26
26
  end
@@ -44,6 +44,10 @@ module Ember
44
44
  (class_path + [file_name]).map!{ |m| m.camelize }.join()
45
45
  end
46
46
 
47
+ def require_name
48
+ (class_path + [file_name]).map!{ |m| m.dasherize }.join('/')
49
+ end
50
+
47
51
  def handlebars_template_path
48
52
  File.join(class_path, file_name).gsub(/^\//, '')
49
53
  end
@@ -0,0 +1,150 @@
1
+ require 'net/http'
2
+ require 'uri'
3
+ require 'fileutils'
4
+
5
+
6
+ # Based on https://github.com/emberjs/ember-rails/blob/master/lib/generators/ember/install_generator.rb
7
+ module Ember
8
+ module Generators
9
+ class InstallGenerator < ::Rails::Generators::Base
10
+
11
+ class InvalidChannel < ::Thor::Error; end
12
+ class ConflictingOptions < ::Thor::Error; end
13
+ class Deprecated < ::Thor::Error; end
14
+ class InsufficientOptions < ::Thor::Error; end
15
+
16
+ ::InvalidChannel = InvalidChannel
17
+ ::ConflictingOptions = ConflictingOptions
18
+ ::Deprecated = Deprecated
19
+ ::InsufficientOptions = InsufficientOptions
20
+
21
+ desc "Install Ember.js into your vendor folder"
22
+ class_option :channel,
23
+ :type => :string,
24
+ :required => false,
25
+ :desc => "Ember release channel Choose between 'release', 'beta' or 'canary'"
26
+ class_option :ember_only,
27
+ :type => :boolean,
28
+ :required => false,
29
+ :desc => "Only download Ember.",
30
+ :aliases => '--ember'
31
+ class_option :ember_data_only,
32
+ :type => :boolean,
33
+ :required => false,
34
+ :desc => "Only download ember-data",
35
+ :aliases => '--ember-data'
36
+ class_option :tag,
37
+ :type => :string,
38
+ :required => false,
39
+ :desc => "Download tagged release use syntax v1.0.0-beta.3/ember-data & v1.0.0-rc.8/ember"
40
+
41
+ def initialize(args = [], options = {}, config = {})
42
+ super(args, options, config)
43
+ check_options
44
+ process_options
45
+ end
46
+
47
+
48
+ def ember
49
+ return if options.ember_data_only?
50
+
51
+ get_ember_for(:development)
52
+ get_ember_for(:production)
53
+ rescue Thor::Error
54
+ say('WARNING: no ember files on this channel or tag' , :yellow)
55
+ end
56
+
57
+ def ember_data
58
+ return if options.ember_only?
59
+
60
+ get_ember_for(:development, ember_data_channel, 'ember-data')
61
+ get_ember_for(:production, ember_data_channel, 'ember-data')
62
+ rescue Thor::Error
63
+ say('WARNING: no ember-data files on this channel or tag' , :yellow)
64
+ end
65
+
66
+ private
67
+
68
+ def get_ember_for(environment, chan = channel, name = 'ember')
69
+ file_name = environment == :production ? "#{name}.prod.js" : "#{name}.js"
70
+ create_file "vendor/assets/javascripts/#{file_name}" do
71
+ fetch "#{base_url}/#{chan}/#{file_name_for(name, environment)}", "vendor/assets/javascripts/#{file_name}"
72
+ end
73
+ end
74
+
75
+ def ember_data_channel
76
+ if channel == :release
77
+ say_status("warning:", 'Ember Data is not available on the :release channel. Falling back to beta channel.' , :yellow)
78
+ :beta
79
+ else
80
+ channel
81
+ end
82
+ end
83
+
84
+ def file_name_for(component,environment)
85
+ case environment
86
+ when :production
87
+ "#{component}.min.js"
88
+ when :development
89
+ "#{component}.js"
90
+ end
91
+ end
92
+
93
+ def check_options
94
+ if options.channel? && !%w(release beta canary).include?(options[:channel])
95
+ say 'ERROR: channel can either be release, beta or canary', :red
96
+ raise InvalidChannel
97
+ end
98
+ if options.channel? && options.tag?
99
+ say 'ERROR: conflicting options. --tag and --channel. --tag is incompatible with other options', :red
100
+ raise ConflictingOptions
101
+ end
102
+ if options.tag? && !(options.ember_only? || options.ember_data_only?)
103
+ say 'ERROR: insufficient options. --tag needs to be combined with eithe --ember or --ember-data', :red
104
+ raise InsufficientOptions
105
+ end
106
+ end
107
+
108
+ def process_options
109
+ if options.tag?
110
+ @channel = "tags/#{options.tag}"
111
+ end
112
+ end
113
+
114
+ def base_url
115
+ 'http://builds.emberjs.com'
116
+ end
117
+
118
+ def channel
119
+ if options.channel
120
+ @channel ||= options[:channel]
121
+ else
122
+ @channel ||= :release
123
+ end
124
+ end
125
+
126
+ def fetch(from, to)
127
+ message = "#{from} -> #{to}"
128
+ say_status("downloading:", message , :green)
129
+
130
+ uri = URI(from)
131
+ output = StringIO.new
132
+ output.puts "// Fetched from channel: #{channel}, with url " + uri.to_s
133
+ output.puts "// Fetched on: " + Time.now.utc.iso8601.to_s
134
+ response = Net::HTTP.get_response(uri)
135
+ case response.code
136
+ when '404'
137
+ say "ERROR: Error reading the content from the channel with url #{from}. File not found" , :red
138
+ raise Thor::Error
139
+ when '200'
140
+ output.puts response.body.force_encoding("UTF-8")
141
+ else
142
+ say "ERROR: Unexpected error with status #{response.code} reading the content from the channel with url #{from}." , :red
143
+ raise Thor::Error
144
+ end
145
+ output.rewind
146
+ content = output.read
147
+ end
148
+ end
149
+ end
150
+ end
@@ -10,8 +10,13 @@ module Ember
10
10
  argument :attributes, :type => :array, :default => [], :banner => "field[:type] field[:type] ..."
11
11
 
12
12
  def create_model_files
13
- file_path = File.join(app_path, 'models', class_path, "#{file_name.singularize}.js.es6")
14
- template "model.js.es6", file_path
13
+ file_path = File.join(app_path, 'models', class_path, "#{file_name.singularize}.es6")
14
+ template "model.es6", file_path
15
+ end
16
+
17
+ def create_test_files
18
+ file_path = File.join('test', 'models', class_path, "#{file_name.singularize}_test.es6")
19
+ template "test/model.es6", file_path
15
20
  end
16
21
 
17
22
  private
@@ -25,7 +25,7 @@ module Ember
25
25
  private
26
26
 
27
27
  def inject_into_router_file(name)
28
- router_file = "#{config_path}/router.js.es6"
28
+ router_file = "#{config_path}/router.es6"
29
29
  inject_into_file(router_file, :after => /^.*Router.map\(function\(\) \{*$/) do
30
30
  "\n this.resource('#{name.pluralize}');"
31
31
  end
@@ -10,8 +10,8 @@ module Ember
10
10
  desc "Creates a new Ember.js route"
11
11
 
12
12
  def create_route_files
13
- file_path = File.join(app_path, 'routes', class_path, "#{file_name}.js.es6")
14
- template "route.js.es6", file_path
13
+ file_path = File.join(app_path, 'routes', class_path, "#{file_name}.es6")
14
+ template "route.es6", file_path
15
15
  end
16
16
  end
17
17
  end
@@ -11,7 +11,7 @@ module Ember
11
11
  class_option :object, :type => :boolean, :default => false, :desc => "Create an Ember.ObjectController to represent a single object"
12
12
 
13
13
  def create_route_files
14
- create_resource_files_for(:route, 'js.es6')
14
+ create_resource_files_for(:route, 'es6')
15
15
  inject_into_router_file(file_name)
16
16
  end
17
17
 
@@ -21,6 +21,12 @@ module Ember
21
21
  template "scaffold/template/form.hbs", File.join(app_path, 'templates', file_name.pluralize, 'form.hbs')
22
22
  end
23
23
 
24
+ def create_tests
25
+ ["route"].each do |type|
26
+ create_test_files_for(type)
27
+ end
28
+ end
29
+
24
30
  private
25
31
 
26
32
  def create_resource_files_for(type, extension)
@@ -32,8 +38,17 @@ module Ember
32
38
  end
33
39
  end
34
40
 
41
+ def create_test_files_for(type)
42
+ resource = file_name.pluralize
43
+
44
+ [:edit, :index, :new, :show].each do |action|
45
+ object = "#{resource}_#{action}_#{type}".camelize
46
+ template "test/#{type}.es6", File.join('test', type.pluralize, "#{resource}/#{action}_test.es6"), object: object, action: action
47
+ end
48
+ end
49
+
35
50
  def inject_into_router_file(name)
36
- router_file = "#{config_path}/router.js.es6"
51
+ router_file = "#{config_path}/router.es6"
37
52
  js = <<-JS
38
53
 
39
54
  this.resource('#{name.pluralize}', function() {
@@ -49,4 +64,3 @@ module Ember
49
64
  end
50
65
  end
51
66
  end
52
-
@@ -0,0 +1,18 @@
1
+ require "rails/generators"
2
+
3
+ begin
4
+ require "generators/serializer/serializer_generator"
5
+ rescue LoadError
6
+ # TODO: Make this primary when active_model_serializers 0.9.0 is final
7
+ require "active_model/serializer/generators/serializer/serializer_generator"
8
+ end
9
+
10
+ module Rails
11
+ module Generators
12
+ SerializerGenerator.class_eval do
13
+ def create_serializer_file
14
+ template 'serializer.rb', File.join('config/serializers', class_path, "#{file_name}_serializer.rb")
15
+ end
16
+ end
17
+ end
18
+ end