ember-cli-rails 0.5.8 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +24 -0
- data/README.md +180 -261
- data/app/controller/ember_cli/ember_controller.rb +5 -2
- data/app/helpers/ember_rails_helper.rb +15 -40
- data/app/views/ember_cli/ember/index.html.erb +1 -1
- data/lib/ember-cli-rails.rb +8 -28
- data/lib/ember_cli/app.rb +23 -29
- data/lib/ember_cli/asset_map.rb +64 -0
- data/lib/ember_cli/assets.rb +29 -44
- data/lib/ember_cli/command.rb +18 -10
- data/lib/ember_cli/configuration.rb +4 -37
- data/lib/ember_cli/directory_asset_map.rb +30 -0
- data/lib/ember_cli/engine.rb +0 -12
- data/lib/ember_cli/{constraint.rb → html_constraint.rb} +1 -1
- data/lib/ember_cli/path_set.rb +17 -9
- data/lib/ember_cli/route_helpers.rb +6 -2
- data/lib/ember_cli/shell.rb +6 -2
- data/lib/ember_cli/version.rb +1 -1
- data/lib/generators/{ember-cli → ember}/heroku/USAGE +1 -1
- data/lib/generators/{ember-cli → ember}/heroku/heroku_generator.rb +1 -11
- data/lib/generators/{ember-cli → ember}/heroku/templates/bin_heroku_install.erb +0 -0
- data/lib/generators/{ember-cli → ember}/heroku/templates/package.json.erb +0 -0
- data/lib/generators/ember/init/USAGE +8 -0
- data/lib/generators/{ember-cli → ember}/init/init_generator.rb +1 -1
- data/lib/generators/{ember-cli → ember}/init/templates/initializer.rb +0 -0
- metadata +14 -43
- data/lib/ember_cli/controller_extension.rb +0 -19
- data/lib/ember_cli/missing_manifest.rb +0 -11
- data/lib/ember_cli/sprockets.rb +0 -82
- data/lib/generators/ember-cli/init/USAGE +0 -8
@@ -1,59 +1,34 @@
|
|
1
1
|
require "ember_cli/capture"
|
2
|
+
require "ember_cli/assets"
|
2
3
|
|
3
4
|
module EmberRailsHelper
|
4
|
-
def include_ember_index_html(name, &block)
|
5
|
-
Warnings.warn_include_index_html
|
6
|
-
|
7
|
-
render_ember_app(name, &block)
|
8
|
-
end
|
9
|
-
|
10
5
|
def render_ember_app(name, &block)
|
6
|
+
EmberCli[name].build
|
7
|
+
|
11
8
|
markup_capturer = EmberCli::Capture.new(sprockets: self, &block)
|
12
9
|
|
13
10
|
head, body = markup_capturer.capture
|
14
11
|
|
15
|
-
render inline: EmberCli[name].
|
12
|
+
render inline: EmberCli[name].index_html(head: head, body: body)
|
16
13
|
end
|
17
14
|
|
18
15
|
def include_ember_script_tags(name, **options)
|
19
|
-
|
20
|
-
|
21
|
-
javascript_include_tag(*EmberCli[name].sprockets.javascript_assets, options)
|
22
|
-
end
|
16
|
+
EmberCli[name].build
|
23
17
|
|
24
|
-
|
25
|
-
Warnings.warn_asset_helper
|
18
|
+
assets = EmberCli::Assets.new(EmberCli[name])
|
26
19
|
|
27
|
-
|
20
|
+
assets.javascript_assets.
|
21
|
+
map { |src| %{<script src="#{src}"></script>}.html_safe }.
|
22
|
+
reduce(&:+)
|
28
23
|
end
|
29
24
|
|
30
|
-
|
31
|
-
|
32
|
-
warn <<-MSG.strip_heredoc
|
33
|
-
The `include_ember_index_html` helper has been deprecated.
|
34
|
-
|
35
|
-
Rename all invocations to `render_ember_app`
|
36
|
-
MSG
|
37
|
-
end
|
38
|
-
|
39
|
-
def self.warn_asset_helper
|
40
|
-
if Rails::VERSION::MAJOR < 4
|
41
|
-
warn <<-MSG.strip_heredoc
|
42
|
-
`ember-cli-rails` no longer supports Sprockets-based helpers for Rails
|
43
|
-
versions below 4.0.
|
44
|
-
|
45
|
-
Replace usage of
|
46
|
-
* `include_ember_script_tags`
|
47
|
-
* `include_ember_stylesheet_tags`
|
48
|
-
|
49
|
-
with `render_ember_app` invocations.
|
25
|
+
def include_ember_stylesheet_tags(name, **options)
|
26
|
+
EmberCli[name].build
|
50
27
|
|
51
|
-
|
28
|
+
assets = EmberCli::Assets.new(EmberCli[name])
|
52
29
|
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
end
|
57
|
-
end
|
30
|
+
assets.stylesheet_assets.
|
31
|
+
map { |src| %{<link rel="stylesheet" href="#{src}">}.html_safe }.
|
32
|
+
reduce(&:+)
|
58
33
|
end
|
59
34
|
end
|
data/lib/ember-cli-rails.rb
CHANGED
@@ -24,37 +24,31 @@ module EmberCli
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
def build(name)
|
28
|
+
app(name).build
|
29
|
+
end
|
30
|
+
|
27
31
|
alias_method :[], :app
|
28
32
|
|
29
33
|
def skip?
|
30
34
|
ENV["SKIP_EMBER"].present?
|
31
35
|
end
|
32
36
|
|
33
|
-
def enable!
|
34
|
-
@enabled ||= begin
|
35
|
-
Rails.configuration.assets.paths << root.join("assets").to_s
|
36
|
-
cleanup
|
37
|
-
true
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
37
|
def install_dependencies!
|
42
|
-
enable!
|
43
38
|
each_app(&:install_dependencies)
|
44
39
|
end
|
45
40
|
|
46
41
|
def test!
|
47
|
-
enable!
|
48
42
|
each_app(&:test)
|
49
43
|
end
|
50
44
|
|
51
45
|
def compile!
|
52
|
-
|
46
|
+
cleanup!
|
53
47
|
each_app(&:compile)
|
54
48
|
end
|
55
49
|
|
56
50
|
def root
|
57
|
-
@root ||=
|
51
|
+
@root ||= Rails.root.join("tmp", "ember-cli").tap(&:mkpath)
|
58
52
|
end
|
59
53
|
|
60
54
|
def env
|
@@ -65,22 +59,8 @@ module EmberCli
|
|
65
59
|
|
66
60
|
private
|
67
61
|
|
68
|
-
def cleanup
|
69
|
-
|
70
|
-
FileUtils.rm_rf(path)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
def previous_builds
|
75
|
-
Pathname.glob(tmp.join("ember-cli-*"))
|
76
|
-
end
|
77
|
-
|
78
|
-
def tmp
|
79
|
-
Rails.root.join("tmp")
|
80
|
-
end
|
81
|
-
|
82
|
-
def uid
|
83
|
-
@uid ||= SecureRandom.uuid
|
62
|
+
def cleanup!
|
63
|
+
root.children.each { |tmp_file| FileUtils.rm_rf(tmp_file) }
|
84
64
|
end
|
85
65
|
|
86
66
|
def each_app
|
data/lib/ember_cli/app.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require "ember_cli/shell"
|
2
|
-
require "ember_cli/
|
2
|
+
require "ember_cli/html_page"
|
3
3
|
require "ember_cli/build_monitor"
|
4
4
|
|
5
5
|
module EmberCli
|
@@ -33,7 +33,6 @@ module EmberCli
|
|
33
33
|
prepare
|
34
34
|
@shell.compile
|
35
35
|
@build.check!
|
36
|
-
copy_index_html_file
|
37
36
|
true
|
38
37
|
end
|
39
38
|
end
|
@@ -48,6 +47,24 @@ module EmberCli
|
|
48
47
|
@build.wait!
|
49
48
|
end
|
50
49
|
|
50
|
+
def index_html(head:, body:)
|
51
|
+
if index_file.exist?
|
52
|
+
html = HtmlPage.new(
|
53
|
+
head: head,
|
54
|
+
body: body,
|
55
|
+
content: index_file.read,
|
56
|
+
)
|
57
|
+
|
58
|
+
html.render
|
59
|
+
else
|
60
|
+
@build.check!
|
61
|
+
|
62
|
+
raise BuildError.new <<-MSG
|
63
|
+
EmberCLI failed to generate an `index.html` file.
|
64
|
+
MSG
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
51
68
|
def install_dependencies
|
52
69
|
@shell.install
|
53
70
|
end
|
@@ -58,22 +75,14 @@ module EmberCli
|
|
58
75
|
@shell.test
|
59
76
|
end
|
60
77
|
|
61
|
-
|
62
|
-
|
63
|
-
|
78
|
+
private
|
79
|
+
|
80
|
+
delegate :development?, :test?, to: :env
|
64
81
|
|
65
82
|
def index_file
|
66
|
-
|
67
|
-
paths.applications.join("#{name}.html")
|
68
|
-
else
|
69
|
-
paths.dist.join("index.html")
|
70
|
-
end
|
83
|
+
paths.index_file
|
71
84
|
end
|
72
85
|
|
73
|
-
private
|
74
|
-
|
75
|
-
delegate :development?, :production?, :test?, to: :env
|
76
|
-
|
77
86
|
def env
|
78
87
|
EmberCli.env
|
79
88
|
end
|
@@ -81,30 +90,15 @@ module EmberCli
|
|
81
90
|
def build_and_watch
|
82
91
|
prepare
|
83
92
|
@shell.build_and_watch
|
84
|
-
copy_index_html_file
|
85
93
|
end
|
86
94
|
|
87
95
|
def prepare
|
88
96
|
@prepared ||= begin
|
89
97
|
@build.reset
|
90
|
-
symlink_to_assets_root
|
91
98
|
true
|
92
99
|
end
|
93
100
|
end
|
94
101
|
|
95
|
-
def copy_index_html_file
|
96
|
-
if production?
|
97
|
-
FileUtils.cp(paths.app_assets.join("index.html"), index_file)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
def symlink_to_assets_root
|
102
|
-
paths.app_assets.make_symlink paths.dist
|
103
|
-
rescue Errno::EEXIST
|
104
|
-
# Sometimes happens when starting multiple Unicorn workers.
|
105
|
-
# Ignoring...
|
106
|
-
end
|
107
|
-
|
108
102
|
def excluded_ember_deps
|
109
103
|
Array.wrap(options[:exclude_ember_deps]).join(?,)
|
110
104
|
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require "ember_cli/errors"
|
2
|
+
|
3
|
+
module EmberCli
|
4
|
+
class AssetMap
|
5
|
+
def initialize(ember_app_name:, asset_map:)
|
6
|
+
@ember_app_name = ember_app_name
|
7
|
+
@asset_map = asset_map
|
8
|
+
end
|
9
|
+
|
10
|
+
def javascripts
|
11
|
+
assert_asset_map!
|
12
|
+
|
13
|
+
[
|
14
|
+
asset_matching(%r{vendor(.*)\.js\z}),
|
15
|
+
asset_matching(%r{#{ember_app_name}(.*)\.js\z}),
|
16
|
+
]
|
17
|
+
end
|
18
|
+
|
19
|
+
def stylesheets
|
20
|
+
assert_asset_map!
|
21
|
+
|
22
|
+
[
|
23
|
+
asset_matching(%r{vendor(.*)\.css\z}),
|
24
|
+
asset_matching(%r{#{ember_app_name}(.*)\.css\z}),
|
25
|
+
]
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
attr_reader :app_name, :ember_app_name, :asset_map
|
31
|
+
|
32
|
+
def asset_matching(regex)
|
33
|
+
matching_asset = files.detect { |asset| asset =~ regex }
|
34
|
+
|
35
|
+
if matching_asset.blank?
|
36
|
+
raise_missing_asset(regex)
|
37
|
+
end
|
38
|
+
|
39
|
+
prepend + matching_asset
|
40
|
+
end
|
41
|
+
|
42
|
+
def prepend
|
43
|
+
asset_map["prepend"].to_s
|
44
|
+
end
|
45
|
+
|
46
|
+
def files
|
47
|
+
Array(assets.values)
|
48
|
+
end
|
49
|
+
|
50
|
+
def assets
|
51
|
+
asset_map["assets"] || {}
|
52
|
+
end
|
53
|
+
|
54
|
+
def raise_missing_asset(regex)
|
55
|
+
raise BuildError.new("Failed to find assets matching `#{regex}`")
|
56
|
+
end
|
57
|
+
|
58
|
+
def assert_asset_map!
|
59
|
+
if assets.empty?
|
60
|
+
raise BuildError.new("Missing `#{ember_app_name}/assets/assetMap.json`")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/ember_cli/assets.rb
CHANGED
@@ -1,66 +1,51 @@
|
|
1
|
+
require "ember_cli/errors"
|
2
|
+
require "ember_cli/asset_map"
|
3
|
+
require "ember_cli/directory_asset_map"
|
4
|
+
|
1
5
|
module EmberCli
|
2
6
|
class Assets
|
3
|
-
def initialize(
|
4
|
-
@
|
5
|
-
@ember_app_name = ember_app_name
|
6
|
-
@manifest = manifest
|
7
|
+
def initialize(app)
|
8
|
+
@app = app
|
7
9
|
end
|
8
10
|
|
9
|
-
def
|
10
|
-
|
11
|
-
fallback_assets
|
12
|
-
else
|
13
|
-
[
|
14
|
-
latest_matching(%r{#{app_name}/assets/vendor(.*)\.js\z}),
|
15
|
-
latest_matching(%r{#{app_name}/assets/#{ember_app_name}(.*)\.js\z}),
|
16
|
-
]
|
17
|
-
end
|
11
|
+
def javascript_assets
|
12
|
+
asset_map.javascripts
|
18
13
|
end
|
19
14
|
|
20
|
-
def
|
21
|
-
|
22
|
-
fallback_assets
|
23
|
-
else
|
24
|
-
[
|
25
|
-
latest_matching(%r{#{app_name}/assets/vendor(.*)\.css\z}),
|
26
|
-
latest_matching(%r{#{app_name}/assets/#{ember_app_name}(.*)\.css\z}),
|
27
|
-
]
|
28
|
-
end
|
15
|
+
def stylesheet_assets
|
16
|
+
asset_map.stylesheets
|
29
17
|
end
|
30
18
|
|
31
19
|
private
|
32
20
|
|
33
|
-
attr_reader :
|
21
|
+
attr_reader :app
|
34
22
|
|
35
|
-
def
|
36
|
-
|
23
|
+
def asset_map
|
24
|
+
AssetMap.new(
|
25
|
+
ember_app_name: ember_app_name,
|
26
|
+
asset_map: asset_map_hash.to_h,
|
27
|
+
)
|
37
28
|
end
|
38
29
|
|
39
|
-
def
|
40
|
-
|
30
|
+
def asset_map_file
|
31
|
+
app.paths.asset_map
|
41
32
|
end
|
42
33
|
|
43
|
-
def
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
def latest_file_for(regex)
|
50
|
-
file, = files.
|
51
|
-
select { |key, _| key =~ regex }.
|
52
|
-
sort_by { |_, data| data["mtime"] }.
|
53
|
-
last
|
54
|
-
|
55
|
-
file
|
34
|
+
def asset_map_hash
|
35
|
+
if asset_map_file.present? && asset_map_file.exist?
|
36
|
+
JSON.parse(asset_map_file.read)
|
37
|
+
else
|
38
|
+
DirectoryAssetMap.new(app.paths.assets)
|
39
|
+
end
|
56
40
|
end
|
57
41
|
|
58
|
-
def
|
59
|
-
|
42
|
+
def ember_app_name
|
43
|
+
@ember_app_name ||= app.options.fetch(:name) { package_json.fetch(:name) }
|
60
44
|
end
|
61
45
|
|
62
|
-
def
|
63
|
-
|
46
|
+
def package_json
|
47
|
+
@package_json ||=
|
48
|
+
JSON.parse(app.paths.package_json_file.read).with_indifferent_access
|
64
49
|
end
|
65
50
|
end
|
66
51
|
end
|
data/lib/ember_cli/command.rb
CHANGED
@@ -14,31 +14,39 @@ module EmberCli
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def build(watch: false)
|
17
|
+
"#{ember_build(watch: watch)} | #{tee}"
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
attr_reader :options, :paths
|
23
|
+
|
24
|
+
def process_watcher
|
25
|
+
options.fetch(:watcher) { EmberCli.configuration.watcher }
|
26
|
+
end
|
27
|
+
|
28
|
+
def tee
|
29
|
+
Cocaine::CommandLine.
|
30
|
+
new(paths.tee, "-a :log").
|
31
|
+
command(log: paths.log)
|
32
|
+
end
|
33
|
+
|
34
|
+
def ember_build(watch: false)
|
17
35
|
line = Cocaine::CommandLine.new(paths.ember, [
|
18
36
|
"build",
|
19
37
|
("--watch" if watch),
|
20
38
|
("--watcher :watcher" if process_watcher),
|
21
39
|
"--environment :environment",
|
22
40
|
"--output-path :output_path",
|
23
|
-
"2> :error_file",
|
24
41
|
].compact.join(" "))
|
25
42
|
|
26
43
|
line.command(
|
27
44
|
environment: build_environment,
|
28
45
|
output_path: paths.dist,
|
29
46
|
watcher: process_watcher,
|
30
|
-
error_file: paths.build_error_file,
|
31
47
|
)
|
32
48
|
end
|
33
49
|
|
34
|
-
private
|
35
|
-
|
36
|
-
attr_reader :options, :paths
|
37
|
-
|
38
|
-
def process_watcher
|
39
|
-
options.fetch(:watcher) { EmberCli.configuration.watcher }
|
40
|
-
end
|
41
|
-
|
42
50
|
def build_environment
|
43
51
|
if EmberCli.env == "production"
|
44
52
|
"production"
|