specjour 0.7.0 → 2.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (49) hide show
  1. checksums.yaml +7 -0
  2. data/History.markdown +12 -0
  3. data/README.markdown +24 -1
  4. data/Rakefile +12 -12
  5. data/bin/specjour +3 -1
  6. data/lib/specjour/cli.rb +86 -110
  7. data/lib/specjour/colors.rb +23 -0
  8. data/lib/specjour/configuration.rb +47 -91
  9. data/lib/specjour/connection.rb +69 -20
  10. data/lib/specjour/cpu.rb +4 -0
  11. data/lib/specjour/fork.rb +1 -1
  12. data/lib/specjour/formatter.rb +153 -0
  13. data/lib/specjour/listener.rb +181 -0
  14. data/lib/specjour/loader.rb +55 -119
  15. data/lib/specjour/logger.rb +34 -0
  16. data/lib/specjour/plugin/base.rb +61 -0
  17. data/lib/specjour/plugin/manager.rb +28 -0
  18. data/lib/specjour/plugin/rails.rb +47 -0
  19. data/lib/specjour/plugin/rails_v3.rb +23 -0
  20. data/lib/specjour/plugin/rails_v4.rb +25 -0
  21. data/lib/specjour/plugin/rspec.rb +160 -0
  22. data/lib/specjour/plugin/rspec_v2.rb +53 -0
  23. data/lib/specjour/plugin/rspec_v3.rb +59 -0
  24. data/lib/specjour/plugin/ssh.rb +24 -0
  25. data/lib/specjour/plugin.rb +4 -0
  26. data/lib/specjour/printer.rb +235 -67
  27. data/lib/specjour/protocol.rb +13 -6
  28. data/lib/specjour/rspec_formatter.rb +17 -0
  29. data/lib/specjour/rsync_daemon.rb +6 -3
  30. data/lib/specjour/socket_helper.rb +26 -10
  31. data/lib/specjour/worker.rb +36 -62
  32. data/lib/specjour.rb +50 -24
  33. data/lib/specjour_plugin.rb +5 -0
  34. metadata +52 -84
  35. data/lib/specjour/cucumber/distributed_formatter.rb +0 -82
  36. data/lib/specjour/cucumber/final_report.rb +0 -83
  37. data/lib/specjour/cucumber/preloader.rb +0 -22
  38. data/lib/specjour/cucumber/runner.rb +0 -15
  39. data/lib/specjour/cucumber.rb +0 -16
  40. data/lib/specjour/db_scrub.rb +0 -56
  41. data/lib/specjour/dispatcher.rb +0 -170
  42. data/lib/specjour/manager.rb +0 -174
  43. data/lib/specjour/rspec/distributed_formatter.rb +0 -50
  44. data/lib/specjour/rspec/final_report.rb +0 -73
  45. data/lib/specjour/rspec/marshalable_exception.rb +0 -19
  46. data/lib/specjour/rspec/preloader.rb +0 -15
  47. data/lib/specjour/rspec/runner.rb +0 -14
  48. data/lib/specjour/rspec/shared_example_group_ext.rb +0 -9
  49. data/lib/specjour/rspec.rb +0 -17
data/lib/specjour.rb CHANGED
@@ -1,27 +1,33 @@
1
- require 'drb'
1
+ require 'tmpdir'
2
2
 
3
3
  autoload :URI, 'uri'
4
4
  autoload :Forwardable, 'forwardable'
5
- autoload :GServer, 'gserver'
6
5
  autoload :Timeout, 'timeout'
7
6
  autoload :Benchmark, 'benchmark'
8
7
  autoload :Logger, 'logger'
9
8
  autoload :Socket, 'socket'
10
9
  autoload :StringIO, 'stringio'
11
10
  autoload :OpenStruct, 'ostruct'
11
+ autoload :Pathname, 'pathname'
12
12
 
13
13
  module Specjour
14
14
  autoload :CLI, 'specjour/cli'
15
+ autoload :Colors, 'specjour/colors'
15
16
  autoload :CPU, 'specjour/cpu'
16
17
  autoload :Configuration, 'specjour/configuration'
17
18
  autoload :Connection, 'specjour/connection'
18
19
  autoload :DbScrub, 'specjour/db_scrub'
19
20
  autoload :Dispatcher, 'specjour/dispatcher'
20
21
  autoload :Fork, 'specjour/fork'
