wagons 0.0.1 → 0.0.9

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.
Files changed (64) hide show
  1. data/MIT-LICENSE +1 -1
  2. data/README.rdoc +135 -9
  3. data/Rakefile +13 -5
  4. data/lib/generators/wagon/templates/%singular_name%.gemspec.tt +0 -2
  5. data/lib/generators/wagon/templates/.gitignore +5 -0
  6. data/lib/generators/wagon/templates/Gemfile.tt +5 -9
  7. data/lib/generators/wagon/templates/app/assets/images/.empty_directory +0 -0
  8. data/lib/generators/wagon/templates/app/controllers/.empty_directory +0 -0
  9. data/lib/generators/wagon/templates/app/models/.empty_directory +0 -0
  10. data/lib/generators/wagon/templates/app/views/.empty_directory +0 -0
  11. data/lib/generators/wagon/templates/db/fixtures/development/.empty_directory +0 -0
  12. data/lib/generators/wagon/templates/db/migrate/.empty_directory +0 -0
  13. data/lib/generators/wagon/templates/lib/%singular_name%/wagon.rb.tt +7 -4
  14. data/lib/generators/wagon/templates/test/fixtures/.empty_directory +0 -0
  15. data/lib/generators/wagon/wagon_generator.rb +23 -4
  16. data/lib/tasks/wagons.rake +119 -20
  17. data/lib/wagons/extensions/application.rb +14 -0
  18. data/lib/wagons/extensions/require_optional.rb +9 -0
  19. data/lib/wagons/{test_case.rb → extensions/test_case.rb} +4 -1
  20. data/lib/wagons/installer.rb +313 -0
  21. data/lib/wagons/railtie.rb +1 -1
  22. data/lib/wagons/version.rb +1 -1
  23. data/lib/wagons/view_helper.rb +58 -0
  24. data/lib/wagons/wagon.rb +125 -109
  25. data/lib/wagons/wagon_tasks.rake +9 -7
  26. data/lib/wagons.rb +44 -7
  27. data/test/dummy/Gemfile +8 -2
  28. data/test/dummy/Gemfile.lock +51 -48
  29. data/test/dummy/app/assets/javascripts/application.js +0 -2
  30. data/test/dummy/app/controllers/people_controller.rb +6 -0
  31. data/test/dummy/app/views/people/index.html.erb +6 -0
  32. data/test/dummy/app/views/shared/_sidebar.html.erb +3 -0
  33. data/test/dummy/config/initializers/wagon_app_version.rb +7 -0
  34. data/test/dummy/config/routes.rb +3 -0
  35. data/test/dummy/db/development.sqlite3 +0 -0
  36. data/test/dummy/db/schema.rb +1 -1
  37. data/test/dummy/db/test.sqlite3 +0 -0
  38. data/test/dummy/log/development.log +1230 -1586
  39. data/test/dummy/log/test.log +6458 -1772
  40. data/test/dummy/test/unit/person_test.rb +6 -0
  41. data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
  42. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  43. data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
  44. data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
  45. data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
  46. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  47. data/test/dummy/tmp/pids/server.pid +1 -0
  48. data/test/dummy/vendor/wagons/superliner/Gemfile +1 -5
  49. data/test/dummy/vendor/wagons/superliner/Gemfile.lock +46 -48
  50. data/test/dummy/vendor/wagons/superliner/app/controllers/cities_controller.rb +6 -0
  51. data/test/dummy/vendor/wagons/superliner/app/views/cities/index.html.erb +7 -0
  52. data/test/dummy/vendor/wagons/superliner/app/views/people/_list_superliner.html.erb +3 -0
  53. data/test/dummy/vendor/wagons/superliner/app/views/shared/_sidebar_superliner.html.erb +1 -0
  54. data/test/dummy/vendor/wagons/superliner/config/routes.rb +1 -1
  55. data/test/dummy/vendor/wagons/superliner/db/migrate/{20120606125258_create_cities.rb → 20120606125058_create_cities.rb} +0 -0
  56. data/test/dummy/vendor/wagons/superliner/dummy_superliner.gemspec +0 -2
  57. data/test/dummy/vendor/wagons/superliner/lib/dummy_superliner/wagon.rb +3 -1
  58. data/test/dummy/vendor/wagons/superliner/test/functionals/cities_controller_test.rb +12 -0
  59. data/test/dummy/vendor/wagons/superliner/test/functionals/people_controller_test.rb +14 -0
  60. data/test/dummy/vendor/wagons/superliner/test/unit/city_test.rb +4 -1
  61. data/test/dummy/vendor/wagons/superliner/test/wagon_test.rb +7 -5
  62. data/test/wagons_installer_test.rb +225 -0
  63. metadata +241 -169
  64. data/test/dummy/dummy.gemspec +0 -17
