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
@@ -1,85 +1,84 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
class Wagons::InstallerTest < ActiveSupport::TestCase
|
4
|
-
|
5
4
|
WAGONFILE = 'Wagonfile.test'
|
6
|
-
|
5
|
+
|
7
6
|
attr_reader :installer
|
8
|
-
|
7
|
+
|
9
8
|
setup :setup_gems, :stub_installer, :stub_wagons, :create_wagonfile
|
10
9
|
teardown :remove_wagonfile
|
11
|
-
|
12
|
-
test
|
10
|
+
|
11
|
+
test 'available only returns latest versions' do
|
13
12
|
assert_equal [@master2, @slave1, @superliner2], installer.available
|
14
13
|
end
|
15
|
-
|
16
|
-
test
|
14
|
+
|
15
|
+
test 'not_installed does not return updates' do
|
17
16
|
assert_equal [@superliner2], installer.not_installed
|
18
17
|
end
|
19
|
-
|
20
|
-
test
|
18
|
+
|
19
|
+
test 'updates returns higher versions' do
|
21
20
|
assert_equal [@master2], installer.updates
|
22
21
|
end
|
23
|
-
|
24
|
-
test
|
22
|
+
|
23
|
+
test 'find installed' do
|
25
24
|
assert_equal @master1, installer.installed_spec("#{app_name}_master")
|
26
25
|
assert_nil installer.installed_spec("#{app_name}_superliner")
|
27
26
|
end
|
28
|
-
|
29
|
-
test
|
27
|
+
|
28
|
+
test 'find available' do
|
30
29
|
assert_equal @master2, installer.available_spec("#{app_name}_master")
|
31
30
|
assert_equal @superliner2, installer.available_spec("#{app_name}_superliner")
|
32
31
|
assert_nil installer.available_spec("#{app_name}_fantasy")
|
33
32
|
end
|
34
|
-
|
35
|
-
test
|
36
|
-
installer.stubs(:wagon_class).with(@slave1).returns(stub(:
|
33
|
+
|
34
|
+
test 'check app dependency is fine if app is sufficient' do
|
35
|
+
installer.stubs(:wagon_class).with(@slave1).returns(stub(app_requirement: Gem::Requirement.new('1.0')))
|
37
36
|
assert_equal [], installer.check_app_requirement([@master2, @slave1])
|
38
37
|
end
|
39
|
-
|
40
|
-
test
|
41
|
-
installer.stubs(:wagon_class).with(@superliner2).returns(stub(:
|
38
|
+
|
39
|
+
test 'check app dependency fails if app is too old' do
|
40
|
+
installer.stubs(:wagon_class).with(@superliner2).returns(stub(app_requirement: Gem::Requirement.new('>= 2.0')))
|
42
41
|
msg = installer.check_app_requirement([@master2, @superliner2])
|
43
42
|
assert_equal 1, msg.size
|
44
|
-
assert_match /requires/, msg.first
|
43
|
+
assert_match /requires/, msg.first
|
45
44
|
end
|
46
|
-
|
47
|
-
test
|
45
|
+
|
46
|
+
test 'check dependencies is fine if all depts are installed at the same time' do
|
48
47
|
installer.stubs(:installed).returns([])
|
49
48
|
assert_nil installer.check_dependencies([@master2, @superliner1])
|
50
49
|
assert_nil installer.check_dependencies([@slave1, @master2])
|
51
50
|
end
|
52
|
-
|
53
|
-
test
|
51
|
+
|
52
|
+
test 'check dependencies fails if dependency is missing' do
|
54
53
|
installer.stubs(:installed).returns([])
|
55
54
|
assert_match /requires/, installer.check_dependencies([@slave1])
|
56
55
|
end
|
57
|
-
|
58
|
-
test
|
56
|
+
|
57
|
+
test 'check uninstalled dependencies is fine if all depts are uninstalled at the same time' do
|
59
58
|
assert_nil installer.check_uninstalled_dependencies([@slave1, @master1])
|
60
59
|
end
|
61
|
-
|
62
|
-
test
|
60
|
+
|
61
|
+
test 'check uninstalled dependencies fails if dependency remains' do
|
63
62
|
assert_match /requires/, installer.check_uninstalled_dependencies([@master1])
|
64
63
|
end
|
65
|
-
|
66
|
-
test
|
64
|
+
|
65
|
+
test 'exclude specs does not modify original collection' do
|
67
66
|
original = [@master2, @slave1, @superliner1]
|
68
67
|
assert_equal [@master2], installer.exclude_specs(original, [@slave1, @superliner2])
|
69
68
|
assert_equal [@master2, @slave1, @superliner1], original
|
70
69
|
end
|
71
|
-
|
72
|
-
test
|
70
|
+
|
71
|
+
test 'specs from name' do
|
73
72
|
assert_equal [@master2, @slave1], installer.specs_from_names(["#{app_name}_master", "#{app_name}_slave"])
|
74
73
|
end
|
75
|
-
|
76
|
-
test
|
74
|
+
|
75
|
+
test 'specs_from_names raises exception if spec is not found' do
|
77
76
|
assert_raise(RuntimeError) do
|
78
77
|
installer.specs_from_names(["#{app_name}_master", "#{app_name}_fantasy", "#{app_name}_superliner"])
|
79
78
|
end
|
80
79
|
end
|
81
|
-
|
82
|
-
test
|
80
|
+
|
81
|
+
test 'wagonfile update updates version and add new entries' do
|
83
82
|
installer.wagonfile_update([@master2, @slave1, @superliner2])
|
84
83
|
content = File.read(WAGONFILE)
|
85
84
|
assert_match /^gem '#{app_name}_master', '2.0.0'$/, content
|
@@ -87,8 +86,8 @@ class Wagons::InstallerTest < ActiveSupport::TestCase
|
|
87
86
|
assert_match /^gem '#{app_name}_superliner', '2.0.0'$/, content
|
88
87
|
assert_equal 3, content.each_line.count, content
|
89
88
|
end
|
90
|
-
|
91
|
-
test
|
89
|
+
|
90
|
+
test 'wagonfile update keeps existing and add new entries if version should not be included in wagonfile' do
|
92
91
|
installer.include_version_in_wagonfile = false
|
93
92
|
installer.wagonfile_update([@master2, @slave1, @superliner2])
|
94
93
|
content = File.read(WAGONFILE)
|
@@ -97,8 +96,8 @@ class Wagons::InstallerTest < ActiveSupport::TestCase
|
|
97
96
|
assert_match /^gem '#{app_name}_superliner'$/, content
|
98
97
|
assert_equal 3, content.each_line.count, content
|
99
98
|
end
|
100
|
-
|
101
|
-
test
|
99
|
+
|
100
|
+
test 'wagonfile update updates commented gems' do
|
102
101
|
File.open(WAGONFILE, 'w') do |f|
|
103
102
|
f.puts "gem '#{app_name}_master', '1.0.0'"
|
104
103
|
f.puts "# gem '#{app_name}_slave', '1.0.0'"
|
@@ -109,59 +108,59 @@ class Wagons::InstallerTest < ActiveSupport::TestCase
|
|
109
108
|
assert_match /^gem '#{app_name}_slave', '1.0.0'$/, content
|
110
109
|
assert_equal 2, content.each_line.count, content
|
111
110
|
end
|
112
|
-
|
113
|
-
test
|
111
|
+
|
112
|
+
test 'wagonfile remove' do
|
114
113
|
installer.wagonfile_remove([@slave1])
|
115
114
|
content = File.read(WAGONFILE)
|
116
115
|
assert_match /^gem '#{app_name}_master', '1.0.0'$/, content
|
117
116
|
assert_equal 1, content.each_line.count
|
118
117
|
end
|
119
|
-
|
120
|
-
test
|
121
|
-
installer.stubs(:setup_command).returns(
|
118
|
+
|
119
|
+
test 'install runs when checks are fine' do
|
120
|
+
installer.stubs(:setup_command).returns('echo $RAILS_ENV > env.tmp')
|
122
121
|
assert_nil installer.install(["#{app_name}_master"])
|
123
122
|
content = File.read(WAGONFILE)
|
124
123
|
assert_match /^gem '#{app_name}_master', '2.0.0'$/, content
|
125
124
|
assert_equal 'test', File.read('env.tmp').strip
|
126
125
|
File.delete('env.tmp')
|
127
126
|
end
|
128
|
-
|
129
|
-
test
|
127
|
+
|
128
|
+
test 'install fails when setup command fails' do
|
130
129
|
installer.stubs(:setup_command).returns("echo $RAILS_ENV; echo 'its a bug' >&2; exit 1")
|
131
130
|
assert_equal 'its a bug', installer.install(["#{app_name}_master"]).strip
|
132
131
|
content = File.read(WAGONFILE)
|
133
132
|
assert_match /^gem '#{app_name}_master', '1.0.0'$/, content
|
134
133
|
end
|
135
|
-
|
136
|
-
test
|
137
|
-
installer.stubs(:wagon_class).with(@superliner2).returns(stub(:
|
134
|
+
|
135
|
+
test 'install fails when checks go wrong' do
|
136
|
+
installer.stubs(:wagon_class).with(@superliner2).returns(stub(app_requirement: Gem::Requirement.new('>= 2.0')))
|
138
137
|
installer.expects(:wagonfile_edit).never
|
139
138
|
assert_match /requires/, installer.install(["#{app_name}_superliner"])
|
140
139
|
end
|
141
|
-
|
142
|
-
test
|
140
|
+
|
141
|
+
test 'install fails when name is invalid' do
|
143
142
|
installer.expects(:wagonfile_edit).never
|
144
143
|
assert_match /not found/, installer.install(["#{app_name}_fantasy"])
|
145
144
|
end
|
146
|
-
|
147
|
-
test
|
145
|
+
|
146
|
+
test 'uninstall runs when checks are fine' do
|
148
147
|
installer.expects(:remove_wagons).once
|
149
148
|
assert_nil installer.uninstall(["#{app_name}_master", "#{app_name}_slave"])
|
150
149
|
content = File.read(WAGONFILE)
|
151
150
|
assert content.blank?
|
152
151
|
end
|
153
|
-
|
154
|
-
test
|
152
|
+
|
153
|
+
test 'uninstall fails when checks go wrong' do
|
155
154
|
installer.expects(:wagonfile_edit).never
|
156
155
|
assert_match /requires/, installer.uninstall(["#{app_name}_master"])
|
157
156
|
end
|
158
|
-
|
159
|
-
test
|
157
|
+
|
158
|
+
test 'uninstall fails when name is invalid' do
|
160
159
|
installer.expects(:wagonfile_edit).never
|
161
160
|
assert_match /not found/, installer.uninstall(["#{app_name}_fantasy"])
|
162
161
|
end
|
163
|
-
|
164
|
-
test
|
162
|
+
|
163
|
+
test 'wagon class can load class from anywhere' do
|
165
164
|
installer.unstub(:wagon_class)
|
166
165
|
dir = File.expand_path('../dummy/vendor/wagons/superliner', __FILE__)
|
167
166
|
spec = Gem::Specification.load(File.join(dir, 'dummy_superliner.gemspec'))
|
@@ -169,32 +168,32 @@ class Wagons::InstallerTest < ActiveSupport::TestCase
|
|
169
168
|
assert_equal 'DummySuperliner::Wagon', installer.wagon_class(spec).name
|
170
169
|
assert installer.wagon_class(spec).app_requirement.satisfied_by?(Gem::Version.new('1.0'))
|
171
170
|
end
|
172
|
-
|
171
|
+
|
173
172
|
private
|
174
|
-
|
173
|
+
|
175
174
|
def setup_gems
|
176
175
|
@master1 = gemspec('master', '1.0.0')
|
177
176
|
@master2 = gemspec('master', '2.0.0')
|
178
177
|
@slave1 = gemspec('slave', '1.0.0', 'master')
|
179
178
|
@superliner1 = gemspec('superliner', '1.0.0')
|
180
179
|
@superliner2 = gemspec('superliner', '2.0.0')
|
181
|
-
|
180
|
+
|
182
181
|
Wagons.app_version = '1.0.0'
|
183
182
|
end
|
184
|
-
|
183
|
+
|
185
184
|
def stub_installer
|
186
185
|
@installer = Wagons::Installer.new
|
187
186
|
@installer.stubs(:load_available_specs).returns([@master1, @master2, @slave1, @superliner1, @superliner2])
|
188
187
|
@installer.stubs(:installed).returns([@master1, @slave1])
|
189
188
|
@installer.stubs(:wagonfile).returns(WAGONFILE)
|
190
189
|
@installer.stubs(:remove_wagons).returns(nil)
|
191
|
-
@installer.stubs(:wagon_class).returns(stub(:
|
190
|
+
@installer.stubs(:wagon_class).returns(stub(app_requirement: Gem::Requirement.new))
|
192
191
|
end
|
193
|
-
|
192
|
+
|
194
193
|
def stub_wagons
|
195
194
|
Wagons.stubs(:find).returns(stub(:protect? => false))
|
196
195
|
end
|
197
|
-
|
196
|
+
|
198
197
|
def create_wagonfile
|
199
198
|
File.open(WAGONFILE, 'w') do |f|
|
200
199
|
installer.installed.each do |spec|
|
@@ -202,24 +201,22 @@ class Wagons::InstallerTest < ActiveSupport::TestCase
|
|
202
201
|
end
|
203
202
|
end
|
204
203
|
end
|
205
|
-
|
204
|
+
|
206
205
|
def remove_wagonfile
|
207
|
-
File.delete(WAGONFILE) if File.
|
206
|
+
File.delete(WAGONFILE) if File.exist?(WAGONFILE)
|
208
207
|
end
|
209
|
-
|
208
|
+
|
210
209
|
def app_name
|
211
210
|
@app_name ||= Wagons.app_name
|
212
211
|
end
|
213
|
-
|
212
|
+
|
214
213
|
def gemspec(name, version, dependency = nil)
|
215
214
|
Gem::Specification.new do |s|
|
216
215
|
s.name = "#{app_name}_#{name}"
|
217
216
|
s.version = version
|
218
217
|
s.summary = 'blabla'
|
219
|
-
|
218
|
+
|
220
219
|
s.add_dependency "#{app_name}_#{dependency}" if dependency
|
221
220
|
end
|
222
221
|
end
|
223
|
-
|
224
|
-
|
225
|
-
end
|
222
|
+
end
|