22
+ autoload :Formatter, 'specjour/formatter'
23
+ autoload :Listener, 'specjour/listener'
24
+ autoload :Logger, 'specjour/logger'
21
25
  autoload :Loader, 'specjour/loader'
22
26
  autoload :Manager, 'specjour/manager'
27
+ autoload :Plugin, 'specjour/plugin'
23
28
  autoload :Printer, 'specjour/printer'
24
29
  autoload :Protocol, 'specjour/protocol'
30
+ autoload :RspecFormatter, "specjour/rspec_formatter"
25
31
  autoload :RsyncDaemon, 'specjour/rsync_daemon'
26
32
  autoload :SocketHelper, 'specjour/socket_helper'
27
33
  autoload :Worker, 'specjour/worker'
@@ -29,30 +35,49 @@ module Specjour
29
35
  autoload :Cucumber, 'specjour/cucumber'
30
36
  autoload :RSpec, 'specjour/rspec'
31
37
 
32
- VERSION ||= "0.7.0"
38
+ VERSION ||= "2.0.0.rc1"
33
39
  HOOKS_PATH ||= "./.specjour/hooks.rb"
34
40
  PROGRAM_NAME ||= $PROGRAM_NAME # keep a reference of the original program name
41
+ Time = Time.dup
35
42
 
36
43
  GC.copy_on_write_friendly = true if GC.respond_to?(:copy_on_write_friendly=)
37
44
 
38
45
  class Error < StandardError; end
39
46
 
47
+ def self.benchmark(msg)
48
+ $stderr.print "#{msg}... "
49
+ start_time = Time.now
50
+ yield
51
+ ensure
52
+ $stderr.puts "completed in #{Time.now - start_time}s"
53
+ end
54
+
55
+ def self.configuration(provided_config=nil)
56
+ if provided_config
57
+ @configuration = provided_config
58
+ elsif !instance_variable_defined?(:@configuration)
59
+ @configuration = Configuration.new
60
+ else
61
+ @configuration
62
+ end
63
+ end
64
+
40
65
  def self.interrupted?
41
66
  @interrupted
42
67
  end
43
68
 
44
69
  def self.interrupted=(bool)
45
70
  @interrupted = bool
46
- if bool
47
- will_quit(:RSpec)
48
- will_quit(:Cucumber)
49
- end
50
71
  end
51
72
 
52
- def self.will_quit(framework)
53
- if Object.const_defined?(framework)
54
- framework = Object.const_get(framework)
55
- framework.wants_to_quit = true if framework.respond_to?(:wants_to_quit=)
73
+ def self.load_custom_hooks
74
+ load HOOKS_PATH if File.exists?(HOOKS_PATH)
75
+ end
76
+
77
+ def self.load_plugins
78
+ $LOAD_PATH.each do |load_path|
79
+ file = File.expand_path("specjour_plugin.rb", load_path)
80
+ require file if File.exists?(file)
56
81
  end
57
82
  end
58
83
 
@@ -60,30 +85,31 @@ module Specjour
60
85
  @logger ||= new_logger
61
86
  end
62
87
 
63
- def self.new_logger(level = Logger::UNKNOWN)
64
- @logger = Logger.new $stderr
88
+ def self.new_logger(level = ::Logger::UNKNOWN, output=nil)
89
+ @logger = ::Logger.new output || $stderr
65
90
  @logger.level = level
91
+ @logger.formatter = lambda do |severity, datetime, progname, message|
92
+ "[#{severity} #{datetime.strftime("%I:%M:%S")}] #{progname}: #{message}\n"
93
+ end
66
94
  @logger
67
95
  end
68
96
 
69
- def self.log?
70
- logger.level != Logger::UNKNOWN
71
- end
72
-
73
- def self.load_custom_hooks
74
- load HOOKS_PATH if File.exists?(HOOKS_PATH)
97
+ def self.plugin_manager
98
+ @plugin_manager ||= Specjour::Plugin::Manager.new
75
99
  end
76
100
 
77
101
  def self.trap_interrupt
78
102
  Signal.trap('INT') do
79
103
  self.interrupted = true
80
- abort("\n")
104
+ plugin_manager.send_task(:interrupted!)
81
105
  end
82
106
  end
83
107
 
