Module: EngineCart
- Defined in:
- lib/generators/engine_cart/install_generator.rb,
lib/engine_cart.rb,
lib/engine_cart/engine.rb,
lib/engine_cart/version.rb,
lib/engine_cart/rake_task.rb,
lib/engine_cart/configuration.rb,
lib/engine_cart/gemfile_stanza.rb
Overview
EngineCartGenerator sets up an engine to use engine_cart-generated test apps
Defined Under Namespace
Modules: RakeTask
Classes: Configuration, Engine, InstallGenerator
Constant Summary
collapse
- VERSION =
'2.2.1'
Class Method Summary
collapse
Class Method Details
.check_for_gemfile_stanza ⇒ Object
87
88
89
90
91
92
93
94
|
# File 'lib/engine_cart.rb', line 87
def self.check_for_gemfile_stanza
return unless File.exist? 'Gemfile'
unless File.readlines('Gemfile').grep(/#{EngineCart.gemfile_stanza_check_line}/).any?
Bundler.ui.warn "[EngineCart] For better results, consider updating the EngineCart stanza in your Gemfile with:\n\n"
Bundler.ui.warn EngineCart.gemfile_stanza_text
end
end
|
.configuration(options = {}) ⇒ Object
75
76
77
|
# File 'lib/engine_cart.rb', line 75
def self.configuration(options = {})
@configuration ||= EngineCart::Configuration.new(options)
end
|
.env_fingerprint ⇒ Object
71
72
73
|
# File 'lib/engine_cart.rb', line 71
def self.env_fingerprint
{ 'RUBY_DESCRIPTION' => RUBY_DESCRIPTION, 'BUNDLE_GEMFILE' => Bundler.default_gemfile.to_s }.reject { |k, v| v.nil? || v.empty? }.to_s
end
|
67
68
69
|
# File 'lib/engine_cart.rb', line 67
def self.
@extra_fingerprinted_files || []
end
|
63
64
65
|
# File 'lib/engine_cart.rb', line 63
def self.()
@extra_fingerprinted_files =
end
|
.fingerprint ⇒ Object
46
47
48
49
50
51
52
|
# File 'lib/engine_cart.rb', line 46
def self.fingerprint
{ env: env_fingerprint }.merge(files:
fingerprinted_files.map do |file|
{ file: file, fingerprint: Digest::MD5.file(file).to_s }
end
)
end
|
.fingerprint_current? ⇒ Boolean
27
28
29
30
31
32
33
34
|
# File 'lib/engine_cart.rb', line 27
def self.fingerprint_current?
return false unless File.exist? stored_fingerprint_file
content = File.read(stored_fingerprint_file)
data = JSON.parse(content, symbolize_names: true)
data == fingerprint
rescue
false
end
|
.fingerprint_expired? ⇒ Boolean
23
24
25
|
# File 'lib/engine_cart.rb', line 23
def self.fingerprint_expired?
!fingerprint_current?
end
|
.fingerprinted_files ⇒ Object
54
55
56
57
58
59
60
61
|
# File 'lib/engine_cart.rb', line 54
def self.fingerprinted_files
Dir.glob("./*.gemspec").select { |f| File.file? f } +
[Bundler.default_gemfile.to_s, Bundler.default_lockfile.to_s] +
Dir.glob("./db/migrate/*").select { |f| File.file? f } +
Dir.glob("./lib/generators/**/**").select { |f| File.file? f } +
Dir.glob("./spec/test_app_templates/**/**").select { |f| File.file? f } +
configuration.
end
|
.gemfile_stanza_check_line ⇒ Object
2
3
4
|
# File 'lib/engine_cart/gemfile_stanza.rb', line 2
def self.gemfile_stanza_check_line
"engine_cart stanza: 0.10.0"
end
|
.gemfile_stanza_text ⇒ Object
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
# File 'lib/engine_cart/gemfile_stanza.rb', line 6
def self.gemfile_stanza_text
<<-EOF.gsub(/^ /, '')
# BEGIN ENGINE_CART BLOCK
# engine_cart: #{EngineCart::VERSION}
# #{EngineCart.gemfile_stanza_check_line}
# the below comes from engine_cart, a gem used to test this Rails engine gem in the context of a Rails app.
file = File.expand_path('Gemfile', ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || File.expand_path('#{EngineCart.destination}', File.dirname(__FILE__)))
if File.exist?(file)
begin
eval_gemfile file
rescue Bundler::GemfileError => e
Bundler.ui.warn '[EngineCart] Skipping Rails application dependencies:'
Bundler.ui.warn e.message
end
else
Bundler.ui.warn "[EngineCart] Unable to find test application dependencies in \#{file}, using placeholder dependencies"
if ENV['RAILS_VERSION']
if ENV['RAILS_VERSION'] == 'edge'
gem 'rails', github: 'rails/rails'
ENV['ENGINE_CART_RAILS_OPTIONS'] = '--edge --skip-turbolinks'
else
gem 'rails', ENV['RAILS_VERSION']
end
end
case ENV['RAILS_VERSION']
when /^4\.2/
gem 'responders', '~> 2.0'
gem 'sass-rails', '>= 5.0'
gem 'coffee-rails', '~> 4.1.0'
when /^4\.[01]/
gem 'sass-rails', '< 5.0'
end
end
# END ENGINE_CART BLOCK
EOF
end
|
.load_application!(path = nil) ⇒ Object
11
12
13
|
# File 'lib/engine_cart.rb', line 11
def self.load_application! path = nil
require File.expand_path("config/environment", path || EngineCart.destination)
end
|
.stored_fingerprint_file ⇒ Object
42
43
44
|
# File 'lib/engine_cart.rb', line 42
def self.stored_fingerprint_file
File.expand_path('.generated_engine_cart', EngineCart.destination)
end
|
.within_test_app ⇒ Object
15
16
17
18
19
20
21
|
# File 'lib/engine_cart.rb', line 15
def self.within_test_app
Dir.chdir(EngineCart.destination) do
Bundler.with_clean_env do
yield
end
end
end
|
.write_fingerprint ⇒ Object
36
37
38
39
40
|
# File 'lib/engine_cart.rb', line 36
def self.write_fingerprint
File.open(stored_fingerprint_file, 'w') do |f|
f.write(EngineCart.fingerprint.to_json)
end
end
|