wagons 0.2.2 → 0.3.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 +8 -8
- data/Rakefile +4 -6
- data/lib/generators/wagon/templates/%singular_name%.gemspec.tt +12 -11
- data/lib/generators/wagon/templates/{script → bin}/rails.tt +3 -2
- data/lib/generators/wagon/templates/config/routes.rb +1 -1
- data/lib/generators/wagon/templates/lib/%singular_name%/version.rb.tt +2 -2
- data/lib/generators/wagon/templates/lib/%singular_name%.rb.tt +0 -1
- data/lib/generators/wagon/wagon_generator.rb +4 -6
- data/lib/wagons/extensions/application.rb +2 -4
- data/lib/wagons/extensions/require_optional.rb +2 -2
- data/lib/wagons/extensions/test_case.rb +5 -7
- data/lib/wagons/installer.rb +52 -56
- data/lib/wagons/railtie.rb +2 -2
- data/lib/wagons/version.rb +1 -1
- data/lib/wagons/view_helper.rb +14 -16
- data/lib/wagons/wagon.rb +6 -8
- data/lib/wagons.rb +8 -10
- data/test/ci/rails3.gemfile.lock +108 -0
- data/test/dummy/Gemfile.lock +52 -48
- data/test/dummy/app/controllers/people_controller.rb +1 -3
- data/test/dummy/app/models/person.rb +1 -1
- data/test/dummy/config/application.rb +3 -4
- data/test/dummy/config/boot.rb +1 -1
- data/test/dummy/config/environments/development.rb +1 -1
- data/test/dummy/config/environments/production.rb +1 -1
- data/test/dummy/config/environments/test.rb +2 -2
- data/test/dummy/config/initializers/session_store.rb +1 -1
- data/test/dummy/config/initializers/wagon_app_version.rb +1 -1
- data/test/dummy/config/initializers/wrap_parameters.rb +1 -1
- data/test/dummy/config/routes.rb +3 -3
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/fixtures/development/people.rb +3 -3
- data/test/dummy/db/fixtures/test/people.rb +3 -3
- data/test/dummy/db/schema.rb +5 -5
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +1528 -1015
- data/test/dummy/log/test.log +11807 -6530
- data/test/dummy/test/models/person_test.rb +5 -5
- data/test/dummy/test/test_helper.rb +1 -1
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/cffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/d771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/test/sprockets/f7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/vendor/wagons/superliner/Gemfile.lock +53 -49
- data/test/dummy/vendor/wagons/superliner/app/controllers/cities_controller.rb +1 -2
- data/test/dummy/vendor/wagons/superliner/app/models/city.rb +2 -2
- data/test/dummy/vendor/wagons/superliner/db/fixtures/cities.rb +1 -1
- data/test/dummy/vendor/wagons/superliner/db/migrate/20120606125058_create_cities.rb +1 -1
- data/test/dummy/vendor/wagons/superliner/dummy_superliner.gemspec +11 -11
- data/test/dummy/vendor/wagons/superliner/lib/dummy_superliner/version.rb +2 -2
- data/test/dummy/vendor/wagons/superliner/lib/dummy_superliner/wagon.rb +3 -4
- data/test/dummy/vendor/wagons/superliner/lib/dummy_superliner.rb +1 -1
- data/test/dummy/vendor/wagons/superliner/script/rails +1 -1
- data/test/dummy/vendor/wagons/superliner/test/controllers/cities_controller_test.rb +5 -7
- data/test/dummy/vendor/wagons/superliner/test/controllers/people_controller_test.rb +2 -4
- data/test/dummy/vendor/wagons/superliner/test/models/city_test.rb +3 -3
- data/test/dummy/vendor/wagons/superliner/test/models/person_test.rb +5 -7
- data/test/dummy/vendor/wagons/superliner/test/test_helper.rb +1 -2
- data/test/dummy/vendor/wagons/superliner/test/wagon_test.rb +23 -24
- data/test/test_helper.rb +5 -5
- data/test/wagons_installer_test.rb +72 -75
- data/test/wagons_test.rb +1 -1
- metadata +174 -160
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YTA2ZTc4NjkwNWJjZTU1YTZkNTE0MTY2MTg4MTMzYWMwMjU4N2ZhYQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NTBhOTYzY2UxNDAxNzk0YjlkZjA1OTFkMDNlMjkwMGQ3NmY1YmI5ZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
NzQzZWZhMGJjNmVkNzQ3OGRhMTRkOWZkMTNjZmVkZWZjNzU1ZjNkYzU0MjFl
|
10
|
+
NzliMGU5ZWRjNGQ3MDc2NTFhYzVmMjgwMDA1Y2QwNDM4MDdjZTg1OTMwODFh
|
11
|
+
NDhhOGMyNzU0ZGFmZWM5NGZiYjM0OGI2NTI5ODZlOWY5NWMyMzA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
M2I0MWExOWI1YzE5Njk0MTg1M2JmZDk3ZjU4MjBlMWUyNjg3NTE4YWI3MzI4
|
14
|
+
ZWUwN2Q2ZmQ0ZTFmZGZlYjM4MTdjNzY5ZGU3YmNlNjhhN2U5YTk0YjNmMWE0
|
15
|
+
MDQ3ZDQ3MDBkNmJiYmNiMzI0MmJjNjkwNDNkNDBjMDZjNjMwMmI=
|
data/Rakefile
CHANGED
@@ -21,7 +21,6 @@ RDoc::Task.new(:rdoc) do |rdoc|
|
|
21
21
|
rdoc.rdoc_files.include('lib/**/*.rb')
|
22
22
|
end
|
23
23
|
|
24
|
-
|
25
24
|
Bundler::GemHelper.install_tasks
|
26
25
|
|
27
26
|
require 'rake/testtask'
|
@@ -33,14 +32,13 @@ end
|
|
33
32
|
|
34
33
|
task :test do
|
35
34
|
begin
|
36
|
-
Bundler.with_clean_env { sh
|
37
|
-
Bundler.with_clean_env { sh
|
35
|
+
Bundler.with_clean_env { sh 'cd test/dummy && rails g wagon test_wagon' }
|
36
|
+
Bundler.with_clean_env { sh 'cd test/dummy && bundle exec rake wagon:bundle:update' }
|
38
37
|
Bundler.with_clean_env { sh "cd test/dummy && bundle exec rake db:migrate test #{'-t' if Rake.application.options.trace}" }
|
39
38
|
Bundler.with_clean_env { sh "cd test/dummy && bundle exec rake wagon:test #{'-t' if Rake.application.options.trace}" }
|
40
39
|
ensure
|
41
|
-
sh
|
40
|
+
sh 'rm -rf test/dummy/vendor/wagons/test_wagon'
|
42
41
|
end
|
43
42
|
end
|
44
43
|
|
45
|
-
task :
|
46
|
-
|
44
|
+
task default: :test
|
@@ -1,19 +1,20 @@
|
|
1
|
-
|
1
|
+
$LOAD_PATH.push File.expand_path('../lib', __FILE__)
|
2
2
|
|
3
3
|
# Maintain your wagon's version:
|
4
|
-
require
|
4
|
+
require '<%= singular_name %>/version'
|
5
5
|
|
6
6
|
# Describe your gem and declare its dependencies:
|
7
7
|
Gem::Specification.new do |s|
|
8
|
-
|
8
|
+
# rubocop:disable SingleSpaceBeforeFirstArg
|
9
|
+
s.name = '<%= singular_name %>'
|
9
10
|
s.version = <%= class_name %>::VERSION
|
10
|
-
s.authors = [
|
11
|
-
s.email = [
|
12
|
-
#s.homepage =
|
13
|
-
s.summary =
|
14
|
-
s.description =
|
15
|
-
|
16
|
-
s.files = Dir["{app,config,db,lib}/**/*"] + ["Rakefile"]
|
17
|
-
s.test_files = Dir["test/**/*"]
|
11
|
+
s.authors = ['Your name']
|
12
|
+
s.email = ['Your email']
|
13
|
+
# s.homepage = 'TODO'
|
14
|
+
s.summary = '<%= wagon_name.humanize.titleize %>'
|
15
|
+
s.description = 'Wagon description'
|
18
16
|
|
17
|
+
s.files = Dir['{app,config,db,lib}/**/*'] + ['Rakefile']
|
18
|
+
s.test_files = Dir['test/**/*']
|
19
|
+
# rubocop:enable SingleSpaceBeforeFirstArg
|
19
20
|
end
|
@@ -1,5 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# This command will automatically be run when you run "rails" with Rails
|
2
|
+
# This command will automatically be run when you run "rails" with Rails
|
3
|
+
# gems installed from the root of your application.
|
3
4
|
|
4
5
|
ENGINE_ROOT = File.expand_path('../..', __FILE__)
|
5
6
|
|
@@ -8,4 +9,4 @@ ENGINE_PATH = File.expand_path('lib/<%= singular_name %>/engine', ENGINE_ROOT)
|
|
8
9
|
|
9
10
|
load File.expand_path('../../app_root.rb', __FILE__)
|
10
11
|
|
11
|
-
load File.expand_path('script/rails', ENV[
|
12
|
+
load File.expand_path('script/rails', ENV['APP_ROOT'])
|
@@ -1,3 +1,3 @@
|
|
1
1
|
module <%= class_name %>
|
2
|
-
VERSION =
|
3
|
-
end
|
2
|
+
VERSION = '0.0.1'
|
3
|
+
end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
class WagonGenerator < Rails::Generators::NamedBase #:nodoc:
|
2
|
-
|
3
2
|
attr_reader :wagon_name
|
4
3
|
|
5
4
|
source_root File.expand_path('../templates', __FILE__)
|
@@ -28,11 +27,10 @@ class WagonGenerator < Rails::Generators::NamedBase #:nodoc:
|
|
28
27
|
private
|
29
28
|
|
30
29
|
def all_templates
|
31
|
-
source_paths.
|
32
|
-
Dir[File.join(path,
|
33
|
-
select {|f| File.file?(f) }.
|
34
|
-
|
30
|
+
source_paths.map do |path|
|
31
|
+
Dir[File.join(path, '**', '{*,.[a-z]*}')].
|
32
|
+
select { |f| File.file?(f) }.
|
33
|
+
map { |f| f.sub(path + File::SEPARATOR, '') }
|
35
34
|
end.flatten.uniq.sort
|
36
35
|
end
|
37
|
-
|
38
36
|
end
|
@@ -1,6 +1,5 @@
|
|
1
1
|
module Rails
|
2
2
|
class Application < Engine
|
3
|
-
|
4
3
|
protected
|
5
4
|
|
6
5
|
# Append wagons at the end of all railties, even after the application.
|
@@ -11,8 +10,7 @@ module Rails
|
|
11
10
|
end
|
12
11
|
end
|
13
12
|
end
|
14
|
-
|
13
|
+
|
15
14
|
alias_method_chain :ordered_railties, :wagons
|
16
|
-
|
17
15
|
end
|
18
|
-
end
|
16
|
+
end
|
@@ -1,13 +1,11 @@
|
|
1
1
|
module ActiveSupport #:nodoc:
|
2
2
|
class TestCase
|
3
|
-
|
4
3
|
# Resets the fixtures to the new path
|
5
4
|
def self.reset_fixture_path(path)
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
self.fixture_table_names = []
|
6
|
+
self.fixture_class_names = {}
|
7
|
+
self.fixture_path = path
|
8
|
+
fixtures :all
|
10
9
|
end
|
11
|
-
|
12
10
|
end
|
13
|
-
end
|
11
|
+
end
|
data/lib/wagons/installer.rb
CHANGED
@@ -1,21 +1,19 @@
|
|
1
1
|
module Wagons
|
2
|
-
|
3
2
|
# Helper class to install wagons into the current application.
|
4
3
|
# Wagons are searched for in the system gem repository.
|
5
4
|
#
|
6
5
|
# If you want to use the #install method, add "gem 'open4'" to
|
7
6
|
# your Gemfile.
|
8
7
|
class Installer
|
9
|
-
|
10
8
|
attr_accessor :include_version_in_wagonfile
|
11
|
-
|
9
|
+
|
12
10
|
def initialize
|
13
11
|
@include_version_in_wagonfile = true
|
14
12
|
end
|
15
|
-
|
13
|
+
|
16
14
|
# Gem specifications of all installed wagons.
|
17
15
|
def installed
|
18
|
-
@installed ||= Wagons.all.
|
16
|
+
@installed ||= Wagons.all.map(&:gemspec)
|
19
17
|
end
|
20
18
|
|
21
19
|
# Most recent gem specifications of all wagons available in GEM_HOME.
|
@@ -25,19 +23,18 @@ module Wagons
|
|
25
23
|
# only keep most recent version in @available
|
26
24
|
@available = []
|
27
25
|
load_available_specs.each do |spec|
|
28
|
-
if prev = @available.find {|w| w.name == spec.name }
|
26
|
+
if prev = @available.find { |w| w.name == spec.name }
|
29
27
|
if prev.version < spec.version
|
30
|
-
|
31
|
-
|
28
|
+
@available.delete(prev)
|
29
|
+
@available << spec
|
32
30
|
end
|
33
31
|
else
|
34
|
-
|
32
|
+
@available << spec
|
35
33
|
end
|
36
34
|
end
|
37
35
|
@available
|
38
36
|
end
|
39
37
|
|
40
|
-
|
41
38
|
# Most recent gem specifications of available, but not installed (in any version) wagons.
|
42
39
|
def not_installed
|
43
40
|
exclude_specs(available, installed)
|
@@ -59,9 +56,9 @@ module Wagons
|
|
59
56
|
# This method requires open4.
|
60
57
|
def install(names)
|
61
58
|
change_internal(names, :check_dependencies) do |specs|
|
62
|
-
content = File.read(wagonfile) rescue
|
59
|
+
content = File.read(wagonfile) rescue ''
|
63
60
|
wagonfile_update(specs)
|
64
|
-
|
61
|
+
|
65
62
|
begin
|
66
63
|
setup_wagons(specs)
|
67
64
|
rescue => e
|
@@ -72,7 +69,7 @@ module Wagons
|
|
72
69
|
end
|
73
70
|
|
74
71
|
# Remove the wagons with the given names. I.e., reverts the migrations
|
75
|
-
# of the given wagon names if the wagon is not protected
|
72
|
+
# of the given wagon names if the wagon is not protected
|
76
73
|
# and removes the entries from the Wagonfile.
|
77
74
|
# Returns nil if everything is fine or a string with error messages.
|
78
75
|
def uninstall(names)
|
@@ -85,20 +82,20 @@ module Wagons
|
|
85
82
|
# Get the gem specification of the installed wagon with the given name.
|
86
83
|
# Return nil if not found.
|
87
84
|
def installed_spec(name)
|
88
|
-
installed.find {|s| s.name == name }
|
85
|
+
installed.find { |s| s.name == name }
|
89
86
|
end
|
90
87
|
|
91
88
|
# Get the gem specification of an available wagon with the given name.
|
92
89
|
# Return nil if not found.
|
93
90
|
def available_spec(name)
|
94
|
-
available.find {|s| s.name == name}
|
91
|
+
available.find { |s| s.name == name }
|
95
92
|
end
|
96
|
-
|
93
|
+
|
97
94
|
# Update the Wagonfile with the given gem specifications.
|
98
95
|
def wagonfile_update(specs)
|
99
96
|
wagonfile_edit(specs) do |spec, content|
|
100
97
|
declaration = "gem '#{spec.name}'"
|
101
|
-
declaration += ", '#{spec.version
|
98
|
+
declaration += ", '#{spec.version}'" if include_version_in_wagonfile
|
102
99
|
unless content.sub!(gem_declaration_regexp(spec.name), declaration)
|
103
100
|
content += "\n#{declaration}"
|
104
101
|
end
|
@@ -112,7 +109,7 @@ module Wagons
|
|
112
109
|
content.sub(gem_declaration_regexp(spec.name), '')
|
113
110
|
end
|
114
111
|
end
|
115
|
-
|
112
|
+
|
116
113
|
# Check if all wagon dependencies of the given gem specifications
|
117
114
|
# are met by the installed wagons.
|
118
115
|
# Returns nil if everything is fine or a string with error messages.
|
@@ -124,7 +121,7 @@ module Wagons
|
|
124
121
|
|
125
122
|
check_all_dependencies(specs, future, missing)
|
126
123
|
end
|
127
|
-
|
124
|
+
|
128
125
|
# Check if the app requirement of the given gem specifications
|
129
126
|
# are met by the current app version.
|
130
127
|
# Returns nil if everything is fine or a array with error messages.
|
@@ -140,7 +137,7 @@ module Wagons
|
|
140
137
|
|
141
138
|
missing
|
142
139
|
end
|
143
|
-
|
140
|
+
|
144
141
|
# Check if the wagon dependencies of the remaining wagons
|
145
142
|
# would still be met after the given gem specifications are uninstalled.
|
146
143
|
# Returns nil if everything is fine or a string with error messages.
|
@@ -163,47 +160,47 @@ module Wagons
|
|
163
160
|
# List of available gem specifications with the given names.
|
164
161
|
# Raises an error if a name cannot be found.
|
165
162
|
def specs_from_names(names)
|
166
|
-
names.
|
163
|
+
names.map do |name|
|
167
164
|
spec = available_spec(name)
|
168
|
-
|
165
|
+
fail "#{name} was not found" if spec.nil?
|
169
166
|
spec
|
170
167
|
end
|
171
168
|
end
|
172
|
-
|
169
|
+
|
173
170
|
# Removes all gem specifications with the same name in to_be_excluded from full.
|
174
171
|
# Versions are ignored.
|
175
172
|
def exclude_specs(full, to_be_excluded)
|
176
|
-
full.clone.delete_if {|s| to_be_excluded.find {|d| s.name == d.name } }
|
173
|
+
full.clone.delete_if { |s| to_be_excluded.find { |d| s.name == d.name } }
|
177
174
|
end
|
178
|
-
|
175
|
+
|
179
176
|
# Wagonfile
|
180
177
|
def wagonfile
|
181
|
-
Rails.root.join(
|
178
|
+
Rails.root.join('Wagonfile')
|
182
179
|
end
|
183
|
-
|
180
|
+
|
184
181
|
# The wagon class of the given spec.
|
185
182
|
def wagon_class(spec)
|
186
183
|
@wagon_classes ||= {}
|
187
|
-
return @wagon_classes[spec] if @wagon_classes.
|
188
|
-
|
184
|
+
return @wagon_classes[spec] if @wagon_classes.key?(spec)
|
185
|
+
|
189
186
|
clazz = nil
|
190
187
|
file = File.join(spec.gem_dir, 'lib', spec.name, 'wagon.rb')
|
191
|
-
if File.
|
188
|
+
if File.exist?(file)
|
192
189
|
require file
|
193
190
|
clazz = "#{spec.name.camelize}::Wagon".constantize
|
194
191
|
else
|
195
|
-
|
192
|
+
fail "#{spec.name} wagon class not found in #{file}"
|
196
193
|
end
|
197
194
|
@wagon_classes[spec] = clazz
|
198
195
|
end
|
199
196
|
|
200
197
|
private
|
201
|
-
|
198
|
+
|
202
199
|
def load_available_specs
|
203
200
|
paths = [ENV['GEM_HOME']]
|
204
|
-
paths += (ENV['GEM_PATH'] ||
|
205
|
-
paths.
|
206
|
-
Dir[File.join(path, 'specifications', "#{Wagons.app_name}_*.gemspec")].
|
201
|
+
paths += (ENV['GEM_PATH'] || '').split(File::PATH_SEPARATOR)
|
202
|
+
paths.map(&:presence).compact.map do |path|
|
203
|
+
Dir[File.join(path, 'specifications', "#{Wagons.app_name}_*.gemspec")].map do |gemspec|
|
207
204
|
Gem::Specification.load(gemspec)
|
208
205
|
end
|
209
206
|
end.flatten
|
@@ -222,7 +219,7 @@ module Wagons
|
|
222
219
|
to_check.each do |spec|
|
223
220
|
spec.runtime_dependencies.each do |dep|
|
224
221
|
if dep.name.start_with?("#{Wagons.app_name}_") &&
|
225
|
-
all.none? {|s| dep.matches_spec?(s) }
|
222
|
+
all.none? { |s| dep.matches_spec?(s) }
|
226
223
|
missing << "#{spec.name} requires #{dep.name} #{dep.requirement}"
|
227
224
|
end
|
228
225
|
end
|
@@ -230,13 +227,13 @@ module Wagons
|
|
230
227
|
|
231
228
|
missing.join("\n").presence
|
232
229
|
end
|
233
|
-
|
230
|
+
|
234
231
|
def gem_declaration_regexp(name)
|
235
232
|
/^.*gem\s+('|")#{name}('|").*$/
|
236
233
|
end
|
237
|
-
|
234
|
+
|
238
235
|
def wagonfile_edit(specs)
|
239
|
-
content = File.read(wagonfile) rescue
|
236
|
+
content = File.read(wagonfile) rescue ''
|
240
237
|
|
241
238
|
specs.each do |spec|
|
242
239
|
content = yield spec, content
|
@@ -245,69 +242,68 @@ module Wagons
|
|
245
242
|
|
246
243
|
wagonfile_write(content.strip)
|
247
244
|
end
|
248
|
-
|
245
|
+
|
249
246
|
def wagonfile_write(content)
|
250
247
|
File.open(wagonfile, 'w') do |f|
|
251
248
|
f.puts content
|
252
249
|
end
|
253
250
|
end
|
254
|
-
|
251
|
+
|
255
252
|
def setup_wagons(specs)
|
256
253
|
require 'open4'
|
257
|
-
|
254
|
+
|
258
255
|
env = Rails.env
|
259
256
|
cmd = setup_command(specs)
|
260
257
|
Rails.logger.info(cmd)
|
261
|
-
|
258
|
+
|
262
259
|
Bundler.with_clean_env do
|
263
260
|
ENV['RAILS_ENV'] = env
|
264
261
|
execute_setup(cmd)
|
265
262
|
end
|
266
263
|
end
|
267
|
-
|
264
|
+
|
268
265
|
def remove_wagons(specs)
|
269
266
|
Wagons.all.reverse.each do |wagon|
|
270
|
-
if specs.find {|spec| wagon.gem_name == spec.name }
|
267
|
+
if specs.find { |spec| wagon.gem_name == spec.name }
|
271
268
|
wagon.unload_seed
|
272
269
|
wagon.revert
|
273
270
|
end
|
274
271
|
end
|
275
272
|
end
|
276
|
-
|
273
|
+
|
277
274
|
def setup_command(specs)
|
278
|
-
wagons = specs.
|
275
|
+
wagons = specs.map { |s| s.name.sub(/^#{Wagons.app_name}_/, '') }.join(',')
|
279
276
|
"cd #{Rails.root} && bundle exec rake wagon:setup WAGON=#{wagons} -t"
|
280
277
|
end
|
281
|
-
|
278
|
+
|
282
279
|
def execute_setup(cmd)
|
283
280
|
msg = nil
|
284
281
|
status = Open4.popen4(cmd) do |pid, input, output, errors|
|
285
282
|
msg = errors.read
|
286
283
|
end
|
287
|
-
|
284
|
+
|
288
285
|
if status.exitstatus.to_i != 0
|
289
|
-
|
286
|
+
fail msg.presence || 'Unknown error while running wagon:setup'
|
290
287
|
end
|
291
288
|
end
|
292
|
-
|
289
|
+
|
293
290
|
def change_internal(names, *checks)
|
294
291
|
specs = specs_from_names(names)
|
295
|
-
|
292
|
+
|
296
293
|
if msg = perform_checks(specs, checks)
|
297
294
|
msg
|
298
295
|
else
|
299
296
|
yield specs
|
300
297
|
nil
|
301
298
|
end
|
302
|
-
rescue
|
299
|
+
rescue => e
|
303
300
|
handle_exception(e, names)
|
304
301
|
end
|
305
|
-
|
302
|
+
|
306
303
|
def handle_exception(e, names)
|
307
304
|
msg = e.message
|
308
305
|
Rails.logger.error msg + "\n\t" + e.backtrace.join("\n\t")
|
309
306
|
msg
|
310
307
|
end
|
311
|
-
|
312
308
|
end
|
313
|
-
end
|
309
|
+
end
|
data/lib/wagons/railtie.rb
CHANGED
data/lib/wagons/version.rb
CHANGED
data/lib/wagons/view_helper.rb
CHANGED
@@ -1,55 +1,54 @@
|
|
1
1
|
module Wagons
|
2
2
|
module ViewHelper
|
3
|
-
|
4
3
|
# Renders all partials with names that match "_[ key ]_*.[ format ].[ handler ]"
|
5
4
|
# in alphabetical order.
|
6
5
|
# Accepts an additional option :folder to pass an additional folder to search
|
7
6
|
# extension partials in.
|
8
7
|
def render_extensions(key, options = {})
|
9
|
-
extensions = find_extension_partials(key, options.delete(:folder)).
|
10
|
-
render options.merge(:
|
8
|
+
extensions = find_extension_partials(key, options.delete(:folder)).map do |partial|
|
9
|
+
render options.merge(partial: partial)
|
11
10
|
end
|
12
11
|
safe_join(extensions)
|
13
12
|
end
|
14
|
-
|
13
|
+
|
15
14
|
# The view folders relative to app/views in which extensions are searched for.
|
16
15
|
# Uses the folder of the current template.
|
17
16
|
def extension_folders
|
18
17
|
[current_template_folder]
|
19
18
|
end
|
20
|
-
|
19
|
+
|
21
20
|
# The folder of the current partial relative to app/views
|
22
21
|
def current_template_folder
|
23
22
|
@virtual_path[/(.+)\/.*/, 1]
|
24
23
|
end
|
25
|
-
|
24
|
+
|
26
25
|
private
|
27
|
-
|
26
|
+
|
28
27
|
def find_extension_partials(key, folder = nil)
|
29
28
|
folders = extension_folders.dup
|
30
29
|
folders << folder if folder
|
31
|
-
|
30
|
+
|
32
31
|
files = find_extension_files(key, folders).sort_by { |f| File.basename(f) }
|
33
32
|
files_to_partial_names(files)
|
34
33
|
end
|
35
|
-
|
34
|
+
|
36
35
|
def find_extension_files(key, folders)
|
37
36
|
folder_pattern = glob_pattern(folders)
|
38
37
|
formats = glob_pattern(lookup_context.formats)
|
39
38
|
handlers = glob_pattern(lookup_context.handlers)
|
40
|
-
|
41
|
-
view_paths.
|
39
|
+
|
40
|
+
view_paths.map do |path|
|
42
41
|
Dir.glob(File.join(path.to_s, folder_pattern, "_#{key}_*.#{formats}.#{handlers}"))
|
43
42
|
end.flatten
|
44
43
|
end
|
45
|
-
|
44
|
+
|
46
45
|
def files_to_partial_names(files)
|
47
|
-
files.
|
46
|
+
files.map do |f|
|
48
47
|
m = f.match(/views.(.+?[\/\\])_(.+)\.\w+\.\w+$/)
|
49
48
|
m[1] + m[2]
|
50
49
|
end
|
51
50
|
end
|
52
|
-
|
51
|
+
|
53
52
|
def glob_pattern(list)
|
54
53
|
if list.size == 1
|
55
54
|
list.first
|
@@ -57,8 +56,7 @@ module Wagons
|
|
57
56
|
"{#{list.join(',')}}"
|
58
57
|
end
|
59
58
|
end
|
60
|
-
|
61
59
|
end
|
62
60
|
end
|
63
61
|
|
64
|
-
ActionView::Base.send(:include, Wagons::ViewHelper) if defined?(ActionView::Base)
|
62
|
+
ActionView::Base.send(:include, Wagons::ViewHelper) if defined?(ActionView::Base)
|
data/lib/wagons/wagon.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'active_support/concern'
|
2
2
|
|
3
3
|
module Wagons
|
4
|
-
|
5
4
|
# A wagon is an extension to your application train running on Rails.
|
6
5
|
#
|
7
6
|
# Wagons are built on Rails Engines. To change an engine to a wagon,
|
@@ -37,14 +36,14 @@ module Wagons
|
|
37
36
|
|
38
37
|
# Direct dependencies on other wagons.
|
39
38
|
def dependencies
|
40
|
-
gemspec.dependencies.
|
41
|
-
select {|dep| dep =~ /\A#{Wagons.app_name}_/ }.
|
42
|
-
|
39
|
+
gemspec.dependencies.map(&:name).
|
40
|
+
select { |dep| dep =~ /\A#{Wagons.app_name}_/ }.
|
41
|
+
map { |dep| Wagons.find(dep) || fail("No wagon #{dep} found") }
|
43
42
|
end
|
44
43
|
|
45
44
|
# Recursive depdencies on other wagons.
|
46
45
|
def all_dependencies
|
47
|
-
dependencies.
|
46
|
+
dependencies.map { |dep| dep.all_dependencies + [dep] }.flatten.uniq
|
48
47
|
end
|
49
48
|
|
50
49
|
# Gem Specification.
|
@@ -103,8 +102,8 @@ module Wagons
|
|
103
102
|
end
|
104
103
|
|
105
104
|
extend Rake::DSL if defined? Rake::DSL
|
106
|
-
self.class.rake_tasks.each { |block|
|
107
|
-
paths[
|
105
|
+
self.class.rake_tasks.each { |block| instance_exec(app, &block) }
|
106
|
+
paths['lib/tasks'].existent.sort.each { |ext| load(ext) }
|
108
107
|
self
|
109
108
|
end
|
110
109
|
|
@@ -129,4 +128,3 @@ module Wagons
|
|
129
128
|
end
|
130
129
|
end
|
131
130
|
end
|
132
|
-
|
data/lib/wagons.rb
CHANGED
@@ -10,7 +10,6 @@ require 'wagons/extensions/application'
|
|
10
10
|
require 'wagons/extensions/require_optional'
|
11
11
|
require 'wagons/extensions/test_case'
|
12
12
|
|
13
|
-
|
14
13
|
# Utility class to find single wagons and provide additional information
|
15
14
|
# about the main application.
|
16
15
|
module Wagons
|
@@ -18,37 +17,36 @@ module Wagons
|
|
18
17
|
def self.all
|
19
18
|
enumerable = Rails.application.railties
|
20
19
|
enumerable = enumerable.all if enumerable.respond_to?(:all)
|
21
|
-
enumerable.select {|r| r.is_a?(Wagon) }
|
20
|
+
enumerable.select { |r| r.is_a?(Wagon) }
|
22
21
|
end
|
23
|
-
|
22
|
+
|
24
23
|
# Find a wagon by its name.
|
25
24
|
def self.find(name)
|
26
25
|
name = name.to_s
|
27
|
-
all.find {|wagon| wagon.wagon_name == name || wagon.gem_name == name }
|
26
|
+
all.find { |wagon| wagon.wagon_name == name || wagon.gem_name == name }
|
28
27
|
end
|
29
|
-
|
28
|
+
|
30
29
|
# The name of the main Rails application.
|
31
30
|
# By default, this is the underscored name of the application module.
|
32
31
|
# This name is directly used for the gem names,
|
33
32
|
def self.app_name
|
34
33
|
@app_name ||= Rails.application.class.name.split('::').first.underscore
|
35
34
|
end
|
36
|
-
|
35
|
+
|
37
36
|
# Set the application name. Should be lowercase with underscores.
|
38
37
|
# Do this in an initializer.
|
39
38
|
def self.app_name=(name)
|
40
39
|
@app_name = name
|
41
40
|
end
|
42
|
-
|
41
|
+
|
43
42
|
# The version of the main application.
|
44
43
|
def self.app_version
|
45
|
-
@app_version ||= Gem::Version.new(
|
44
|
+
@app_version ||= Gem::Version.new('0')
|
46
45
|
end
|
47
|
-
|
46
|
+
|
48
47
|
# Set the version of the main application.
|
49
48
|
# Do this in an initializer.
|
50
49
|
def self.app_version=(version)
|
51
50
|
@app_version = version.is_a?(Gem::Version) ? version : Gem::Version.new(version)
|
52
51
|
end
|
53
52
|
end
|
54
|
-
|