84
- def self.benchmark(msg, &block)
85
- print "#{msg}... "
86
- time = Benchmark.realtime &block
87
- puts "completed in #{time}s"
108
+ def self.trap_interrupt_with_exit
109
+ trap_interrupt
110
+ old_int = Signal.trap("INT") do
111
+ old_int.call()
112
+ abort("ABORTING\n")
113
+ end
88
114
  end
89
115
  end
@@ -0,0 +1,5 @@
1
+ require "specjour/plugin/rails"
2
+ require "specjour/plugin/rspec"
3
+
4
+ Specjour.plugin_manager.register_plugin Specjour::Plugin::Rails.new
5
+ Specjour.plugin_manager.register_plugin Specjour::Plugin::RSpec.new
metadata CHANGED
@@ -1,194 +1,162 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: specjour
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
5
- prerelease:
4
+ version: 2.0.0.rc1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Sandro Turriate
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-11-21 00:00:00.000000000 Z
11
+ date: 2017-01-24 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: dnssd
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - '='
20
18
  - !ruby/object:Gem::Version
21
- version: 2.0.0
19
+ version: 2.0.1
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - '='
28
25
  - !ruby/object:Gem::Version
29
- version: 2.0.0
30
- - !ruby/object:Gem::Dependency
31
- name: thor
32
- requirement: !ruby/object:Gem::Requirement
33
- none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: 0.14.0
38
- type: :runtime
39
- prerelease: false
40
- version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
- requirements:
43
- - - ! '>='
44
- - !ruby/object:Gem::Version
45
- version: 0.14.0
26
+ version: 2.0.1
46
27
  - !ruby/object:Gem::Dependency
47
28
  name: rspec
48
29
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
30
  requirements:
51
31
  - - '='
52
32
  - !ruby/object:Gem::Version
53
- version: '2.12'
33
+ version: '2.13'
54
34
  type: :development
55
35
  prerelease: false
56
36
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
37
  requirements:
59
38
  - - '='
60
39
  - !ruby/object:Gem::Version
61
- version: '2.12'
40
+ version: '2.13'
62
41
  - !ruby/object:Gem::Dependency
63
42
  name: rr
64
43
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
44
  requirements:
67
- - - ! '>='
45
+ - - ">="
68
46
  - !ruby/object:Gem::Version
69
47
  version: '0'
70
48
  type: :development
71
49
  prerelease: false
72
50
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
51
  requirements:
75
- - - ! '>='
52
+ - - ">="
76
53
  - !ruby/object:Gem::Version
77
54
  version: '0'
78
55
  - !ruby/object:Gem::Dependency
79
- name: cucumber
56
+ name: yard
80
57
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
58
  requirements:
83
- - - ! '>='
59
+ - - ">="
84
60
  - !ruby/object:Gem::Version
85
- version: 1.2.1
61
+ version: '0'
86
62
  type: :development
87
63
  prerelease: false
88
64
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
65
  requirements:
91
- - - ! '>='
66
+ - - ">="
92
67
  - !ruby/object:Gem::Version
93
- version: 1.2.1
68
+ version: '0'
94
69
  - !ruby/object:Gem::Dependency
95
- name: yard
70
+ name: byebug
96
71
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
72
  requirements:
99
- - - ! '>='
73
+ - - '='
100
74
  - !ruby/object:Gem::Version
101
- version: '0'
75
+ version: 2.6.0
102
76
  type: :development
103
77
  prerelease: false
104
78
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
79
  requirements:
107
- - - ! '>='
80
+ - - '='
108
81
  - !ruby/object:Gem::Version
109
- version: '0'
82
+ version: 2.6.0
110
83
  - !ruby/object:Gem::Dependency
111
- name: debugger
84
+ name: fakefs
112
85
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
86
  requirements:
115
- - - ! '>='
87
+ - - ">="
116
88
  - !ruby/object:Gem::Version
117
89
  version: '0'
118
90
  type: :development
119
91
  prerelease: false
120
92
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
93
  requirements:
123
- - - ! '>='
94
+ - - ">="
124
95
  - !ruby/object:Gem::Version
125
96
  version: '0'
126
- description: ! " Specjour splits your RSpec suite across multiple machines, and
127
- multiple\n cores per machine, to run super-parallel-fast! Also works with Cucumber.\n"
97
+ description: |2
98
+ Specjour splits your RSpec suite across multiple machines, and multiple
99
+ cores per machine, to run super-parallel-fast! Also works with Cucumber.
128
100
  email: sandro.turriate@gmail.com
