engine_cart 1.2.0 → 2.0.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/.travis.yml +2 -11
- data/README.md +1 -19
- data/lib/engine_cart/configuration.rb +6 -1
- data/lib/engine_cart/tasks/engine_cart.rake +3 -7
- data/lib/engine_cart/version.rb +1 -1
- data/lib/engine_cart.rb +39 -12
- data/spec/integration/engine_cart_spec.rb +12 -9
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40c9b046588c71b4993de3134cdf47890d88fa84
|
4
|
+
data.tar.gz: 69cc69b06b1419055b1c8e28221f23785b8db7e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6633db11d1f53e58552a84f399d1829db1a303d529ac2b1a0d0437c6f6358cf7080fbfd9af242a02f9c41c9c97b2a72b950ff31d8b473302af59bdc85e8561d2
|
7
|
+
data.tar.gz: abb7179ce65f9050b113ec94a7e4139a1ad7e1a0953fe179b24512243b358c01201cf0d40a12905a137ad8727183daef61060ea8a3824f85a8efb1d2cf1d954f
|
data/.travis.yml
CHANGED
@@ -1,16 +1,7 @@
|
|
1
1
|
language: ruby
|
2
2
|
sudo: false
|
3
3
|
rvm:
|
4
|
-
- 2.4.
|
5
|
-
|
6
|
-
matrix:
|
7
|
-
include:
|
8
|
-
- rvm: jruby-9.1.13.0
|
9
|
-
- rvm: 2.3.4
|
10
|
-
env: "RAILS_VERSION=5.0.6"
|
11
|
-
allow_failures:
|
12
|
-
- rvm: jruby-9.1.13.0
|
13
|
-
fast_finish: true
|
4
|
+
- 2.4.4
|
14
5
|
|
15
6
|
env:
|
16
|
-
- "RAILS_VERSION=5.
|
7
|
+
- "RAILS_VERSION=5.2.0"
|
data/README.md
CHANGED
@@ -109,25 +109,7 @@ The EngineCart test application is meant to be disposable and easily rebuildable
|
|
109
109
|
|
110
110
|
### Automatic detection of when to rebuild test application
|
111
111
|
|
112
|
-
In some cases, EngineCart can automatically detect and rebuild the test application when key files change. By default, the application will be rebuilt when your `Gemfile
|
113
|
-
|
114
|
-
It can also track changes to your engine's db migrations and generators with a fingerprint mechanism. To use this, add the line below to your rake testing task:
|
115
|
-
|
116
|
-
```ruby
|
117
|
-
EngineCart.fingerprint_proc = EngineCart.rails_fingerprint_proc
|
118
|
-
```
|
119
|
-
|
120
|
-
For example, in your engine's Rakefile:
|
121
|
-
|
122
|
-
```ruby
|
123
|
-
require 'engine_cart/rake_task'
|
124
|
-
|
125
|
-
task :ci do
|
126
|
-
EngineCart.fingerprint_proc = EngineCart.rails_fingerprint_proc
|
127
|
-
Rake::Task['engine_cart:generate'].invoke
|
128
|
-
# run the tests
|
129
|
-
end
|
130
|
-
```
|
112
|
+
In some cases, EngineCart can automatically detect and rebuild the test application when key files change. By default, the application will be rebuilt when your `Gemfile`, `Gemfile.lock`, database migrations or generators change.
|
131
113
|
|
132
114
|
### Rake tasks for rebuilding test application
|
133
115
|
|
@@ -54,6 +54,10 @@ module EngineCart
|
|
54
54
|
Array(options[:rails_options])
|
55
55
|
end
|
56
56
|
|
57
|
+
def extra_fingerprinted_files
|
58
|
+
options[:extra_fingerprinted_files]
|
59
|
+
end
|
60
|
+
|
57
61
|
def default_destination
|
58
62
|
'.internal_test_app'
|
59
63
|
end
|
@@ -74,7 +78,8 @@ module EngineCart
|
|
74
78
|
destination: ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || default_destination,
|
75
79
|
template: ENV['ENGINE_CART_TEMPLATE'],
|
76
80
|
templates_path: ENV['ENGINE_CART_TEMPLATES_PATH'] || './spec/test_app_templates',
|
77
|
-
rails_options: parse_options(ENV['ENGINE_CART_RAILS_OPTIONS'])
|
81
|
+
rails_options: parse_options(ENV['ENGINE_CART_RAILS_OPTIONS']),
|
82
|
+
extra_fingerprinted_files: []
|
78
83
|
}
|
79
84
|
end
|
80
85
|
|
@@ -77,12 +77,8 @@ namespace :engine_cart do
|
|
77
77
|
end
|
78
78
|
|
79
79
|
desc "Create the test rails app"
|
80
|
-
task :generate
|
81
|
-
|
82
|
-
args.with_defaults(:fingerprint => EngineCart.fingerprint) unless original_fingerprint
|
83
|
-
|
84
|
-
f = File.expand_path('.generated_engine_cart', EngineCart.destination)
|
85
|
-
unless File.exist?(f) && File.read(f) == args[:fingerprint]
|
80
|
+
task :generate => [:setup] do
|
81
|
+
if EngineCart.fingerprint_expired?
|
86
82
|
|
87
83
|
# Create a new test rails app
|
88
84
|
Rake::Task['engine_cart:create_test_rails_app'].invoke
|
@@ -106,7 +102,7 @@ namespace :engine_cart do
|
|
106
102
|
|
107
103
|
Bundler.clean_system "bundle install --quiet"
|
108
104
|
|
109
|
-
|
105
|
+
EngineCart.write_fingerprint
|
110
106
|
|
111
107
|
puts "Done generating test app"
|
112
108
|
end
|
data/lib/engine_cart/version.rb
CHANGED
data/lib/engine_cart.rb
CHANGED
@@ -2,6 +2,7 @@ require 'engine_cart/configuration'
|
|
2
2
|
require "engine_cart/version"
|
3
3
|
require 'engine_cart/gemfile_stanza'
|
4
4
|
require 'bundler'
|
5
|
+
require 'json'
|
5
6
|
|
6
7
|
module EngineCart
|
7
8
|
require "engine_cart/engine" if defined? Rails
|
@@ -18,26 +19,52 @@ module EngineCart
|
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
21
|
-
def self.
|
22
|
-
|
22
|
+
def self.fingerprint_expired?
|
23
|
+
!fingerprint_current?
|
23
24
|
end
|
24
25
|
|
25
|
-
def self.
|
26
|
-
|
26
|
+
def self.fingerprint_current?
|
27
|
+
return false unless File.exist? stored_fingerprint_file
|
28
|
+
content = File.read(stored_fingerprint_file)
|
29
|
+
data = JSON.parse(content, symbolize_names: true)
|
30
|
+
data == fingerprint
|
31
|
+
rescue
|
32
|
+
false
|
27
33
|
end
|
28
34
|
|
29
|
-
def self.
|
30
|
-
|
35
|
+
def self.write_fingerprint
|
36
|
+
File.open(stored_fingerprint_file, 'w') do |f|
|
37
|
+
f.write(EngineCart.fingerprint.to_json)
|
38
|
+
end
|
31
39
|
end
|
32
40
|
|
33
|
-
def self.
|
34
|
-
|
35
|
-
|
36
|
-
|
41
|
+
def self.stored_fingerprint_file
|
42
|
+
File.expand_path('.generated_engine_cart', EngineCart.destination)
|
43
|
+
end
|
44
|
+
|
45
|
+
def self.fingerprint
|
46
|
+
{ env: env_fingerprint }.merge(files:
|
47
|
+
fingerprinted_files.map do |file|
|
48
|
+
{ file: file, fingerprint: Digest::MD5.file(file).to_s }
|
49
|
+
end
|
50
|
+
)
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.fingerprinted_files
|
54
|
+
Dir.glob("./*.gemspec").select { |f| File.file? f } +
|
55
|
+
[Bundler.default_gemfile.to_s, Bundler.default_lockfile.to_s] +
|
56
|
+
Dir.glob("./db/migrate/*").select { |f| File.file? f } +
|
57
|
+
Dir.glob("./lib/generators/**/**").select { |f| File.file? f } +
|
58
|
+
Dir.glob("./spec/test_app_templates/**/**").select { |f| File.file? f } +
|
59
|
+
configuration.extra_fingerprinted_files
|
60
|
+
end
|
61
|
+
|
62
|
+
def self.extra_fingerprinted_files=(extra_fingerprinted_files)
|
63
|
+
@extra_fingerprinted_files = extra_fingerprinted_files
|
37
64
|
end
|
38
65
|
|
39
|
-
def self.
|
40
|
-
|
66
|
+
def self.extra_fingerprinted_files
|
67
|
+
@extra_fingerprinted_files || []
|
41
68
|
end
|
42
69
|
|
43
70
|
def self.env_fingerprint
|
@@ -12,45 +12,48 @@ describe "EngineCart powered application" do
|
|
12
12
|
|
13
13
|
it "should have a engine_cart:generate rake task available" do
|
14
14
|
EngineCart.within_test_app do
|
15
|
-
`rake -T | grep "engine_cart:generate"`
|
15
|
+
`bundle exec rake -T | grep "engine_cart:generate"`
|
16
16
|
expect($?).to eq 0
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
20
20
|
it "should have a engine_cart:regenerate rake task available" do
|
21
21
|
EngineCart.within_test_app do
|
22
|
-
`rake -T | grep "engine_cart:regenerate"`
|
22
|
+
`bundle exec rake -T | grep "engine_cart:regenerate"`
|
23
23
|
expect($?).to eq 0
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
27
|
it "should create a rails app when the engine_cart:generate task is invoked" do
|
28
28
|
EngineCart.within_test_app do
|
29
|
-
`rake engine_cart:generate`
|
29
|
+
`bundle exec rake engine_cart:generate`
|
30
30
|
expect(File).to exist(File.expand_path('.internal_test_app'))
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should not recreate an existing rails app when the engine_cart:generate task is reinvoked" do
|
35
35
|
EngineCart.within_test_app do
|
36
|
-
`rake engine_cart:generate`
|
36
|
+
`bundle exec rake engine_cart:generate`
|
37
37
|
expect(File).to exist(File.expand_path('.internal_test_app'))
|
38
38
|
FileUtils.touch File.join('.internal_test_app', ".this_should_still_exist")
|
39
|
-
`rake engine_cart:generate`
|
39
|
+
`bundle exec rake engine_cart:generate`
|
40
40
|
expect(File).to exist(File.expand_path(File.join('.internal_test_app', ".this_should_still_exist")))
|
41
41
|
end
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
it "should create a rails app when the fingerprint argument is changed" do
|
45
45
|
EngineCart.within_test_app do
|
46
|
-
`rake engine_cart:generate
|
46
|
+
`bundle exec rake engine_cart:generate`
|
47
47
|
expect(File).to exist(File.expand_path('.internal_test_app'))
|
48
48
|
FileUtils.touch File.join('.internal_test_app', ".this_should_not_exist")
|
49
|
-
|
49
|
+
File.open('Gemfile', 'a') do |f|
|
50
|
+
f.puts "# some new content"
|
51
|
+
end
|
52
|
+
`bundle exec rake engine_cart:generate`
|
50
53
|
expect(File).to_not exist(File.expand_path(File.join('.internal_test_app', ".this_should_not_exist")))
|
51
54
|
end
|
52
55
|
end
|
53
|
-
|
56
|
+
|
54
57
|
it "should be able to test the application controller from the internal app" do
|
55
58
|
EngineCart.within_test_app do
|
56
59
|
File.open('spec/some_spec.rb', 'w') do |f|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: engine_cart
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Beer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-04-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -111,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
111
111
|
version: '0'
|
112
112
|
requirements: []
|
113
113
|
rubyforge_project:
|
114
|
-
rubygems_version: 2.6.
|
114
|
+
rubygems_version: 2.6.11
|
115
115
|
signing_key:
|
116
116
|
specification_version: 4
|
117
117
|
summary: Helper for testing Rails Engines sanely
|