engine_cart 0.7.1 → 0.8.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/.gitignore +1 -1
- data/README.md +106 -13
- data/Rakefile +13 -13
- data/engine_cart.gemspec +1 -1
- data/lib/engine_cart.rb +18 -34
- data/lib/engine_cart/gemfile_stanza.rb +37 -0
- data/lib/engine_cart/params.rb +38 -0
- data/lib/engine_cart/tasks/engine_cart.rake +26 -12
- data/lib/engine_cart/version.rb +1 -1
- data/lib/generators/engine_cart/install_generator.rb +3 -19
- data/spec/integration/engine_cart_spec.rb +12 -11
- metadata +31 -29
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe37849368098c72b72ec3f2c83c613e31ec89c4
|
4
|
+
data.tar.gz: cd7bfdd75e1ca203c9be2e07eb9d7e572771118d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e18c1fa840edf5b0d8f91d5e7278d5e055ff8d16808b7cccc33c14e52a0c90c3c86dc79656d2d2d0d52dac5357972eccd348535375b9768d52339effedff41e0
|
7
|
+
data.tar.gz: bbacb74b0b19c36fe0e0cf607c9f0bd819e45826ef4f3b81d35057a5cbf89b7d7baa1acb1b86c447810a2e57afa7a1e1d95bf537dd6a8606363fc57bdfd0843a
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -12,7 +12,7 @@ If you have a Rails Engine and want to test it, the suggested approach is a smal
|
|
12
12
|
|
13
13
|
where each scenario may involve different configurations, Gemfiles, etc.
|
14
14
|
|
15
|
-
EngineCart helps by adding Rake tasks to your Engine that builds a test application for you using Rails generators (and/or application templates).
|
15
|
+
EngineCart helps by adding Rake tasks to your Engine that builds a disposable test application for you using Rails generators (and/or application templates).
|
16
16
|
|
17
17
|
## Installation
|
18
18
|
|
@@ -30,21 +30,61 @@ Or install it yourself as:
|
|
30
30
|
|
31
31
|
## Usage
|
32
32
|
|
33
|
-
|
33
|
+
### engine_cart rake tasks
|
34
34
|
|
35
|
-
|
35
|
+
To use engine_cart's rake tasks, in *your* engine's Rakefile add:
|
36
36
|
|
37
37
|
```ruby
|
38
38
|
require 'engine_cart/rake_task'
|
39
39
|
```
|
40
40
|
|
41
|
-
|
41
|
+
### Set up your engine to use engine_cart
|
42
|
+
|
43
|
+
#### Run engine_cart:prepare
|
44
|
+
|
45
|
+
In order for your Rails engine gem to use engine_cart, some configuration is required. There is an EngineCart generator to do this; it is also packaged as a rake task.
|
42
46
|
|
43
47
|
```
|
44
48
|
$ rake engine_cart:prepare
|
45
49
|
```
|
46
50
|
|
47
|
-
|
51
|
+
This will create `lib/generators/test_app_generator.rb` in your engine and it will also append some code to your engine's `Gemfile`.
|
52
|
+
|
53
|
+
You only need to run this rake task once.
|
54
|
+
|
55
|
+
#### Adjust your engine's generators
|
56
|
+
|
57
|
+
EngineCart is configured so it will run the test app generator (located in `./spec/test_app_templates/lib/generators`) immediately after generating a testing rails app. By default, it will attempt to run the `install` generator for your engine. If you do not have an `install` generator, or want to add additional steps (e.g. to install additional gems), you can add them to the `TestAppGenerator`.
|
58
|
+
|
59
|
+
|
60
|
+
### Generate the testing Rails application
|
61
|
+
|
62
|
+
You can generate a Rails testing application for your engine with a rake task:
|
63
|
+
|
64
|
+
```
|
65
|
+
$ rake engine_cart:generate
|
66
|
+
```
|
67
|
+
|
68
|
+
This creates a new Rails app containing your engine at .internal_test_app by running generators.
|
69
|
+
|
70
|
+
You can start the testing app, interact with it, etc:
|
71
|
+
|
72
|
+
```
|
73
|
+
$ bundle exec rake engine_cart:server
|
74
|
+
|
75
|
+
# or with arguments
|
76
|
+
$ bundle exec rake engine_cart:server["-p 3001 -e production"]
|
77
|
+
```
|
78
|
+
|
79
|
+
The testing app starts at [http://localhost:3000](http://localhost:3000), just like any Rails app.
|
80
|
+
|
81
|
+
If you need to perform additional debugging tasks, you can find the internal test application in the `.internal_test_app` directory. From there, you can do normal Rails things, like:
|
82
|
+
* run rake tasks
|
83
|
+
* run rails console
|
84
|
+
|
85
|
+
### Running Tests using the Rails application
|
86
|
+
|
87
|
+
The easiest way to do this is via a rake task. In your engine's Rakefile:
|
48
88
|
|
49
89
|
```ruby
|
50
90
|
require 'engine_cart/rake_task'
|
@@ -54,28 +94,81 @@ task :ci => ['engine_cart:generate'] do
|
|
54
94
|
end
|
55
95
|
```
|
56
96
|
|
57
|
-
And in your e.g.
|
97
|
+
And in your engine's test framework configuration (e.g. `spec_helper.rb` or `rails_helper.rb`), initialize EngineCart:
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
require 'engine_cart'
|
101
|
+
EngineCart.load_application!
|
102
|
+
```
|
103
|
+
|
104
|
+
Your test files (e.g. spec files for your engine) can now be written as tests for a Rails application.
|
105
|
+
|
106
|
+
## Cleaning out or refreshing testing application
|
107
|
+
|
108
|
+
The EngineCart test application is meant to be disposable and easily rebuildable.
|
109
|
+
|
110
|
+
### Automatic detection of when to rebuild test application
|
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` or `Gemfile.lock` changes.
|
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:
|
58
121
|
|
59
122
|
```ruby
|
60
|
-
|
61
|
-
|
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
|
+
```
|
131
|
+
|
132
|
+
### Rake tasks for rebuilding test application
|
133
|
+
|
134
|
+
You can also manually clean out and rebuild the test application. Run these rake tasks from the top level directory, not from the test application directory.
|
135
|
+
|
136
|
+
To clean out the testing app:
|
137
|
+
|
138
|
+
```
|
139
|
+
$ rake engine_cart:clean
|
62
140
|
```
|
63
141
|
|
64
|
-
|
142
|
+
Or, if you wish to start over immediately with a pristine testing application, the following will clean out the testing app and generate it anew:
|
65
143
|
|
66
144
|
```
|
67
145
|
$ rake engine_cart:regenerate
|
68
146
|
```
|
69
147
|
|
148
|
+
### Brute force when all else fails
|
149
|
+
|
150
|
+
If you have generated a test application, there is a `Gemfile` and `Gemfile.lock` associated with the testing app at `.internal_test_app` (or wherever you designated as the test app location). If you then update *your* engine's `Gemfile` or `.gemspec`, Bundler can get confused if it has conflicting information between your engine and the testing app.
|
151
|
+
|
152
|
+
To fix this:
|
153
|
+
|
154
|
+
1. Clean out your testing app: `$ bundle exec rake engine_cart:clean` or `$ rm -rf .internal_test_app`
|
155
|
+
2. Remove your engine's Gemfile.lock: `$ rm Gemfile.lock` (not always necessary)
|
156
|
+
3. Allow Bundler to resolve gem dependencies again: `$ bundle install`
|
157
|
+
4. Rebuild the test application: `$ bundle exec rake engine_cart:generate`
|
158
|
+
|
70
159
|
## Configuration
|
71
160
|
|
161
|
+
### Location of Rails testing app
|
162
|
+
|
72
163
|
You can configure where the test app is created by setting the `ENGINE_CART_DESTINATION` env variable, e.g.:
|
73
164
|
|
74
|
-
```ruby
|
75
|
-
ENGINE_CART_DESTINATION="/tmp/generate-the-test-app-into-tmp-instead-of-your-app" rake ci
|
76
165
|
```
|
166
|
+
ENGINE_CART_DESTINATION="/tmp/my_engines_test_app_here" rake engine_cart:generate
|
167
|
+
```
|
168
|
+
|
169
|
+
### Adjusting generators for Rails testing app
|
77
170
|
|
78
|
-
After creating the test application,
|
171
|
+
After creating the test application, EngineCart will run the test app generator (located in `./spec/test_app_templates/lib/generators`). By default, it will attempt to run the `install` generator for your engine. If you do not have an `install` generator, or want to add additional steps (e.g. to install additional gems), you can add them to the `TestAppGenerator`.
|
79
172
|
|
80
173
|
## Contributing
|
81
174
|
|
@@ -83,4 +176,4 @@ After creating the test application, Engine Cart will run the test app generator
|
|
83
176
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
84
177
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
85
178
|
4. Push to the branch (`git push origin my-new-feature`)
|
86
|
-
5. Create
|
179
|
+
5. Create a [Pull Request](https://help.github.com/articles/using-pull-requests/)
|
data/Rakefile
CHANGED
@@ -9,22 +9,22 @@ task :ci => ['generate_test_gem', 'spec'] do
|
|
9
9
|
end
|
10
10
|
|
11
11
|
task :generate_test_gem => ['engine_cart:setup'] do
|
12
|
-
system("rm -rf
|
12
|
+
system("rm -rf .internal_test_gem")
|
13
13
|
gem 'rails'
|
14
14
|
|
15
|
-
|
16
|
-
"_#{Gem.loaded_specs["rails"].version}_"
|
17
|
-
end
|
15
|
+
rails_path = Gem.bin_path('railties', 'rails')
|
18
16
|
|
19
17
|
Bundler.with_clean_env do
|
20
|
-
system("
|
18
|
+
system("#{rails_path} plugin new internal_test_gem")
|
21
19
|
end
|
20
|
+
system("mv internal_test_gem .internal_test_gem")
|
22
21
|
|
23
|
-
IO.write("
|
24
|
-
IO.write("
|
25
|
-
IO.write("
|
22
|
+
IO.write(".internal_test_gem/internal_test_gem.gemspec", File.open(".internal_test_gem/internal_test_gem.gemspec") {|f| f.read.gsub(/FIXME/, "DONTCARE")})
|
23
|
+
IO.write(".internal_test_gem/internal_test_gem.gemspec", File.open(".internal_test_gem/internal_test_gem.gemspec") {|f| f.read.gsub(/TODO/, "DONTCARE")})
|
24
|
+
IO.write(".internal_test_gem/internal_test_gem.gemspec", File.open(".internal_test_gem/internal_test_gem.gemspec") {|f| f.read.gsub(/.*homepage.*/, "")})
|
25
|
+
|
26
|
+
EngineCart.destination = '.internal_test_gem'
|
26
27
|
|
27
|
-
system("mv spec/internal_gem spec/internal")
|
28
28
|
Rake::Task['engine_cart:inject_gemfile_extras'].invoke
|
29
29
|
EngineCart.within_test_app do
|
30
30
|
system "git init"
|
@@ -38,7 +38,7 @@ task :generate_test_gem => ['engine_cart:setup'] do
|
|
38
38
|
require 'rspec/rails'
|
39
39
|
require 'rspec/autorun'
|
40
40
|
|
41
|
-
require '
|
41
|
+
require 'internal_test_gem'
|
42
42
|
RSpec.configure do |config|
|
43
43
|
|
44
44
|
end
|
@@ -48,11 +48,11 @@ task :generate_test_gem => ['engine_cart:setup'] do
|
|
48
48
|
system "echo '\ngem \"rspec-rails\"\n' >> Gemfile"
|
49
49
|
system %Q{echo '\ngem "sass", "~> 3.2.15"\n' >> Gemfile}
|
50
50
|
system %Q{echo '\ngem "sprockets", "~> 2.11.0"\n' >> Gemfile}
|
51
|
-
|
51
|
+
Bundler.clean_system "bundle update --quiet"
|
52
52
|
system "echo 'require \"engine_cart/rake_task\"\n' >> Rakefile"
|
53
53
|
|
54
|
-
system("rake engine_cart:prepare")
|
55
|
-
|
54
|
+
system("bundle exec rake engine_cart:prepare")
|
55
|
+
Bundler.clean_system "bundle install --quiet"
|
56
56
|
end
|
57
57
|
end
|
58
58
|
|
data/engine_cart.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency "rails"
|
22
|
-
spec.add_dependency "bundler", "~> 1.
|
22
|
+
spec.add_dependency "bundler", "~> 1.5"
|
23
23
|
spec.add_development_dependency "rake"
|
24
24
|
spec.add_development_dependency "rspec"
|
25
25
|
end
|
data/lib/engine_cart.rb
CHANGED
@@ -1,39 +1,10 @@
|
|
1
1
|
require "engine_cart/version"
|
2
|
+
require 'engine_cart/gemfile_stanza'
|
3
|
+
require 'bundler'
|
2
4
|
|
3
5
|
module EngineCart
|
4
6
|
require "engine_cart/engine" if defined? Rails
|
5
|
-
|
6
|
-
class << self
|
7
|
-
|
8
|
-
##
|
9
|
-
# Name of the engine we're testing
|
10
|
-
attr_accessor :engine_name
|
11
|
-
|
12
|
-
##
|
13
|
-
# Destination to generate the test app into
|
14
|
-
attr_accessor :destination
|
15
|
-
|
16
|
-
##
|
17
|
-
# Path to a Rails application template
|
18
|
-
attr_accessor :template
|
19
|
-
|
20
|
-
##
|
21
|
-
# Path to test app templates to make available to
|
22
|
-
# the test app generator
|
23
|
-
attr_accessor :templates_path
|
24
|
-
|
25
|
-
|
26
|
-
##
|
27
|
-
# Additional options when generating a test rails application
|
28
|
-
attr_accessor :rails_options
|
29
|
-
|
30
|
-
end
|
31
|
-
|
32
|
-
self.engine_name = ENV["CURRENT_ENGINE_NAME"]
|
33
|
-
self.destination = ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || "./spec/internal"
|
34
|
-
self.template = ENV["ENGINE_CART_TEMPLATE"]
|
35
|
-
self.templates_path = ENV['ENGINE_CART_TEMPLATES_PATH'] || "./spec/test_app_templates"
|
36
|
-
self.rails_options = ENV['ENGINE_CART_RAILS_OPTIONS']
|
7
|
+
require 'engine_cart/params'
|
37
8
|
|
38
9
|
def self.current_engine_name
|
39
10
|
engine_name || File.basename(Dir.glob("*.gemspec").first, '.gemspec')
|
@@ -65,11 +36,24 @@ module EngineCart
|
|
65
36
|
|
66
37
|
def self.rails_fingerprint_proc extra_files = []
|
67
38
|
lambda do
|
68
|
-
|
39
|
+
EngineCart.default_fingerprint + (Dir.glob("./db/migrate/*") + Dir.glob("./lib/generators/**/**") + Dir.glob("./spec/test_app_templates/**/**") + extra_files).map {|f| File.mtime(f) }.max.to_s
|
69
40
|
end
|
70
41
|
end
|
71
42
|
|
72
43
|
def self.default_fingerprint
|
73
|
-
""
|
44
|
+
EngineCart.env_fingerprint + (Dir.glob("./*.gemspec") + [Bundler.default_gemfile.to_s, Bundler.default_lockfile.to_s]).map {|f| File.mtime(f) }.max.to_s
|
45
|
+
end
|
46
|
+
|
47
|
+
def self.env_fingerprint
|
48
|
+
{ 'RUBY_DESCRIPTION' => RUBY_DESCRIPTION, 'BUNDLE_GEMFILE' => Bundler.default_gemfile.to_s }.reject { |k, v| v.nil? || v.empty? }.to_s
|
49
|
+
end
|
50
|
+
|
51
|
+
def self.check_for_gemfile_stanza
|
52
|
+
return unless File.exist? 'Gemfile'
|
53
|
+
|
54
|
+
unless File.readlines('Gemfile').grep(/#{EngineCart.gemfile_stanza_check_line}/).any?
|
55
|
+
Bundler.ui.warn "[EngineCart] For better results, consider updating the EngineCart stanza in your Gemfile with:\n\n"
|
56
|
+
Bundler.ui.warn EngineCart.gemfile_stanza_text
|
57
|
+
end
|
74
58
|
end
|
75
59
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'engine_cart/params'
|
2
|
+
|
3
|
+
module EngineCart
|
4
|
+
def self.gemfile_stanza_check_line
|
5
|
+
"engine_cart stanza: 0.8.0"
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.gemfile_stanza_text
|
9
|
+
<<-EOF.gsub(/^ /, '')
|
10
|
+
# BEGIN ENGINE_CART BLOCK
|
11
|
+
# engine_cart: #{EngineCart::VERSION}
|
12
|
+
# #{EngineCart.gemfile_stanza_check_line}
|
13
|
+
# the below comes from engine_cart, a gem used to test this Rails engine gem in the context of a Rails app.
|
14
|
+
file = File.expand_path("Gemfile", ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || File.expand_path("#{EngineCart.destination}", File.dirname(__FILE__)))
|
15
|
+
if File.exist?(file)
|
16
|
+
begin
|
17
|
+
eval_gemfile file
|
18
|
+
rescue Bundler::GemfileError => e
|
19
|
+
Bundler.ui.warn '[EngineCart] Skipping Rails application dependencies:'
|
20
|
+
Bundler.ui.warn e.message
|
21
|
+
end
|
22
|
+
else
|
23
|
+
Bundler.ui.warn "[EngineCart] Unable to find test application dependencies in \#{file}, using placeholder dependencies"
|
24
|
+
|
25
|
+
gem 'rails', ENV['RAILS_VERSION'] if ENV['RAILS_VERSION']
|
26
|
+
|
27
|
+
if ENV['RAILS_VERSION'].nil? || ENV['RAILS_VERSION'] =~ /^4.2/
|
28
|
+
gem 'responders', "~> 2.0"
|
29
|
+
gem 'sass-rails', ">= 5.0"
|
30
|
+
else
|
31
|
+
gem 'sass-rails', "< 5.0"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
# END ENGINE_CART BLOCK
|
35
|
+
EOF
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module EngineCart
|
2
|
+
class << self
|
3
|
+
|
4
|
+
##
|
5
|
+
# Name of the engine we're testing
|
6
|
+
attr_accessor :engine_name
|
7
|
+
|
8
|
+
##
|
9
|
+
# Destination to generate the test app into
|
10
|
+
attr_accessor :destination
|
11
|
+
|
12
|
+
##
|
13
|
+
# Path to a Rails application template
|
14
|
+
attr_accessor :template
|
15
|
+
|
16
|
+
##
|
17
|
+
# Path to test app templates to make available to
|
18
|
+
# the test app generator
|
19
|
+
attr_accessor :templates_path
|
20
|
+
|
21
|
+
|
22
|
+
##
|
23
|
+
# Additional options when generating a test rails application
|
24
|
+
attr_accessor :rails_options
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
self.engine_name = ENV["CURRENT_ENGINE_NAME"]
|
29
|
+
|
30
|
+
def self.default_destination
|
31
|
+
('.internal_test_app' if File.exist? '.internal_test_app') || ('spec/internal' if File.exist? 'spec/internal') || '.internal_test_app'
|
32
|
+
end
|
33
|
+
|
34
|
+
self.destination = ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || default_destination
|
35
|
+
self.template = ENV["ENGINE_CART_TEMPLATE"]
|
36
|
+
self.templates_path = ENV['ENGINE_CART_TEMPLATES_PATH'] || "./spec/test_app_templates"
|
37
|
+
self.rails_options = ENV['ENGINE_CART_RAILS_OPTIONS']
|
38
|
+
end
|
@@ -12,6 +12,7 @@ namespace :engine_cart do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
task :setup do
|
15
|
+
EngineCart.check_for_gemfile_stanza
|
15
16
|
end
|
16
17
|
|
17
18
|
desc 'Regenerate the test rails app'
|
@@ -28,12 +29,10 @@ namespace :engine_cart do
|
|
28
29
|
require 'fileutils'
|
29
30
|
Dir.mktmpdir do |dir|
|
30
31
|
Dir.chdir dir do
|
31
|
-
|
32
|
-
"_#{Gem.loaded_specs["rails"].version}_"
|
33
|
-
end
|
32
|
+
rails_path = Gem.bin_path('railties', 'rails')
|
34
33
|
|
35
34
|
Bundler.with_clean_env do
|
36
|
-
|
35
|
+
`#{rails_path} new internal --skip-spring #{EngineCart.rails_options} #{"-m #{EngineCart.template}" if EngineCart.template}`
|
37
36
|
end
|
38
37
|
|
39
38
|
unless $?
|
@@ -48,13 +47,14 @@ namespace :engine_cart do
|
|
48
47
|
has_web_console = false
|
49
48
|
|
50
49
|
# Hack for https://github.com/rails/web-console/issues/150
|
51
|
-
|
50
|
+
gemfile = File.join(EngineCart.destination, 'Gemfile')
|
51
|
+
IO.write(gemfile, File.open(gemfile) do |f|
|
52
52
|
text = f.read
|
53
53
|
has_web_console = text.match('web-console')
|
54
54
|
text.gsub(/.*web-console.*/, "").gsub(/.*IRB console on exception pages.*/, "")
|
55
55
|
end)
|
56
56
|
|
57
|
-
File.open(
|
57
|
+
File.open(gemfile, "a") do |f|
|
58
58
|
f.puts 'gem "web-console", group: :development'
|
59
59
|
end if has_web_console
|
60
60
|
end
|
@@ -84,28 +84,42 @@ EOF
|
|
84
84
|
# Create a new test rails app
|
85
85
|
Rake::Task['engine_cart:create_test_rails_app'].invoke
|
86
86
|
|
87
|
-
|
87
|
+
Bundler.clean_system "bundle install --quiet"
|
88
88
|
|
89
89
|
Rake::Task['engine_cart:inject_gemfile_extras'].invoke
|
90
90
|
|
91
91
|
# Copy our test app generators into the app and prepare it
|
92
92
|
if File.exist? "#{EngineCart.templates_path}/lib/generators"
|
93
|
-
|
93
|
+
Bundler.clean_system "cp -r #{EngineCart.templates_path}/lib/generators #{EngineCart.destination}/lib"
|
94
94
|
end
|
95
95
|
|
96
96
|
within_test_app do
|
97
|
-
system "bundle install"
|
98
|
-
system "(rails g | grep test_app) && rails generate test_app"
|
99
|
-
system "rake db:migrate db:test:prepare"
|
97
|
+
system "bundle install --quiet"
|
98
|
+
system "(bundle exec rails g | grep test_app) && bundle exec rails generate test_app"
|
99
|
+
system "bundle exec rake db:migrate db:test:prepare"
|
100
100
|
end
|
101
101
|
|
102
|
-
|
102
|
+
Bundler.clean_system "bundle install --quiet"
|
103
103
|
|
104
104
|
File.open(File.expand_path('.generated_engine_cart', EngineCart.destination), 'w') { |f| f.write(original_fingerprint || EngineCart.fingerprint) }
|
105
105
|
|
106
106
|
puts "Done generating test app"
|
107
107
|
end
|
108
108
|
end
|
109
|
+
|
110
|
+
desc 'Start the internal test application using `rails server`'
|
111
|
+
task :server, [:rails_server_args] => [:generate] do |_, args|
|
112
|
+
within_test_app do
|
113
|
+
system "bundle exec rails server #{args[:rails_server_args]}"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
desc 'Start the internal test application using `rails console`'
|
118
|
+
task :console, [:rails_console_args] => [:generate] do |_, args|
|
119
|
+
within_test_app do
|
120
|
+
system "bundle exec rails console #{args[:rails_console_args]}"
|
121
|
+
end
|
122
|
+
end
|
109
123
|
end
|
110
124
|
|
111
125
|
def within_test_app
|
data/lib/engine_cart/version.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'rails/generators'
|
2
|
+
require 'engine_cart/version'
|
3
|
+
require 'engine_cart/gemfile_stanza'
|
2
4
|
|
3
5
|
##
|
4
6
|
# EngineCartGenerator sets up an engine to
|
@@ -47,25 +49,7 @@ module EngineCart
|
|
47
49
|
|
48
50
|
def add_gemfile_include
|
49
51
|
append_file "Gemfile" do
|
50
|
-
|
51
|
-
|
52
|
-
# the below comes from engine_cart, a gem used to test this Rails engine gem in the context of a Rails app
|
53
|
-
file = File.expand_path("Gemfile", ENV['ENGINE_CART_DESTINATION'] || ENV['RAILS_ROOT'] || File.expand_path("../spec/internal", __FILE__))
|
54
|
-
if File.exist?(file)
|
55
|
-
puts "Loading \#{file} ..." if $DEBUG # `ruby -d` or `bundle -v`
|
56
|
-
instance_eval File.read(file)
|
57
|
-
else
|
58
|
-
# we get here when we haven't yet generated the testing app via engine_cart
|
59
|
-
gem 'rails', ENV['RAILS_VERSION'] if ENV['RAILS_VERSION']
|
60
|
-
|
61
|
-
if ENV['RAILS_VERSION'] && ENV['RAILS_VERSION'] =~ /^4.2/
|
62
|
-
gem 'responders', "~> 2.0"
|
63
|
-
gem 'sass-rails', ">= 5.0"
|
64
|
-
else
|
65
|
-
gem 'sass-rails', "< 5.0"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
EOF
|
52
|
+
EngineCart.gemfile_stanza_text
|
69
53
|
end
|
70
54
|
end
|
71
55
|
end
|
@@ -1,14 +1,15 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe "EngineCart powered application" do
|
4
|
-
|
4
|
+
EngineCart.destination = File.expand_path("../../.internal_test_gem", File.dirname(__FILE__))
|
5
|
+
|
5
6
|
it "should have the test_app_templates pre-generated" do
|
6
|
-
expect(File).to exist File.expand_path("spec/test_app_templates",
|
7
|
+
expect(File).to exist File.expand_path("spec/test_app_templates", EngineCart.destination)
|
7
8
|
end
|
8
9
|
|
9
10
|
it "should ignore the test app" do
|
10
|
-
git_ignore = File.expand_path(".gitignore",
|
11
|
-
expect(File.read(git_ignore)).to match /
|
11
|
+
git_ignore = File.expand_path(".gitignore", EngineCart.destination)
|
12
|
+
expect(File.read(git_ignore)).to match /.internal_test_app/
|
12
13
|
end
|
13
14
|
|
14
15
|
it "should have a engine_cart:generate rake task available" do
|
@@ -28,27 +29,27 @@ describe "EngineCart powered application" do
|
|
28
29
|
it "should create a rails app when the engine_cart:generate task is invoked" do
|
29
30
|
EngineCart.within_test_app do
|
30
31
|
`rake engine_cart:generate`
|
31
|
-
expect(File).to exist(File.expand_path(
|
32
|
+
expect(File).to exist(File.expand_path('.internal_test_app'))
|
32
33
|
end
|
33
34
|
end
|
34
35
|
|
35
36
|
it "should not recreate an existing rails app when the engine_cart:generate task is reinvoked" do
|
36
37
|
EngineCart.within_test_app do
|
37
38
|
`rake engine_cart:generate`
|
38
|
-
expect(File).to exist(File.expand_path(
|
39
|
-
FileUtils.touch File.join(
|
39
|
+
expect(File).to exist(File.expand_path('.internal_test_app'))
|
40
|
+
FileUtils.touch File.join('.internal_test_app', ".this_should_still_exist")
|
40
41
|
`rake engine_cart:generate`
|
41
|
-
expect(File).to exist(File.expand_path(File.join(
|
42
|
+
expect(File).to exist(File.expand_path(File.join('.internal_test_app', ".this_should_still_exist")))
|
42
43
|
end
|
43
44
|
end
|
44
45
|
|
45
46
|
it "should create a rails app when the fingerprint argument is changed" do
|
46
47
|
EngineCart.within_test_app do
|
47
48
|
`rake engine_cart:generate[this-fingerprint]`
|
48
|
-
expect(File).to exist(File.expand_path(
|
49
|
-
FileUtils.touch File.join(
|
49
|
+
expect(File).to exist(File.expand_path('.internal_test_app'))
|
50
|
+
FileUtils.touch File.join('.internal_test_app', ".this_should_not_exist")
|
50
51
|
`rake engine_cart:generate[that-fingerprint]`
|
51
|
-
expect(File).to_not exist(File.expand_path(File.join(
|
52
|
+
expect(File).to_not exist(File.expand_path(File.join('.internal_test_app', ".this_should_not_exist")))
|
52
53
|
end
|
53
54
|
end
|
54
55
|
|
metadata
CHANGED
@@ -1,69 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: engine_cart
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Chris Beer
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-11-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
+
name: rails
|
14
15
|
requirement: !ruby/object:Gem::Requirement
|
15
16
|
requirements:
|
16
|
-
- -
|
17
|
+
- - ">="
|
17
18
|
- !ruby/object:Gem::Version
|
18
19
|
version: '0'
|
19
|
-
name: rails
|
20
|
-
prerelease: false
|
21
20
|
type: :runtime
|
21
|
+
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
28
29
|
requirement: !ruby/object:Gem::Requirement
|
29
30
|
requirements:
|
30
|
-
- - ~>
|
31
|
+
- - "~>"
|
31
32
|
- !ruby/object:Gem::Version
|
32
|
-
version: '1.
|
33
|
-
name: bundler
|
34
|
-
prerelease: false
|
33
|
+
version: '1.5'
|
35
34
|
type: :runtime
|
35
|
+
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - ~>
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '1.
|
40
|
+
version: '1.5'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
42
43
|
requirement: !ruby/object:Gem::Requirement
|
43
44
|
requirements:
|
44
|
-
- -
|
45
|
+
- - ">="
|
45
46
|
- !ruby/object:Gem::Version
|
46
47
|
version: '0'
|
47
|
-
name: rake
|
48
|
-
prerelease: false
|
49
48
|
type: :development
|
49
|
+
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
56
57
|
requirement: !ruby/object:Gem::Requirement
|
57
58
|
requirements:
|
58
|
-
- -
|
59
|
+
- - ">="
|
59
60
|
- !ruby/object:Gem::Version
|
60
61
|
version: '0'
|
61
|
-
name: rspec
|
62
|
-
prerelease: false
|
63
62
|
type: :development
|
63
|
+
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
description: Helper for testing Rails Engines sanely
|
@@ -73,8 +73,8 @@ executables: []
|
|
73
73
|
extensions: []
|
74
74
|
extra_rdoc_files: []
|
75
75
|
files:
|
76
|
-
- .gitignore
|
77
|
-
- .travis.yml
|
76
|
+
- ".gitignore"
|
77
|
+
- ".travis.yml"
|
78
78
|
- Gemfile
|
79
79
|
- LICENSE.txt
|
80
80
|
- README.md
|
@@ -82,6 +82,8 @@ files:
|
|
82
82
|
- engine_cart.gemspec
|
83
83
|
- lib/engine_cart.rb
|
84
84
|
- lib/engine_cart/engine.rb
|
85
|
+
- lib/engine_cart/gemfile_stanza.rb
|
86
|
+
- lib/engine_cart/params.rb
|
85
87
|
- lib/engine_cart/rake_task.rb
|
86
88
|
- lib/engine_cart/tasks/engine_cart.rake
|
87
89
|
- lib/engine_cart/version.rb
|
@@ -92,24 +94,24 @@ homepage: https://github.com/cbeer/engine_cart
|
|
92
94
|
licenses:
|
93
95
|
- MIT
|
94
96
|
metadata: {}
|
95
|
-
post_install_message:
|
97
|
+
post_install_message:
|
96
98
|
rdoc_options: []
|
97
99
|
require_paths:
|
98
100
|
- lib
|
99
101
|
required_ruby_version: !ruby/object:Gem::Requirement
|
100
102
|
requirements:
|
101
|
-
- -
|
103
|
+
- - ">="
|
102
104
|
- !ruby/object:Gem::Version
|
103
105
|
version: '0'
|
104
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
105
107
|
requirements:
|
106
|
-
- -
|
108
|
+
- - ">="
|
107
109
|
- !ruby/object:Gem::Version
|
108
110
|
version: '0'
|
109
111
|
requirements: []
|
110
|
-
rubyforge_project:
|
111
|
-
rubygems_version: 2.4.
|
112
|
-
signing_key:
|
112
|
+
rubyforge_project:
|
113
|
+
rubygems_version: 2.4.8
|
114
|
+
signing_key:
|
113
115
|
specification_version: 4
|
114
116
|
summary: Helper for testing Rails Engines sanely
|
115
117
|
test_files:
|