embork 0.0.4

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 +7 -0
  2. data/.gitignore +22 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +29 -0
  6. data/Rakefile +5 -0
  7. data/TODO.md +16 -0
  8. data/bin/embork +63 -0
  9. data/blueprint/Borkfile +42 -0
  10. data/blueprint/Gemfile +13 -0
  11. data/blueprint/README.md +25 -0
  12. data/blueprint/app/app.js +11 -0
  13. data/blueprint/app/components/.gitkeep +0 -0
  14. data/blueprint/app/controllers/.gitkeep +0 -0
  15. data/blueprint/app/helpers/.gitkeep +0 -0
  16. data/blueprint/app/index.html.erb +18 -0
  17. data/blueprint/app/initializers/.gitkeep +0 -0
  18. data/blueprint/app/mixins/.gitkeep +0 -0
  19. data/blueprint/app/models/.gitkeep +0 -0
  20. data/blueprint/app/router.js +8 -0
  21. data/blueprint/app/routes/.gitkeep +0 -0
  22. data/blueprint/app/routes/index.js +1 -0
  23. data/blueprint/app/styles/.gitkeep +0 -0
  24. data/blueprint/app/styles/app.scss +3 -0
  25. data/blueprint/app/templates/.gitkeep +0 -0
  26. data/blueprint/app/templates/application.hbs +3 -0
  27. data/blueprint/app/templates/components/.gitkeep +0 -0
  28. data/blueprint/app/utils/.gitkeep +0 -0
  29. data/blueprint/app/views/.gitkeep +0 -0
  30. data/blueprint/bower.json +16 -0
  31. data/blueprint/bowerrc +3 -0
  32. data/blueprint/config/development/application.css +0 -0
  33. data/blueprint/config/development/application.js +12 -0
  34. data/blueprint/config/production/application.css +0 -0
  35. data/blueprint/config/production/application.js +12 -0
  36. data/blueprint/dotfiles +3 -0
  37. data/blueprint/erbfiles +5 -0
  38. data/blueprint/gitignore +17 -0
  39. data/blueprint/jshintrc +40 -0
  40. data/blueprint/package.json +15 -0
  41. data/blueprint/static/.gitkeep +0 -0
  42. data/blueprint/tests/.jshintrc +71 -0
  43. data/blueprint/tests/helpers/resolver.js +7 -0
  44. data/blueprint/tests/helpers/start-app.js +29 -0
  45. data/blueprint/tests/index.html +44 -0
  46. data/blueprint/tests/test-helper.js +6 -0
  47. data/blueprint/tests/test-loader.js +8 -0
  48. data/blueprint/tests/unit/.gitkeep +0 -0
  49. data/embork.gemspec +41 -0
  50. data/lib/embork.rb +23 -0
  51. data/lib/embork/borkfile.rb +148 -0
  52. data/lib/embork/build_versions.rb +21 -0
  53. data/lib/embork/builder.rb +156 -0
  54. data/lib/embork/environment.rb +90 -0
  55. data/lib/embork/forwarder.rb +23 -0
  56. data/lib/embork/generator.rb +184 -0
  57. data/lib/embork/logger.rb +40 -0
  58. data/lib/embork/pushstate.rb +16 -0
  59. data/lib/embork/server.rb +80 -0
  60. data/lib/embork/sprockets.rb +6 -0
  61. data/lib/embork/sprockets/ember_handlebars_compiler.rb +75 -0
  62. data/lib/embork/sprockets/es6_module_transpiler.rb +120 -0
  63. data/lib/embork/sprockets/frameworks.rb +34 -0
  64. data/lib/embork/sprockets/helpers.rb +45 -0
  65. data/lib/embork/sprockets/support/es6-module-transpiler.js +7190 -0
  66. data/lib/embork/sprockets/support/node_runner.js +22 -0
  67. data/lib/embork/version.rb +3 -0
  68. data/lib/string/strip.rb +27 -0
  69. data/spec/embork/borkfile/Borkfile.empty +0 -0
  70. data/spec/embork/borkfile/Borkfile.full +32 -0
  71. data/spec/embork/borkfile/Borkfile.rack +5 -0
  72. data/spec/embork/borkfile/Borkfile.relative +3 -0
  73. data/spec/embork/borkfile_spec.rb +119 -0
  74. data/spec/embork/builder/Borkfile +20 -0
  75. data/spec/embork/builder/app/index.html.erb +9 -0
  76. data/spec/embork/builder/config/production/application.css +0 -0
  77. data/spec/embork/builder/config/production/application.js +0 -0
  78. data/spec/embork/builder/config/production/deeply/nested/asset.js +0 -0
  79. data/spec/embork/builder/static/images/image.png +0 -0
  80. data/spec/embork/builder_spec.rb +95 -0
  81. data/spec/embork/environment_spec.rb +78 -0
  82. data/spec/embork/generator_spec.rb +84 -0
  83. data/spec/embork/server/example_app/Borkfile +1 -0
  84. data/spec/embork/server/example_app/app/app.js.erb +3 -0
  85. data/spec/embork/server/example_app/app/css/main.sass +3 -0
  86. data/spec/embork/server/example_app/app/index.html +9 -0
  87. data/spec/embork/server/example_app/build/development/application-12345.js +14 -0
  88. data/spec/embork/server/example_app/build/development/index.html +9 -0
  89. data/spec/embork/server/example_app/components/some/component.js +6 -0
  90. data/spec/embork/server/example_app/config/development/application.css +4 -0
  91. data/spec/embork/server/example_app/config/development/application.js +2 -0
  92. data/spec/embork/server/example_app/config/production/application.css +4 -0
  93. data/spec/embork/server/example_app/config/production/application.js +4 -0
  94. data/spec/embork/server/example_app/static/fonts/.gitkeep +0 -0
  95. data/spec/embork/server/example_app/static/images/.gitkeep +0 -0
  96. data/spec/embork/server/example_app/static/images/image.png +0 -0
  97. data/spec/embork/server/specimen.css +7 -0
  98. data/spec/embork/server/specimen.js +14 -0
  99. data/spec/embork/server_spec.rb +152 -0
  100. data/spec/embork/sprockets/ember_handlebars_compiler/amd_template.js +26 -0
  101. data/spec/embork/sprockets/ember_handlebars_compiler/cjs_template.js +24 -0
  102. data/spec/embork/sprockets/ember_handlebars_compiler/global_handlebars_template.js +17 -0
  103. data/spec/embork/sprockets/ember_handlebars_compiler/global_hbs_template.js +17 -0
  104. data/spec/embork/sprockets/ember_handlebars_compiler/my/hbs/template.hbs +5 -0
  105. data/spec/embork/sprockets/ember_handlebars_compiler/my_handlebars_template.js.handlebars +5 -0
  106. data/spec/embork/sprockets/ember_handlebars_compiler/my_hbs_template.js.hbs +5 -0
  107. data/spec/embork/sprockets/ember_handlebars_compiler/transformed_template.js +26 -0
  108. data/spec/embork/sprockets/ember_handlebars_compiler_spec.rb +82 -0
  109. data/spec/embork/sprockets/es6_module_transpiler/app/my/transformed/module.js +13 -0
  110. data/spec/embork/sprockets/es6_module_transpiler/app/my_fancy_module.js +13 -0
  111. data/spec/embork/sprockets/es6_module_transpiler/compiled_amd.js +20 -0
  112. data/spec/embork/sprockets/es6_module_transpiler/compiled_cjs.js +20 -0
  113. data/spec/embork/sprockets/es6_module_transpiler/component.js +1 -0
  114. data/spec/embork/sprockets/es6_module_transpiler/components/some_component.js +1 -0
  115. data/spec/embork/sprockets/es6_module_transpiler/config/application.js +1 -0
  116. data/spec/embork/sprockets/es6_module_transpiler/manifest.js +20 -0
  117. data/spec/embork/sprockets/es6_module_transpiler/namespaced.js +20 -0
  118. data/spec/embork/sprockets/es6_module_transpiler/transformed.js +20 -0
  119. data/spec/embork/sprockets/es6_module_transpiler_spec.rb +97 -0
  120. data/spec/spec_helper.rb +13 -0
  121. metadata +468 -0
