ember-appkit-rails 0.4.0 → 0.5.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.
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