railsapp_factory 0.0.1
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.
- data/.gitignore +43 -0
- data/.travis.yml +36 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +22 -0
- data/README.md +168 -0
- data/Rakefile +8 -0
- data/lib/railsapp_factory/build_error.rb +7 -0
- data/lib/railsapp_factory/build_methods.rb +141 -0
- data/lib/railsapp_factory/class_methods.rb +155 -0
- data/lib/railsapp_factory/helper_methods.rb +118 -0
- data/lib/railsapp_factory/run_in_app_methods.rb +157 -0
- data/lib/railsapp_factory/server_methods.rb +82 -0
- data/lib/railsapp_factory/string_inquirer.rb +26 -0
- data/lib/railsapp_factory/template_methods.rb +54 -0
- data/lib/railsapp_factory/version.rb +3 -0
- data/lib/railsapp_factory.rb +50 -0
- data/railsapp_factory.gemspec +25 -0
- data/spec/railsapp_factory/class_methods_spec.rb +121 -0
- data/spec/railsapp_factory/helper_methods_spec.rb +124 -0
- data/spec/railsapp_factory/string_inquirer_spec.rb +24 -0
- data/spec/railsapp_factory/template_methods_spec.rb +98 -0
- data/spec/railsapp_factory_spec.rb +387 -0
- data/spec/spec_helper.rb +41 -0
- data/spec/templates/add-file.rb +6 -0
- data/spec/templates/add-ruby_version-controller.rb +9 -0
- data/spec/templates/add-yet-another-file.rb +6 -0
- data/templates/add_json_pure.rb +5 -0
- data/templates/add_necessary_gems.rb +55 -0
- data/templates/use_bundler_with_rails23.rb +187 -0
- metadata +157 -0
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
|
3
|
+
require 'railsapp_factory/class_methods'
|
4
|
+
require 'railsapp_factory/helper_methods'
|
5
|
+
|
6
|
+
describe 'RailsappFactory::ClassMethods' do
|
7
|
+
|
8
|
+
class SubjectClass
|
9
|
+
extend RailsappFactory::ClassMethods
|
10
|
+
include RailsappFactory::HelperMethods
|
11
|
+
|
12
|
+
# from server_methods
|
13
|
+
attr_accessor :port, :pid
|
14
|
+
|
15
|
+
# from RunInAppMethods
|
16
|
+
attr_accessor :using
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
subject { SubjectClass.new }
|
21
|
+
|
22
|
+
describe "#uri" do
|
23
|
+
before do
|
24
|
+
subject.port = 123
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should return a URI" do
|
28
|
+
subject.uri('/a/path').should be_a_kind_of(URI)
|
29
|
+
end
|
30
|
+
it "should be for 127.0.0.1" do
|
31
|
+
subject.uri('/a/path').to_s.should start_with('http://127.0.0.1:123/')
|
32
|
+
end
|
33
|
+
it "should end in given path" do
|
34
|
+
subject.uri('/a/path').to_s.should end_with('/a/path')
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "#url" do
|
40
|
+
before do
|
41
|
+
subject.port = 567
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
it "should return a URI" do
|
46
|
+
subject.url('/a/path').should be_a_kind_of(String)
|
47
|
+
end
|
48
|
+
it "should be for 127.0.0.1" do
|
49
|
+
subject.url('/a/path').should start_with('http://127.0.0.1:567/')
|
50
|
+
end
|
51
|
+
it "should end in given path" do
|
52
|
+
subject.url('/a/path').should end_with('/a/path')
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
|
58
|
+
describe "#env=" do
|
59
|
+
before do
|
60
|
+
subject.env = 'development'
|
61
|
+
end
|
62
|
+
|
63
|
+
it "should set @override_ENV RAILS_ENV/RACK_ENV" do
|
64
|
+
subject.override_ENV['RAILS_ENV'].should == 'development'
|
65
|
+
subject.override_ENV['RACK_ENV'].should == 'development'
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should be reflected in env" do
|
69
|
+
subject.env.test?.should be_false
|
70
|
+
subject.env.should be_development
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
describe "#env" do
|
76
|
+
it "should be test by default" do
|
77
|
+
subject.env.to_s.should == 'test'
|
78
|
+
subject.env.should be_test
|
79
|
+
subject.env.should_not be_development
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
#describe "#rubies" do
|
84
|
+
#
|
85
|
+
# it "should return a list of rubies" do
|
86
|
+
# list = subject.rubies(nil)
|
87
|
+
# list.should be_a_kind_of(Array)
|
88
|
+
# list.should_not be_empty
|
89
|
+
# end
|
90
|
+
#end
|
91
|
+
|
92
|
+
describe "#alive?" do
|
93
|
+
|
94
|
+
it "should report an alive process as alive" do
|
95
|
+
IO.popen('cat', 'w') do |pipe|
|
96
|
+
subject.pid = pipe.pid
|
97
|
+
subject.should be_alive
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
it "should report a completed process as dead" do
|
102
|
+
IO.popen('cat', 'w') do |pipe|
|
103
|
+
subject.pid = pipe.pid
|
104
|
+
end
|
105
|
+
subject.should_not be_alive
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should report nil pid as dead" do
|
109
|
+
subject.pid = nil
|
110
|
+
subject.should_not be_alive
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "logger" do
|
116
|
+
it "has valid logger" do
|
117
|
+
subject.logger.should respond_to(:info, :warn, :debug, :error)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
|
122
|
+
end
|
123
|
+
|
124
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
|
3
|
+
require 'railsapp_factory/string_inquirer'
|
4
|
+
|
5
|
+
describe 'RailsappFactory::StringInquirer' do
|
6
|
+
subject { RailsappFactory::StringInquirer.new('example_string') }
|
7
|
+
|
8
|
+
it 'should be a kind of string' do
|
9
|
+
subject.should be_a_kind_of(String)
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'should equal the string it was initialized with' do
|
13
|
+
subject.should == 'example_string'
|
14
|
+
end
|
15
|
+
|
16
|
+
it 'should respond to example_string? with true' do
|
17
|
+
subject.example_string?.should be_true
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'should respond to all other questions with false' do
|
21
|
+
subject.test?.should be_false
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
require 'railsapp_factory/class_methods'
|
5
|
+
require 'railsapp_factory/template_methods'
|
6
|
+
require 'railsapp_factory/helper_methods'
|
7
|
+
|
8
|
+
describe 'RailsappFactory::TemplateMethods' do
|
9
|
+
|
10
|
+
class SubjectClass
|
11
|
+
extend RailsappFactory::ClassMethods
|
12
|
+
# include for logger
|
13
|
+
include RailsappFactory::HelperMethods
|
14
|
+
include RailsappFactory::TemplateMethods
|
15
|
+
|
16
|
+
def base_dir
|
17
|
+
"/tmp"
|
18
|
+
end
|
19
|
+
|
20
|
+
def version
|
21
|
+
'4.0'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
subject { SubjectClass.new }
|
26
|
+
|
27
|
+
describe '#process_template' do
|
28
|
+
it 'should call nothing when nothing has been added' do
|
29
|
+
subject.process_template
|
30
|
+
subject.template.should be_nil
|
31
|
+
end
|
32
|
+
|
33
|
+
describe 'with template contents' do
|
34
|
+
before { subject.append_to_template('gem "one"') }
|
35
|
+
|
36
|
+
it "should have contents" do
|
37
|
+
subject.template.should_not be_nil
|
38
|
+
File.size?(subject.template).should be_true
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "before build" do
|
42
|
+
before { subject.stub(:built?).and_return(false) }
|
43
|
+
it "should call build" do
|
44
|
+
subject.built?.should be_false
|
45
|
+
subject.should_receive(:build).with()
|
46
|
+
subject.process_template
|
47
|
+
# checked elsewhere that build clears the template
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "when built" do
|
52
|
+
before { subject.stub(:built?).and_return(true) }
|
53
|
+
it "should call process_template" do
|
54
|
+
subject.should_receive(:system_in_app).and_return(true)
|
55
|
+
subject.process_template
|
56
|
+
subject.template.should be_nil
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
|
63
|
+
it '#append_to_template(text) should append text to a template' do
|
64
|
+
subject.append_to_template('gem "one"')
|
65
|
+
subject.append_to_template('gem "two"')
|
66
|
+
File.exist?(subject.template).should be_true
|
67
|
+
File.read(subject.template).should include("\ngem \"one\"\n")
|
68
|
+
File.read(subject.template).should include("\ngem \"two\"\n")
|
69
|
+
end
|
70
|
+
|
71
|
+
it '#use_template(template) should append text to a template from a local file' do
|
72
|
+
subject.use_template('templates/add_json_pure.rb')
|
73
|
+
File.exist?(subject.template).should be_true
|
74
|
+
File.read(subject.template).should include("\ngem 'json_pure'\n")
|
75
|
+
end
|
76
|
+
|
77
|
+
it '#use_template(template) should append text to a template from a remote file' do
|
78
|
+
subject.use_template('https://raw2.github.com/ianheggie/railsapp_factory/master/spec/templates/add-file.rb')
|
79
|
+
File.exist?(subject.template).should be_true
|
80
|
+
File.read(subject.template).should include("file.txt")
|
81
|
+
end
|
82
|
+
|
83
|
+
it 'should merge the contents of multiple appends and use_template calls' do
|
84
|
+
subject.append_to_template('gem "one"')
|
85
|
+
subject.use_template('templates/add_json_pure.rb')
|
86
|
+
subject.append_to_template('gem "two"')
|
87
|
+
subject.use_template('https://raw2.github.com/ianheggie/railsapp_factory/master/spec/templates/add-file.rb')
|
88
|
+
File.exist?(subject.template).should be_true
|
89
|
+
File.read(subject.template).should include("\ngem \"one\"\n")
|
90
|
+
File.read(subject.template).should include("\ngem \"two\"\n")
|
91
|
+
File.read(subject.template).should include("\ngem 'json_pure'\n")
|
92
|
+
File.read(subject.template).should include("file.txt")
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
end
|
97
|
+
|
98
|
+
|
@@ -0,0 +1,387 @@
|
|
1
|
+
require 'rspec'
|
2
|
+
require 'spec_helper'
|
3
|
+
require 'net/http'
|
4
|
+
|
5
|
+
require 'railsapp_factory'
|
6
|
+
|
7
|
+
describe 'RailsappFactory' do
|
8
|
+
|
9
|
+
# order by number at start of the description and then by random
|
10
|
+
# note 'describe' groups always sort after 'it' examples
|
11
|
+
RSpec.configure do |config|
|
12
|
+
config.order_groups_and_examples do |list|
|
13
|
+
list.sort_by { |item| [item.description.sub(/^(\d*).*/, '\1').to_i, rand] }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
before(:all) do
|
18
|
+
puts '(before(:all) doing cleanup: rm -rf tmp/railsapp)'
|
19
|
+
RailsappFactory.cleanup
|
20
|
+
end
|
21
|
+
|
22
|
+
shared_examples_for RailsappFactory do
|
23
|
+
|
24
|
+
it "A RUBY VERSION MANAGER MUST BE MADE AVAILABLE!!" do
|
25
|
+
RailsappFactory.has_ruby_version_manager?.should be_true
|
26
|
+
end
|
27
|
+
|
28
|
+
describe "Ruby version manager" do
|
29
|
+
before do
|
30
|
+
# TODO: put back rubies(nil) when I get it working
|
31
|
+
@ruby_vs = RailsappFactory.rubies().collect {|s| s.sub(/.*?(\d+\.\d+\.\d+).*/, '\1')}
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'must have ruby 1.8.7' do
|
35
|
+
@ruby_vs.should include('1.8.7')
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'must have ruby 1.9.3' do
|
39
|
+
@ruby_vs.should include('1.9.3')
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
#unless RailsappFactory.has_ruby_version_manager?
|
45
|
+
# it 'should suggest rubies that can be used with this rails version' do
|
46
|
+
# list = @factory.rubies
|
47
|
+
# list.should be_a_kind_of(Array)
|
48
|
+
# list.should_not be_empty
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
#end
|
52
|
+
|
53
|
+
it '#use should set using' do
|
54
|
+
fake_version = '3.14.159'
|
55
|
+
@factory.using.should == ''
|
56
|
+
@factory.use(fake_version)
|
57
|
+
@factory.using.should == fake_version
|
58
|
+
@factory.use(nil)
|
59
|
+
@factory.using.should == ''
|
60
|
+
end
|
61
|
+
|
62
|
+
it '#use should accept a block and only set using within it' do
|
63
|
+
fake_version = '3.14.159'
|
64
|
+
@factory.using.should == ''
|
65
|
+
ran_block = false
|
66
|
+
@factory.use(fake_version) do
|
67
|
+
@factory.using.should == fake_version
|
68
|
+
ran_block = true
|
69
|
+
end
|
70
|
+
ran_block.should == true
|
71
|
+
@factory.using.should == ''
|
72
|
+
end
|
73
|
+
|
74
|
+
it 'new should not build the application' do
|
75
|
+
@factory.should_not be_built
|
76
|
+
end
|
77
|
+
|
78
|
+
it 'should pick an appropriate version' do
|
79
|
+
if @factory.version =~ /2.3-lts/
|
80
|
+
@factory.release.should == '2.3.18'
|
81
|
+
else
|
82
|
+
@factory.release.should match(/^#{@factory.version}\./)
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe '2: when built using #build with templates' do
|
87
|
+
include SpecHelper
|
88
|
+
|
89
|
+
before(:all) do
|
90
|
+
@factory.use_template('spec/templates/add-ruby_version-controller.rb')
|
91
|
+
@factory.use_template('spec/templates/add-file.rb')
|
92
|
+
@factory.build
|
93
|
+
end
|
94
|
+
|
95
|
+
it '#built? should be true' do
|
96
|
+
@factory.should be_built
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'a rails app should have been installed at root' do
|
100
|
+
Dir.chdir(@factory.root) do
|
101
|
+
Kernel.system 'find . -print | sort'
|
102
|
+
expected = %w{ app config db lib log public test tmp }
|
103
|
+
have = expected.select { |d| File.directory?(d) }
|
104
|
+
have.should == expected
|
105
|
+
expected = %w{app/controllers/application_controller.rb
|
106
|
+
config/database.yml config/environment.rb config/routes.rb }
|
107
|
+
have = expected.select { |fn| File.exists?(fn) }
|
108
|
+
have.should == expected
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
it 'it should have gems installed by bundler' do
|
113
|
+
Dir.chdir(@factory.root) do
|
114
|
+
expected = %w{ Gemfile Gemfile.lock }
|
115
|
+
have = expected.select { |fn| File.exists?(fn) }
|
116
|
+
have.should == expected
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
it 'the first template should have been processed' do
|
121
|
+
file = File.join(@factory.root, 'app/controllers/ruby_version_controller.rb')
|
122
|
+
File.exists?(file).should be_true
|
123
|
+
File.open(file).read.should =~ /RUBY_VERSION/
|
124
|
+
end
|
125
|
+
|
126
|
+
it 'the 2nd template should have been processed' do
|
127
|
+
file = File.join(@factory.root, 'public/file.txt')
|
128
|
+
File.exists?(file).should be_true
|
129
|
+
File.open(file).read.should =~ /a short poem/
|
130
|
+
end
|
131
|
+
|
132
|
+
it 'the template should have been cleared' do
|
133
|
+
@factory.template.should be_nil
|
134
|
+
end
|
135
|
+
|
136
|
+
it 'shell_eval should return stdout' do
|
137
|
+
@factory.shell_eval('date').should =~ /\d\d:\d\d/
|
138
|
+
@factory.shell_eval('env').should =~ /PATH=/
|
139
|
+
end
|
140
|
+
|
141
|
+
it 'RAILS_ENV should be set to test' do
|
142
|
+
@factory.env.should be_test
|
143
|
+
@factory.env.to_s.should == 'test'
|
144
|
+
@factory.shell_eval('echo $RAILS_ENV').should == "test\n"
|
145
|
+
@factory.shell_eval('echo $RACK_ENV').should == "test\n"
|
146
|
+
end
|
147
|
+
|
148
|
+
it 'ruby_eval should handle simple values' do
|
149
|
+
@factory.ruby_eval('1 + 2').should == 3
|
150
|
+
@factory.ruby_eval("'a-' + \"string\"").should == 'a-string'
|
151
|
+
@factory.ruby_eval('[1, :pear]').should == [1, 'pear']
|
152
|
+
@factory.ruby_eval("{ 'apple' => 23 }").should == {'apple' => 23}
|
153
|
+
end
|
154
|
+
|
155
|
+
it 'rails_eval should report rails specific values' do
|
156
|
+
@factory.rails_eval('Rails.env').should == @factory.env.to_s
|
157
|
+
end
|
158
|
+
|
159
|
+
if RUBY_VERSION !~ /^1\.8/
|
160
|
+
# ruby_eval uses runner for ruby 1.8.7
|
161
|
+
it 'ruby_eval should not report rails specific values' do
|
162
|
+
lambda { @factory.ruby_eval('Rails.env') }.should raise_error(NameError)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
it 'ruby_eval should try and reproduce exceptions thrown' do
|
167
|
+
lambda { @factory.ruby_eval('1 / 0') }.should raise_error(ZeroDivisionError)
|
168
|
+
end
|
169
|
+
|
170
|
+
it 'ruby_eval should handle require and multi line commands' do
|
171
|
+
@factory.ruby_eval("before = 123\nrequire 'cgi'\nafter = defined?(CGI)\n[before,after]").should == [123, 'constant']
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'ruby_eval should throw argument error on syntax errors' do
|
175
|
+
lambda { @factory.ruby_eval('def missing_an_arg(=2); end') }.should raise_error(ArgumentError)
|
176
|
+
end
|
177
|
+
|
178
|
+
it 'ruby_eval allows choice of :yaml' do
|
179
|
+
@factory.ruby_eval('Set.new([1,2])', :yaml).should == Set.new([1, 2])
|
180
|
+
end
|
181
|
+
|
182
|
+
it 'ruby_eval by default uses :json which converts non simple objects to either their class name or a simple object' do
|
183
|
+
ret = @factory.ruby_eval('Set.new([1,2])', :json)
|
184
|
+
if ret.is_a? Array
|
185
|
+
ret.should == [1, 2]
|
186
|
+
else
|
187
|
+
ret.should be_kind_of(String)
|
188
|
+
ret.should match(/#<Set:0x\w+>/)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
it 'override_ENV should allow arbitrary environment variables to be set' do
|
193
|
+
@factory.override_ENV['ARBITRARY_VAR'] = 'some value'
|
194
|
+
@factory.in_app do
|
195
|
+
ENV['ARBITRARY_VAR']
|
196
|
+
end.should == 'some value'
|
197
|
+
@factory.shell_eval('echo $ARBITRARY_VAR').should == "some value\n"
|
198
|
+
@factory.ruby_eval("ENV['ARBITRARY_VAR']").should == 'some value'
|
199
|
+
ENV['ARBITRARY_VAR'].should == nil
|
200
|
+
end
|
201
|
+
|
202
|
+
#unless RailsappFactory.has_ruby_version_manager?
|
203
|
+
#
|
204
|
+
# it 'ruby_eval should work with all the rubies' do
|
205
|
+
# RUBY_VERSION.should == @factory.ruby_eval('RUBY_VERSION')
|
206
|
+
# @factory.rubies.each do |ruby_v|
|
207
|
+
# @factory.use(ruby_v) do
|
208
|
+
# actual_ruby_v = @factory.ruby_eval('RUBY_VERSION')
|
209
|
+
# actual_version_should_match_rubies_version(actual_ruby_v, ruby_v, false)
|
210
|
+
# end
|
211
|
+
# end
|
212
|
+
# end
|
213
|
+
#
|
214
|
+
# it 'rails_eval should work with all the rubies' do
|
215
|
+
# begin
|
216
|
+
# RUBY_VERSION.should == @factory.ruby_eval('RUBY_VERSION')
|
217
|
+
# @factory.rubies.each do |ruby_v|
|
218
|
+
# @factory.use(ruby_v)
|
219
|
+
# actual_ruby_v = @factory.rails_eval('RUBY_VERSION')
|
220
|
+
# actual_version_should_match_rubies_version(actual_ruby_v, ruby_v, false)
|
221
|
+
# end
|
222
|
+
# ensure
|
223
|
+
# # and nil should return to default
|
224
|
+
# @factory.use(nil)
|
225
|
+
# RUBY_VERSION.should == @factory.ruby_eval('RUBY_VERSION')
|
226
|
+
# end
|
227
|
+
# end
|
228
|
+
#
|
229
|
+
# it 'shell_eval should work with all the rubies' do
|
230
|
+
# RUBY_VERSION.should == @factory.ruby_eval('RUBY_VERSION')
|
231
|
+
# @factory.rubies.each do |ruby_v|
|
232
|
+
# @factory.use(ruby_v) do
|
233
|
+
# actual_ruby_v = @factory.shell_eval('ruby -v')
|
234
|
+
# actual_version_should_match_rubies_version(actual_ruby_v, ruby_v)
|
235
|
+
# end
|
236
|
+
# end
|
237
|
+
# end
|
238
|
+
#
|
239
|
+
# it 'system_in_app should work with all the rubies' do
|
240
|
+
# RUBY_VERSION.should == @factory.ruby_eval('RUBY_VERSION')
|
241
|
+
# @factory.rubies.each do |ruby_v|
|
242
|
+
# @factory.use(ruby_v) do
|
243
|
+
# tmp_filename = Tempfile.new('ruby_version').path
|
244
|
+
# @factory.system_in_app("ruby -v > #{tmp_filename}")
|
245
|
+
# actual_ruby_v = File.read(tmp_filename)
|
246
|
+
# actual_version_should_match_rubies_version(actual_ruby_v, ruby_v)
|
247
|
+
# FileUtils.rm_f tmp_filename
|
248
|
+
# end
|
249
|
+
# end
|
250
|
+
# end
|
251
|
+
#end
|
252
|
+
|
253
|
+
it 'should allow templates to be processed after build' do
|
254
|
+
@factory.use_template('spec/templates/add-yet-another-file.rb')
|
255
|
+
@factory.process_template
|
256
|
+
@factory.template.should be_nil
|
257
|
+
file = File.join(@factory.root, 'public/yet-another-file.txt')
|
258
|
+
File.exists?(file).should be_true
|
259
|
+
File.open(file).read.should =~ /Lorem ipsum/
|
260
|
+
end
|
261
|
+
|
262
|
+
describe 'when server is run using #start' do
|
263
|
+
before(:all) do
|
264
|
+
@factory.start.should be_true
|
265
|
+
end
|
266
|
+
|
267
|
+
after(:all) do
|
268
|
+
@factory.stop
|
269
|
+
end
|
270
|
+
|
271
|
+
it 'start should run the application' do
|
272
|
+
@factory.should be_alive
|
273
|
+
end
|
274
|
+
|
275
|
+
it 'the application should be on a non privileged port' do
|
276
|
+
@factory.port.should > 1024
|
277
|
+
end
|
278
|
+
|
279
|
+
it 'should have a http server running on port' do
|
280
|
+
response = Net::HTTP.get(URI(@factory.url))
|
281
|
+
response.should be_an_instance_of(String)
|
282
|
+
end
|
283
|
+
|
284
|
+
it 'should serve static files' do
|
285
|
+
response = Net::HTTP.get(@factory.uri('file.txt'))
|
286
|
+
response.should be_an_instance_of(String)
|
287
|
+
response.should =~ /a short poem/
|
288
|
+
end
|
289
|
+
|
290
|
+
it 'should serve dynamic page: /ruby_version' do
|
291
|
+
response = Net::HTTP.get(@factory.uri('/ruby_version'))
|
292
|
+
response.should be_an_instance_of(String)
|
293
|
+
response.should include(RUBY_VERSION)
|
294
|
+
end
|
295
|
+
|
296
|
+
it 'should respond with an error for missing paths' do
|
297
|
+
response = Net::HTTP.get_response(@factory.uri('/no_such_path'))
|
298
|
+
%w{404 500}.should include(response.code)
|
299
|
+
response.body.should =~ /No route matches/
|
300
|
+
end
|
301
|
+
|
302
|
+
it '9: stop should stop the application' do
|
303
|
+
@factory.stop.should be_true
|
304
|
+
@factory.should_not be_alive
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
#describe "#rubies" do
|
309
|
+
#
|
310
|
+
# # fails ruby 1.9.2 (new, 3.0, 3.1)
|
311
|
+
#
|
312
|
+
# it "lists ruby versions that are compatible with this version of rails" do
|
313
|
+
# list = @factory.rubies
|
314
|
+
# list.should be_a(Array)
|
315
|
+
# list.should_not be_empty
|
316
|
+
# end
|
317
|
+
#
|
318
|
+
# it 'the server should work with all the ruby versions' do
|
319
|
+
# @factory.using.should == ''
|
320
|
+
# @factory.rubies.each do |ruby_v|
|
321
|
+
# @factory.logger.info("Checking ruby #{ruby_v} for compatibility with rails #{@factory.version}")
|
322
|
+
# @factory.use(ruby_v) do
|
323
|
+
# @factory.using.should == ruby_v
|
324
|
+
# @factory.stop
|
325
|
+
# @factory.system_in_app('bundle').should be_true
|
326
|
+
# @factory.start.should be_true
|
327
|
+
# actual_ruby_v = Net::HTTP.get(@factory.uri('/ruby_version'))
|
328
|
+
# actual_version_should_match_rubies_version(actual_ruby_v, ruby_v, false)
|
329
|
+
# end
|
330
|
+
# end
|
331
|
+
# end
|
332
|
+
#
|
333
|
+
# it '9: stop server and rerun bundle' do
|
334
|
+
# @factory.stop
|
335
|
+
# @factory.system_in_app('bundle').should be_true
|
336
|
+
# end
|
337
|
+
#end
|
338
|
+
|
339
|
+
end
|
340
|
+
|
341
|
+
describe '9: at the end' do
|
342
|
+
it 'the server log file should have contents' do
|
343
|
+
@factory.system_in_app 'du'
|
344
|
+
@factory.system_in_app 'ls -laR log'
|
345
|
+
File.size(File.join(@factory.root, "log/#{@factory.env}.log")).should > 0
|
346
|
+
end
|
347
|
+
|
348
|
+
it '9: destroy should remove the root directory' do
|
349
|
+
root = @factory.root
|
350
|
+
@factory.destroy
|
351
|
+
File.directory?(root).should be_false if root
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
end
|
356
|
+
|
357
|
+
# latest compatible rails version
|
358
|
+
context '::new (latest compatible version)' do
|
359
|
+
before(:all) do
|
360
|
+
@factory = RailsappFactory.new()
|
361
|
+
end
|
362
|
+
after(:all) do
|
363
|
+
@factory.destroy
|
364
|
+
end
|
365
|
+
|
366
|
+
it_behaves_like RailsappFactory
|
367
|
+
end
|
368
|
+
|
369
|
+
RailsappFactory.versions.each do |ver|
|
370
|
+
before(:all) do
|
371
|
+
@factory = RailsappFactory.new(ver)
|
372
|
+
end
|
373
|
+
after(:all) do
|
374
|
+
@factory.destroy
|
375
|
+
end
|
376
|
+
|
377
|
+
next if ver == RailsappFactory.versions.last # don't retest last version
|
378
|
+
|
379
|
+
context "::new(#{ver})" do
|
380
|
+
|
381
|
+
it_behaves_like RailsappFactory
|
382
|
+
|
383
|
+
end
|
384
|
+
#break unless ENV['TRAVIS'] == 'true'
|
385
|
+
end
|
386
|
+
|
387
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
# This file was generated by the `rspec --init` command. Conventionally, all
|
2
|
+
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
3
|
+
# Require this file using `require "spec_helper"` to ensure that it is only
|
4
|
+
# loaded once.
|
5
|
+
#
|
6
|
+
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
7
|
+
RSpec.configure do |config|
|
8
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
9
|
+
config.run_all_when_everything_filtered = true
|
10
|
+
config.filter_run :focus
|
11
|
+
|
12
|
+
# Run specs in random order to surface order dependencies. If you find an
|
13
|
+
# order dependency and want to debug it, you can fix the order by providing
|
14
|
+
# the seed, which is printed after each run.
|
15
|
+
# --seed 1234
|
16
|
+
config.order = 'random'
|
17
|
+
end
|
18
|
+
|
19
|
+
module SpecHelper
|
20
|
+
def actual_version_should_match_rubies_version(actual_ruby_v, rubies_ruby_v, expect_prefix_and_patch = true)
|
21
|
+
prefix_string = rubies_ruby_v.sub(/^([a-zA-Z]*).*/, '\1')
|
22
|
+
if prefix_string == 'rbx'
|
23
|
+
prefix_string = 'rubinius'
|
24
|
+
elsif prefix_string == 'ree'
|
25
|
+
prefix_string = 'Ruby Enterprise Edition'
|
26
|
+
elsif prefix_string === ''
|
27
|
+
prefix_string = 'ruby'
|
28
|
+
end
|
29
|
+
ver_string = rubies_ruby_v.sub(/^\D*([\d\.]*).*/, '\1')
|
30
|
+
patch_string = if rubies_ruby_v =~ /.*?-p(\d+).*/
|
31
|
+
"#{$1}"
|
32
|
+
end
|
33
|
+
#puts "Matching #{prefix_string.inspect}, #{ver_string.inspect}, #{patch_string.inspect}"
|
34
|
+
actual_ruby_v.should include(ver_string)
|
35
|
+
if expect_prefix_and_patch
|
36
|
+
actual_ruby_v.should include(patch_string) if patch_string
|
37
|
+
actual_ruby_v.should include(prefix_string)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
file 'public/yet-another-file.txt', <<-TEXT
|
2
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna
|
3
|
+
aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
|
4
|
+
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint
|
5
|
+
occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
|
6
|
+
TEXT
|