spec_run_queue 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -1,4 +1,6 @@
1
1
  *.gem
2
+ .rvmrc
2
3
  .bundle
3
4
  Gemfile.lock
4
5
  pkg/*
6
+ SpecRunQueueFile
data/README.markdown CHANGED
@@ -20,26 +20,37 @@ and then runs the command, via backticks, in the shell. Summary results from th
20
20
  NOTIFIERS
21
21
  =========
22
22
 
23
- Notifiers must provide at least one instane method, <tt>notify</tt>, which processes the output from the spec run. Currently, there are two runners, Stdout, and Growl. Stdout prints the results from the run to the terminal window, while growl sends a brief pass/fail summary to growl.
23
+ Notifiers must provide at least one instance method, <tt>notify</tt>, which processes the output from the spec run. Currently, there are two runners, Stdout, and Growl. Stdout prints the results from the run to the terminal window, while growl sends a brief pass/fail summary to growl.
24
24
 
25
25
 
26
+ CONFIGURATION
27
+ =============
28
+
29
+ You can configure per project behavior by creating a SpecRunQueueFile in the root of
30
+ your project. An example of such a file might look like:
31
+
32
+ ```ruby
33
+ SpecRunQueue.configure do |c|
34
+ c.rspec_bin = "bundle exec rspec"
35
+ c.add_notifier :growl, :password => "fizzbuzz"
36
+ end
37
+ ```
38
+
39
+ If you do not provide a configuration, the runner will assume a binary of `rspec` and
40
+ use the stdout notifier.
41
+
26
42
  USAGE
27
43
  =====
28
44
 
29
45
  In your project root, run
30
46
 
31
- redis_runner [1|2]
32
-
33
- where 1 or 2 indicates the major version of rspec you are using for the project.
34
-
47
+ redis_runner
35
48
 
36
49
  In order to trigger a queue run, you need your editor to insert a YAML dump of the instructions described above to the queue.
37
50
 
38
-
39
51
  TODO
40
52
  ====
41
53
 
42
- * Check for Gemfile to bundle exec the spec bin
43
- * Genericify and configure the runner
44
54
  * Include code or a plugin for the vim script I'm using to inject instructions into the queue
45
55
  * Investigate a custom rspec runner in place of the current shell execution method
56
+ * Swap YAML for JSON
data/bin/redis_runner CHANGED
@@ -1,22 +1,18 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- #TODO make this more generic and configurable
4
-
5
3
  require 'spec_run_queue'
6
4
  require 'spec_run_queue/queue/redis'
7
- require 'spec_run_queue/notifier/growl'
8
5
  require 'spec_run_queue/notifier/stdout'
9
6
 
10
- rspec_major_version = ARGV.shift
11
- unless rspec_major_version
12
- $stderr.puts "please specify 1 or 2 for rspec version"
13
- exit -1
14
- end
7
+ SPEC_RUN_QUEUE_FILE = "SpecRunQueueFile"
15
8
 
16
- runner = SpecRunQueue::SystemRunner.new(rspec_major_version)
17
- runner.add_notifier SpecRunQueue::Notifier::Growl.new(:password => "gr0wl")
18
- # runner.add_notifier SpecRunQueue::Notifier::Stdout.new()
9
+ if File.readable?(SPEC_RUN_QUEUE_FILE)
10
+ load "./#{SPEC_RUN_QUEUE_FILE}"
11
+ else
12
+ SpecRunQueue.configure do |c|
13
+ c.add_notifier :stdout
14
+ end
15
+ end
19
16
 
20
- queue = SpecRunQueue::Queue::Redis.new(runner)
17
+ queue = SpecRunQueue::Queue::Redis.new(SpecRunQueue.runner)
21
18
  queue.run
22
-
@@ -12,6 +12,7 @@ module SpecRunQueue
12
12
  def run
13
13
  with_reconnect do
14
14
  while (raw_instruction = queue_fetch)
15
+ raise "Dangerous yaml!" if raw_instruction[1] =~ /!ruby/
15
16
  instruction = YAML.load(raw_instruction[1])
16
17
  runner.run_spec(instruction)
17
18
  end
@@ -1,20 +1,13 @@
1
1
  module SpecRunQueue
2
2
  class SystemRunner
3
- attr_reader :version, :options, :notifiers
3
+ attr_reader :options, :notifiers
4
4
 
5
- def initialize(version, options = {})
6
- @version = version.to_i
5
+ def initialize(options = {})
7
6
  @options = options
8
7
  end
9
8
 
10
9
  def rspec_bin
11
- if version == 1
12
- options[:spec_bin] || "spec"
13
- elsif version == 2
14
- options[:rspec_bin] || "rspec"
15
- else
16
- raise "Couldn't determine rspec bin'"
17
- end
10
+ options.fetch(:rspec_bin, "rspec")
18
11
  end
19
12
 
20
13
  def add_notifier(notifier)
@@ -1,3 +1,3 @@
1
1
  module SpecRunQueue
2
- VERSION = "0.0.5"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -2,8 +2,47 @@ require 'rubygems'
2
2
  require 'yaml'
3
3
 
4
4
  module SpecRunQueue
5
+ class Configuration
6
+ attr_accessor :rspec_bin
7
+
8
+ def add_notifier(runner_symbol, options = {})
9
+ klass = SpecRunQueue::Notifier.send(:const_get, runner_symbol.to_s.capitalize)
10
+ SpecRunQueue.runner.add_notifier klass.new(options)
11
+ end
12
+
13
+ def to_h
14
+ h = {}
15
+ h[:rspec_bin] = rspec_bin if rspec_bin
16
+ h
17
+ end
18
+ end
19
+
20
+ def self.configuration
21
+ @configuration || configure
22
+ end
23
+
24
+ def self.configure
25
+ @configuration = Configuration.new
26
+
27
+ if block_given?
28
+ yield configuration
29
+ end
30
+
31
+ @configuration
32
+ end
33
+
34
+ def self.runner
35
+ @runner ||= SystemRunner.new(configuration.to_h)
36
+ end
5
37
  end
6
38
 
7
39
  require 'spec_run_queue/queue/base'
8
40
  require 'spec_run_queue/notifier/base'
9
41
  require 'spec_run_queue/system_runner'
42
+
43
+ module SpecRunQueue
44
+ module Notifier
45
+ autoload :Growl, 'spec_run_queue/notifier/growl'
46
+ autoload :Stdout, 'spec_run_queue/notifier/stdout'
47
+ end
48
+ end
@@ -0,0 +1,35 @@
1
+ require 'spec_helper'
2
+
3
+ describe SpecRunQueue, "default runner" do
4
+ it "is a SystemRunner" do
5
+ runner = stub(:runner)
6
+ SpecRunQueue::SystemRunner.stub(:new).and_return(runner)
7
+ SpecRunQueue.runner.should == runner
8
+ end
9
+ end
10
+
11
+ describe SpecRunQueue, "Configuration" do
12
+ before do
13
+ SpecRunQueue.configure do |c|
14
+ c.rspec_bin = "/usr/local/bin/spec"
15
+ end
16
+ end
17
+
18
+ it "provides a block style config" do
19
+ SpecRunQueue.configuration.rspec_bin.should == "/usr/local/bin/spec"
20
+ end
21
+
22
+ it "can be converted to a hash of options" do
23
+ SpecRunQueue.configuration.to_h.should == { :rspec_bin => "/usr/local/bin/spec" }
24
+ end
25
+
26
+ it "can add a notifier" do
27
+ notifier = stub(:notifier)
28
+ SpecRunQueue::Notifier::Growl.should_receive(:new).with(:password => "gpass").and_return(notifier)
29
+ SpecRunQueue.runner.should_receive(:add_notifier).with(notifier)
30
+
31
+ SpecRunQueue.configure do |c|
32
+ c.add_notifier :growl, :password => "gpass"
33
+ end
34
+ end
35
+ end
@@ -3,42 +3,37 @@ require 'spec_helper'
3
3
  describe SpecRunQueue::SystemRunner do
4
4
  let(:foo_notifier) { @foo_notifier ||= mock("FooNotifier", :notify => true) }
5
5
  let(:bar_notifier) { @bar_notifier ||= mock("BarNotifier", :notify => true) }
6
- let(:runner) { @runner ||=
6
+ let(:runner) { @runner ||=
7
7
  begin
8
- runner = SpecRunQueue::SystemRunner.new(1)
8
+ runner = SpecRunQueue::SystemRunner.new(:rspec_bin => "spec")
9
9
  runner.add_notifier(foo_notifier)
10
10
  runner.add_notifier(bar_notifier)
11
- runner
11
+ runner
12
12
  end
13
13
  }
14
14
 
15
15
  describe "initializing" do
16
- it "should set the version" do
17
- runner = SpecRunQueue::SystemRunner.new(1, { :password => "foo" })
18
- runner.version.should == 1
19
- end
20
-
21
16
  it "should set the options" do
22
- runner = SpecRunQueue::SystemRunner.new(1, { :password => "foo" })
17
+ runner = SpecRunQueue::SystemRunner.new({ :password => "foo" })
23
18
  runner.options.should == { :password => "foo" }
24
19
  end
25
20
  end
26
-
21
+
27
22
  describe "getting the rspec binary" do
28
- it "for version 1 is spec by default" do
29
- runner = SpecRunQueue::SystemRunner.new(1)
30
- runner.rspec_bin.should == "spec"
23
+ it "is 'rspec' by default" do
24
+ runner = SpecRunQueue::SystemRunner.new
25
+ runner.rspec_bin.should == "rspec"
31
26
  end
32
27
 
33
- it "for varsion 2 is rspec by default" do
34
- runner = SpecRunQueue::SystemRunner.new(2)
35
- runner.rspec_bin.should == "rspec"
28
+ it "will use the rspec_bin option if present" do
29
+ runner = SpecRunQueue::SystemRunner.new(:rspec_bin => "bundle exec rspec")
30
+ runner.rspec_bin.should == "bundle exec rspec"
36
31
  end
37
32
  end
38
33
 
39
34
  describe "adding a notifier" do
40
35
  it "should append the notifier onto the notifiers list" do
41
- runner = SpecRunQueue::SystemRunner.new(1)
36
+ runner = SpecRunQueue::SystemRunner.new
42
37
  foo_notifier = mock("FooNotifier")
43
38
  runner.add_notifier(foo_notifier)
44
39
  bar_notifier = mock("BarNotifier")
@@ -18,4 +18,8 @@ Gem::Specification.new do |s|
18
18
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
19
  s.executables = ["redis_runner"]
20
20
  s.require_paths = ["lib"]
21
+
22
+ s.add_development_dependency "rspec"
23
+ s.add_development_dependency "redis"
24
+ s.add_development_dependency "ruby-growl", '~> 3.0'
21
25
  end
metadata CHANGED
@@ -1,34 +1,57 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: spec_run_queue
3
- version: !ruby/object:Gem::Version
4
- hash: 21
5
- prerelease: false
6
- segments:
7
- - 0
8
- - 0
9
- - 5
10
- version: 0.0.5
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Brendon Murphy
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-05-05 00:00:00 -07:00
19
- default_executable:
20
- dependencies: []
21
-
12
+ date: 2013-02-22 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rspec
16
+ requirement: &2152806200 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *2152806200
25
+ - !ruby/object:Gem::Dependency
26
+ name: redis
27
+ requirement: &2152805700 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2152805700
36
+ - !ruby/object:Gem::Dependency
37
+ name: ruby-growl
38
+ requirement: &2152804800 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ~>
42
+ - !ruby/object:Gem::Version
43
+ version: '3.0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2152804800
22
47
  description: Use a queue to run specs outside your editor
23
- email:
48
+ email:
24
49
  - xternal1+github@gmail.com
25
- executables:
50
+ executables:
26
51
  - redis_runner
27
52
  extensions: []
28
-
29
53
  extra_rdoc_files: []
30
-
31
- files:
54
+ files:
32
55
  - .gitignore
33
56
  - Gemfile
34
57
  - README.markdown
@@ -48,47 +71,39 @@ files:
48
71
  - spec/queue/base_spec.rb
49
72
  - spec/queue/redis_spec.rb
50
73
  - spec/spec_helper.rb
74
+ - spec/spec_run_queue_spec.rb
51
75
  - spec/system_runner_spec.rb
52
76
  - spec_run_queue.gemspec
53
- has_rdoc: true
54
77
  homepage: https://github.com/bemurphy/spec_run_queue
55
78
  licenses: []
56
-
57
79
  post_install_message:
58
80
  rdoc_options: []
59
-
60
- require_paths:
81
+ require_paths:
61
82
  - lib
62
- required_ruby_version: !ruby/object:Gem::Requirement
83
+ required_ruby_version: !ruby/object:Gem::Requirement
63
84
  none: false
64
- requirements:
65
- - - ">="
66
- - !ruby/object:Gem::Version
67
- hash: 3
68
- segments:
69
- - 0
70
- version: "0"
71
- required_rubygems_version: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ! '>='
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
89
+ required_rubygems_version: !ruby/object:Gem::Requirement
72
90
  none: false
73
- requirements:
74
- - - ">="
75
- - !ruby/object:Gem::Version
76
- hash: 3
77
- segments:
78
- - 0
79
- version: "0"
91
+ requirements:
92
+ - - ! '>='
93
+ - !ruby/object:Gem::Version
94
+ version: '0'
80
95
  requirements: []
81
-
82
96
  rubyforge_project: spec_run_queue
83
- rubygems_version: 1.3.7
97
+ rubygems_version: 1.8.15
84
98
  signing_key:
85
99
  specification_version: 3
86
100
  summary: Use a queue to run specs outside your editor
87
- test_files:
101
+ test_files:
88
102
  - spec/notifier/base_spec.rb
89
103
  - spec/notifier/growl_spec.rb
90
104
  - spec/notifier/stdout_spec.rb
91
105
  - spec/queue/base_spec.rb
92
106
  - spec/queue/redis_spec.rb
93
107
  - spec/spec_helper.rb
108
+ - spec/spec_run_queue_spec.rb
94
109
  - spec/system_runner_spec.rb