wagons 0.0.1 → 0.0.9

Sign up to get free protection for your applications and to get access to all the features.
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