129
101
  executables:
130
102
  - specjour
131
103
  extensions: []
132
104
  extra_rdoc_files: []
133
105
  files:
106
+ - History.markdown
107
+ - MIT_LICENSE
108
+ - README.markdown
109
+ - Rakefile
110
+ - bin/specjour
111
+ - lib/specjour.rb
134
112
  - lib/specjour/cli.rb
113
+ - lib/specjour/colors.rb
135
114
  - lib/specjour/configuration.rb
136
115
  - lib/specjour/connection.rb
137
116
  - lib/specjour/cpu.rb
138
- - lib/specjour/cucumber/distributed_formatter.rb
139
- - lib/specjour/cucumber/final_report.rb
140
- - lib/specjour/cucumber/preloader.rb
141
- - lib/specjour/cucumber/runner.rb
142
- - lib/specjour/cucumber.rb
143
- - lib/specjour/db_scrub.rb
144
- - lib/specjour/dispatcher.rb
145
117
  - lib/specjour/fork.rb
118
+ - lib/specjour/formatter.rb
119
+ - lib/specjour/listener.rb
146
120
  - lib/specjour/loader.rb
147
- - lib/specjour/manager.rb
121
+ - lib/specjour/logger.rb
122
+ - lib/specjour/plugin.rb
123
+ - lib/specjour/plugin/base.rb
124
+ - lib/specjour/plugin/manager.rb
125
+ - lib/specjour/plugin/rails.rb
126
+ - lib/specjour/plugin/rails_v3.rb
127
+ - lib/specjour/plugin/rails_v4.rb
128
+ - lib/specjour/plugin/rspec.rb
129
+ - lib/specjour/plugin/rspec_v2.rb
130
+ - lib/specjour/plugin/rspec_v3.rb
131
+ - lib/specjour/plugin/ssh.rb
148
132
  - lib/specjour/printer.rb
149
133
  - lib/specjour/protocol.rb
150
- - lib/specjour/rspec/distributed_formatter.rb
151
- - lib/specjour/rspec/final_report.rb
152
- - lib/specjour/rspec/marshalable_exception.rb
153
- - lib/specjour/rspec/preloader.rb
154
- - lib/specjour/rspec/runner.rb
155
- - lib/specjour/rspec/shared_example_group_ext.rb
156
- - lib/specjour/rspec.rb
134
+ - lib/specjour/rspec_formatter.rb
157
135
  - lib/specjour/rsync_daemon.rb
158
136
  - lib/specjour/socket_helper.rb
159
137
  - lib/specjour/worker.rb
160
- - lib/specjour.rb
161
- - MIT_LICENSE
162
- - README.markdown
163
- - History.markdown
164
- - Rakefile
165
- - bin/specjour
138
+ - lib/specjour_plugin.rb
166
139
  homepage: https://github.com/sandro/specjour
167
140
  licenses: []
141
+ metadata: {}
168
142
  post_install_message:
169
143
  rdoc_options: []
170
144
  require_paths:
171
145
  - lib
172
146
  required_ruby_version: !ruby/object:Gem::Requirement
173
- none: false
174
147
  requirements:
175
- - - ! '>='
148
+ - - ">="
176
149
  - !ruby/object:Gem::Version
177
150
  version: '0'
178
- segments:
179
- - 0
180
- hash: -1349309289117832663
181
151
  required_rubygems_version: !ruby/object:Gem::Requirement
182
- none: false
183
152
  requirements:
184
- - - ! '>='
153
+ - - ">"
185
154
  - !ruby/object:Gem::Version
186
- version: 1.3.6
155
+ version: 1.3.1
187
156
  requirements: []
188
157
  rubyforge_project:
189
- rubygems_version: 1.8.23
158
+ rubygems_version: 2.4.5
190
159
  signing_key:
191
- specification_version: 3
160
+ specification_version: 4
192
161
  summary: Distribute your spec suite amongst your LAN via Bonjour.
193
162
  test_files: []
