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.
- checksums.yaml +7 -0
- data/.gitignore +22 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +5 -0
- data/TODO.md +16 -0
- data/bin/embork +63 -0
- data/blueprint/Borkfile +42 -0
- data/blueprint/Gemfile +13 -0
- data/blueprint/README.md +25 -0
- data/blueprint/app/app.js +11 -0
- data/blueprint/app/components/.gitkeep +0 -0
- data/blueprint/app/controllers/.gitkeep +0 -0
- data/blueprint/app/helpers/.gitkeep +0 -0
- data/blueprint/app/index.html.erb +18 -0
- data/blueprint/app/initializers/.gitkeep +0 -0
- data/blueprint/app/mixins/.gitkeep +0 -0
- data/blueprint/app/models/.gitkeep +0 -0
- data/blueprint/app/router.js +8 -0
- data/blueprint/app/routes/.gitkeep +0 -0
- data/blueprint/app/routes/index.js +1 -0
- data/blueprint/app/styles/.gitkeep +0 -0
- data/blueprint/app/styles/app.scss +3 -0
- data/blueprint/app/templates/.gitkeep +0 -0
- data/blueprint/app/templates/application.hbs +3 -0
- data/blueprint/app/templates/components/.gitkeep +0 -0
- data/blueprint/app/utils/.gitkeep +0 -0
- data/blueprint/app/views/.gitkeep +0 -0
- data/blueprint/bower.json +16 -0
- data/blueprint/bowerrc +3 -0
- data/blueprint/config/development/application.css +0 -0
- data/blueprint/config/development/application.js +12 -0
- data/blueprint/config/production/application.css +0 -0
- data/blueprint/config/production/application.js +12 -0
- data/blueprint/dotfiles +3 -0
- data/blueprint/erbfiles +5 -0
- data/blueprint/gitignore +17 -0
- data/blueprint/jshintrc +40 -0
- data/blueprint/package.json +15 -0
- data/blueprint/static/.gitkeep +0 -0
- data/blueprint/tests/.jshintrc +71 -0
- data/blueprint/tests/helpers/resolver.js +7 -0
- data/blueprint/tests/helpers/start-app.js +29 -0
- data/blueprint/tests/index.html +44 -0
- data/blueprint/tests/test-helper.js +6 -0
- data/blueprint/tests/test-loader.js +8 -0
- data/blueprint/tests/unit/.gitkeep +0 -0
- data/embork.gemspec +41 -0
- data/lib/embork.rb +23 -0
- data/lib/embork/borkfile.rb +148 -0
- data/lib/embork/build_versions.rb +21 -0
- data/lib/embork/builder.rb +156 -0
- data/lib/embork/environment.rb +90 -0
- data/lib/embork/forwarder.rb +23 -0
- data/lib/embork/generator.rb +184 -0
- data/lib/embork/logger.rb +40 -0
- data/lib/embork/pushstate.rb +16 -0
- data/lib/embork/server.rb +80 -0
- data/lib/embork/sprockets.rb +6 -0
- data/lib/embork/sprockets/ember_handlebars_compiler.rb +75 -0
- data/lib/embork/sprockets/es6_module_transpiler.rb +120 -0
- data/lib/embork/sprockets/frameworks.rb +34 -0
- data/lib/embork/sprockets/helpers.rb +45 -0
- data/lib/embork/sprockets/support/es6-module-transpiler.js +7190 -0
- data/lib/embork/sprockets/support/node_runner.js +22 -0
- data/lib/embork/version.rb +3 -0
- data/lib/string/strip.rb +27 -0
- data/spec/embork/borkfile/Borkfile.empty +0 -0
- data/spec/embork/borkfile/Borkfile.full +32 -0
- data/spec/embork/borkfile/Borkfile.rack +5 -0
- data/spec/embork/borkfile/Borkfile.relative +3 -0
- data/spec/embork/borkfile_spec.rb +119 -0
- data/spec/embork/builder/Borkfile +20 -0
- data/spec/embork/builder/app/index.html.erb +9 -0
- data/spec/embork/builder/config/production/application.css +0 -0
- data/spec/embork/builder/config/production/application.js +0 -0
- data/spec/embork/builder/config/production/deeply/nested/asset.js +0 -0
- data/spec/embork/builder/static/images/image.png +0 -0
- data/spec/embork/builder_spec.rb +95 -0
- data/spec/embork/environment_spec.rb +78 -0
- data/spec/embork/generator_spec.rb +84 -0
- data/spec/embork/server/example_app/Borkfile +1 -0
- data/spec/embork/server/example_app/app/app.js.erb +3 -0
- data/spec/embork/server/example_app/app/css/main.sass +3 -0
- data/spec/embork/server/example_app/app/index.html +9 -0
- data/spec/embork/server/example_app/build/development/application-12345.js +14 -0
- data/spec/embork/server/example_app/build/development/index.html +9 -0
- data/spec/embork/server/example_app/components/some/component.js +6 -0
- data/spec/embork/server/example_app/config/development/application.css +4 -0
- data/spec/embork/server/example_app/config/development/application.js +2 -0
- data/spec/embork/server/example_app/config/production/application.css +4 -0
- data/spec/embork/server/example_app/config/production/application.js +4 -0
- data/spec/embork/server/example_app/static/fonts/.gitkeep +0 -0
- data/spec/embork/server/example_app/static/images/.gitkeep +0 -0
- data/spec/embork/server/example_app/static/images/image.png +0 -0
- data/spec/embork/server/specimen.css +7 -0
- data/spec/embork/server/specimen.js +14 -0
- data/spec/embork/server_spec.rb +152 -0
- data/spec/embork/sprockets/ember_handlebars_compiler/amd_template.js +26 -0
- data/spec/embork/sprockets/ember_handlebars_compiler/cjs_template.js +24 -0
- data/spec/embork/sprockets/ember_handlebars_compiler/global_handlebars_template.js +17 -0
- data/spec/embork/sprockets/ember_handlebars_compiler/global_hbs_template.js +17 -0
- data/spec/embork/sprockets/ember_handlebars_compiler/my/hbs/template.hbs +5 -0
- data/spec/embork/sprockets/ember_handlebars_compiler/my_handlebars_template.js.handlebars +5 -0
- data/spec/embork/sprockets/ember_handlebars_compiler/my_hbs_template.js.hbs +5 -0
- data/spec/embork/sprockets/ember_handlebars_compiler/transformed_template.js +26 -0
- data/spec/embork/sprockets/ember_handlebars_compiler_spec.rb +82 -0
- data/spec/embork/sprockets/es6_module_transpiler/app/my/transformed/module.js +13 -0
- data/spec/embork/sprockets/es6_module_transpiler/app/my_fancy_module.js +13 -0
- data/spec/embork/sprockets/es6_module_transpiler/compiled_amd.js +20 -0
- data/spec/embork/sprockets/es6_module_transpiler/compiled_cjs.js +20 -0
- data/spec/embork/sprockets/es6_module_transpiler/component.js +1 -0
- data/spec/embork/sprockets/es6_module_transpiler/components/some_component.js +1 -0
- data/spec/embork/sprockets/es6_module_transpiler/config/application.js +1 -0
- data/spec/embork/sprockets/es6_module_transpiler/manifest.js +20 -0
- data/spec/embork/sprockets/es6_module_transpiler/namespaced.js +20 -0
- data/spec/embork/sprockets/es6_module_transpiler/transformed.js +20 -0
- data/spec/embork/sprockets/es6_module_transpiler_spec.rb +97 -0
- data/spec/spec_helper.rb +13 -0
- metadata +468 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
module Embork::BuildVersions
|
|
2
|
+
VERSION_FORMAT_EXP = /\d{4}\.\d{2}\.\d{2}\.\d{2}\.\d{2}\.\d{2}\.\d{4}/
|
|
3
|
+
|
|
4
|
+
def sorted_versions(project_root)
|
|
5
|
+
build_path = File.join(project_root, 'build', Embork.env.to_s)
|
|
6
|
+
|
|
7
|
+
versions = []
|
|
8
|
+
Find.find(build_path) do |file|
|
|
9
|
+
version = version_name(file)
|
|
10
|
+
versions.push version if version
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# Tidy up!
|
|
14
|
+
versions.uniq!.sort!.reverse!
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def version_name(filename)
|
|
18
|
+
m = File.basename(filename).match VERSION_FORMAT_EXP
|
|
19
|
+
m.nil? ? false : m[0]
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
require 'pathname'
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
require 'find'
|
|
4
|
+
require 'sprockets'
|
|
5
|
+
|
|
6
|
+
require 'embork/environment'
|
|
7
|
+
require 'embork/build_versions'
|
|
8
|
+
|
|
9
|
+
class Embork::Builder
|
|
10
|
+
include Embork::BuildVersions
|
|
11
|
+
|
|
12
|
+
def initialize(borkfile)
|
|
13
|
+
@borkfile = borkfile
|
|
14
|
+
@project_root = @borkfile.project_root
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def build
|
|
18
|
+
@environment = Embork::Environment.new(@borkfile)
|
|
19
|
+
@sprockets_environment = @environment.sprockets_environment
|
|
20
|
+
|
|
21
|
+
@version = Time.now.to_s.gsub(/( -|-| |:)/, '.')
|
|
22
|
+
|
|
23
|
+
@sprockets_environment.context_class.use_bundled_assets = true
|
|
24
|
+
@sprockets_environment.context_class.bundled_version = @version
|
|
25
|
+
|
|
26
|
+
Dir.chdir @project_root do
|
|
27
|
+
config_path = File.join 'config', Embork.env.to_s
|
|
28
|
+
build_path = File.join 'build', Embork.env.to_s
|
|
29
|
+
|
|
30
|
+
asset_list = generate_asset_list config_path
|
|
31
|
+
|
|
32
|
+
manifest_path = File.join build_path, 'manifest.json'
|
|
33
|
+
manifest = Sprockets::Manifest.new(@sprockets_environment, manifest_path)
|
|
34
|
+
manifest.compile(asset_list)
|
|
35
|
+
|
|
36
|
+
# version assets
|
|
37
|
+
asset_list.each do |asset|
|
|
38
|
+
digested_name = manifest.assets[asset]
|
|
39
|
+
gzipped_name = "%s%s" % [ digested_name, '.gz' ]
|
|
40
|
+
versioned_name = generate_versioned_name(asset)
|
|
41
|
+
|
|
42
|
+
# Do the actual renaming and removing of the gzipped file.
|
|
43
|
+
# nginx handles gzipping just fine
|
|
44
|
+
Dir.chdir build_path do
|
|
45
|
+
File.rename digested_name, versioned_name
|
|
46
|
+
FileUtils.rm gzipped_name
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Link the index file since, chances are, you don't want to reconfigure
|
|
51
|
+
# your index file every time you deploy.
|
|
52
|
+
Dir.chdir build_path do
|
|
53
|
+
@borkfile.html.each do |file|
|
|
54
|
+
dirname = File.dirname file
|
|
55
|
+
extname = File.extname file
|
|
56
|
+
basename = File.basename file, extname
|
|
57
|
+
src_format = [ File.join(dirname, basename), @version, extname ]
|
|
58
|
+
FileUtils.ln_sf(("%s-%s%s" % src_format), file)
|
|
59
|
+
end
|
|
60
|
+
end if @borkfile.backend == :static_index
|
|
61
|
+
|
|
62
|
+
static_path = 'static'
|
|
63
|
+
static_pathname = Pathname.new static_path
|
|
64
|
+
static_directories = []
|
|
65
|
+
static_files = []
|
|
66
|
+
Find.find(static_path) do |file|
|
|
67
|
+
relative_name = Pathname.new(file).relative_path_from(static_pathname)
|
|
68
|
+
if FileTest.directory? file
|
|
69
|
+
static_directories.push relative_name
|
|
70
|
+
else
|
|
71
|
+
static_files.push relative_name
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
static_directories.each do |dir|
|
|
76
|
+
Dir.chdir(build_path) { FileUtils.mkdir_p dir }
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
static_files.each do |file|
|
|
80
|
+
src = File.join static_path, file
|
|
81
|
+
dest = File.join build_path, file
|
|
82
|
+
|
|
83
|
+
FileUtils.cp src, dest
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Clean up
|
|
87
|
+
FileUtils.rm manifest_path
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
@version
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def clean
|
|
94
|
+
versions = sorted_versions @project_root
|
|
95
|
+
|
|
96
|
+
# If there are more than our threshold
|
|
97
|
+
if versions.length > @borkfile.keep_old_versions
|
|
98
|
+
|
|
99
|
+
# Grab the versions to keep
|
|
100
|
+
retained_versions = versions[0...@borkfile.keep_old_versions]
|
|
101
|
+
build_path = File.join(@project_root, 'build', Embork.env.to_s)
|
|
102
|
+
|
|
103
|
+
Find.find(build_path) do |file|
|
|
104
|
+
name = File.basename(file)
|
|
105
|
+
|
|
106
|
+
# Skip if this is an unversioned file
|
|
107
|
+
next unless version_name(file)
|
|
108
|
+
|
|
109
|
+
# If any version strings that we should retain are in the file name,
|
|
110
|
+
# skip to next. Otherwise, obliterate.
|
|
111
|
+
if retained_versions.any?{ |version| name.include?(version) }
|
|
112
|
+
next
|
|
113
|
+
else
|
|
114
|
+
Dir.chdir(build_path){ FileUtils.rm file }
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def clean!
|
|
122
|
+
FileUtils.rm_rf File.join(@project_root, 'build', Embork.env.to_s)
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
protected
|
|
126
|
+
|
|
127
|
+
def generate_asset_list(config_path)
|
|
128
|
+
config_pathname = Pathname.new config_path
|
|
129
|
+
|
|
130
|
+
assets = []
|
|
131
|
+
|
|
132
|
+
# Add configged assets
|
|
133
|
+
Find.find(config_path) do |file|
|
|
134
|
+
if FileTest.directory? file
|
|
135
|
+
next
|
|
136
|
+
else
|
|
137
|
+
assets.push Pathname.new(file).relative_path_from(config_pathname).to_s
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
# Optionally add an index. This should probably actually rely on a config
|
|
142
|
+
# paramater in the borkfile listing out the html files to build.
|
|
143
|
+
assets.concat @borkfile.html
|
|
144
|
+
|
|
145
|
+
assets
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def generate_versioned_name(asset_name)
|
|
149
|
+
ext = File.extname asset_name
|
|
150
|
+
dirname = File.dirname asset_name
|
|
151
|
+
filename = File.basename asset_name, ext
|
|
152
|
+
|
|
153
|
+
File.join dirname, ("%s-%s%s" % [ filename, @version, ext ])
|
|
154
|
+
end
|
|
155
|
+
|
|
156
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
require 'embork/sprockets'
|
|
2
|
+
require 'sprockets'
|
|
3
|
+
|
|
4
|
+
class Embork::Environment
|
|
5
|
+
include Embork::Sprockets::Frameworks
|
|
6
|
+
|
|
7
|
+
attr_reader :sprockets_environment
|
|
8
|
+
attr_reader :bundle_version
|
|
9
|
+
attr_reader :use_bundled_assets
|
|
10
|
+
|
|
11
|
+
class ErblessCache < Sprockets::Cache::FileStore
|
|
12
|
+
def []=(key, value)
|
|
13
|
+
# This is ugly, but it keeps ERB fresh
|
|
14
|
+
if value.has_key?('pathname') && value["pathname"].match(/\.erb($|\.)/)
|
|
15
|
+
value
|
|
16
|
+
else
|
|
17
|
+
super
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def initialize(borkfile, options = {})
|
|
23
|
+
@borkfile = borkfile
|
|
24
|
+
|
|
25
|
+
setup_sprockets
|
|
26
|
+
|
|
27
|
+
if !@borkfile.es6_namespace.nil?
|
|
28
|
+
Embork::Sprockets::ES6ModuleTranspiler.namespace = @borkfile.es6_namespace
|
|
29
|
+
Embork::Sprockets::EmberHandlebarsCompiler.namespace = @borkfile.es6_namespace
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def setup_sprockets
|
|
34
|
+
@sprockets_environment = Sprockets::Environment.new @borkfile.project_root
|
|
35
|
+
cache_path = File.join @borkfile.project_root, '.cache'
|
|
36
|
+
@sprockets_environment.cache = ErblessCache.new(cache_path)
|
|
37
|
+
|
|
38
|
+
setup_sprockets_defaults
|
|
39
|
+
|
|
40
|
+
setup_paths
|
|
41
|
+
setup_helpers
|
|
42
|
+
setup_processors
|
|
43
|
+
setup_engines
|
|
44
|
+
setup_frameworks
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def setup_sprockets_defaults
|
|
48
|
+
@sprockets_environment.register_postprocessor 'application/javascript', Embork::Sprockets::ES6ModuleTranspiler
|
|
49
|
+
@sprockets_environment.register_engine '.hbs', Embork::Sprockets::EmberHandlebarsCompiler
|
|
50
|
+
@sprockets_environment.register_engine '.handlebars', Embork::Sprockets::EmberHandlebarsCompiler
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def setup_paths
|
|
54
|
+
@borkfile.asset_paths.each do |path|
|
|
55
|
+
@sprockets_environment.append_path path
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def setup_helpers
|
|
60
|
+
@borkfile.helpers.each do |helper_proc|
|
|
61
|
+
Embork::Sprockets::Helpers.class_eval &helper_proc
|
|
62
|
+
end
|
|
63
|
+
@sprockets_environment.context_class.class_eval do
|
|
64
|
+
include Embork::Sprockets::Helpers
|
|
65
|
+
extend Embork::Sprockets::Helpers::ClassMethods
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def setup_processors
|
|
70
|
+
@borkfile.sprockets_postprocessors.each do |processor|
|
|
71
|
+
@sprockets_environment.register_postprocessor processor[:mime_type], processor[:klass]
|
|
72
|
+
end
|
|
73
|
+
@borkfile.sprockets_preprocessors.each do |processor|
|
|
74
|
+
@sprockets_environment.register_preprocessor processor[:mime_type], processor[:klass]
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def setup_engines
|
|
79
|
+
@borkfile.sprockets_engines.each do |engine|
|
|
80
|
+
@sprockets_environment.register_engine engine[:extension], engine[:klass]
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
def setup_frameworks
|
|
85
|
+
@borkfile.frameworks.each do |framework|
|
|
86
|
+
method = ('load_%s_framework' % framework).to_sym
|
|
87
|
+
self.send method, @sprockets_environment
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
class Embork::Forwarder
|
|
2
|
+
def self.target
|
|
3
|
+
@target
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
def self.target=(target)
|
|
7
|
+
@target = target
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
attr_reader :app
|
|
11
|
+
def initialize(app, options = {})
|
|
12
|
+
@app = app
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def call(env)
|
|
16
|
+
status, headers, body = @app.call(env)
|
|
17
|
+
if status == 404
|
|
18
|
+
self.class.target.new(@app).call(env)
|
|
19
|
+
else
|
|
20
|
+
[ status, headers, body ]
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
require 'pathname'
|
|
2
|
+
require 'erb'
|
|
3
|
+
require 'open3'
|
|
4
|
+
|
|
5
|
+
require 'embork/logger'
|
|
6
|
+
|
|
7
|
+
class Embork::Generator
|
|
8
|
+
attr_reader :erb_files
|
|
9
|
+
attr_reader :dot_files
|
|
10
|
+
attr_reader :project_path
|
|
11
|
+
|
|
12
|
+
BLUEPRINT_DIR=File.expand_path('../../../blueprint', __FILE__).freeze
|
|
13
|
+
|
|
14
|
+
def initialize(package_name, options)
|
|
15
|
+
@package_name = package_name
|
|
16
|
+
@logger = Embork::Logger.new STDOUT, :simple
|
|
17
|
+
read_erb_files
|
|
18
|
+
read_dot_files
|
|
19
|
+
set_project_path(options[:directory])
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def read_erb_files
|
|
23
|
+
list_file_path = File.join(BLUEPRINT_DIR, 'erbfiles')
|
|
24
|
+
@erb_files = File.readlines(list_file_path).map{ |f| f.strip }
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def read_dot_files
|
|
28
|
+
list_file_path = File.join(BLUEPRINT_DIR, 'dotfiles')
|
|
29
|
+
@dot_files = File.readlines(list_file_path).map{ |f| f.strip }
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def set_project_path(directory)
|
|
33
|
+
if directory.nil?
|
|
34
|
+
@project_path = File.join Dir.pwd, @package_name
|
|
35
|
+
else
|
|
36
|
+
p = Pathname.new directory
|
|
37
|
+
if p.absolute?
|
|
38
|
+
@project_path = p.to_s
|
|
39
|
+
else
|
|
40
|
+
@project_path = File.expand_path p.to_s, Dir.pwd
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def generate
|
|
46
|
+
check_for_npm
|
|
47
|
+
print_banner
|
|
48
|
+
copy_files
|
|
49
|
+
process_erb
|
|
50
|
+
move_dot_files
|
|
51
|
+
install_npm_deps
|
|
52
|
+
install_bower_deps
|
|
53
|
+
bundle
|
|
54
|
+
init_git
|
|
55
|
+
print_success
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
protected
|
|
59
|
+
|
|
60
|
+
attr_reader :logger
|
|
61
|
+
|
|
62
|
+
def check_for_npm
|
|
63
|
+
status = Open3.popen3('which npm') do |stdin, stdout, stderr, wait_thr|
|
|
64
|
+
stdin.close
|
|
65
|
+
wait_thr.value
|
|
66
|
+
end
|
|
67
|
+
if !status.success?
|
|
68
|
+
logger.fatal :banner
|
|
69
|
+
logger.warn "Hey Person! Embork needs node and npm installed to work properly."
|
|
70
|
+
logger.warn "Come back and try again when you get them set up!"
|
|
71
|
+
logger.fatal :banner
|
|
72
|
+
exit 1
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def copy_files
|
|
77
|
+
FileUtils.mkdir_p project_path
|
|
78
|
+
FileUtils.cp_r File.join(BLUEPRINT_DIR, '.'), project_path
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
class ErbHelpers
|
|
82
|
+
attr_accessor :namespace
|
|
83
|
+
|
|
84
|
+
def get_binding
|
|
85
|
+
binding
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def process_erb
|
|
90
|
+
helpers = ErbHelpers.new
|
|
91
|
+
helpers.namespace = @package_name
|
|
92
|
+
Dir.chdir project_path do
|
|
93
|
+
erb_files.each do |file|
|
|
94
|
+
processed_file = ERB.new(File.read(file)).result helpers.get_binding
|
|
95
|
+
File.open(file, 'w'){ |f| f.write processed_file }
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def move_dot_files
|
|
101
|
+
Dir.chdir project_path do
|
|
102
|
+
dot_files.each do |file|
|
|
103
|
+
FileUtils.mv file, '.%s' % file
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def install_npm_deps
|
|
109
|
+
logger.info 'Fetching npm dependencies.'
|
|
110
|
+
command = 'npm install'
|
|
111
|
+
status, out = run_in_project_dir command
|
|
112
|
+
print_error(command, out) unless status.success?
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
def install_bower_deps
|
|
116
|
+
logger.info 'Fetching bower dependencies.'
|
|
117
|
+
command = 'npm run bower-deps'
|
|
118
|
+
status, out = run_in_project_dir command
|
|
119
|
+
print_error(command, out) unless status.success?
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
def bundle
|
|
123
|
+
logger.info 'Bundling app.'
|
|
124
|
+
command = 'bundle install'
|
|
125
|
+
# Clean up bundler before running bundle
|
|
126
|
+
bundle_vars = %w(BUNDLE_GEMFILE RUBYOPT BUNDLE_BIN_PATH)
|
|
127
|
+
bundled_env = ENV.to_hash
|
|
128
|
+
bundle_vars.each{ |var| ENV.delete var }
|
|
129
|
+
|
|
130
|
+
# Run bundle
|
|
131
|
+
status, out = run_in_project_dir command
|
|
132
|
+
|
|
133
|
+
# Restor bundler
|
|
134
|
+
ENV.replace bundled_env
|
|
135
|
+
print_error(command, out) unless status.success?
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def init_git
|
|
139
|
+
command = 'git init'
|
|
140
|
+
status, out = run_in_project_dir command
|
|
141
|
+
print_error(command, out) unless status.success?
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def run_in_project_dir(command)
|
|
145
|
+
out = status = nil
|
|
146
|
+
Dir.chdir project_path do
|
|
147
|
+
out = ''
|
|
148
|
+
status = Open3.popen3(command) do |stdin, stdout, stderr, wait_thr|
|
|
149
|
+
stdin.close
|
|
150
|
+
out = stdout.read + stderr.read
|
|
151
|
+
wait_thr.value
|
|
152
|
+
end
|
|
153
|
+
end
|
|
154
|
+
[ status, out ]
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
def print_error(command, trace)
|
|
158
|
+
logger.fatal :banner
|
|
159
|
+
logger.warn "The command '%s' failed to run." % command
|
|
160
|
+
logger.debug "It failed with the following error:"
|
|
161
|
+
logger.fatal :banner
|
|
162
|
+
logger.debug trace
|
|
163
|
+
exit 1
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def print_banner
|
|
167
|
+
logger.unknown :banner
|
|
168
|
+
logger.info 'Setting up new embork project %s.' % @package_name
|
|
169
|
+
logger.unknown :banner
|
|
170
|
+
logger.unknown ''
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
def print_success
|
|
174
|
+
logger.unknown :banner
|
|
175
|
+
logger.info "Project setup in:"
|
|
176
|
+
logger.unknown project_path.dup.prepend ' '
|
|
177
|
+
logger.unknown ''
|
|
178
|
+
logger.info "Your Embork project is ready to rock!"
|
|
179
|
+
logger.info "`cd` into the project directory and type `embork server` to get started."
|
|
180
|
+
logger.unknown :banner
|
|
181
|
+
logger.unknown ''
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
end
|