wagons 0.0.1 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +1 -1
- data/README.rdoc +135 -9
- data/Rakefile +13 -5
- data/lib/generators/wagon/templates/%singular_name%.gemspec.tt +0 -2
- data/lib/generators/wagon/templates/.gitignore +5 -0
- data/lib/generators/wagon/templates/Gemfile.tt +5 -9
- data/lib/generators/wagon/templates/app/assets/images/.empty_directory +0 -0
- data/lib/generators/wagon/templates/app/controllers/.empty_directory +0 -0
- data/lib/generators/wagon/templates/app/models/.empty_directory +0 -0
- data/lib/generators/wagon/templates/app/views/.empty_directory +0 -0
- data/lib/generators/wagon/templates/db/fixtures/development/.empty_directory +0 -0
- data/lib/generators/wagon/templates/db/migrate/.empty_directory +0 -0
- data/lib/generators/wagon/templates/lib/%singular_name%/wagon.rb.tt +7 -4
- data/lib/generators/wagon/templates/test/fixtures/.empty_directory +0 -0
- data/lib/generators/wagon/wagon_generator.rb +23 -4
- data/lib/tasks/wagons.rake +119 -20
- data/lib/wagons/extensions/application.rb +14 -0
- data/lib/wagons/extensions/require_optional.rb +9 -0
- data/lib/wagons/{test_case.rb → extensions/test_case.rb} +4 -1
- data/lib/wagons/installer.rb +313 -0
- data/lib/wagons/railtie.rb +1 -1
- data/lib/wagons/version.rb +1 -1
- data/lib/wagons/view_helper.rb +58 -0
- data/lib/wagons/wagon.rb +125 -109
- data/lib/wagons/wagon_tasks.rake +9 -7
- data/lib/wagons.rb +44 -7
- data/test/dummy/Gemfile +8 -2
- data/test/dummy/Gemfile.lock +51 -48
- data/test/dummy/app/assets/javascripts/application.js +0 -2
- data/test/dummy/app/controllers/people_controller.rb +6 -0
- data/test/dummy/app/views/people/index.html.erb +6 -0
- data/test/dummy/app/views/shared/_sidebar.html.erb +3 -0
- data/test/dummy/config/initializers/wagon_app_version.rb +7 -0
- data/test/dummy/config/routes.rb +3 -0
- data/test/dummy/db/development.sqlite3 +0 -0
- data/test/dummy/db/schema.rb +1 -1
- data/test/dummy/db/test.sqlite3 +0 -0
- data/test/dummy/log/development.log +1230 -1586
- data/test/dummy/log/test.log +6458 -1772
- data/test/dummy/test/unit/person_test.rb +6 -0
- 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/pids/server.pid +1 -0
- data/test/dummy/vendor/wagons/superliner/Gemfile +1 -5
- data/test/dummy/vendor/wagons/superliner/Gemfile.lock +46 -48
- data/test/dummy/vendor/wagons/superliner/app/controllers/cities_controller.rb +6 -0
- data/test/dummy/vendor/wagons/superliner/app/views/cities/index.html.erb +7 -0
- data/test/dummy/vendor/wagons/superliner/app/views/people/_list_superliner.html.erb +3 -0
- data/test/dummy/vendor/wagons/superliner/app/views/shared/_sidebar_superliner.html.erb +1 -0
- data/test/dummy/vendor/wagons/superliner/config/routes.rb +1 -1
- data/test/dummy/vendor/wagons/superliner/db/migrate/{20120606125258_create_cities.rb → 20120606125058_create_cities.rb} +0 -0
- data/test/dummy/vendor/wagons/superliner/dummy_superliner.gemspec +0 -2
- data/test/dummy/vendor/wagons/superliner/lib/dummy_superliner/wagon.rb +3 -1
- data/test/dummy/vendor/wagons/superliner/test/functionals/cities_controller_test.rb +12 -0
- data/test/dummy/vendor/wagons/superliner/test/functionals/people_controller_test.rb +14 -0
- data/test/dummy/vendor/wagons/superliner/test/unit/city_test.rb +4 -1
- data/test/dummy/vendor/wagons/superliner/test/wagon_test.rb +7 -5
- data/test/wagons_installer_test.rb +225 -0
- metadata +241 -169
- data/test/dummy/dummy.gemspec +0 -17
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1 @@
|
|
1
|
+
1988
|
@@ -7,8 +7,4 @@ source "http://rubygems.org"
|
|
7
7
|
# development dependencies will be added by default to the :development group.
|
8
8
|
gemspec
|
9
9
|
|
10
|
-
|
11
|
-
gem 'wagons', :path => "#{ENV["APP_ROOT"]}/../.."
|
12
|
-
gem 'dummy', :path => ENV["APP_ROOT"]
|
13
|
-
end
|
14
|
-
|
10
|
+
eval File.read(File.expand_path('Gemfile', ENV['APP_ROOT']))
|
@@ -2,84 +2,81 @@ PATH
|
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
4
|
dummy_superliner (0.0.1)
|
5
|
-
dummy
|
6
5
|
|
7
6
|
PATH
|
8
|
-
remote: /
|
7
|
+
remote: /Users/pascal/Code/ruby/wagons
|
9
8
|
specs:
|
10
|
-
wagons (0.0.
|
9
|
+
wagons (0.0.9)
|
10
|
+
bundler (>= 1.1)
|
11
11
|
rails (>= 3.2)
|
12
|
-
seed-fu-ndo
|
13
|
-
|
14
|
-
PATH
|
15
|
-
remote: /home/tgdzupa7/workspace/wagons/test/dummy
|
16
|
-
specs:
|
17
|
-
dummy (0.0.0)
|
18
|
-
sqlite3
|
19
|
-
wagons
|
12
|
+
seed-fu-ndo (>= 0.0.2)
|
20
13
|
|
21
14
|
GEM
|
15
|
+
remote: http://rubygems.org/
|
22
16
|
remote: http://rubygems.org/
|
23
17
|
specs:
|
24
|
-
actionmailer (3.2.
|
25
|
-
actionpack (= 3.2.
|
18
|
+
actionmailer (3.2.8)
|
19
|
+
actionpack (= 3.2.8)
|
26
20
|
mail (~> 2.4.4)
|
27
|
-
actionpack (3.2.
|
28
|
-
activemodel (= 3.2.
|
29
|
-
activesupport (= 3.2.
|
21
|
+
actionpack (3.2.8)
|
22
|
+
activemodel (= 3.2.8)
|
23
|
+
activesupport (= 3.2.8)
|
30
24
|
builder (~> 3.0.0)
|
31
25
|
erubis (~> 2.7.0)
|
32
|
-
journey (~> 1.0.
|
26
|
+
journey (~> 1.0.4)
|
33
27
|
rack (~> 1.4.0)
|
34
28
|
rack-cache (~> 1.2)
|
35
29
|
rack-test (~> 0.6.1)
|
36
30
|
sprockets (~> 2.1.3)
|
37
|
-
activemodel (3.2.
|
38
|
-
activesupport (= 3.2.
|
31
|
+
activemodel (3.2.8)
|
32
|
+
activesupport (= 3.2.8)
|
39
33
|
builder (~> 3.0.0)
|
40
|
-
activerecord (3.2.
|
41
|
-
activemodel (= 3.2.
|
42
|
-
activesupport (= 3.2.
|
34
|
+
activerecord (3.2.8)
|
35
|
+
activemodel (= 3.2.8)
|
36
|
+
activesupport (= 3.2.8)
|
43
37
|
arel (~> 3.0.2)
|
44
38
|
tzinfo (~> 0.3.29)
|
45
|
-
activeresource (3.2.
|
46
|
-
activemodel (= 3.2.
|
47
|
-
activesupport (= 3.2.
|
48
|
-
activesupport (3.2.
|
39
|
+
activeresource (3.2.8)
|
40
|
+
activemodel (= 3.2.8)
|
41
|
+
activesupport (= 3.2.8)
|
42
|
+
activesupport (3.2.8)
|
49
43
|
i18n (~> 0.6)
|
50
44
|
multi_json (~> 1.0)
|
51
45
|
arel (3.0.2)
|
52
|
-
builder (3.0.
|
46
|
+
builder (3.0.4)
|
53
47
|
erubis (2.7.0)
|
54
48
|
hike (1.2.1)
|
55
|
-
i18n (0.6.
|
56
|
-
journey (1.0.
|
57
|
-
json (1.7.
|
49
|
+
i18n (0.6.1)
|
50
|
+
journey (1.0.4)
|
51
|
+
json (1.7.5)
|
58
52
|
mail (2.4.4)
|
59
53
|
i18n (>= 0.4.0)
|
60
54
|
mime-types (~> 1.16)
|
61
55
|
treetop (~> 1.4.8)
|
62
|
-
|
63
|
-
|
56
|
+
metaclass (0.0.1)
|
57
|
+
mime-types (1.19)
|
58
|
+
mocha (0.12.3)
|
59
|
+
metaclass (~> 0.0.1)
|
60
|
+
multi_json (1.3.7)
|
64
61
|
polyglot (0.3.3)
|
65
62
|
rack (1.4.1)
|
66
63
|
rack-cache (1.2)
|
67
64
|
rack (>= 0.4)
|
68
65
|
rack-ssl (1.3.2)
|
69
66
|
rack
|
70
|
-
rack-test (0.6.
|
67
|
+
rack-test (0.6.2)
|
71
68
|
rack (>= 1.0)
|
72
|
-
rails (3.2.
|
73
|
-
actionmailer (= 3.2.
|
74
|
-
actionpack (= 3.2.
|
75
|
-
activerecord (= 3.2.
|
76
|
-
activeresource (= 3.2.
|
77
|
-
activesupport (= 3.2.
|
69
|
+
rails (3.2.8)
|
70
|
+
actionmailer (= 3.2.8)
|
71
|
+
actionpack (= 3.2.8)
|
72
|
+
activerecord (= 3.2.8)
|
73
|
+
activeresource (= 3.2.8)
|
74
|
+
activesupport (= 3.2.8)
|
78
75
|
bundler (~> 1.0)
|
79
|
-
railties (= 3.2.
|
80
|
-
railties (3.2.
|
81
|
-
actionpack (= 3.2.
|
82
|
-
activesupport (= 3.2.
|
76
|
+
railties (= 3.2.8)
|
77
|
+
railties (3.2.8)
|
78
|
+
actionpack (= 3.2.8)
|
79
|
+
activesupport (= 3.2.8)
|
83
80
|
rack-ssl (~> 1.3.2)
|
84
81
|
rake (>= 0.8.7)
|
85
82
|
rdoc (~> 3.4)
|
@@ -90,24 +87,25 @@ GEM
|
|
90
87
|
seed-fu (2.2.0)
|
91
88
|
activerecord (~> 3.1)
|
92
89
|
activesupport (~> 3.1)
|
93
|
-
seed-fu-ndo (0.0.
|
90
|
+
seed-fu-ndo (0.0.2)
|
94
91
|
seed-fu (>= 2.2.0)
|
95
92
|
sprockets (2.1.3)
|
96
93
|
hike (~> 1.2)
|
97
94
|
rack (~> 1.0)
|
98
95
|
tilt (~> 1.1, != 1.3.0)
|
99
96
|
sqlite3 (1.3.6)
|
100
|
-
thor (0.
|
97
|
+
thor (0.16.0)
|
101
98
|
tilt (1.3.3)
|
102
|
-
treetop (1.4.
|
99
|
+
treetop (1.4.12)
|
103
100
|
polyglot
|
104
101
|
polyglot (>= 0.3.1)
|
105
|
-
tzinfo (0.3.
|
102
|
+
tzinfo (0.3.34)
|
106
103
|
|
107
104
|
PLATFORMS
|
108
105
|
ruby
|
109
106
|
|
110
107
|
DEPENDENCIES
|
111
|
-
dummy!
|
112
108
|
dummy_superliner!
|
109
|
+
mocha
|
110
|
+
sqlite3
|
113
111
|
wagons!
|
@@ -0,0 +1 @@
|
|
1
|
+
<h3>Superliner</h3>
|
File without changes
|
@@ -1,10 +1,12 @@
|
|
1
1
|
module DummySuperliner
|
2
2
|
class Wagon < Rails::Engine
|
3
|
-
include ::Wagon
|
3
|
+
include Wagons::Wagon
|
4
4
|
|
5
5
|
# Add a load path for this specific Wagon
|
6
6
|
#config.autoload_paths += %W( #{config.root}/lib )
|
7
7
|
|
8
|
+
app_requirement '>= 1.0.0'
|
9
|
+
|
8
10
|
config.to_prepare do
|
9
11
|
# extend application classes here
|
10
12
|
Person.belongs_to :city
|
@@ -0,0 +1,12 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CitiesControllerTest < ActionController::TestCase
|
4
|
+
|
5
|
+
test "wagon view paths preceed application view paths" do
|
6
|
+
paths = @controller.view_paths.collect {|p| p }
|
7
|
+
i_app = paths.index {|p| p.to_s.ends_with?('/dummy/app/views') }
|
8
|
+
i_wagon = paths.index {|p| p.to_s.ends_with?('/superliner/app/views') }
|
9
|
+
assert i_wagon < i_app
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class PeopleControllerTest < ActionController::TestCase
|
4
|
+
|
5
|
+
test "extensions are rendered with locals" do
|
6
|
+
get :index
|
7
|
+
assert_template 'index'
|
8
|
+
assert_template 'list_superliner'
|
9
|
+
assert_template 'sidebar'
|
10
|
+
assert_template 'sidebar_superliner'
|
11
|
+
assert_match /42/, @response.body
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -3,19 +3,19 @@ require 'test_helper'
|
|
3
3
|
class WagonTest < ActiveSupport::TestCase
|
4
4
|
attr_reader :wagon
|
5
5
|
def setup
|
6
|
-
@wagon =
|
6
|
+
@wagon = Wagons.find(:superliner)
|
7
7
|
end
|
8
8
|
|
9
9
|
test "all includes current wagon" do
|
10
|
-
assert
|
10
|
+
assert Wagons.all.include?(wagon)
|
11
11
|
end
|
12
12
|
|
13
13
|
test "app name is correct" do
|
14
|
-
assert_equal 'dummy',
|
14
|
+
assert_equal 'dummy', Wagons.app_name
|
15
15
|
end
|
16
16
|
|
17
17
|
test "find for inexisting return nil" do
|
18
|
-
assert_nil
|
18
|
+
assert_nil Wagons.find(:not_existing)
|
19
19
|
end
|
20
20
|
|
21
21
|
test "version can be read from gemspec" do
|
@@ -46,6 +46,8 @@ class WagonTest < ActiveSupport::TestCase
|
|
46
46
|
assert_equal [], wagon.all_dependencies
|
47
47
|
end
|
48
48
|
|
49
|
-
|
49
|
+
test "existing seeds" do
|
50
|
+
assert_equal({City => City.where(:name => 'Paris')}, wagon.existing_seeds)
|
51
|
+
end
|
50
52
|
|
51
53
|
end
|
@@ -0,0 +1,225 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Wagons::InstallerTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
WAGONFILE = 'Wagonfile.test'
|
6
|
+
|
7
|
+
attr_reader :installer
|
8
|
+
|
9
|
+
setup :setup_gems, :stub_installer, :stub_wagons, :create_wagonfile
|
10
|
+
teardown :remove_wagonfile
|
11
|
+
|
12
|
+
test "available only returns latest versions" do
|
13
|
+
assert_equal [@master2, @slave1, @superliner2], installer.available
|
14
|
+
end
|
15
|
+
|
16
|
+
test "not_installed does not return updates" do
|
17
|
+
assert_equal [@superliner2], installer.not_installed
|
18
|
+
end
|
19
|
+
|
20
|
+
test "updates returns higher versions" do
|
21
|
+
assert_equal [@master2], installer.updates
|
22
|
+
end
|
23
|
+
|
24
|
+
test "find installed" do
|
25
|
+
assert_equal @master1, installer.installed_spec("#{app_name}_master")
|
26
|
+
assert_nil installer.installed_spec("#{app_name}_superliner")
|
27
|
+
end
|
28
|
+
|
29
|
+
test "find available" do
|
30
|
+
assert_equal @master2, installer.available_spec("#{app_name}_master")
|
31
|
+
assert_equal @superliner2, installer.available_spec("#{app_name}_superliner")
|
32
|
+
assert_nil installer.available_spec("#{app_name}_fantasy")
|
33
|
+
end
|
34
|
+
|
35
|
+
test "check app dependency is fine if app is sufficient" do
|
36
|
+
installer.stubs(:wagon_class).with(@slave1).returns(stub(:app_requirement => Gem::Requirement.new('1.0')))
|
37
|
+
assert_equal [], installer.check_app_requirement([@master2, @slave1])
|
38
|
+
end
|
39
|
+
|
40
|
+
test "check app dependency fails if app is too old" do
|
41
|
+
installer.stubs(:wagon_class).with(@superliner2).returns(stub(:app_requirement => Gem::Requirement.new('>= 2.0')))
|
42
|
+
msg = installer.check_app_requirement([@master2, @superliner2])
|
43
|
+
assert_equal 1, msg.size
|
44
|
+
assert_match /requires/, msg.first
|
45
|
+
end
|
46
|
+
|
47
|
+
test "check dependencies is fine if all depts are installed at the same time" do
|
48
|
+
installer.stubs(:installed).returns([])
|
49
|
+
assert_nil installer.check_dependencies([@master2, @superliner1])
|
50
|
+
assert_nil installer.check_dependencies([@slave1, @master2])
|
51
|
+
end
|
52
|
+
|
53
|
+
test "check dependencies fails if dependency is missing" do
|
54
|
+
installer.stubs(:installed).returns([])
|
55
|
+
assert_match /requires/, installer.check_dependencies([@slave1])
|
56
|
+
end
|
57
|
+
|
58
|
+
test "check uninstalled dependencies is fine if all depts are uninstalled at the same time" do
|
59
|
+
assert_nil installer.check_uninstalled_dependencies([@slave1, @master1])
|
60
|
+
end
|
61
|
+
|
62
|
+
test "check uninstalled dependencies fails if dependency remains" do
|
63
|
+
assert_match /requires/, installer.check_uninstalled_dependencies([@master1])
|
64
|
+
end
|
65
|
+
|
66
|
+
test "exclude specs does not modify original collection" do
|
67
|
+
original = [@master2, @slave1, @superliner1]
|
68
|
+
assert_equal [@master2], installer.exclude_specs(original, [@slave1, @superliner2])
|
69
|
+
assert_equal [@master2, @slave1, @superliner1], original
|
70
|
+
end
|
71
|
+
|
72
|
+
test "specs from name" do
|
73
|
+
assert_equal [@master2, @slave1], installer.specs_from_names(["#{app_name}_master", "#{app_name}_slave"])
|
74
|
+
end
|
75
|
+
|
76
|
+
test "specs_from_names raises exception if spec is not found" do
|
77
|
+
assert_raise(RuntimeError) do
|
78
|
+
installer.specs_from_names(["#{app_name}_master", "#{app_name}_fantasy", "#{app_name}_superliner"])
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
test "wagonfile update updates version and add new entries" do
|
83
|
+
installer.wagonfile_update([@master2, @slave1, @superliner2])
|
84
|
+
content = File.read(WAGONFILE)
|
85
|
+
assert_match /^gem '#{app_name}_master', '2.0.0'$/, content
|
86
|
+
assert_match /^gem '#{app_name}_slave', '1.0.0'$/, content
|
87
|
+
assert_match /^gem '#{app_name}_superliner', '2.0.0'$/, content
|
88
|
+
assert_equal 3, content.each_line.count, content
|
89
|
+
end
|
90
|
+
|
91
|
+
test "wagonfile update keeps existing and add new entries if version should not be included in wagonfile" do
|
92
|
+
installer.include_version_in_wagonfile = false
|
93
|
+
installer.wagonfile_update([@master2, @slave1, @superliner2])
|
94
|
+
content = File.read(WAGONFILE)
|
95
|
+
assert_match /^gem '#{app_name}_master'$/, content
|
96
|
+
assert_match /^gem '#{app_name}_slave'$/, content
|
97
|
+
assert_match /^gem '#{app_name}_superliner'$/, content
|
98
|
+
assert_equal 3, content.each_line.count, content
|
99
|
+
end
|
100
|
+
|
101
|
+
test "wagonfile update updates commented gems" do
|
102
|
+
File.open(WAGONFILE, 'w') do |f|
|
103
|
+
f.puts "gem '#{app_name}_master', '1.0.0'"
|
104
|
+
f.puts "# gem '#{app_name}_slave', '1.0.0'"
|
105
|
+
end
|
106
|
+
installer.wagonfile_update([@master2, @slave1])
|
107
|
+
content = File.read(WAGONFILE)
|
108
|
+
assert_match /^gem '#{app_name}_master', '2.0.0'$/, content
|
109
|
+
assert_match /^gem '#{app_name}_slave', '1.0.0'$/, content
|
110
|
+
assert_equal 2, content.each_line.count, content
|
111
|
+
end
|
112
|
+
|
113
|
+
test "wagonfile remove" do
|
114
|
+
installer.wagonfile_remove([@slave1])
|
115
|
+
content = File.read(WAGONFILE)
|
116
|
+
assert_match /^gem '#{app_name}_master', '1.0.0'$/, content
|
117
|
+
assert_equal 1, content.each_line.count
|
118
|
+
end
|
119
|
+
|
120
|
+
test "install runs when checks are fine" do
|
121
|
+
installer.stubs(:setup_command).returns("echo $RAILS_ENV > env.tmp")
|
122
|
+
assert_nil installer.install(["#{app_name}_master"])
|
123
|
+
content = File.read(WAGONFILE)
|
124
|
+
assert_match /^gem '#{app_name}_master', '2.0.0'$/, content
|
125
|
+
assert_equal 'test', File.read('env.tmp').strip
|
126
|
+
File.delete('env.tmp')
|
127
|
+
end
|
128
|
+
|
129
|
+
test "install fails when setup command fails" do
|
130
|
+
installer.stubs(:setup_command).returns("echo $RAILS_ENV; echo 'its a bug' >&2; exit 1")
|
131
|
+
assert_equal 'its a bug', installer.install(["#{app_name}_master"]).strip
|
132
|
+
content = File.read(WAGONFILE)
|
133
|
+
assert_match /^gem '#{app_name}_master', '1.0.0'$/, content
|
134
|
+
end
|
135
|
+
|
136
|
+
test "install fails when checks go wrong" do
|
137
|
+
installer.stubs(:wagon_class).with(@superliner2).returns(stub(:app_requirement => Gem::Requirement.new('>= 2.0')))
|
138
|
+
installer.expects(:wagonfile_edit).never
|
139
|
+
assert_match /requires/, installer.install(["#{app_name}_superliner"])
|
140
|
+
end
|
141
|
+
|
142
|
+
test "install fails when name is invalid" do
|
143
|
+
installer.expects(:wagonfile_edit).never
|
144
|
+
assert_match /not found/, installer.install(["#{app_name}_fantasy"])
|
145
|
+
end
|
146
|
+
|
147
|
+
test "uninstall runs when checks are fine" do
|
148
|
+
installer.expects(:remove_wagons).once
|
149
|
+
assert_nil installer.uninstall(["#{app_name}_master", "#{app_name}_slave"])
|
150
|
+
content = File.read(WAGONFILE)
|
151
|
+
assert_blank content
|
152
|
+
end
|
153
|
+
|
154
|
+
test "uninstall fails when checks go wrong" do
|
155
|
+
installer.expects(:wagonfile_edit).never
|
156
|
+
assert_match /requires/, installer.uninstall(["#{app_name}_master"])
|
157
|
+
end
|
158
|
+
|
159
|
+
test "uninstall fails when name is invalid" do
|
160
|
+
installer.expects(:wagonfile_edit).never
|
161
|
+
assert_match /not found/, installer.uninstall(["#{app_name}_fantasy"])
|
162
|
+
end
|
163
|
+
|
164
|
+
test "wagon class can load class from anywhere" do
|
165
|
+
installer.unstub(:wagon_class)
|
166
|
+
dir = File.expand_path('../dummy/vendor/wagons/superliner', __FILE__)
|
167
|
+
spec = Gem::Specification.load(File.join(dir, 'dummy_superliner.gemspec'))
|
168
|
+
spec.stubs(:gem_dir).returns(dir)
|
169
|
+
assert_equal 'DummySuperliner::Wagon', installer.wagon_class(spec).name
|
170
|
+
assert installer.wagon_class(spec).app_requirement.satisfied_by?(Gem::Version.new('1.0'))
|
171
|
+
end
|
172
|
+
|
173
|
+
private
|
174
|
+
|
175
|
+
def setup_gems
|
176
|
+
@master1 = gemspec('master', '1.0.0')
|
177
|
+
@master2 = gemspec('master', '2.0.0')
|
178
|
+
@slave1 = gemspec('slave', '1.0.0', 'master')
|
179
|
+
@superliner1 = gemspec('superliner', '1.0.0')
|
180
|
+
@superliner2 = gemspec('superliner', '2.0.0')
|
181
|
+
|
182
|
+
Wagons.app_version = '1.0.0'
|
183
|
+
end
|
184
|
+
|
185
|
+
def stub_installer
|
186
|
+
@installer = Wagons::Installer.new
|
187
|
+
@installer.stubs(:load_available_specs).returns([@master1, @master2, @slave1, @superliner1, @superliner2])
|
188
|
+
@installer.stubs(:installed).returns([@master1, @slave1])
|
189
|
+
@installer.stubs(:wagonfile).returns(WAGONFILE)
|
190
|
+
@installer.stubs(:remove_wagons).returns(nil)
|
191
|
+
@installer.stubs(:wagon_class).returns(stub(:app_requirement => Gem::Requirement.new))
|
192
|
+
end
|
193
|
+
|
194
|
+
def stub_wagons
|
195
|
+
Wagons.stubs(:find).returns(stub(:protect? => false))
|
196
|
+
end
|
197
|
+
|
198
|
+
def create_wagonfile
|
199
|
+
File.open(WAGONFILE, 'w') do |f|
|
200
|
+
installer.installed.each do |spec|
|
201
|
+
f.puts "gem '#{spec.name}', '#{spec.version}'"
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
|
206
|
+
def remove_wagonfile
|
207
|
+
File.delete(WAGONFILE) if File.exists?(WAGONFILE)
|
208
|
+
end
|
209
|
+
|
210
|
+
def app_name
|
211
|
+
@app_name ||= Wagons.app_name
|
212
|
+
end
|
213
|
+
|
214
|
+
def gemspec(name, version, dependency = nil)
|
215
|
+
Gem::Specification.new do |s|
|
216
|
+
s.name = "#{app_name}_#{name}"
|
217
|
+
s.version = version
|
218
|
+
s.summary = 'blabla'
|
219
|
+
|
220
|
+
s.add_dependency "#{app_name}_#{dependency}" if dependency
|
221
|
+
end
|
222
|
+
end
|
223
|
+
|
224
|
+
|
225
|
+
end
|