ember-cli-rails 0.5.8 → 0.6.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.
- 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"
|