@@ -0,0 +1,22 @@
1
+ (function(program, execJS) { execJS(program) })(function(module, exports, console) {
2
+ #{source}
3
+ }, function(program) {
4
+ var output, print = function(string) {
5
+ process.stdout.write('' + string);
6
+ };
7
+ try {
8
+ result = program();
9
+ if (typeof result == 'undefined' && result !== null) {
10
+ print('["ok"]');
11
+ } else {
12
+ try {
13
+ print(JSON.stringify(['ok', result]));
14
+ } catch (err) {
15
+ print('["err"]');
16
+ }
17
+ }
18
+ } catch (err) {
19
+ print(JSON.stringify(['err', '' + err]));
20
+ }
21
+ });
22
+
@@ -0,0 +1,3 @@
1
+ class Embork
2
+ VERSION = "0.0.4"
3
+ end
@@ -0,0 +1,27 @@
1
+ # Borrowed from activesupport, but without the :try method
2
+
3
+ class String
4
+ # Strips indentation in heredocs.
5
+ #
6
+ # For example in
7
+ #
8
+ # if options[:usage]
9
+ # puts <<-USAGE.strip_heredoc
10
+ # This command does such and such.
11
+ #
12
+ # Supported options are:
13
+ # -h This message
14
+ # ...
15
+ # USAGE
16
+ # end
17
+ #
18
+ # the user would see the usage message aligned against the left margin.
19
+ #
20
+ # Technically, it looks for the least indented line in the whole string, and removes
21
+ # that amount of leading whitespace.
22
+ def strip_heredoc
23
+ matches = scan(/^[ \t]*(?=\S)/).min
24
+ indent = (matches.respond_to? :size) ? matches.size : 0
25
+ gsub(/^[ \t]{#{indent}}/, '')
26
+ end
27
+ end
File without changes
@@ -0,0 +1,32 @@
1
+ # vim: set ft=ruby:
2
+
3
+ keep_old_versions 10
4
+
5
+ set_project_root '/tmp/project_root'
6
+
7
+ append_asset_path 'foo/css'
8
+
9
+ es6_namespace 'my-package'
10
+
11
+ add_sprockets_helpers do
12
+ def empty_span
13
+ '<span></span>'
14
+ end
15
+ end
16
+
17
+ register_postprocessor 'application/javascript', class MyPostProcessor; end
18
+ register_engine '.stuff', class MyEngine; end
19
+
20
+ compile_html [ 'index.html' ]
21
+
22
+ use_framework :bootstrap
23
+
24
+ configure :development do
25
+ append_asset_path 'foo/dev/js'
26
+ compile_html 'dev.html'
27
+ end
28
+
29
+ configure :production do
30
+ append_asset_path 'foo/prod/js'
31
+ compile_html 'prod.html'
32
+ end
@@ -0,0 +1,5 @@
1
+ # vim: set ft=ruby:
2
+
3
+ class ::MyRackApp
4
+ end
5
+ set_backend MyRackApp.new
@@ -0,0 +1,3 @@
1
+ # vim: set ft=ruby:
2
+
3
+ set_project_root 'project_root'
@@ -0,0 +1,119 @@
1
+ require 'spec_helper'
2
+ require 'embork/borkfile'
3
+
4
+ borkfile_dir = File.expand_path '../borkfile', __FILE__
5
+ empty_borkfile_path = File.join borkfile_dir, 'Borkfile.empty'
6
+ full_borkfile_path = File.join borkfile_dir, 'Borkfile.full'
7
+ relative_root_borkfile_path = File.join borkfile_dir, 'Borkfile.relative'
8
+ rack_based_borkfile_path = File.join borkfile_dir, 'Borkfile.rack'
9
+
10
+ describe 'Embork::Borkfile' do
11
+ describe 'defaults' do
12
+ let(:borkfile) { Embork::Borkfile.new empty_borkfile_path }
13
+
14
+ it 'uses the files directory as project root' do
15
+ expect(borkfile.project_root).to match(/.*\/embork\/spec\/embork\/borkfile$/)
16
+ end
17
+
18
+ it 'includes source path' do
19
+ expect(borkfile.asset_paths).to include('app')
20
+ end
21
+
22
+ it 'includes :development config in path' do
23
+ expect(borkfile.asset_paths).to include('config/development')
24
+ end
25
+
26
+ it 'includes components path' do
27
+ expect(borkfile.asset_paths).to include('components')
28
+ end
29
+
30
+ it 'has no defined helpers' do
31
+ expect(borkfile.helpers).to be_empty
32
+ end
33
+
34
+ it 'has no html files' do
35
+ expect(borkfile.html).to be_empty
36
+ end
37
+
38
+ it 'keeps five old versions' do
39
+ expect(borkfile.keep_old_versions).to eq(5)
40
+ end
41
+
42
+ it 'has no es6 module namespace defined' do
43
+ expect(borkfile.es6_namespace).to eq(nil)
44
+ end
45
+ end
46
+
47
+ describe 'basic config' do
48
+ let(:borkfile) { Embork::Borkfile.new full_borkfile_path }
49
+
50
+ it 'doesn\'t expand absolute paths' do
51
+ expect(borkfile.project_root).to eq('/tmp/project_root')
52
+ end
53
+
54
+ it 'adds arbitrary asset_paths' do
55
+ expect(borkfile.asset_paths).to include('foo/css')
56
+ end
57
+
58
+ it 'adds arbitrary helpers' do
59
+ expect(borkfile.helpers[0].call).to eq(:empty_span)
60
+ end
61
+
62
+ it 'evaluates code in the current enviroment' do
63
+ expect(borkfile.asset_paths).to include('foo/dev/js')
64
+ end
65
+
66
+ it 'does not evaluate code from other environments' do
67
+ expect(borkfile.asset_paths).not_to include('foo/prod/js')
68
+ end
69
+
70
+ it 'registered sprockets post-processor' do
71
+ expect(borkfile.sprockets_postprocessors.length).to eq(1)
72
+ end
73
+
74
+ it 'registered sprockets engines' do
75
+ expect(borkfile.sprockets_engines.length).to eq(1)
76
+ end
77
+
78
+ it 'specifies html files to build by environment' do
79
+ expect(borkfile.html).to match_array [ 'index.html', 'dev.html' ]
80
+ end
81
+
82
+ it 'does not pick up other environment\'s html files' do
83
+ expect(borkfile.html).not_to include 'prod.html'
84
+ end
85
+
86
+ it 'uses pushstate middleware to respond with index.html' do
87
+ expect(borkfile.backend).to eq(:static_index)
88
+ end
89
+
90
+ it 'keeps the specified number of old versions' do
91
+ expect(borkfile.keep_old_versions).to eq(10)
92
+ end
93
+
94
+ it 'sets up an es6 module namespace' do
95
+ expect(borkfile.es6_namespace).to eq('my-package')
96
+ end
97
+
98
+ it 'includes frameworks' do
99
+ expect(borkfile.frameworks).to include 'bootstrap'
100
+ expect(borkfile.frameworks).not_to include 'compass'
101
+ end
102
+ end
103
+
104
+ describe 'relative root' do
105
+ let(:borkfile) { Embork::Borkfile.new relative_root_borkfile_path }
106
+
107
+ it 'expands the relative path' do
108
+ expect(borkfile.project_root).to match(/.*\/embork\/spec\/embork\/borkfile\/project_root$/)
109
+ end
110
+ end
111
+
112
+ describe 'rack backed' do
113
+ let(:borkfile) { Embork::Borkfile.new rack_based_borkfile_path }
114
+
115
+ it 'specifies that any missing routes are driven by a rack app' do
116
+ expect(borkfile.backend.class.name.to_sym).to eq(:MyRackApp)
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,20 @@
1
+ # vim: set ft=ruby:
2
+ # Borkfile
3
+
4
+ set_project_root '.'
5
+
6
+ add_sprockets_helpers do
7
+ end
8
+
9
+ compile_html 'index.html'
10
+
11
+ es6_namespace 'my-package'
12
+
13
+ configure :development do
14
+ end
15
+
16
+ configure :production do
17
+ end
18
+
19
+ set_backend :static_index
20
+
@@ -0,0 +1,9 @@
1
+ <!DOCTYPE HTML>
2
+ <html>
3
+ <head>
4
+ <%= javascript_include_tag '/application.js' %>
5
+ <%= stylesheet_link_tag '/application.css' %>
6
+ </head>
7
+ <body>
8
+ </body>
9
+ </html>
File without changes
@@ -0,0 +1,95 @@
1
+ require 'spec_helper'
2
+
3
+ require 'embork/borkfile'
4
+ require 'embork/environment'
5
+ require 'embork/builder'
6
+
7
+ require 'pathname'
8
+
9
+ describe 'Embork::Builder' do
10
+ let(:root_path) { File.expand_path '../builder', __FILE__ }
11
+ let(:borkfile) { Embork::Borkfile.new File.join(root_path, 'Borkfile'), :production }
12
+ let(:builder) { Embork::Builder.new borkfile }
13
+ let(:build_directory) { File.join(root_path, 'build', 'production') }
14
+ let(:expected_files) do
15
+ [
16
+ 'application-%s.css',
17
+ 'application-%s.js',
18
+ 'deeply/nested/asset-%s.js',
19
+ 'images/image.png',
20
+ 'index-%s.html',
21
+ 'index.html'
22
+ ]
23
+ end
24
+
25
+ after(:each) { FileUtils.rm_rf File.join(root_path, '.cache') }
26
+ after(:all) do
27
+ Embork::Sprockets::ES6ModuleTranspiler.namespace = nil
28
+ Embork::Sprockets::ES6ModuleTranspiler.transform = nil
29
+ end
30
+
31
+ let(:built_files) do
32
+ [].tap do |files|
33
+ Dir.glob(File.join(build_directory, '**/*')) do |file|
34
+ if !File.directory? file
35
+ path = Pathname.new(file)
36
+ files.push path.relative_path_from(Pathname.new build_directory).to_s
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ before(:each) { @asset_bundle_version = builder.build }
43
+ after(:each) { builder.clean! }
44
+
45
+ it 'builds assets' do
46
+ expect(File.exists? build_directory).to be true
47
+
48
+ expect(built_files).to match_array(expected_files.map{ |f| f % [ @asset_bundle_version ] })
49
+ end
50
+
51
+ context '#clean' do
52
+
53
+ let(:older_stamp) { Time.now - 10 }
54
+ let(:expected_files) do
55
+ (1..4).map do |delta|
56
+ version = (older_stamp - delta).to_s.gsub(/ -| |-|:/, '.')
57
+ "application-#{version}.js"
58
+ end.push "application-#{@asset_bundle_version}.js"
59
+ end
60
+
61
+ let(:unexpected_files) do
62
+ (5..10).map do |delta|
63
+ version = (older_stamp - delta).to_s.gsub(/ -| |-|:/, '.')
64
+ "application-#{version}.js"
65
+ end
66
+ end
67
+
68
+ before(:each) do
69
+ (1..10).each do |delta|
70
+ version = (older_stamp - delta).to_s.gsub(/ -| |-|:/, '.')
71
+ FileUtils.touch File.join(build_directory, "application-#{version}.js")
72
+ end
73
+ end
74
+
75
+ it 'keeps :keep_old_versions number of versions' do
76
+ # This is what we're testing
77
+ builder.clean
78
+
79
+ expect(built_files).to include(*expected_files)
80
+ expect(built_files).not_to include(*unexpected_files)
81
+ end
82
+ end
83
+
84
+ context 'asset_helpers' do
85
+ let(:index_read) { File.read File.join(build_directory, 'index.html') }
86
+
87
+ it 'it compiles javascript tags to use bundled assets' do
88
+ expect(index_read).to include(%{<script src="/application-#{@asset_bundle_version}.js"></script>})
89
+ end
90
+
91
+ it 'it compiles style tags to use bundled assets' do
92
+ expect(index_read).to include(%{<link href="/application-#{@asset_bundle_version}.css" rel="stylesheet" type="text/css" media="all"></link>})
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,78 @@
1
+ require 'spec_helper'
2
+ require 'embork/environment'
3
+
4
+ require 'ostruct'
5
+
6
+
7
+ describe 'Embork::Environment' do
8
+
9
+ let(:my_postprocessor) { class MyPostProcessor; end }
10
+ let(:my_preprocessor) { class MyPreProcessor; end }
11
+
12
+ let(:my_engine) { class MyEngine; end }
13
+
14
+ let(:borkfile) { OpenStruct.new({
15
+ :asset_paths => [ 'foo/bar/assets' ],
16
+ :helpers => [ Proc.new { def my_helper; end; } ],
17
+ :project_root => '/project_root',
18
+ :sprockets_postprocessors => [
19
+ { :mime_type => 'application/bork', :klass => my_postprocessor }
20
+ ],
21
+ :sprockets_preprocessors => [
22
+ { :mime_type => 'application/bork', :klass => my_preprocessor }
23
+ ],
24
+ :sprockets_engines => [
25
+ { :extension => '.bork', :klass => my_engine }
26
+ ],
27
+ :es6_namespace => 'my-package',
28
+ :frameworks => [ 'bootstrap', 'compass' ]
29
+ })}
30
+
31
+ let (:environment) { Embork::Environment.new borkfile }
32
+
33
+ after(:all) do
34
+ Embork::Sprockets::ES6ModuleTranspiler.namespace = nil
35
+ Embork::Sprockets::ES6ModuleTranspiler.transform = nil
36
+ end
37
+
38
+ it 'respects the project root' do
39
+ expect(environment.sprockets_environment.root).to eq('/project_root')
40
+ end
41
+
42
+ it 'respects asset paths' do
43
+ expect(environment.sprockets_environment.paths).to include('/project_root/foo/bar/assets')
44
+ end
45
+
46
+ it 'adds helpers to the context class' do
47
+ expect(environment.sprockets_environment.context_class.instance_methods).to include(:my_helper)
48
+ end
49
+
50
+ it 'adds post-processers by mime type' do
51
+ expect(environment.sprockets_environment.postprocessors('application/bork')).to include(my_postprocessor)
52
+ end
53
+
54
+ it 'adds pre-processers by mime type' do
55
+ expect(environment.sprockets_environment.preprocessors('application/bork')).to include(my_preprocessor)
56
+ end
57
+
58
+ it 'adds engines my extension' do
59
+ expect(environment.sprockets_environment.engines('.bork')).to eq(my_engine)
60
+ end
61
+
62
+ it 'uses a file-based persistent cache' do
63
+ expect(environment.sprockets_environment.cache.class).to eq(Embork::Environment::ErblessCache)
64
+ end
65
+
66
+ it 'sets up a namespace on the es6 processor' do
67
+ expect(Embork::Sprockets::ES6ModuleTranspiler.namespace).to eq('my-package')
68
+ end
69
+
70
+ it 'adds compass to the asset path' do
71
+ expect(environment.sprockets_environment.paths.to_s).to match /\/compass-.*?\/frameworks\/compass\/stylesheets/
72
+ end
73
+
74
+ it 'adds bootstrap to the asset path' do
75
+ expect(environment.sprockets_environment.paths.to_s).to match /\/bootstrap-sass-.*?\/vendor\/assets\/stylesheets/
76
+ end
77
+
78
+ end
@@ -0,0 +1,84 @@
1
+ require 'spec_helper'
2
+ require 'embork/generator'
3
+
4
+ describe 'Embork::Generator' do
5
+
6
+ let(:app_name) { 'my-app' }
7
+ let(:working_dir) { File.expand_path '../generator', __FILE__ }
8
+ let(:project_dir) { File.join working_dir, app_name }
9
+ let(:generator) do
10
+ Embork::Generator.new app_name, {
11
+ :use_ember_data => false,
12
+ :directory => project_dir
13
+ }
14
+ end
15
+
16
+ it 'loads the list of files to be processed by ERB' do
17
+ expect(generator.erb_files).to match_array([
18
+ "Borkfile", "app/app.js", "app/index.html.erb", "bower.json", "package.json"
19
+ ])
20
+ end
21
+
22
+ it 'loads the list of files to be moved to dot-files' do
23
+ expect(generator.dot_files).to match_array([
24
+ "bowerrc", "gitignore", "jshintrc"
25
+ ])
26
+ end
27
+
28
+ it 'defaults to the correct directory' do
29
+ expect(generator.project_path).to eq(project_dir)
30
+ end
31
+
32
+ context '#project_path' do
33
+ it 'defaults to a path named for the package, relative to the caller' do
34
+ g = Embork::Generator.new(app_name, use_ember_data: false, directory: nil)
35
+ expected_path = File.join(Dir.pwd, app_name)
36
+ expect(g.project_path).to eq(expected_path)
37
+ end
38
+
39
+ it 'expands a relative path' do
40
+ directory = 'some/other/dir'
41
+ g = Embork::Generator.new(app_name, use_ember_data: false, directory: directory)
42
+ expected_path = File.expand_path directory, Dir.pwd
43
+ expect(g.project_path).to eq(expected_path)
44
+ end
45
+ end
46
+
47
+ context '#generate' do
48
+ before(:each) { generator.generate }
49
+ after(:each) { FileUtils.rm_rf project_dir }
50
+
51
+ it 'generates a blank project' do
52
+ Dir.chdir project_dir do
53
+ files = [ '.',
54
+ '..',
55
+ '.git',
56
+ '.bowerrc',
57
+ '.gitignore',
58
+ '.jshintrc',
59
+ 'Borkfile',
60
+ 'Gemfile',
61
+ 'Gemfile.lock',
62
+ 'README.md',
63
+ 'app',
64
+ 'bower.json',
65
+ 'components',
66
+ 'config',
67
+ 'dotfiles',
68
+ 'erbfiles',
69
+ 'node_modules',
70
+ 'package.json',
71
+ 'static',
72
+ 'tests' ]
73
+ expect(Dir.glob('*', File::FNM_DOTMATCH)).to match_array(files)
74
+ end
75
+ end
76
+
77
+ it 'processes erb' do
78
+ Dir.chdir project_dir do
79
+ expect(File.read('app/app.js')).to include('my-app')
80
+ end
81
+ end
82
+ end
83
+
84
+ end