rspec 1.1.2 → 1.1.3
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/CHANGES +17 -0
- data/Rakefile +7 -4
- data/failing_examples/README.txt +7 -0
- data/failing_examples/diffing_spec.rb +36 -0
- data/failing_examples/failing_autogenerated_docstrings_example.rb +19 -0
- data/failing_examples/failure_in_setup.rb +10 -0
- data/failing_examples/failure_in_teardown.rb +10 -0
- data/failing_examples/mocking_example.rb +40 -0
- data/failing_examples/mocking_with_flexmock.rb +26 -0
- data/failing_examples/mocking_with_mocha.rb +25 -0
- data/failing_examples/mocking_with_rr.rb +27 -0
- data/failing_examples/partial_mock_example.rb +20 -0
- data/failing_examples/predicate_example.rb +29 -0
- data/failing_examples/raising_example.rb +47 -0
- data/failing_examples/spec_helper.rb +3 -0
- data/failing_examples/syntax_error_example.rb +7 -0
- data/failing_examples/team_spec.rb +44 -0
- data/failing_examples/timeout_behaviour.rb +7 -0
- data/lib/autotest/rspec.rb +21 -35
- data/lib/spec.rb +0 -7
- data/lib/spec/example/example_group_methods.rb +10 -4
- data/lib/spec/example/example_methods.rb +4 -0
- data/lib/spec/interop/test.rb +3 -1
- data/lib/spec/interop/test/unit/ui/console/testrunner.rb +1 -0
- data/lib/spec/matchers/raise_error.rb +19 -15
- data/lib/spec/runner.rb +14 -0
- data/lib/spec/runner/formatter/story/html_formatter.rb +3 -0
- data/lib/spec/runner/formatter/story/plain_text_formatter.rb +4 -1
- data/lib/spec/runner/option_parser.rb +5 -33
- data/lib/spec/runner/options.rb +51 -18
- data/lib/spec/runner/spec_parser.rb +49 -31
- data/lib/spec/story/runner.rb +0 -2
- data/lib/spec/story/step.rb +8 -6
- data/lib/spec/story/world.rb +1 -0
- data/lib/spec/version.rb +22 -22
- data/pre_commit/lib/pre_commit.rb +4 -0
- data/pre_commit/lib/pre_commit/core.rb +50 -0
- data/pre_commit/lib/pre_commit/pre_commit.rb +54 -0
- data/pre_commit/lib/pre_commit/rspec.rb +111 -0
- data/pre_commit/lib/pre_commit/rspec_on_rails.rb +313 -0
- data/pre_commit/spec/pre_commit/pre_commit_spec.rb +15 -0
- data/pre_commit/spec/pre_commit/rspec_on_rails_spec.rb +36 -0
- data/pre_commit/spec/spec_helper.rb +3 -0
- data/pre_commit/spec/spec_suite.rb +11 -0
- data/rake_tasks/examples.rake +7 -0
- data/rake_tasks/examples_with_rcov.rake +9 -0
- data/rake_tasks/failing_examples_with_html.rake +9 -0
- data/rake_tasks/verify_rcov.rake +7 -0
- data/spec/README.jruby +15 -0
- data/spec/autotest/rspec_spec.rb +11 -80
- data/spec/autotest_helper.rb +2 -1
- data/spec/autotest_matchers.rb +47 -0
- data/spec/rspec_suite.rb +1 -1
- data/spec/spec.opts +6 -0
- data/spec/spec/example/example_group_methods_spec.rb +11 -2
- data/spec/spec/example/example_methods_spec.rb +69 -56
- data/spec/spec/interop/test/unit/resources/spec_that_fails.rb +10 -0
- data/spec/spec/interop/test/unit/resources/spec_that_passes.rb +10 -0
- data/spec/spec/interop/test/unit/resources/spec_with_errors.rb +10 -0
- data/spec/spec/interop/test/unit/resources/test_case_that_fails.rb +10 -0
- data/spec/spec/interop/test/unit/resources/test_case_that_passes.rb +10 -0
- data/spec/spec/interop/test/unit/resources/test_case_with_errors.rb +10 -0
- data/spec/spec/interop/test/unit/resources/testsuite_adapter_spec_with_test_unit.rb +38 -0
- data/spec/spec/interop/test/unit/spec_spec.rb +45 -0
- data/spec/spec/interop/test/unit/testcase_spec.rb +39 -4
- data/spec/spec/interop/test/unit/testsuite_adapter_spec.rb +1 -1
- data/spec/spec/matchers/raise_error_spec.rb +7 -1
- data/spec/spec/mocks/bug_report_10263.rb +1 -1
- data/spec/spec/runner/command_line_spec.rb +3 -2
- data/spec/spec/runner/empty_file.txt +0 -0
- data/spec/spec/runner/examples.txt +2 -0
- data/spec/spec/runner/failed.txt +3 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.4.html +365 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.5-jruby.html +387 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.5.html +371 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.6-jruby.html +381 -0
- data/spec/spec/runner/formatter/html_formatted-1.8.6.html +365 -0
- data/spec/spec/runner/formatter/story/plain_text_formatter_spec.rb +54 -54
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.4.html +365 -0
- data/spec/spec/runner/formatter/text_mate_formatted-1.8.6.html +365 -0
- data/spec/spec/runner/option_parser_spec.rb +50 -49
- data/spec/spec/runner/options_spec.rb +72 -2
- data/spec/spec/runner/resources/a_bar.rb +0 -0
- data/spec/spec/runner/resources/a_foo.rb +0 -0
- data/spec/spec/runner/resources/a_spec.rb +1 -0
- data/spec/spec/runner/spec.opts +2 -0
- data/spec/spec/runner/spec_parser/spec_parser_fixture.rb +70 -0
- data/spec/spec/runner/spec_parser_spec.rb +31 -76
- data/spec/spec/runner/spec_spaced.opts +2 -0
- data/spec/spec/spec_classes.rb +4 -0
- data/spec/spec/story/step_spec.rb +22 -0
- data/spec/spec/story/world_spec.rb +7 -0
- data/stories/interop/test_case_with_should_methods +1 -1
- metadata +85 -5
- data/spec/spec/interop/test/unit/testcase_spec_with_test_unit.rb +0 -20
- data/spec/spec/interop/test/unit/testsuite_adapter_spec_with_test_unit.rb +0 -34
data/lib/spec/story/runner.rb
CHANGED
|
@@ -40,8 +40,6 @@ module Spec
|
|
|
40
40
|
end
|
|
41
41
|
|
|
42
42
|
def register_exit_hook # :nodoc:
|
|
43
|
-
# TODO - when story runner uses test/unit runners like example runner does we can kill
|
|
44
|
-
# this and also the assorted Kernel.stub!(:at_exit) in examples
|
|
45
43
|
at_exit do
|
|
46
44
|
Runner.story_runner.run_stories unless $!
|
|
47
45
|
end
|
data/lib/spec/story/step.rb
CHANGED
|
@@ -39,14 +39,16 @@ module Spec
|
|
|
39
39
|
|
|
40
40
|
private
|
|
41
41
|
|
|
42
|
-
def assign_expression(
|
|
43
|
-
|
|
44
|
-
|
|
42
|
+
def assign_expression(string_or_regexp)
|
|
43
|
+
if String === string_or_regexp
|
|
44
|
+
expression = string_or_regexp.dup
|
|
45
45
|
expression.gsub! '(', '\('
|
|
46
46
|
expression.gsub! ')', '\)'
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
47
|
+
elsif Regexp === string_or_regexp
|
|
48
|
+
expression = string_or_regexp.source
|
|
49
|
+
end
|
|
50
|
+
while expression =~ PARAM_PATTERN
|
|
51
|
+
expression.gsub!($1, "(.*?)")
|
|
50
52
|
end
|
|
51
53
|
@expression = Regexp.new("^#{expression}$")
|
|
52
54
|
end
|
data/lib/spec/story/world.rb
CHANGED
|
@@ -70,6 +70,7 @@ module Spec
|
|
|
70
70
|
# story_server/prototype/rspec_stories.html (generated by rake stories)
|
|
71
71
|
args = step.parse_args(name) if args.empty?
|
|
72
72
|
begin
|
|
73
|
+
listeners.each { |l| l.step_upcoming(type, step_name, *args) }
|
|
73
74
|
step.perform(world, *args) unless ::Spec::Story::Runner.dry_run
|
|
74
75
|
listeners.each { |l| l.step_succeeded(type, step_name, *args) }
|
|
75
76
|
rescue Exception => e
|
data/lib/spec/version.rb
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
module Spec
|
|
2
|
-
module VERSION
|
|
3
|
-
unless defined? MAJOR
|
|
4
|
-
MAJOR = 1
|
|
5
|
-
MINOR = 1
|
|
6
|
-
TINY =
|
|
7
|
-
RELEASE_CANDIDATE = nil
|
|
8
|
-
|
|
9
|
-
BUILD_TIME_UTC =
|
|
10
|
-
|
|
11
|
-
STRING = [MAJOR, MINOR, TINY].join('.')
|
|
12
|
-
TAG = "REL_#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('_')}".upcase.gsub(/\.|-/, '_')
|
|
13
|
-
FULL_VERSION = "#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('.')} (build #{BUILD_TIME_UTC})"
|
|
14
|
-
|
|
15
|
-
NAME = "RSpec"
|
|
16
|
-
URL = "http://rspec.rubyforge.org/"
|
|
17
|
-
|
|
18
|
-
DESCRIPTION = "#{NAME}-#{FULL_VERSION} - BDD for Ruby\n#{URL}"
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
1
|
+
module Spec
|
|
2
|
+
module VERSION
|
|
3
|
+
unless defined? MAJOR
|
|
4
|
+
MAJOR = 1
|
|
5
|
+
MINOR = 1
|
|
6
|
+
TINY = 3
|
|
7
|
+
RELEASE_CANDIDATE = nil
|
|
8
|
+
|
|
9
|
+
BUILD_TIME_UTC = 20080131122909
|
|
10
|
+
|
|
11
|
+
STRING = [MAJOR, MINOR, TINY].join('.')
|
|
12
|
+
TAG = "REL_#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('_')}".upcase.gsub(/\.|-/, '_')
|
|
13
|
+
FULL_VERSION = "#{[MAJOR, MINOR, TINY, RELEASE_CANDIDATE].compact.join('.')} (build #{BUILD_TIME_UTC})"
|
|
14
|
+
|
|
15
|
+
NAME = "RSpec"
|
|
16
|
+
URL = "http://rspec.rubyforge.org/"
|
|
17
|
+
|
|
18
|
+
DESCRIPTION = "#{NAME}-#{FULL_VERSION} - BDD for Ruby\n#{URL}"
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
class PreCommit::Core < PreCommit
|
|
2
|
+
def pre_commit
|
|
3
|
+
rake_invoke :examples
|
|
4
|
+
website
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
def website(run_webby=true)
|
|
8
|
+
clobber
|
|
9
|
+
rake_invoke :verify_rcov
|
|
10
|
+
rake_invoke :spec_html
|
|
11
|
+
webby
|
|
12
|
+
rake_invoke :failing_examples_with_html
|
|
13
|
+
rdoc
|
|
14
|
+
rdoc_rails
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def clobber
|
|
18
|
+
rm_rf '../doc/output'
|
|
19
|
+
rm_rf 'translated_specs'
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def webby
|
|
23
|
+
Dir.chdir '../doc' do
|
|
24
|
+
output = silent_sh('rake rebuild 2>&1')
|
|
25
|
+
if shell_error?(output)
|
|
26
|
+
raise "ERROR while generating web site: #{output}"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
spec_page = File.expand_path('output/documentation/tools/spec.html')
|
|
30
|
+
spec_page_content = File.open(spec_page).read
|
|
31
|
+
unless spec_page_content =~/\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\.\./m
|
|
32
|
+
raise "#{'!'*400}\nIt seems like the output in the generated documentation is broken (no dots: ......)\n. Look in #{spec_page}"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def rdoc
|
|
38
|
+
Dir.chdir '../rspec' do
|
|
39
|
+
rake = (PLATFORM == "i386-mswin32") ? "rake.cmd" : "rake"
|
|
40
|
+
`#{rake} rdoc`
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def rdoc_rails
|
|
45
|
+
Dir.chdir '../rspec_on_rails' do
|
|
46
|
+
rake = (PLATFORM == "i386-mswin32") ? "rake.cmd" : "rake"
|
|
47
|
+
`#{rake} rdoc`
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
class PreCommit
|
|
2
|
+
attr_reader :actor
|
|
3
|
+
def initialize(actor)
|
|
4
|
+
@actor = actor
|
|
5
|
+
end
|
|
6
|
+
|
|
7
|
+
protected
|
|
8
|
+
def rake_invoke(task_name)
|
|
9
|
+
Rake::Task[task_name].invoke
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def rake_sh(task_name, env_hash={})
|
|
13
|
+
env = env_hash.collect{|key, value| "#{key}=#{value}"}.join(' ')
|
|
14
|
+
rake = (PLATFORM == "i386-mswin32") ? "rake.bat" : "rake"
|
|
15
|
+
cmd = "#{rake} #{task_name} #{env} --trace"
|
|
16
|
+
output = silent_sh(cmd)
|
|
17
|
+
puts output
|
|
18
|
+
if shell_error?(output)
|
|
19
|
+
raise "ERROR while running rake: #{cmd}"
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def silent_sh(cmd, &block)
|
|
24
|
+
output = nil
|
|
25
|
+
IO.popen(cmd) do |io|
|
|
26
|
+
output = io.read
|
|
27
|
+
output.each_line do |line|
|
|
28
|
+
block.call(line) if block
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
output
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def shell_error?(output)
|
|
35
|
+
output =~ /ERROR/n || error_code?
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def error_code?
|
|
39
|
+
$?.exitstatus != 0
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def root_dir
|
|
43
|
+
dir = File.dirname(__FILE__)
|
|
44
|
+
File.expand_path("#{dir}/../../../..")
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def method_missing(method_name, *args, &block)
|
|
48
|
+
if actor.respond_to?(method_name)
|
|
49
|
+
actor.send(method_name, *args, &block)
|
|
50
|
+
else
|
|
51
|
+
super
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
class PreCommit::Rspec < PreCommit
|
|
2
|
+
def pre_commit
|
|
3
|
+
check_for_gem_dependencies
|
|
4
|
+
fix_cr_lf
|
|
5
|
+
touch_revision_storing_files
|
|
6
|
+
pre_commit_core
|
|
7
|
+
pre_commit_textmate_bundle
|
|
8
|
+
pre_commit_rails
|
|
9
|
+
ok_to_commit
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def check_for_gem_dependencies
|
|
13
|
+
require "rubygems"
|
|
14
|
+
gem 'rake'
|
|
15
|
+
gem 'webby'
|
|
16
|
+
gem 'coderay'
|
|
17
|
+
gem 'RedCloth'
|
|
18
|
+
gem 'syntax'
|
|
19
|
+
gem 'diff-lcs'
|
|
20
|
+
gem 'heckle' unless PLATFORM == "i386-mswin32"
|
|
21
|
+
gem 'hpricot'
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def fix_cr_lf
|
|
25
|
+
files = FileList['**/*.rb'].
|
|
26
|
+
exclude('example_rails_app/vendor/**').
|
|
27
|
+
exclude('rspec/translated_specs/**')
|
|
28
|
+
$\="\n"
|
|
29
|
+
files.each do |f|
|
|
30
|
+
raw_content = File.read(f)
|
|
31
|
+
fixed_content = ""
|
|
32
|
+
raw_content.each_line do |line|
|
|
33
|
+
fixed_content << line
|
|
34
|
+
end
|
|
35
|
+
unless raw_content == fixed_content
|
|
36
|
+
File.open(f, "w") do |io|
|
|
37
|
+
io.print fixed_content
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# TODO - move me up to the project root
|
|
44
|
+
def touch_revision_storing_files
|
|
45
|
+
files = [
|
|
46
|
+
'rspec/lib/spec/version.rb',
|
|
47
|
+
'rspec_on_rails/lib/spec/rails/version.rb'
|
|
48
|
+
]
|
|
49
|
+
build_time_utc = Time.now.utc.strftime('%Y%m%d%H%M%S')
|
|
50
|
+
files.each do |path|
|
|
51
|
+
abs_path = File.join(root_dir, path)
|
|
52
|
+
content = File.open(abs_path).read
|
|
53
|
+
touched_content = content.gsub(/BUILD_TIME_UTC = (\d*)/, "BUILD_TIME_UTC = #{build_time_utc}")
|
|
54
|
+
File.open(abs_path, 'w') do |io|
|
|
55
|
+
io.write touched_content
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def pre_commit_core
|
|
61
|
+
Dir.chdir 'rspec' do
|
|
62
|
+
rake = (PLATFORM == "i386-mswin32") ? "rake.bat" : "rake"
|
|
63
|
+
system("#{rake} pre_commit --verbose --trace")
|
|
64
|
+
raise "RSpec Core pre_commit failed" if error_code?
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def pre_commit_textmate_bundle
|
|
69
|
+
Dir.chdir 'RSpec.tmbundle/Support' do
|
|
70
|
+
rake = (PLATFORM == "i386-mswin32") ? "rake.bat" : "rake"
|
|
71
|
+
system("#{rake} spec --verbose --trace")
|
|
72
|
+
raise "RSpec Textmate Bundle specs failed" if error_code?
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def install_dependencies
|
|
77
|
+
Dir.chdir 'example_rails_app' do
|
|
78
|
+
rake_sh("-f Multirails.rake install_dependencies")
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def update_dependencies
|
|
83
|
+
Dir.chdir 'example_rails_app' do
|
|
84
|
+
rake_sh("-f Multirails.rake update_dependencies")
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
def pre_commit_rails
|
|
89
|
+
Dir.chdir 'example_rails_app' do
|
|
90
|
+
rake = (PLATFORM == "i386-mswin32") ? "rake.cmd" : "rake"
|
|
91
|
+
cmd = "#{rake} -f Multirails.rake pre_commit --trace"
|
|
92
|
+
system(cmd)
|
|
93
|
+
if error_code?
|
|
94
|
+
message = <<-EOF
|
|
95
|
+
############################################################
|
|
96
|
+
RSpec on Rails Plugin pre_commit failed. For more info:
|
|
97
|
+
|
|
98
|
+
cd example_rails_app
|
|
99
|
+
#{cmd}
|
|
100
|
+
|
|
101
|
+
############################################################
|
|
102
|
+
EOF
|
|
103
|
+
raise message.gsub(/^ /, '')
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
def ok_to_commit
|
|
109
|
+
puts "OK TO COMMIT"
|
|
110
|
+
end
|
|
111
|
+
end
|
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
class PreCommit::RspecOnRails < PreCommit
|
|
2
|
+
def pre_commit
|
|
3
|
+
install_plugins
|
|
4
|
+
check_dependencies
|
|
5
|
+
used_railses = []
|
|
6
|
+
VENDOR_DEPS.each do |dependency|
|
|
7
|
+
rails_dir = File.expand_path(dependency[:checkout_path])
|
|
8
|
+
rails_version = rails_version_from_dir(rails_dir)
|
|
9
|
+
begin
|
|
10
|
+
rspec_pre_commit(rails_version, false)
|
|
11
|
+
used_railses << rails_version
|
|
12
|
+
rescue Exception => e
|
|
13
|
+
unless rails_version == 'edge'
|
|
14
|
+
raise e
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
uninstall_plugins
|
|
19
|
+
puts "All specs passed against the following released versions of Rails: #{used_railses.join(", ")}"
|
|
20
|
+
unless used_railses.include?('edge')
|
|
21
|
+
puts "There were errors running pre_commit against edge"
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def rails_version_from_dir(rails_dir)
|
|
26
|
+
File.basename(rails_dir)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def rspec_pre_commit(rails_version=ENV['RSPEC_RAILS_VERSION'],uninstall=true)
|
|
30
|
+
puts "#####################################################"
|
|
31
|
+
puts "running pre_commit against rails #{rails_version}"
|
|
32
|
+
puts "#####################################################"
|
|
33
|
+
ENV['RSPEC_RAILS_VERSION'] = rails_version
|
|
34
|
+
cleanup(uninstall)
|
|
35
|
+
ensure_db_config
|
|
36
|
+
clobber_sqlite_data
|
|
37
|
+
install_plugins
|
|
38
|
+
generate_rspec
|
|
39
|
+
|
|
40
|
+
generate_login_controller
|
|
41
|
+
create_purchase
|
|
42
|
+
|
|
43
|
+
rake_sh "spec"
|
|
44
|
+
rake_sh "spec:plugins:rspec_on_rails"
|
|
45
|
+
|
|
46
|
+
# TODO - why is this necessary? Shouldn't the specs leave
|
|
47
|
+
# a clean DB?
|
|
48
|
+
rake_sh "db:test:prepare"
|
|
49
|
+
sh "ruby vendor/plugins/rspec_on_rails/stories/all.rb"
|
|
50
|
+
cleanup(uninstall)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def cleanup(uninstall=true)
|
|
54
|
+
revert_routes
|
|
55
|
+
rm_generated_login_controller_files
|
|
56
|
+
destroy_purchase
|
|
57
|
+
uninstall_plugins if uninstall
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def revert_routes
|
|
61
|
+
output = silent_sh("cp config/routes.rb.bak config/routes.rb")
|
|
62
|
+
raise "Error reverting routes.rb" if shell_error?(output)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def create_purchase
|
|
66
|
+
generate_purchase
|
|
67
|
+
migrate_up
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def install_plugins
|
|
71
|
+
install_rspec_on_rails_plugin
|
|
72
|
+
install_rspec_plugin
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def install_rspec_on_rails_plugin
|
|
76
|
+
rm_rf 'vendor/plugins/rspec_on_rails'
|
|
77
|
+
copy '../rspec_on_rails', 'vendor/plugins/'
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def install_rspec_plugin
|
|
81
|
+
rm_rf 'vendor/plugins/rspec'
|
|
82
|
+
copy '../rspec', 'vendor/plugins/'
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def uninstall_plugins
|
|
86
|
+
rm_rf 'vendor/plugins/rspec_on_rails'
|
|
87
|
+
rm_rf 'vendor/plugins/rspec'
|
|
88
|
+
rm_rf 'script/spec'
|
|
89
|
+
rm_rf 'script/spec_server'
|
|
90
|
+
rm_rf 'spec/spec_helper.rb'
|
|
91
|
+
rm_rf 'spec/spec.opts'
|
|
92
|
+
rm_rf 'spec/rcov.opts'
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def copy(source, target)
|
|
96
|
+
output = silent_sh("cp -R #{File.expand_path(source)} #{File.expand_path(target)}")
|
|
97
|
+
raise "Error installing rspec" if shell_error?(output)
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def generate_rspec
|
|
101
|
+
result = silent_sh("ruby script/generate rspec --force")
|
|
102
|
+
if error_code? || result =~ /^Missing/
|
|
103
|
+
raise "Failed to generate rspec environment:\n#{result}"
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def ensure_db_config
|
|
108
|
+
config_path = 'config/database.yml'
|
|
109
|
+
unless File.exists?(config_path)
|
|
110
|
+
message = <<-EOF
|
|
111
|
+
#####################################################
|
|
112
|
+
Could not find #{config_path}
|
|
113
|
+
|
|
114
|
+
You can get rake to generate this file for you using either of:
|
|
115
|
+
rake rspec:generate_mysql_config
|
|
116
|
+
rake rspec:generate_sqlite3_config
|
|
117
|
+
|
|
118
|
+
If you use mysql, you'll need to create dev and test
|
|
119
|
+
databases and users for each. To do this, standing
|
|
120
|
+
in rspec_on_rails, log into mysql as root and then...
|
|
121
|
+
mysql> source db/mysql_setup.sql;
|
|
122
|
+
|
|
123
|
+
There is also a teardown script that will remove
|
|
124
|
+
the databases and users:
|
|
125
|
+
mysql> source db/mysql_teardown.sql;
|
|
126
|
+
#####################################################
|
|
127
|
+
EOF
|
|
128
|
+
raise message.gsub(/^ /, '')
|
|
129
|
+
end
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
def generate_mysql_config
|
|
133
|
+
copy 'config/database.mysql.yml', 'config/database.yml'
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
def generate_sqlite3_config
|
|
137
|
+
copy 'config/database.sqlite3.yml', 'config/database.yml'
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def clobber_db_config
|
|
141
|
+
rm 'config/database.yml'
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def clobber_sqlite_data
|
|
145
|
+
rm_rf 'db/*.db'
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
def generate_purchase
|
|
149
|
+
generator = "ruby script/generate rspec_scaffold purchase order_id:integer created_at:datetime amount:decimal keyword:string description:text --force"
|
|
150
|
+
notice = <<-EOF
|
|
151
|
+
#####################################################
|
|
152
|
+
#{generator}
|
|
153
|
+
#####################################################
|
|
154
|
+
EOF
|
|
155
|
+
puts notice.gsub(/^ /, '')
|
|
156
|
+
result = silent_sh(generator)
|
|
157
|
+
if error_code? || result =~ /not/
|
|
158
|
+
raise "rspec_scaffold failed. #{result}"
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
def purchase_migration_version
|
|
163
|
+
"005"
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def migrate_up
|
|
167
|
+
rake_sh "db:migrate"
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def destroy_purchase
|
|
171
|
+
migrate_down
|
|
172
|
+
rm_generated_purchase_files
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
def migrate_down
|
|
176
|
+
notice = <<-EOF
|
|
177
|
+
#####################################################
|
|
178
|
+
Migrating down and reverting config/routes.rb
|
|
179
|
+
#####################################################
|
|
180
|
+
EOF
|
|
181
|
+
puts notice.gsub(/^ /, '')
|
|
182
|
+
rake_sh "db:migrate", 'VERSION' => (purchase_migration_version.to_i - 1)
|
|
183
|
+
output = silent_sh("cp config/routes.rb.bak config/routes.rb")
|
|
184
|
+
raise "revert failed: #{output}" if error_code?
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def rm_generated_purchase_files
|
|
188
|
+
puts "#####################################################"
|
|
189
|
+
puts "Removing generated files:"
|
|
190
|
+
generated_files = %W{
|
|
191
|
+
app/helpers/purchases_helper.rb
|
|
192
|
+
app/models/purchase.rb
|
|
193
|
+
app/controllers/purchases_controller.rb
|
|
194
|
+
app/views/purchases
|
|
195
|
+
db/migrate/#{purchase_migration_version}_create_purchases.rb
|
|
196
|
+
spec/models/purchase_spec.rb
|
|
197
|
+
spec/helpers/purchases_helper_spec.rb
|
|
198
|
+
spec/controllers/purchases_controller_spec.rb
|
|
199
|
+
spec/controllers/purchases_routing_spec.rb
|
|
200
|
+
spec/fixtures/purchases.yml
|
|
201
|
+
spec/views/purchases
|
|
202
|
+
}
|
|
203
|
+
generated_files.each do |file|
|
|
204
|
+
rm_rf file
|
|
205
|
+
end
|
|
206
|
+
puts "#####################################################"
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
def generate_login_controller
|
|
210
|
+
generator = "ruby script/generate rspec_controller login signup login logout --force"
|
|
211
|
+
notice = <<-EOF
|
|
212
|
+
#####################################################
|
|
213
|
+
#{generator}
|
|
214
|
+
#####################################################
|
|
215
|
+
EOF
|
|
216
|
+
puts notice.gsub(/^ /, '')
|
|
217
|
+
result = silent_sh(generator)
|
|
218
|
+
if error_code? || result =~ /not/
|
|
219
|
+
raise "rspec_scaffold failed. #{result}"
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
def rm_generated_login_controller_files
|
|
224
|
+
puts "#####################################################"
|
|
225
|
+
puts "Removing generated files:"
|
|
226
|
+
generated_files = %W{
|
|
227
|
+
app/helpers/login_helper.rb
|
|
228
|
+
app/controllers/login_controller.rb
|
|
229
|
+
app/views/login
|
|
230
|
+
spec/helpers/login_helper_spec.rb
|
|
231
|
+
spec/controllers/login_controller_spec.rb
|
|
232
|
+
spec/views/login
|
|
233
|
+
}
|
|
234
|
+
generated_files.each do |file|
|
|
235
|
+
rm_rf file
|
|
236
|
+
end
|
|
237
|
+
puts "#####################################################"
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
def install_dependencies
|
|
241
|
+
VENDOR_DEPS.each do |dep|
|
|
242
|
+
puts "\nChecking for #{dep[:name]} ..."
|
|
243
|
+
dest = dep[:checkout_path]
|
|
244
|
+
if File.exists?(dest)
|
|
245
|
+
puts "#{dep[:name]} already installed"
|
|
246
|
+
else
|
|
247
|
+
cmd = "svn co #{dep[:url]} #{dest}"
|
|
248
|
+
puts "Installing #{dep[:name]}"
|
|
249
|
+
puts "This may take a while."
|
|
250
|
+
puts cmd
|
|
251
|
+
system(cmd)
|
|
252
|
+
puts "Done!"
|
|
253
|
+
end
|
|
254
|
+
end
|
|
255
|
+
puts
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
def check_dependencies
|
|
259
|
+
VENDOR_DEPS.each do |dep|
|
|
260
|
+
unless File.exist?(dep[:checkout_path])
|
|
261
|
+
raise "There is no checkout of #{dep[:checkout_path]}. Please run rake install_dependencies"
|
|
262
|
+
end
|
|
263
|
+
# Verify that the current working copy is right
|
|
264
|
+
if `svn info #{dep[:checkout_path]}` =~ /^URL: (.*)/
|
|
265
|
+
actual_url = $1
|
|
266
|
+
if actual_url != dep[:url]
|
|
267
|
+
raise "Your working copy in #{dep[:checkout_path]} points to \n#{actual_url}\nIt has moved to\n#{dep[:url]}\nPlease delete the working copy and run rake install_dependencies"
|
|
268
|
+
end
|
|
269
|
+
end
|
|
270
|
+
end
|
|
271
|
+
end
|
|
272
|
+
|
|
273
|
+
def update_dependencies
|
|
274
|
+
check_dependencies
|
|
275
|
+
VENDOR_DEPS.each do |dep|
|
|
276
|
+
next if dep[:tagged?] #
|
|
277
|
+
puts "\nUpdating #{dep[:name]} ..."
|
|
278
|
+
dest = dep[:checkout_path]
|
|
279
|
+
system("svn cleanup #{dest}")
|
|
280
|
+
cmd = "svn up #{dest}"
|
|
281
|
+
puts cmd
|
|
282
|
+
system(cmd)
|
|
283
|
+
puts "Done!"
|
|
284
|
+
end
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
VENDOR_DEPS = [
|
|
288
|
+
{
|
|
289
|
+
:checkout_path => "vendor/rails/2.0.2",
|
|
290
|
+
:name => "rails 2.0.2",
|
|
291
|
+
:url => "http://dev.rubyonrails.org/svn/rails/tags/rel_2-0-2",
|
|
292
|
+
:tagged? => true
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
:checkout_path => "vendor/rails/1.2.6",
|
|
296
|
+
:name => "rails 1.2.6",
|
|
297
|
+
:url => "http://dev.rubyonrails.org/svn/rails/tags/rel_1-2-6",
|
|
298
|
+
:tagged? => true
|
|
299
|
+
},
|
|
300
|
+
{
|
|
301
|
+
:checkout_path => "vendor/rails/1.2.3",
|
|
302
|
+
:name => "rails 1.2.3",
|
|
303
|
+
:url => "http://dev.rubyonrails.org/svn/rails/tags/rel_1-2-3",
|
|
304
|
+
:tagged? => true
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
:checkout_path => "vendor/rails/edge",
|
|
308
|
+
:name => "edge rails",
|
|
309
|
+
:url => "http://svn.rubyonrails.org/rails/trunk",
|
|
310
|
+
:tagged? => false
|
|
311
|
+
}
|
|
312
|
+
]
|
|
313
|
+
end
|