194
- has_rdoc:
@@ -1,82 +0,0 @@
1
- module Specjour::Cucumber
2
- class DistributedFormatter < ::Cucumber::Formatter::Progress
3
-
4
- def initialize(step_mother, io, options)
5
- @step_mother = step_mother
6
- @io = io
7
- @options = options
8
- @failing_scenarios = []
9
- @step_summary = []
10
- end
11
-
12
- def after_features(features)
13
- print_summary
14
- step_mother.scenarios.clear
15
- step_mother.steps.clear
16
- end
17
-
18
- def prepare_failures
19
- step_mother.scenarios(:failed).select do |s|
20
- s.is_a?(Cucumber::Ast::Scenario) || s.is_a?(Cucumber::Ast::OutlineTable::ExampleRow)
21
- end.map do |failure|
22
- if failure.is_a?(Cucumber::Ast::Scenario)
23
- failure
24
- elsif failure.is_a?(Cucumber::Ast::OutlineTable::ExampleRow)
25
- failure.scenario_outline
26
- end
27
- end.each do |failure|
28
- @failing_scenarios << format_string("cucumber " + failure.file_colon_line, :failed) +
29
- format_string(" # Scenario: " + failure.name, :comment)
30
- end
31
- end
32
-
33
- def prepare_elements(elements, status, kind)
34
- output = ''
35
- if elements.any?
36
- output += format_string("\n(::) #{status} #{kind} (::)\n", status)
37
- output += "\n"
38
- end
39
-
40
- elements.each_with_index do |element, i|
41
- if status == :failed
42
- output += print_exception(element.exception, status, 0)
43
- else
44
- output += format_string(element.backtrace_line, status)
45
- output += "\n"
46
- end
47
- @step_summary << output unless output.nil? || output.empty?
48
- end
49
- end
50
-
51
- def prepare_steps(type)
52
- prepare_elements(step_mother.steps(type), type, 'steps')
53
- end
54
-
55
- def print_exception(e, status, indent)
56
- format_string("#{e.message} (#{e.class})\n#{e.backtrace.join("\n")}".indent(indent), status)
57
- end
58
-
59
- def print_summary
60
- prepare_failures
61
- prepare_steps(:failed)
62
- prepare_steps(:undefined)
63
-
64
- @io.send_message(:cucumber_summary=, to_hash)
65
- end
66
-
67
- OUTCOMES = [:failed, :skipped, :undefined, :pending, :passed]
68
-
69
- def to_hash
70
- hash = {}
71
- [:scenarios, :steps].each do |type|
72
- hash[type] = {}
73
- OUTCOMES.each do |outcome|
74
- hash[type][outcome] = step_mother.send(type, outcome).size
75
- end
76
- end
77
- hash.merge!(:failing_scenarios => @failing_scenarios, :step_summary => @step_summary)
78
- hash
79
- end
80
-
81
- end
82
- end
@@ -1,83 +0,0 @@
1
- module Specjour
2
- module Cucumber
3
- class Summarizer
4
- attr_reader :duration, :failing_scenarios, :step_summary
5
- def initialize
6
- @duration = 0.0
7
- @failing_scenarios = []
8
- @step_summary = []
9
- @scenarios = Hash.new(0)
10
- @steps = Hash.new(0)
11
- end
12
-
13
- def increment(category, type, count)
14
- current = instance_variable_get("@#{category}")
15
- current[type] += count
16
- end
17
-
18
- def add(stats)
19
- stats.each do |category, hash|
20
- if category == :failing_scenarios
21
- @failing_scenarios += hash
22
- elsif category == :step_summary
23
- @step_summary += hash
24
- elsif category == :duration
25
- @duration = hash.to_f if duration < hash.to_f
26
- else
27
- hash.each do |type, count|
28
- increment(category, type, count)
29
- end
30
- end
31
- end
32
- end
33
-
34
- def scenarios(status=nil)
35
- length = status ? @scenarios[status] : @scenarios.inject(0) {|h,(k,v)| h += v}
36
- any = @scenarios[status] > 0 if status
37
- OpenStruct.new(:length => length , :any? => any)
38
- end
39
-
40
- def steps(status=nil)
41
- length = status ? @steps[status] : @steps.inject(0) {|h,(k,v)| h += v}
42
- any = @steps[status] > 0 if status
43
- OpenStruct.new(:length => length , :any? => any)
44
- end
45
- end
46
-
47
- class FinalReport
48
- include ::Cucumber::Formatter::Console
49
- def initialize
50
- @io = $stdout
51
- @features = []
52
- @summarizer = Summarizer.new
53
- end
54
-
55
- def add(stats)
56
- @summarizer.add(stats)
57
- end
58
-
59
- def exit_status
60
- @summarizer.failing_scenarios.empty?
61
- end
62
-
63
- def summarize
64
- if @summarizer.steps(:failed).any?
65
- puts "\n\n"
66
- @summarizer.step_summary.each {|f| puts f }
67
- end
68
-
69
- if @summarizer.failing_scenarios.any?
70
- puts "\n\n"
71
- puts format_string("Failing Scenarios:", :failed)
72
- @summarizer.failing_scenarios.each {|f| puts f }
73
- end
74
-
75
- default_format = lambda {|status_count, status| format_string(status_count, status)}
76
- puts
77
- puts scenario_summary(@summarizer, &default_format)
78
- puts step_summary(@summarizer, &default_format)
79
- puts format_duration(@summarizer.duration) if @summarizer.duration
80
- end
81
- end
82
- end
83
- end
@@ -1,22 +0,0 @@
1
- module Specjour
2
- module Cucumber
3
- module Preloader
4
- def self.load(paths, output)
5
- Specjour.benchmark("Loading Cucumber Environment") do
6
- require 'cucumber' unless defined?(::Cucumber::Cli)
7
- args = paths.unshift '--format', 'Specjour::Cucumber::DistributedFormatter'
8
- cli = ::Cucumber::Cli::Main.new(args, output)
9
-
10
- configuration = cli.configuration
11
- options = configuration.instance_variable_get(:@options)
12
- options.instance_variable_set(:@skip_profile_information, true)
13
-
14
- runtime = ::Cucumber::Runtime.new(configuration)
15
- runtime.send :load_step_definitions
16
- runtime.send :fire_after_configuration_hook
17
- Cucumber.runtime = runtime
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,15 +0,0 @@
1
- module Specjour
2
- module Cucumber
3
- module Runner
4
- def self.run(feature)
5
- Cucumber.runtime.instance_eval do
6
- @loader = nil
7
- @configuration.parse!([feature])
8
- tree_walker = @configuration.build_tree_walker(self)
9
- self.visitor = tree_walker
10
- tree_walker.visit_features features
11
- end
12
- end
13
- end
14
- end
15
- end
@@ -1,16 +0,0 @@
1
- module Specjour
2
- module Cucumber
3
- begin
4
- require 'cucumber/formatter/progress'
5
-
6
- require 'specjour/cucumber/distributed_formatter'
7
- require 'specjour/cucumber/final_report'
8
- require 'specjour/cucumber/preloader'
9
- require 'specjour/cucumber/runner'
10
- rescue LoadError
11
- end
12
-
13
- class << self; attr_accessor :runtime; end
14
-
15
- end
16
- end
@@ -1,56 +0,0 @@
1
- # encoding: utf-8
2
- module Specjour
3
- module DbScrub
4
-
5
- begin
6
- require 'rake'
7
- extend Rake::DSL if defined?(Rake::DSL)
8
- if defined?(Rails)
9
- Rake::Task.define_task(:environment) { }
10
- load 'rails/tasks/misc.rake'
11
- load 'active_record/railties/databases.rake'
12
- end
13
- rescue LoadError
14
- Specjour.logger.debug "Failed to load Rails rake tasks"
15
- end
16
-
17
- extend self
18
-
19
- def drop
20
- Rake::Task['db:drop'].invoke
21
- end
22
-
23
- def scrub
24
- connect_to_database
25
- puts "Resetting database #{ENV['TEST_ENV_NUMBER']}"
26
- schema_load_task.invoke
27
- end
28
-
29
- protected
30
-
31
- def connect_to_database
32
- ActiveRecord::Base.remove_connection
33
- ActiveRecord::Base.configurations = Rails.application.config.database_configuration
34
- ActiveRecord::Base.establish_connection
35
- connection
36
- rescue # assume the database doesn't exist
37
- Rake::Task['db:create'].invoke
38
- end
39
-
40
- def connection
41
- ActiveRecord::Base.connection
42
- end
43
-
44
- def pending_migrations?
45
- ActiveRecord::Migrator.new(:up, 'db/migrate').pending_migrations.any?
46
- end
47
-
48
- def schema_load_task
49
- Rake::Task[{ :sql => "db:test:load_structure", :ruby => "db:test:load" }[ActiveRecord::Base.schema_format]]
50
- end
51
-
52
- def tables_to_purge
53
- connection.tables - ['schema_migrations']
54
- end
55
- end
56
- end