module EngineCart
EngineCartGenerator sets up an engine to use engine_cart-generated test apps
Constants
- VERSION
Public Class Methods
check_for_gemfile_stanza()
click to toggle source
# File lib/engine_cart.rb, line 109 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 = {})
click to toggle source
# File lib/engine_cart.rb, line 97 def self.configuration(options = {}) @configuration ||= EngineCart::Configuration.new(options) end
debug=(debug)
click to toggle source
# File lib/engine_cart.rb, line 118 def self.debug=(debug) @debug = debug end
debug?()
click to toggle source
# File lib/engine_cart.rb, line 122 def self.debug? @debug end
env_fingerprint()
click to toggle source
# File lib/engine_cart.rb, line 93 def self.env_fingerprint { RUBY_DESCRIPTION: RUBY_DESCRIPTION, BUNDLE_GEMFILE: Bundler.default_gemfile.to_s }.reject { |k, v| v.nil? || v.empty? } end
extra_fingerprinted_files()
click to toggle source
# File lib/engine_cart.rb, line 89 def self.extra_fingerprinted_files @extra_fingerprinted_files || [] end
extra_fingerprinted_files=(extra_fingerprinted_files)
click to toggle source
# File lib/engine_cart.rb, line 85 def self.extra_fingerprinted_files=(extra_fingerprinted_files) @extra_fingerprinted_files = extra_fingerprinted_files end
fingerprint()
click to toggle source
# File lib/engine_cart.rb, line 68 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?()
click to toggle source
# File lib/engine_cart.rb, line 27 def self.fingerprint_current? unless File.exist? stored_fingerprint_file STDERR.puts "No finger print file found: #{stored_fingerprint_file}" if debug? return false end content = File.read(stored_fingerprint_file) data = JSON.parse(content, symbolize_names: true) calculated = fingerprint return true if data == calculated if debug? STDERR.puts "Fingerprint mismatch:\n\n" data.keys.each do |key| case data[key] when Array data[key].zip(calculated[key]).each do |(stored, calc)| STDERR.puts("#{key}:\nstored: #{stored}\ncalculate: #{calc}") if stored != calc end else STDERR.puts("#{key}:\nstored: #{data[key]}\ncalculate: #{calculated[key]}") if data[key] != calculated[key] end end end false rescue false end
fingerprint_expired?()
click to toggle source
# File lib/engine_cart.rb, line 23 def self.fingerprint_expired? !fingerprint_current? end
fingerprinted_files()
click to toggle source
# File lib/engine_cart.rb, line 76 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.extra_fingerprinted_files end
gemfile_stanza_check_line()
click to toggle source
# 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()
click to toggle source
# 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)
click to toggle source
# 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()
click to toggle source
# File lib/engine_cart.rb, line 64 def self.stored_fingerprint_file File.expand_path('.generated_engine_cart', EngineCart.destination) end
within_test_app() { || ... }
click to toggle source
# 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()
click to toggle source
# File lib/engine_cart.rb, line 58 def self.write_fingerprint File.open(stored_fingerprint_file, 'w') do |f| f.write(EngineCart.fingerprint.to_json) end end