rspec-pubsub-formatter 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 +5 -0
- data/Gemfile +4 -0
- data/README.md +16 -0
- data/Rakefile +7 -0
- data/lib/rspec-pubsub-formatter.rb +89 -0
- data/lib/rspec-pubsub-formatter/version.rb +7 -0
- data/rspec-pubsub-formatter.gemspec +24 -0
- data/spec/rspec_pubsub_channel_spec.rb +21 -0
- data/spec/rspec_pubsub_formatter_spec.rb +49 -0
- metadata +87 -0
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
rspec-pubsub-formatter
|
2
|
+
======================
|
3
|
+
|
4
|
+
Publishes a json serialized hash to a redis pubsub channel (`pubsub_formatter`
|
5
|
+
by default) with the following data:
|
6
|
+
|
7
|
+
{
|
8
|
+
:total_example_count => 4,
|
9
|
+
:run_example_count => 2,
|
10
|
+
:failure_count => 1,
|
11
|
+
:pending_count => 0,
|
12
|
+
:percent_complete => 50
|
13
|
+
}
|
14
|
+
|
15
|
+
The formatter inherits from the `RSpec::Core::Formatters::ProgressFormatter` and
|
16
|
+
maintains its behavior of reporting, in addition to publishing to redis.
|
data/Rakefile
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'rspec/core/formatters/progress_formatter'
|
2
|
+
require 'redis'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module RSpecPubsub
|
6
|
+
class Formatter < RSpec::Core::Formatters::ProgressFormatter
|
7
|
+
attr_reader :channel
|
8
|
+
|
9
|
+
def initialize(output)
|
10
|
+
super
|
11
|
+
@channel = Channel.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def start(example_count)
|
15
|
+
super
|
16
|
+
publish_status
|
17
|
+
end
|
18
|
+
|
19
|
+
def example_passed(example)
|
20
|
+
super
|
21
|
+
publish_status
|
22
|
+
end
|
23
|
+
|
24
|
+
def example_pending(example)
|
25
|
+
super
|
26
|
+
publish_status
|
27
|
+
end
|
28
|
+
|
29
|
+
def example_failed(example)
|
30
|
+
super
|
31
|
+
publish_status
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def status
|
37
|
+
{
|
38
|
+
:total_example_count => example_count,
|
39
|
+
:run_example_count => run_example_count,
|
40
|
+
:failure_count => failure_count,
|
41
|
+
:pending_count => pending_count,
|
42
|
+
:percent_complete => percent_complete
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
def run_example_count
|
47
|
+
examples.length
|
48
|
+
end
|
49
|
+
|
50
|
+
def failure_count
|
51
|
+
failed_examples.length
|
52
|
+
end
|
53
|
+
|
54
|
+
def pending_count
|
55
|
+
pending_examples.length
|
56
|
+
end
|
57
|
+
|
58
|
+
def percent_complete
|
59
|
+
begin
|
60
|
+
((run_example_count / example_count.to_f ) * 100).to_i
|
61
|
+
rescue FloatDomainError
|
62
|
+
0
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def publish_status
|
67
|
+
channel.publish(status)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
class Channel
|
72
|
+
attr_reader :redis
|
73
|
+
|
74
|
+
class << self
|
75
|
+
attr_writer :channel_name
|
76
|
+
def channel_name
|
77
|
+
@channel_name || "pubsub_formatter"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
def initialize
|
82
|
+
@redis = Redis.new
|
83
|
+
end
|
84
|
+
|
85
|
+
def publish(status)
|
86
|
+
redis.publish(self.class.channel_name, status.to_json)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$LOAD_PATH.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "rspec-pubsub-formatter/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "rspec-pubsub-formatter"
|
7
|
+
s.version = Rspec::Pubsub::Formatter::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Brendon Murphy"]
|
10
|
+
s.email = ["xternal1+github@gmail.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{Publish rspec status from a spec run into redis}
|
13
|
+
s.description = s.summary
|
14
|
+
|
15
|
+
s.rubyforge_project = "rspec-pubsub-formatter"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {spec}/*`.split("\n")
|
19
|
+
s.require_paths = ["lib"]
|
20
|
+
|
21
|
+
s.add_dependency "rspec", ">= 2"
|
22
|
+
s.add_dependency "redis", "~> 2.2.2"
|
23
|
+
s.add_dependency "json"
|
24
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'rspec-pubsub-formatter'
|
2
|
+
|
3
|
+
describe RSpecPubsub::Channel do
|
4
|
+
let(:redis) { stub("Redis") }
|
5
|
+
let(:status) { { :foo => "bar", :fizz => "buzz" } }
|
6
|
+
|
7
|
+
before do
|
8
|
+
Redis.stub(:new).and_return(redis)
|
9
|
+
end
|
10
|
+
|
11
|
+
it "publishes the provided hash to redis as json" do
|
12
|
+
redis.should_receive(:publish).with("pubsub_formatter", status.to_json)
|
13
|
+
subject.publish(status)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "allows changing the channel name via the class" do
|
17
|
+
RSpecPubsub::Channel.channel_name = "blam"
|
18
|
+
redis.should_receive(:publish).with("blam", status.to_json)
|
19
|
+
subject.publish(status)
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'rspec-pubsub-formatter'
|
2
|
+
|
3
|
+
describe RSpecPubsub::Formatter do
|
4
|
+
let(:output) { StringIO.new }
|
5
|
+
let(:channel) { stub("Channel", :publish => true) }
|
6
|
+
subject{ RSpecPubsub::Formatter.new(output) }
|
7
|
+
|
8
|
+
before do
|
9
|
+
RSpecPubsub::Channel.stub(:new).and_return(channel)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "publishes its status with example count on start" do
|
13
|
+
channel.should_receive(:publish).with(hash_including(:total_example_count => 5))
|
14
|
+
subject.start(5)
|
15
|
+
end
|
16
|
+
|
17
|
+
it "publishes the count of failed examples" do
|
18
|
+
channel.should_receive(:publish).with(hash_including(:failure_count => 1))
|
19
|
+
channel.should_receive(:publish).with(hash_including(:failure_count => 2))
|
20
|
+
2.times { subject.example_failed(stub) }
|
21
|
+
end
|
22
|
+
|
23
|
+
it "publishes the count of pending examples" do
|
24
|
+
channel.should_receive(:publish).with(hash_including(:pending_count => 1))
|
25
|
+
channel.should_receive(:publish).with(hash_including(:pending_count => 2))
|
26
|
+
2.times { subject.example_pending(stub) }
|
27
|
+
end
|
28
|
+
|
29
|
+
it "publishes the count of examples run so far" do
|
30
|
+
channel.should_receive(:publish).with(hash_including(:run_example_count => 1))
|
31
|
+
channel.should_receive(:publish).with(hash_including(:run_example_count => 2))
|
32
|
+
2.times do
|
33
|
+
example = stub
|
34
|
+
subject.example_started(example)
|
35
|
+
subject.example_failed(example)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
it "publishes the percentage of examples completed" do
|
40
|
+
subject.start(2)
|
41
|
+
channel.should_receive(:publish).with(hash_including(:percent_complete => 50))
|
42
|
+
channel.should_receive(:publish).with(hash_including(:percent_complete => 100))
|
43
|
+
2.times do
|
44
|
+
example = stub
|
45
|
+
subject.example_started(example)
|
46
|
+
subject.example_passed(example)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: rspec-pubsub-formatter
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Brendon Murphy
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-12-27 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: &2157375380 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '2'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *2157375380
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: redis
|
27
|
+
requirement: &2157374880 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.2.2
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2157374880
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: json
|
38
|
+
requirement: &2157396260 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *2157396260
|
47
|
+
description: Publish rspec status from a spec run into redis
|
48
|
+
email:
|
49
|
+
- xternal1+github@gmail.com
|
50
|
+
executables: []
|
51
|
+
extensions: []
|
52
|
+
extra_rdoc_files: []
|
53
|
+
files:
|
54
|
+
- .gitignore
|
55
|
+
- Gemfile
|
56
|
+
- README.md
|
57
|
+
- Rakefile
|
58
|
+
- lib/rspec-pubsub-formatter.rb
|
59
|
+
- lib/rspec-pubsub-formatter/version.rb
|
60
|
+
- rspec-pubsub-formatter.gemspec
|
61
|
+
- spec/rspec_pubsub_channel_spec.rb
|
62
|
+
- spec/rspec_pubsub_formatter_spec.rb
|
63
|
+
homepage: ''
|
64
|
+
licenses: []
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options: []
|
67
|
+
require_paths:
|
68
|
+
- lib
|
69
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ! '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ! '>='
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
requirements: []
|
82
|
+
rubyforge_project: rspec-pubsub-formatter
|
83
|
+
rubygems_version: 1.8.11
|
84
|
+
signing_key:
|
85
|
+
specification_version: 3
|
86
|
+
summary: Publish rspec status from a spec run into redis
|
87
|
+
test_files: []
|