@@ -12,4 +12,10 @@ class PersonTest < ActiveSupport::TestCase
12
12
  person.city_id = 42
13
13
  end
14
14
  end
15
+
16
+ test "wagon models are not loaded in main application tests" do
17
+ assert_raise(NameError) do
18
+ City.new
19
+ end
20
+ end
15
21
  end
@@ -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
- group :development, :test do
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: /home/tgdzupa7/workspace/wagons
7
+ remote: /Users/pascal/Code/ruby/wagons
9
8
  specs:
10
- wagons (0.0.1)
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.5)
25
- actionpack (= 3.2.5)
18
+ actionmailer (3.2.8)
19
+ actionpack (= 3.2.8)
26
20
  mail (~> 2.4.4)
27
- actionpack (3.2.5)
28
- activemodel (= 3.2.5)
29
- activesupport (= 3.2.5)
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.1)
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.5)
38
- activesupport (= 3.2.5)
31
+ activemodel (3.2.8)
32
+ activesupport (= 3.2.8)
39
33
  builder (~> 3.0.0)
40
- activerecord (3.2.5)
41
- activemodel (= 3.2.5)
42
- activesupport (= 3.2.5)
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.5)
46
- activemodel (= 3.2.5)
47
- activesupport (= 3.2.5)
48
- activesupport (3.2.5)
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.0)
46
+ builder (3.0.4)
53
47
  erubis (2.7.0)
54
48
  hike (1.2.1)
55
- i18n (0.6.0)
56
- journey (1.0.3)
57
- json (1.7.3)
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
- mime-types (1.18)
63
- multi_json (1.3.6)
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.1)
67
+ rack-test (0.6.2)
71
68
  rack (>= 1.0)
72
- rails (3.2.5)
73
- actionmailer (= 3.2.5)
74
- actionpack (= 3.2.5)
75
- activerecord (= 3.2.5)
76
- activeresource (= 3.2.5)
77
- activesupport (= 3.2.5)
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.5)
80
- railties (3.2.5)
81
- actionpack (= 3.2.5)
82
- activesupport (= 3.2.5)
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.1)
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.15.2)
97
+ thor (0.16.0)
101
98
  tilt (1.3.3)
102
- treetop (1.4.10)
99
+ treetop (1.4.12)
103
100
  polyglot
104
101
  polyglot (>= 0.3.1)
105
- tzinfo (0.3.33)
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,6 @@
1
+ class CitiesController < ApplicationController
2
+
3
+ def index
4
+ @cities = City.all
5
+ end
6
+ end
@@ -0,0 +1,7 @@
1
+ <h1>Cities</h1>
2
+
3
+ <ul>
4
+ <% @cities.each do |c| %>
5
+ <li><%= c.name %></li>
6
+ <% end %>
7
+ </ul>
@@ -0,0 +1,3 @@
1
+ <h2>Superliners</h2>
2
+
3
+ <%= test %>
@@ -1,3 +1,3 @@
1
1
  Rails.application.routes.draw do
2
-
2
+ resources :cities
3
3
  end
@@ -15,7 +15,5 @@ Gem::Specification.new do |s|
15
15
 
16
16
  s.files = Dir["{app,config,db,lib}/**/*"] + ["Rakefile"]
17
17
  s.test_files = Dir["test/**/*"]
18
-
19
- s.add_dependency "dummy"
20
18
 
21
19
  end
@@ -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
@@ -5,5 +5,8 @@ class CityTest < ActiveSupport::TestCase
5
5
  city = City.new
6
6
  assert !city.valid?
7
7
  end
8
-
8
+
9
+ test "fixtures from wagon are loaded" do
10
+ assert_equal 'London', cities(:london).name
11
+ end
9
12
  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 = Wagon.find(:superliner)
6
+ @wagon = Wagons.find(:superliner)
7
7
  end
8
8
 
9
9
  test "all includes current wagon" do
10
- assert Wagon.all.include?(wagon)
10
+ assert Wagons.all.include?(wagon)
11
11
  end
12
12
 
13
13
  test "app name is correct" do
14
- assert_equal 'dummy', Wagon.app_name
14
+ assert_equal 'dummy', Wagons.app_name
15
15
  end
16
16
 
17
17
  test "find for inexisting return nil" do
18
- assert_nil Wagon.find(:not_existing)
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