rspec 0.7.2 → 0.7.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 CHANGED
@@ -1,6 +1,27 @@
1
1
  = RSpec Changelog
2
2
 
3
- == Version 0.7.2 (in SVN)
3
+ == Version 0.7.3 (In SVN)
4
+
5
+ Almost normal bug fix/new feature release.
6
+
7
+ A couple of things you need to change in your rails specs:
8
+ # spec_helper.rb is a little different (see http://rspec.rubyforge.org/upgrade.html)
9
+ # use controller.should_render before OR after the action (controller.should_have_rendered is deprecated)
10
+
11
+ * Applied [#6577] messy mock backtrace when frozen to edge rails (patch from Jay Levitt)
12
+ * Fixed [#6674] rspec_on_rails fails on @session deprecation warning
13
+ * Fixed [#6780] routing() was failing...fix included - works for 1.1.6 and edge (1.2)
14
+ * Fixed [#6835] bad message with arbitrary predicate
15
+ * Added [#6731] Partial templates rendered
16
+ * Fixed [#6713] helper methods not rendered in view tests?
17
+ * Fixed [#6707] cannot run controller / helper tests via rails_spec or spec only works with rake
18
+ * Applied [#6417] lambda {...}.should_change(receiver, :message) (patch from Wilson Bilkovich)
19
+ * Eliminated dependency on ZenTest
20
+ * Fixed [#6650] Reserved characters in the TextMate bundle break svn on Win32
21
+ * Fixed [#6643] script/generate rspec_controller: invalid symbol generation for 'controller_name' for *modularized* controllers
22
+ * The script/rails_spec command has been moved to bin/drbspec in RSpec core (installed by the gem)
23
+
24
+ == Version 0.7.2
4
25
 
5
26
  This release introduces a brand new RSpec bundle for TextMate, plus some small bugfixes.
6
27
 
data/Rakefile CHANGED
@@ -36,7 +36,7 @@ Spec::Rake::SpecTask.new do |t|
36
36
  t.spec_opts = ['--diff','--color','--backtrace']
37
37
  t.rcov = true
38
38
  t.rcov_dir = 'doc/output/coverage'
39
- t.rcov_opts = ['--exclude', 'spec\/spec,bin\/spec,examples']
39
+ t.rcov_opts = ['--exclude', 'spec\/spec,bin\/spec,bin\/drbspec,examples']
40
40
  end
41
41
 
42
42
  desc "Run all failing examples"
@@ -48,7 +48,7 @@ desc 'Verify that no warnings occur'
48
48
  task :verify_warnings do
49
49
  `ruby -w #{File.dirname(__FILE__) + '/bin/spec'} --help 2> warnings.txt`
50
50
  warnings = File.open('warnings.txt').read
51
- File.rm 'warnings.txt'
51
+ File.rm 'warnings.txt' rescue nil
52
52
  raise "There were warnings:\n#{warnings}" if warnings =~ /warning/n
53
53
  end
54
54
 
@@ -92,9 +92,9 @@ spec = Gem::Specification.new do |s|
92
92
  s.test_files = Dir.glob('test/*_test.rb')
93
93
  s.require_path = 'lib'
94
94
  s.autorequire = 'spec'
95
- s.bindir = "bin"
96
- s.executables = ["spec"]
97
- s.default_executable = "spec"
95
+ s.bindir = 'bin'
96
+ s.executables = ['spec', 'drbspec']
97
+ s.default_executable = 'spec'
98
98
  s.author = ["Steven Baker", "Aslak Hellesoy", "Dave Astels", "David Chelimsky", "Brian Takita"]
99
99
  s.email = "rspec-devel@rubyforge.org"
100
100
  s.homepage = "http://rspec.rubyforge.org"
@@ -159,7 +159,7 @@ task :touch_revision_storing_files do
159
159
  end
160
160
  end
161
161
 
162
- task :release => [:clobber, :verify_committed, :verify_user, :verify_password, :spec, :publish_packages, :tag, :publish_website, :publish_news]
162
+ task :release => [:clobber, :verify_committed, :verify_user, :spec, :publish_packages, :tag, :publish_website, :publish_news]
163
163
 
164
164
  desc "Verifies that there is no uncommitted code"
165
165
  task :verify_committed do
@@ -209,10 +209,6 @@ task :verify_user do
209
209
  raise "RUBYFORGE_USER environment variable not set!" unless ENV['RUBYFORGE_USER']
210
210
  end
211
211
 
212
- task :verify_password do
213
- raise "RUBYFORGE_PASSWORD environment variable not set!" unless ENV['RUBYFORGE_PASSWORD']
214
- end
215
-
216
212
  desc "Upload Website to RubyForge"
217
213
  task :publish_website => [:verify_user, :website] do
218
214
  publisher = Rake::SshDirPublisher.new(
@@ -235,7 +231,7 @@ end
235
231
  task :package => :package_tmbundle
236
232
 
237
233
  desc "Publish gem+tgz+zip on RubyForge. You must make sure lib/version.rb is aligned with the CHANGELOG file"
238
- task :publish_packages => [:verify_user, :verify_password, :package] do
234
+ task :publish_packages => [:verify_user, :package] do
239
235
  require 'meta_project'
240
236
  require 'rake/contrib/xforge'
241
237
  release_files = FileList[
@@ -255,7 +251,7 @@ task :publish_packages => [:verify_user, :verify_password, :package] do
255
251
  end
256
252
 
257
253
  desc "Publish news on RubyForge"
258
- task :publish_news => [:verify_user, :verify_password] do
254
+ task :publish_news => [:verify_user] do
259
255
  require 'meta_project'
260
256
  require 'rake/contrib/xforge'
261
257
  Rake::XForge::NewsPublisher.new(MetaProject::Project::XForge::RubyForge.new(PKG_NAME)) do |news|
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env ruby
2
+ require File.expand_path(File.dirname(__FILE__) + "/../lib/spec")
3
+ ::Spec::Runner::DrbCommandLine.run(ARGV, STDERR, STDOUT)
data/bin/spec CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- $LOAD_PATH.push File.dirname(__FILE__) + "/../lib"
3
- require File.expand_path(File.dirname(__FILE__) + "/../lib/spec") # better stack traces this way
2
+ # require File.expand_path(File.dirname(__FILE__) + "/../lib/spec")
3
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
4
+ require 'spec'
4
5
  ::Spec::Runner::CommandLine.run(ARGV, STDERR, STDOUT, true, true)
5
-
@@ -11,4 +11,5 @@ class Class; def inspect_for_expectation_not_met_error; "<#{name}>" end end
11
11
  class Proc; def inspect_for_expectation_not_met_error; "<Proc>" end end
12
12
  class Array; def inspect_for_expectation_not_met_error; inspect end end
13
13
  class String; def inspect_for_expectation_not_met_error; inspect end end
14
- class Numeric; def inspect_for_expectation_not_met_error; inspect end end
14
+ class Numeric; def inspect_for_expectation_not_met_error; inspect end end
15
+ class Hash; def inspect_for_expectation_not_met_error; inspect end end
@@ -4,6 +4,121 @@ module Spec
4
4
  def should
5
5
  Should::Should.new self
6
6
  end
7
+
8
+ def should_not
9
+ should.not
10
+ end
11
+
12
+ def should_equal(arg)
13
+ should.equal(arg)
14
+ end
15
+
16
+ def should_not_equal(arg)
17
+ should.not.equal(arg)
18
+ end
19
+
20
+ def should_eql(arg)
21
+ should.eql(arg)
22
+ end
23
+
24
+ def should_not_eql(arg)
25
+ should.not.eql(arg)
26
+ end
27
+
28
+ def should_have(arg)
29
+ should.have(arg)
30
+ end
31
+ alias_method :should_have_exactly, :should_have
32
+
33
+ def should_have_at_least(arg)
34
+ should.have.at_least(arg)
35
+ end
36
+
37
+ def should_have_at_most(arg)
38
+ should.have.at_most(arg)
39
+ end
40
+
41
+ def should_include(arg)
42
+ should.include(arg)
43
+ end
44
+
45
+ def should_not_include(arg)
46
+ should.not.include(arg)
47
+ end
48
+
49
+ def should_change(receiver, message)
50
+ should.change(receiver, message)
51
+ end
52
+
53
+ def should_not_change(receiver, message)
54
+ should.not.change(receiver, message)
55
+ end
56
+
57
+ def should_be(expected = :___no_arg)
58
+ should.be(expected)
59
+ end
60
+
61
+ def should_not_be(expected = :___no_arg)
62
+ should.not.be(expected)
63
+ end
64
+
65
+ def should_satisfy(&block)
66
+ should.satisfy(&block)
67
+ end
68
+
69
+ def should_not_satisfy(&block)
70
+ should.not.satisfy(&block)
71
+ end
72
+
73
+ def should_be_an_instance_of(expected_class)
74
+ should.be.an_instance_of(expected_class)
75
+ end
76
+ alias_method :should_be_instance_of, :should_be_an_instance_of
77
+
78
+ def should_not_be_an_instance_of(expected_class)
79
+ should.not.be.an_instance_of(expected_class)
80
+ end
81
+
82
+ def should_be_a_kind_of(expected_class)
83
+ should.be.a_kind_of(expected_class)
84
+ end
85
+ alias_method :should_be_kind_of, :should_be_a_kind_of
86
+
87
+ def should_not_be_a_kind_of(expected_class)
88
+ should.not.be.a_kind_of(expected_class)
89
+ end
90
+
91
+ def should_respond_to(message)
92
+ should.respond_to(message)
93
+ end
94
+
95
+ def should_not_respond_to(message)
96
+ should.not.respond_to(message)
97
+ end
98
+
99
+ def should_match(expression)
100
+ should.match(expression)
101
+ end
102
+
103
+ def should_not_match(expression)
104
+ should.not.match(expression)
105
+ end
106
+
107
+ def should_raise(exception=Exception, message=nil)
108
+ should.raise(exception, message)
109
+ end
110
+
111
+ def should_not_raise(exception=Exception, message=nil)
112
+ should.not.raise(exception, message)
113
+ end
114
+
115
+ def should_throw(symbol)
116
+ should.throw(symbol)
117
+ end
118
+
119
+ def should_not_throw(symbol=:___this_is_a_symbol_that_will_likely_never_occur___)
120
+ should.not.throw(symbol)
121
+ end
7
122
  end
8
123
  end
9
124
  end
@@ -2,3 +2,4 @@ require 'spec/expectations/should/base'
2
2
  require 'spec/expectations/should/have'
3
3
  require 'spec/expectations/should/not'
4
4
  require 'spec/expectations/should/should'
5
+ require 'spec/expectations/should/change'
@@ -29,6 +29,7 @@ module Spec
29
29
  return Not.new(@target).__send__(original_sym.to_s[4..-1].to_sym, *args, &block)
30
30
  end
31
31
  if original_sym.to_s =~ /^be_/
32
+ @be_seen = true
32
33
  return __send__(original_sym.to_s[3..-1].to_sym, *args, &block)
33
34
  end
34
35
  if original_sym.to_s =~ /^have_/
@@ -0,0 +1,64 @@
1
+ module Spec
2
+ module Expectations
3
+ module Should
4
+ class Change < Base
5
+
6
+ def initialize(target, receiver, message)
7
+ @target = target
8
+ @receiver = receiver
9
+ @message = message
10
+ execute_change
11
+ evaluate_change
12
+ end
13
+
14
+ def execute_change
15
+ @before_change = @receiver.send(@message)
16
+ @target.call
17
+ @after_change = @receiver.send(@message)
18
+ end
19
+
20
+ def evaluate_change
21
+ if @before_change == @after_change
22
+ fail_with_message "#{@message} should have changed, but is still #{@after_change.inspect}"
23
+ end
24
+ end
25
+
26
+ def from(value)
27
+ if @before_change != value
28
+ fail_with_message "#{@message} should have initially been #{value.inspect}, but was #{@before_change.inspect}"
29
+ end
30
+ self
31
+ end
32
+
33
+ def to(value)
34
+ if @after_change != value
35
+ fail_with_message "#{@message} should have been changed to #{value.inspect}, but is now #{@after_change.inspect}"
36
+ end
37
+ self
38
+ end
39
+
40
+ def by(expected_delta)
41
+ if actual_delta != expected_delta
42
+ fail_with_message "#{@message} should have been changed by #{expected_delta}, but was changed by #{actual_delta}"
43
+ end
44
+ self
45
+ end
46
+
47
+ private
48
+ def actual_delta
49
+ @after_change - @before_change
50
+ end
51
+ end
52
+
53
+ class NotChange < Change
54
+ def evaluate_change
55
+ if @before_change != @after_change
56
+ fail_with_message "#{@message} should not have changed, but is now #{@after_change.inspect}"
57
+ end
58
+ end
59
+ end
60
+
61
+ end
62
+ end
63
+ end
64
+
@@ -3,21 +3,13 @@ module Spec
3
3
  module Should
4
4
  class Have < Base
5
5
 
6
- def initialize(target, relativity=:exactly, expected=nil, negate=false)
6
+ def initialize(target, relativity=:exactly, expected=nil)
7
7
  @target = target
8
8
  @expected = expected == :no ? 0 : expected
9
9
  @at_least = (relativity == :at_least)
10
10
  @at_most = (relativity == :at_most)
11
- @negate = negate
12
11
  end
13
12
 
14
- def exactly(expected_number=nil)
15
- @at_least = false
16
- @at_most = false
17
- @expected = expected_number == :no ? 0 : expected_number
18
- self
19
- end
20
-
21
13
  def at_least(expected_number=nil)
22
14
  @at_least = true
23
15
  @at_most = false
@@ -36,17 +28,16 @@ module Spec
36
28
  if @target.respond_to?(sym)
37
29
  fail_with_message(build_message(sym, args)) unless as_specified?(sym, args)
38
30
  elsif @target.respond_to?("has_#{sym}?")
39
- if @negate
40
- return unless @target.send("has_#{sym}?", *args)
41
- fail_with_message msg(sym, args, "should not have")
42
- else
43
- return if @target.send("has_#{sym}?", *args)
44
- fail_with_message msg(sym, args, "should have")
45
- end
31
+ check_has_sym(sym, *args)
46
32
  else
47
33
  raise NoMethodError.new("#{@target.inspect} does not respond to `#{sym}' or `has_#{sym}?'")
48
34
  end
49
35
  end
36
+
37
+ def check_has_sym(sym, *args)
38
+ return if @target.send("has_#{sym}?", *args)
39
+ fail_with_message msg(sym, args, "should have")
40
+ end
50
41
 
51
42
  def msg(sym, args, text)
52
43
  "#{@target.inspect_for_expectation_not_met_error} #{text} #{sym}: #{args.collect{|arg| arg.inspect_for_expectation_not_met_error}.join(', ')}"
@@ -74,6 +65,13 @@ module Spec
74
65
  @target.send(sym, *args)
75
66
  end
76
67
  end
68
+
69
+ class NotHave < Have
70
+ def check_has_sym(sym, *args)
71
+ return unless @target.send("has_#{sym}?", *args)
72
+ fail_with_message msg(sym, args, "should not have")
73
+ end
74
+ end
77
75
  end
78
76
  end
79
77
  end
@@ -9,7 +9,11 @@ module Spec
9
9
  end
10
10
 
11
11
  def have(expected_number=nil)
12
- Have.new(@target, :exactly, expected_number, true)
12
+ NotHave.new(@target, :exactly, expected_number)
13
+ end
14
+
15
+ def change(receiver, message)
16
+ NotChange.new(@target, receiver, message)
13
17
  end
14
18
 
15
19
  def satisfy
@@ -64,7 +68,7 @@ module Spec
64
68
 
65
69
  def __delegate_method_missing_to_target original_sym, actual_sym, *args
66
70
  return unless @target.__send__(actual_sym, *args)
67
- fail_with_message(default_message("should not#{@be_seen ? ' be' : ''} #{original_sym}" + (args.empty? ? '' : (' ' + args.join(', ')))))
71
+ fail_with_message(default_message("should not#{@be_seen ? ' be' : ''} #{original_sym}" + (args.empty? ? '' : ' ' + args[0].inspect)))
68
72
  end
69
73
  end
70
74
  end
@@ -12,6 +12,10 @@ module Spec
12
12
  Have.new(@target, :exactly, expected_number)
13
13
  end
14
14
 
15
+ def change(receiver, message)
16
+ Change.new(@target, receiver, message)
17
+ end
18
+
15
19
  def not
16
20
  Not.new(@target)
17
21
  end
@@ -41,8 +45,7 @@ module Spec
41
45
 
42
46
  def __delegate_method_missing_to_target(original_sym, actual_sym, *args)
43
47
  return if @target.send(actual_sym, *args)
44
- message = default_message("should#{@be_seen ? ' be' : ''} #{original_sym}", args[0])
45
- fail_with_message(message)
48
+ fail_with_message(default_message("should#{@be_seen ? ' be' : ''} #{original_sym}" + (args.empty? ? '' : ' ' + args[0].inspect)))
46
49
  end
47
50
 
48
51
  def match(expected)
@@ -80,4 +83,4 @@ module Spec
80
83
  end
81
84
  end
82
85
  end
83
- end
86
+ end
@@ -63,6 +63,11 @@ module Spec
63
63
 
64
64
  # A message to print to stdout when there are failures.
65
65
  attr_accessor :failure_message
66
+
67
+ # Whether or not to run specs via DRb. Setting this to true may
68
+ # run specs faster, especially in a Rails environment.
69
+ # Defaults to false
70
+ attr_accessor :drb
66
71
 
67
72
  # Explicitly define the list of spec files to be included in a
68
73
  # spec. +list+ is expected to be an array of file names (a
@@ -93,7 +98,7 @@ module Spec
93
98
  end
94
99
 
95
100
  def define
96
- spec_script = File.expand_path(File.dirname(__FILE__) + '/../../../bin/spec')
101
+ spec_script = File.expand_path(File.dirname(__FILE__) + '/../../../bin/' + (drb ? 'drbspec' : 'spec'))
97
102
 
98
103
  lib_path = @libs.join(File::PATH_SEPARATOR)
99
104
  actual_name = Hash === name ? name.keys.first : name
@@ -6,6 +6,7 @@ require 'spec/runner/execution_context'
6
6
  require 'spec/runner/context_runner'
7
7
  require 'spec/runner/option_parser'
8
8
  require 'spec/runner/command_line'
9
+ require 'spec/runner/drb_command_line'
9
10
  require 'spec/runner/backtrace_tweaker'
10
11
  require 'spec/runner/reporter'
11
12
  require 'spec/runner/spec_matcher'
@@ -32,6 +32,7 @@ module Spec
32
32
  line = nil if line =~ /bin\/spec:/
33
33
  line = nil if line =~ /bin\/rcov:/
34
34
  line = nil if line =~ /lib\/rspec_on_rails/
35
+ line = nil if line =~ /vendor\/rails/
35
36
  line = nil if line =~ /script\/rails_spec/
36
37
  # TextMate's Ruby and RSpec plugins
37
38
  line = nil if line =~ /Ruby\.tmbundle\/Support\/tmruby.rb:/
@@ -28,7 +28,8 @@ module Spec
28
28
  my_methods |= context_superclass.methods
29
29
  my_methods
30
30
  end
31
- protected
31
+
32
+ protected
32
33
 
33
34
  def method_missing(method_name, *args)
34
35
  if context_superclass.respond_to?(method_name)
@@ -37,7 +38,8 @@ module Spec
37
38
  super
38
39
  end
39
40
 
40
- private
41
+ private
42
+
41
43
  def setup_block
42
44
  parts = setup_parts.dup
43
45
  add_context_superclass_method(:setup, parts)
@@ -0,0 +1,21 @@
1
+ require "drb/drb"
2
+
3
+ module Spec
4
+ module Runner
5
+ # Facade to run specs by connecting to a DRB server
6
+ class DrbCommandLine
7
+ # Runs specs on a DRB server. Note that this API is similar to that of
8
+ # CommandLine - making it possible for clients to use both interchangeably.
9
+ def self.run(argv, stderr, stdout, exit=false, warn_if_no_files=true)
10
+ begin
11
+ DRb.start_service
12
+ rails_spec_server = DRbObject.new_with_uri("druby://localhost:8989")
13
+ rails_spec_server.run(argv, stderr, stdout)
14
+ rescue DRb::DRbConnError
15
+ stderr.puts "No server is running"
16
+ exit 1 if exit
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -17,6 +17,7 @@ module Spec
17
17
  def violated(message="")
18
18
  raise Spec::Expectations::ExpectationNotMetError.new(message)
19
19
  end
20
+
20
21
  end
21
22
  include InstanceMethods
22
23
  end
@@ -16,11 +16,10 @@ module Spec
16
16
  @listeners = []
17
17
  end
18
18
 
19
- def run(reporter=nil, setup_block=nil, teardown_block=nil, dry_run=false, execution_context=nil)
19
+ def run(reporter, setup_block, teardown_block, dry_run, execution_context)
20
20
  reporter.spec_started(@name) unless reporter.nil?
21
21
  return reporter.spec_finished(@name) if dry_run
22
22
  @@current_spec = self
23
- execution_context = execution_context || ::Spec::Runner::ExecutionContext.new(self)
24
23
  errors = []
25
24
  begin
26
25
  execution_context.instance_exec(&setup_block) unless setup_block.nil?
@@ -40,9 +39,8 @@ module Spec
40
39
  notify_after_teardown errors
41
40
  @@current_spec = nil
42
41
  end
43
-
44
- SpecShouldRaiseHandler.new(@from, @options).handle(errors)
45
42
 
43
+ SpecShouldRaiseHandler.new(@from, @options).handle(errors)
46
44
  reporter.spec_finished(@name, errors.first, failure_location(setup_ok, spec_ok, teardown_ok)) unless reporter.nil?
47
45
  end
48
46
 
@@ -3,9 +3,9 @@ module Spec
3
3
  unless defined? MAJOR
4
4
  MAJOR = 0
5
5
  MINOR = 7
6
- TINY = 2
7
- # RANDOM_TOKEN: 0.868668446220024
8
- REV = "$LastChangedRevision: 1095 $".match(/LastChangedRevision: (\d+)/)[1]
6
+ TINY = 3
7
+ # RANDOM_TOKEN: 0.690694587701409
8
+ REV = "$LastChangedRevision: 1137 $".match(/LastChangedRevision: (\d+)/)[1]
9
9
 
10
10
  STRING = [MAJOR, MINOR, TINY].join('.')
11
11
  FULL_VERSION = "#{STRING} (r#{REV})"
@@ -1,6 +1,6 @@
1
1
  = Find RSpec's home page =
2
2
 
3
- As an agile customer
3
+ As an agile coach
4
4
  I want to easily find RSpec's home page
5
5
  So that I can learn about this fantastic tool
6
6
 
metadata CHANGED
@@ -3,9 +3,9 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: rspec
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.7.2
7
- date: 2006-11-12 00:00:00 +01:00
8
- summary: RSpec-0.7.2 (r1095) - BDD for Ruby http://rspec.rubyforge.org/
6
+ version: 0.7.3
7
+ date: 2006-11-25 00:00:00 +00:00
8
+ summary: RSpec-0.7.3 (r1137) - BDD for Ruby http://rspec.rubyforge.org/
9
9
  require_paths:
10
10
  - lib
11
11
  email: rspec-devel@rubyforge.org
@@ -54,6 +54,7 @@ files:
54
54
  - lib/spec/expectations/extensions/object.rb
55
55
  - lib/spec/expectations/extensions/symbol.rb
56
56
  - lib/spec/expectations/should/base.rb
57
+ - lib/spec/expectations/should/change.rb
57
58
  - lib/spec/expectations/should/have.rb
58
59
  - lib/spec/expectations/should/not.rb
59
60
  - lib/spec/expectations/should/should.rb
@@ -73,6 +74,7 @@ files:
73
74
  - lib/spec/runner/context.rb
74
75
  - lib/spec/runner/context_eval.rb
75
76
  - lib/spec/runner/context_runner.rb
77
+ - lib/spec/runner/drb_command_line.rb
76
78
  - lib/spec/runner/execution_context.rb
77
79
  - lib/spec/runner/formatter.rb
78
80
  - lib/spec/runner/option_parser.rb
@@ -123,6 +125,7 @@ extra_rdoc_files:
123
125
  - CHANGES
124
126
  executables:
125
127
  - spec
128
+ - drbspec
126
129
  extensions: []
127
130
 
128
131
  requirements: []