embarista 1.1.2 → 1.1.3

Sign up to get free protection for your applications and to get access to all the features.
data/.travis.yml ADDED
@@ -0,0 +1,7 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ bundler_args: --without docs
5
+ notifications:
6
+ tech@yapp.us
7
+ script: bundle exec rake ci
data/Gemfile CHANGED
@@ -2,11 +2,9 @@ source :rubygems
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'rake-pipeline', github: 'livingsocial/rake-pipeline',
6
- ref: '543f4322fe70facee9572d29ddabf7f090dad68a'
7
- gem 'rake-pipeline-web-filters', github: 'wycats/rake-pipeline-web-filters',
8
- ref: 'ba0b8a00356b4c854930a8e849b5629d51ffd70f'
9
-
5
+ gem 'rake-pipeline', github: 'livingsocial/rake-pipeline'
6
+ gem 'rake-pipeline-web-filters', github: 'wycats/rake-pipeline-web-filters'
7
+ gem 'debugger'
10
8
  gem 'pry'
11
9
  gem 'pry-debugger'
12
10
  gem 'pry-remote'
data/README.md CHANGED
@@ -1 +1,3 @@
1
+ [![Build Status](https://secure.travis-ci.org/yappbox/embarista.png?branch=master)](http://travis-ci.org/yappbox/embarista)
2
+
1
3
  Collection of Rake Pipeline stuff we use at Yapp for building Ember apps.
data/Rakefile CHANGED
@@ -7,3 +7,4 @@ require 'rspec/core/rake_task'
7
7
  RSpec::Core::RakeTask.new
8
8
 
9
9
  task :default => :spec
10
+ task :ci => :spec
data/embarista.gemspec CHANGED
@@ -14,8 +14,8 @@ Gem::Specification.new do |gem|
14
14
  gem.require_paths = ["lib"]
15
15
  gem.version = Embarista::VERSION
16
16
 
17
- gem.add_dependency "rake-pipeline", '~> 0.6.0'
18
- gem.add_dependency "rake-pipeline-web-filters", '~> 0.6.0'
17
+ gem.add_dependency "rake-pipeline", '> 0.6.0'
18
+ gem.add_dependency "rake-pipeline-web-filters", '>= 0.6.0'
19
19
  gem.add_dependency "ruby_gntp"
20
20
  gem.add_dependency "listen"
21
21
  gem.add_dependency "colored"
data/lib/embarista.rb CHANGED
@@ -7,6 +7,12 @@ module Embarista
7
7
 
8
8
  autoload :JavascriptPipeline, 'embarista/javascript_pipeline'
9
9
  autoload :Server, 'embarista/server'
10
+
11
+ autoload :Git, 'embarista/git'
12
+ autoload :S3sync, 'embarista/s3sync'
13
+ autoload :DigestHelper, 'embarista/digest_helper'
14
+ autoload :ManifestHelper, 'embarista/manifest_helper'
15
+ autoload :SassFunctions, 'embarista/sass_functions'
10
16
  end
11
17
 
12
18
  Rake::Pipeline::DSL::PipelineDSL.send(:include, Embarista::Helpers)
@@ -0,0 +1,59 @@
1
+ module Embarista
2
+ module DigestHelper
3
+ include FileUtils
4
+ extend self
5
+
6
+ def digest_and_copy_file(filename, target_dir = 'tmp')
7
+ file = Pathname.new(filename)
8
+ target_dir = Pathname.new(target_dir)
9
+
10
+ md5 = Digest::MD5.file(file).hexdigest
11
+ ext = file.extname
12
+ dirname = file.dirname
13
+ name_without_ext = file.basename.to_s.gsub(/#{ext}$/,'')
14
+
15
+ new_filename = "#{name_without_ext}-#{md5}#{ext}"
16
+ target_dir_with_path = target_dir + dirname
17
+ target_full_path = target_dir_with_path + new_filename
18
+
19
+ mkdir_p(target_dir_with_path)
20
+ cp(filename, target_full_path)
21
+
22
+ return dirname + new_filename
23
+ end
24
+
25
+ def digest_directory(origin, target)
26
+ origin = Pathname.new(origin).expand_path
27
+ target = Pathname.new(target).expand_path
28
+
29
+ target_base_dir = target + origin.basename
30
+
31
+ rm_rf target_base_dir
32
+ mkdir_p target_base_dir
33
+
34
+ cd(origin) do
35
+ glob_pattern_with_symlink_support = "**{,/*/**}/*.*" # http://stackoverflow.com/questions/357754/can-i-traverse-symlinked-directories-in-ruby-with-a-glob
36
+ files = Dir.glob(glob_pattern_with_symlink_support).reject { |file| File.directory?(file) }.reject { |file| file =~ /manifest*\.yml/ }
37
+
38
+ manifest_hash = files.each_with_object({}) do |file, manifest|
39
+ manifest[file.to_s] = digest_and_copy_file(file, target_base_dir).to_s
40
+ end
41
+
42
+ manifest_hash = ManifestHelper.prefix_manifest('/', manifest_hash)
43
+
44
+ open('manifest.yml', 'w') do |file|
45
+ YAML.dump(manifest_hash, file)
46
+ end
47
+
48
+ open('manifest.json', 'w') do |file|
49
+ JSON.dump(manifest_hash, file)
50
+ end
51
+
52
+ cp('manifest.yml', target_base_dir + 'manifest-latest.yml')
53
+ cp('manifest.json', target_base_dir + 'manifest-latest.json')
54
+
55
+ return manifest_hash
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,18 @@
1
+ module Embarista
2
+ module Git
3
+ BRANCH_TO_DEPLOY_FROM = 'master'
4
+ extend self
5
+
6
+ def is_dirty?
7
+ not `git status --porcelain`.empty?
8
+ end
9
+
10
+ def git_branches
11
+ `git branch --no-color -vv`
12
+ end
13
+
14
+ def can_deploy_from_curren_branch?
15
+ git_branches =~ /\A\* #{BRANCH_TO_DEPLOY_FROM}.*origin\/#{BRANCH_TO_DEPLOY_FROM}: (ahead|behind)/
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,14 @@
1
+ module Embarista
2
+ module ManifestHelper
3
+ extend self
4
+
5
+ def prefix_manifest(prefix, manifest)
6
+ manifest.each_with_object({}) do |entry, new_manifest|
7
+ key = prefix + entry.first
8
+ value = prefix + entry.last
9
+
10
+ new_manifest[key] = value
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,68 @@
1
+ module Embarista
2
+ class S3sync
3
+ attr_reader :origin, :bucket_name, :pwd, :tmp_root, :manifest_path
4
+
5
+ def initialize(origin, options)
6
+ bucket_name = options.fetch(:bucket_name)
7
+ manifest_path = options.fetch(:manifest_path)
8
+ aws_key = options.fetch(:aws_key)
9
+ aws_secret = options.fetch(:aws_secret)
10
+
11
+ @connection = AWS::S3::Base.establish_connection!(
12
+ :access_key_id => aws_key,
13
+ :secret_access_key => aws_secret
14
+ )
15
+
16
+ @pwd = Pathname.new('').expand_path
17
+ @origin = origin
18
+ @bucket_name = bucket_name
19
+ @tmp_root = @pwd + @origin
20
+ @manifest_path = manifest_path
21
+ end
22
+
23
+ def self.sync(origin, options)
24
+ new(origin, options).sync
25
+ end
26
+
27
+ def store(name, file)
28
+ puts " -> #{name}"
29
+ AWS::S3::S3Object.store(name, file, bucket_name)
30
+ end
31
+
32
+ def sync
33
+ delta_manifest = build_delta_manifest
34
+
35
+ if delta_manifest.empty?
36
+ puts 'everything is up to date'
37
+ return
38
+ end
39
+
40
+ delta_manifest.values.each do |file_name|
41
+ open(tmp_root.to_s + file_name) do |file|
42
+ store(file_name, file)
43
+ end
44
+ end
45
+
46
+ open(manifest_path) do |file|
47
+ store('manifest-latest.yml', file)
48
+ end
49
+ end
50
+
51
+ def build_delta_manifest
52
+ return local_manifest unless remote_manifest
53
+
54
+ new_manifest_values = local_manifest.values - remote_manifest.values
55
+ local_manifest.invert.slice(*new_manifest_values).invert
56
+ end
57
+
58
+ def remote_manifest
59
+ @remote_manifest ||= YAML.load(AWS::S3::S3Object.find('manifest-latest.yml', bucket_name).value)
60
+ rescue AWS::S3::NoSuchKey
61
+ puts 'no remote existing manifest, uploading everything'
62
+ end
63
+
64
+ def local_manifest
65
+ @local_manifest ||= YAML.load_file('public/manifest.yml')
66
+ end
67
+ end
68
+ end
@@ -0,0 +1,30 @@
1
+ module Embarista
2
+ module SassFunctions
3
+ def manifest_url(path)
4
+ Sass::Script::String.new("url(#{lookup_manifest_path(path)})")
5
+ end
6
+
7
+ private
8
+
9
+ def manifest
10
+ @_manifest ||= begin
11
+ # TODO: some switch so that this doesn't run in dev?
12
+ manifest_path = 'public/manifest.yml'
13
+ return {} unless File.exist?(manifest_path)
14
+ YAML.load_file(manifest_path)
15
+ end
16
+ end
17
+
18
+ def lookup_manifest_path(path)
19
+ if digest?
20
+ manifest.fetch(path.value)
21
+ else
22
+ path
23
+ end
24
+ end
25
+
26
+ def digest?
27
+ ENV.key?('RAKEP_DIGEST')
28
+ end
29
+ end
30
+ end
@@ -52,7 +52,7 @@ module Embarista
52
52
  pipeline.rake_application = Rake.application
53
53
  pipeline.setup
54
54
  end
55
- project.invoke_clean if clean_on_startup
55
+ project.invoke if clean_on_startup
56
56
  end
57
57
 
58
58
  def start_watching
@@ -130,7 +130,7 @@ module Embarista
130
130
  if added.size > 0 || removed.size > 0
131
131
  puts "BUILD (CLEAN) #{start}"
132
132
  begin
133
- project.invoke_clean
133
+ project.invoke
134
134
  rescue
135
135
  success = false
136
136
  puts "ERROR: #{$!.inspect}"
@@ -1,3 +1,3 @@
1
1
  module Embarista
2
- VERSION = '1.1.2'
2
+ VERSION = '1.1.3'
3
3
  end
@@ -1,8 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Embarista::Filters::ErbFilter do
4
- MemoryFileWrapper = Rake::Pipeline::SpecHelpers::MemoryFileWrapper
5
-
6
4
  let(:file_wrapper_class) { MemoryFileWrapper }
7
5
 
8
6
  let(:input_files) {
@@ -28,6 +26,8 @@ describe Embarista::Filters::ErbFilter do
28
26
  input.sub(/\.(erb)$/, '.txt')
29
27
  end
30
28
  filter.file_wrapper_class = file_wrapper_class
29
+ filter.manifest = MemoryManifest.new
30
+ filter.last_manifest = MemoryManifest.new
31
31
  filter.input_files = input_files
32
32
  filter.output_root = output_root
33
33
  filter.rake_application = rake_application
@@ -2,8 +2,6 @@ require 'spec_helper'
2
2
  require 'execjs'
3
3
 
4
4
  describe Embarista::Filters::PrecompileHandlebarsFilter do
5
- MemoryFileWrapper = Rake::Pipeline::SpecHelpers::MemoryFileWrapper
6
-
7
5
  let(:file_wrapper_class) { MemoryFileWrapper }
8
6
 
9
7
  let(:input_hbs) {
@@ -31,6 +29,8 @@ HBS
31
29
  let(:subject) {
32
30
  filter = described_class.new(:emberjs => emberjs, :handlebarsjs => handlebarsjs, :jquery_version => jquery_version)
33
31
  filter.file_wrapper_class = file_wrapper_class
32
+ filter.manifest = MemoryManifest.new
33
+ filter.last_manifest = MemoryManifest.new
34
34
  filter.input_files = input_files
35
35
  filter.output_root = output_root
36
36
  filter.rake_application = rake_application
@@ -1,8 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Embarista::Filters::RewriteMinispadeRequiresFilter do
4
- MemoryFileWrapper = Rake::Pipeline::SpecHelpers::MemoryFileWrapper
5
-
6
4
  let(:file_wrapper_class) { MemoryFileWrapper }
7
5
 
8
6
  let(:input_js) {
@@ -33,6 +31,8 @@ JS
33
31
  let(:subject) {
34
32
  filter = described_class.new(options)
35
33
  filter.file_wrapper_class = file_wrapper_class
34
+ filter.manifest = MemoryManifest.new
35
+ filter.last_manifest = MemoryManifest.new
36
36
  filter.input_files = input_files
37
37
  filter.output_root = output_root
38
38
  filter.rake_application = rake_application
data/spec/spec_helper.rb CHANGED
@@ -1,45 +1,26 @@
1
1
  require 'pry'
2
2
  require 'embarista'
3
+ require 'fileutils'
3
4
 
4
- class Rake::Pipeline
5
- module SpecHelpers
5
+ require "spec_helpers/memory_file_wrapper"
6
+ require "spec_helpers/memory_manifest"
6
7
 
7
- class MemoryFileWrapper < Struct.new(:root, :path, :encoding, :body)
8
- @@files = {}
9
- @@data = {}
10
-
11
- def self.files
12
- @@files
13
- end
14
-
15
- def self.data
16
- @@data
17
- end
18
-
19
- def with_encoding(new_encoding)
20
- self.class.new(root, path, new_encoding, body)
21
- end
22
-
23
- def fullpath
24
- File.join(root, path)
25
- end
8
+ RSpec.configure do |config|
9
+ original = Dir.pwd
26
10
 
27
- def create
28
- @@files[fullpath] = self
29
- self.body = ""
30
- yield
31
- end
11
+ config.include FileUtils
32
12
 
33
- def read
34
- body || @@data[fullpath] || ""
35
- end
13
+ def tmp
14
+ File.expand_path("../tmp", __FILE__)
15
+ end
36
16
 
37
- def write(contents)
38
- self.body << contents
39
- end
40
- end
17
+ config.before do
18
+ rm_rf(tmp)
19
+ mkdir_p(tmp)
20
+ Dir.chdir(tmp)
41
21
  end
42
- end
43
22
 
44
- RSpec.configure do |config|
23
+ config.after do
24
+ Dir.chdir(original)
25
+ end
45
26
  end
@@ -0,0 +1,27 @@
1
+ class MemoryFileWrapper < Struct.new(:root, :path, :encoding, :body)
2
+ @@files = {}
3
+
4
+ def self.files
5
+ @@files
6
+ end
7
+
8
+ def with_encoding(new_encoding)
9
+ self.class.new(root, path, new_encoding, body)
10
+ end
11
+
12
+ def fullpath
13
+ File.join(root, path)
14
+ end
15
+
16
+ def create
17
+ @@files[fullpath] = self
18
+ self.body = ""
19
+ yield
20
+ end
21
+
22
+ alias read body
23
+
24
+ def write(contents)
25
+ self.body << contents
26
+ end
27
+ end
@@ -0,0 +1,15 @@
1
+ class MemoryManifest
2
+ def initialize
3
+ @entries = {}
4
+ end
5
+
6
+ # Look up an entry by filename.
7
+ def [](key)
8
+ @entries[key]
9
+ end
10
+
11
+ # Set an entry
12
+ def []=(key, value)
13
+ @entries[key] = value
14
+ end
15
+ end
@@ -1,8 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Embarista::Filters::StripEmberAssertsFilter do
4
- MemoryFileWrapper = Rake::Pipeline::SpecHelpers::MemoryFileWrapper
5
-
6
4
  let(:file_wrapper_class) { MemoryFileWrapper }
7
5
 
8
6
  let(:input_js) {
@@ -31,6 +29,8 @@ JS
31
29
  let(:subject) {
32
30
  filter = described_class.new
33
31
  filter.file_wrapper_class = file_wrapper_class
32
+ filter.manifest = MemoryManifest.new
33
+ filter.last_manifest = MemoryManifest.new
34
34
  filter.input_files = input_files
35
35
  filter.output_root = output_root
36
36
  filter.rake_application = rake_application
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embarista
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,33 +10,33 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2012-11-16 00:00:00.000000000Z
13
+ date: 2012-11-23 00:00:00.000000000Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rake-pipeline
17
- requirement: &2152752020 !ruby/object:Gem::Requirement
17
+ requirement: &2153730900 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
- - - ~>
20
+ - - ! '>'
21
21
  - !ruby/object:Gem::Version
22
22
  version: 0.6.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *2152752020
25
+ version_requirements: *2153730900
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: rake-pipeline-web-filters
28
- requirement: &2152750860 !ruby/object:Gem::Requirement
28
+ requirement: &2153729800 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
- - - ~>
31
+ - - ! '>='
32
32
  - !ruby/object:Gem::Version
33
33
  version: 0.6.0
34
34
  type: :runtime
35
35
  prerelease: false
36
- version_requirements: *2152750860
36
+ version_requirements: *2153729800
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: ruby_gntp
39
- requirement: &2152744080 !ruby/object:Gem::Requirement
39
+ requirement: &2153728700 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ! '>='
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: '0'
45
45
  type: :runtime
46
46
  prerelease: false
47
- version_requirements: *2152744080
47
+ version_requirements: *2153728700
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: listen
50
- requirement: &2152743100 !ruby/object:Gem::Requirement
50
+ requirement: &2153727140 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :runtime
57
57
  prerelease: false
58
- version_requirements: *2152743100
58
+ version_requirements: *2153727140
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: colored
61
- requirement: &2152742440 !ruby/object:Gem::Requirement
61
+ requirement: &2153725500 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :runtime
68
68
  prerelease: false
69
- version_requirements: *2152742440
69
+ version_requirements: *2153725500
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rb-fsevent
72
- requirement: &2152741880 !ruby/object:Gem::Requirement
72
+ requirement: &2153724240 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,10 +77,10 @@ dependencies:
77
77
  version: '0'
78
78
  type: :runtime
79
79
  prerelease: false
80
- version_requirements: *2152741880
80
+ version_requirements: *2153724240
81
81
  - !ruby/object:Gem::Dependency
82
82
  name: rspec
83
- requirement: &2152741400 !ruby/object:Gem::Requirement
83
+ requirement: &2153712800 !ruby/object:Gem::Requirement
84
84
  none: false
85
85
  requirements:
86
86
  - - ! '>='
@@ -88,10 +88,10 @@ dependencies:
88
88
  version: '0'
89
89
  type: :development
90
90
  prerelease: false
91
- version_requirements: *2152741400
91
+ version_requirements: *2153712800
92
92
  - !ruby/object:Gem::Dependency
93
93
  name: rb-readline
94
- requirement: &2152740780 !ruby/object:Gem::Requirement
94
+ requirement: &2153710360 !ruby/object:Gem::Requirement
95
95
  none: false
96
96
  requirements:
97
97
  - - ! '>='
@@ -99,10 +99,10 @@ dependencies:
99
99
  version: '0'
100
100
  type: :development
101
101
  prerelease: false
102
- version_requirements: *2152740780
102
+ version_requirements: *2153710360
103
103
  - !ruby/object:Gem::Dependency
104
104
  name: execjs
105
- requirement: &2152740340 !ruby/object:Gem::Requirement
105
+ requirement: &2153709380 !ruby/object:Gem::Requirement
106
106
  none: false
107
107
  requirements:
108
108
  - - ! '>='
@@ -110,7 +110,7 @@ dependencies:
110
110
  version: '0'
111
111
  type: :development
112
112
  prerelease: false
113
- version_requirements: *2152740340
113
+ version_requirements: *2153709380
114
114
  description: A collection of web filters for rake-pipeline
115
115
  email:
116
116
  - tech@yapp.us
@@ -120,19 +120,25 @@ extra_rdoc_files: []
120
120
  files:
121
121
  - .gitignore
122
122
  - .rspec
123
+ - .travis.yml
123
124
  - Gemfile
124
125
  - LICENSE
125
126
  - README.md
126
127
  - Rakefile
127
128
  - embarista.gemspec
128
129
  - lib/embarista.rb
130
+ - lib/embarista/digest_helper.rb
129
131
  - lib/embarista/filters.rb
130
132
  - lib/embarista/filters/erb_filter.rb
131
133
  - lib/embarista/filters/precompile_handlebars_filter.rb
132
134
  - lib/embarista/filters/rewrite_minispade_requires_filter.rb
133
135
  - lib/embarista/filters/strip_ember_asserts_filter.rb
136
+ - lib/embarista/git.rb
134
137
  - lib/embarista/helpers.rb
135
138
  - lib/embarista/javascript_pipeline.rb
139
+ - lib/embarista/manifest_helper.rb
140
+ - lib/embarista/s3sync.rb
141
+ - lib/embarista/sass_functions.rb
136
142
  - lib/embarista/server.rb
137
143
  - lib/embarista/version.rb
138
144
  - spec/erb_filter_spec.rb
@@ -140,6 +146,8 @@ files:
140
146
  - spec/precompile_handlebars_filter_spec.rb
141
147
  - spec/rewrite_minispade_requires_filter_spec.rb
142
148
  - spec/spec_helper.rb
149
+ - spec/spec_helpers/memory_file_wrapper.rb
150
+ - spec/spec_helpers/memory_manifest.rb
143
151
  - spec/strip_ember_asserts_filter_spec.rb
144
152
  - vendor/ember.js
145
153
  - vendor/handlebars.js
@@ -157,7 +165,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
157
165
  version: '0'
158
166
  segments:
159
167
  - 0
160
- hash: 4396691622434072912
168
+ hash: 1510070683163627783
161
169
  required_rubygems_version: !ruby/object:Gem::Requirement
162
170
  none: false
163
171
  requirements:
@@ -166,7 +174,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
166
174
  version: '0'
167
175
  segments:
168
176
  - 0
169
- hash: 4396691622434072912
177
+ hash: 1510070683163627783
170
178
  requirements: []
171
179
  rubyforge_project:
172
180
  rubygems_version: 1.8.10
@@ -180,4 +188,6 @@ test_files:
180
188
  - spec/precompile_handlebars_filter_spec.rb
181
189
  - spec/rewrite_minispade_requires_filter_spec.rb
182
190
  - spec/spec_helper.rb
191
+ - spec/spec_helpers/memory_file_wrapper.rb
192
+ - spec/spec_helpers/memory_manifest.rb
183
193
  - spec/strip_ember_asserts_filter_spec.rb