fuci 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: de9c5fc8ff7e0e86b80807e805dabce6182b0791
4
- data.tar.gz: d90003f737d2aa783a0095f06d63d1919462f56a
3
+ metadata.gz: c51a2d0ad456cb773cc634a1e33cebcbd1c03af5
4
+ data.tar.gz: 80ad9fb11b2b88c86f3de73f27b57baa8e29c216
5
5
  SHA512:
6
- metadata.gz: 8b53e6b36759ab5119d01f8d89314a364df768b6974471dd4d8d39c21e69ba530bed89182b6ccfc343995d4edb15423f91020821be82bb4d34ae2d285007cf07
7
- data.tar.gz: 61356b0c599a63ed39d5abe85235533a566dd5045d43cf87d5aade6b69ca14b8f97d8bb8fd444588fc8f0712f1fd301e3c58c4887a26c13df41398b0ba6a0ad1
6
+ metadata.gz: 1e17548470e39a72f4e81fe41f8fcb5f96db0446f5b044f8b30d0eb53021d52a0fc33d4816092a13442dac5be26c6dc81da7f276088bda1e5ecc71c507c2c304
7
+ data.tar.gz: 1fe119206c7956c8f0f7e965bd54aa0377b38ad1c98349e304d9a52aa9d68114a6daa7b51dc66e30256b66fbd9a687ead75f7a9c6a3dfd700f821995e33ea5d4
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.9.2
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - rbx-19mode
7
+ - jruby-19mode
8
+ script: bundle exec rake
data/README.md CHANGED
@@ -1,25 +1,19 @@
1
1
  # Fuci
2
+ [![Build Status](https://travis-ci.org/davejachimiak/fuci.png?branch=dj-initial_functionality)](https://travis-ci.org/davejachimiak/fuci)
2
3
 
3
- TODO: Write a gem description
4
+ Run failed tests from your last build on the command line.
4
5
 
5
6
  ## Installation
6
7
 
7
- Add this line to your application's Gemfile:
8
+ Add this line to your fuci extension's Gemspec:
8
9
 
9
- gem 'fuci'
10
-
11
- And then execute:
12
-
13
- $ bundle
14
-
15
- Or install it yourself as:
16
-
17
- $ gem install fuci
10
+ .add_dependency 'fuci', '~> 0.1'
18
11
 
19
12
  ## Usage
20
-
21
- TODO: Write usage instructions here
22
-
13
+ ### Server extensions
14
+ Coming soon...
15
+ ### Tester extensions
16
+ Coming soon...
23
17
  ## Contributing
24
18
 
25
19
  1. Fork it
data/Rakefile CHANGED
@@ -1 +1,10 @@
1
1
  require "bundler/gem_tasks"
2
+ require 'rake/testtask'
3
+
4
+ desc 'Run the tests'
5
+ task :default => :test
6
+
7
+ desc 'Run the tests'
8
+ Rake::TestTask.new do |t|
9
+ t.pattern = 'spec/**/*.rb'
10
+ end
data/fuci.gemspec CHANGED
@@ -9,8 +9,12 @@ Gem::Specification.new do |spec|
9
9
  spec.authors = ["Dave Jachimiak"]
10
10
  spec.email = ["dave.jachimiak@gmail.com"]
11
11
  spec.description = %q{FUCK YOU CI}
12
- spec.summary = %q{TBA}
13
- spec.homepage = ""
12
+ spec.summary =
13
+ %q{Fuci is a library that covers the general case for running
14
+ recent failures from recent CI (continuous integration) builds
15
+ locally. It includes interfaces for server (e.g. Travis,
16
+ TeamCity) and tester (e.g. RSpec, Cucumber) extensions.}
17
+ spec.homepage = "https://github.com/davejachimiak/fuci"
14
18
  spec.license = "MIT"
15
19
 
16
20
  spec.files = `git ls-files`.split($/)
@@ -18,6 +22,8 @@ Gem::Specification.new do |spec|
18
22
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
23
  spec.require_paths = ["lib"]
20
24
 
25
+ spec.add_development_dependency "minitest-spec-expect", "~> 0.1"
21
26
  spec.add_development_dependency "bundler", "~> 1.3"
27
+ spec.add_development_dependency "mocha", "~> 0.14"
22
28
  spec.add_development_dependency "rake"
23
29
  end
data/lib/fuci.rb CHANGED
@@ -1,5 +1,52 @@
1
- require "fuci/version"
1
+ require 'fuci/runner'
2
+ require 'fuci/rspec'
3
+ require 'fuci/configurable'
2
4
 
3
5
  module Fuci
4
- # Your code goes here...
6
+ include Configurable
7
+
8
+ DEFAULT_TESTERS = [Fuci::RSpec]
9
+
10
+ class << self
11
+ attr_accessor :server
12
+ attr_writer :options
13
+ end
14
+
15
+ def self.options
16
+ @options ||= {}
17
+ end
18
+
19
+ def self.run
20
+ Fuci::Runner.new.run
21
+ end
22
+
23
+ def self.add_testers *testers
24
+ @testers += testers.flatten
25
+ end
26
+
27
+ def self.testers
28
+ @testers ||= default_testers
29
+ end
30
+
31
+ def self.default_testers
32
+ DEFAULT_TESTERS
33
+ end
34
+
35
+ def self.initialize_server!
36
+ self.server = initialize_server
37
+ end
38
+
39
+ def self.initialize_testers!
40
+ @testers = initialize_testers
41
+ end
42
+
43
+ private
44
+
45
+ def self.initialize_server
46
+ server.new
47
+ end
48
+
49
+ def self.initialize_testers
50
+ testers.map { |tester| tester.new }
51
+ end
5
52
  end
@@ -0,0 +1,13 @@
1
+ module Fuci
2
+ module Configurable
3
+ module ClassMethods
4
+ def configure
5
+ yield self
6
+ end
7
+ end
8
+
9
+ def self.included base
10
+ base.extend ClassMethods
11
+ end
12
+ end
13
+ end
data/lib/fuci/git.rb ADDED
@@ -0,0 +1,40 @@
1
+ module Fuci
2
+ module Git
3
+ CURRENT_BRANCH_COMMAND = "git branch | sed -n '/\* /s///p'"
4
+ REMOTE_MASTER_SHA_COMMAND = "git rev-parse origin/master"
5
+ REMOTE_REPO_COMMAND =
6
+ "git remote -v | grep origin | grep push | awk 'match($0, /:\(.*)\.git/) { print substr($0, RSTART+1, RLENGTH-5) }'"
7
+
8
+ def current_branch_name
9
+ with_popen current_branch_command
10
+ end
11
+
12
+ def remote_repo_name
13
+ with_popen remote_repo_command
14
+ end
15
+
16
+ def remote_master_sha
17
+ with_popen remote_master_sha_command
18
+ end
19
+
20
+ private
21
+
22
+ def with_popen command
23
+ IO.popen command do |io|
24
+ io.first.chomp
25
+ end
26
+ end
27
+
28
+ def current_branch_command
29
+ CURRENT_BRANCH_COMMAND
30
+ end
31
+
32
+ def remote_repo_command
33
+ REMOTE_REPO_COMMAND
34
+ end
35
+
36
+ def remote_master_sha_command
37
+ REMOTE_MASTER_SHA_COMMAND
38
+ end
39
+ end
40
+ end
data/lib/fuci/rspec.rb ADDED
@@ -0,0 +1,27 @@
1
+ require 'fuci/tester'
2
+
3
+ module Fuci
4
+ class RSpec < Fuci::Tester
5
+ FAILURE_INDICATOR = 'Failed examples:'
6
+ BASE_COMMAND = 'rspec --tty'
7
+ FAIL_FILE_CAPTURE = /rspec (.*) #/
8
+
9
+ def indicates_failure? log
10
+ log.include? FAILURE_INDICATOR
11
+ end
12
+
13
+ def command log
14
+ "#{base_command} #{failures log }"
15
+ end
16
+
17
+ private
18
+
19
+ def base_command
20
+ BASE_COMMAND
21
+ end
22
+
23
+ def failures log
24
+ log.scan(FAIL_FILE_CAPTURE).join ' '
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,56 @@
1
+ require 'forwardable'
2
+
3
+ module Fuci
4
+ class Runner
5
+ extend Forwardable
6
+
7
+ def_delegators :Fuci, :server, :testers, :initialize_server!,
8
+ :initialize_testers!
9
+ def_delegator :server, :build_status
10
+ attr_accessor :log, :detected_tester, :failures
11
+
12
+ def run
13
+ initialize_server!
14
+ initialize_testers!
15
+ check_build
16
+ fetch_log
17
+ detect_tester_failure
18
+ run_failures
19
+ end
20
+
21
+ private
22
+
23
+ def check_build
24
+ case build_status
25
+ when :green
26
+ puts_with_exit 'Build is green.'
27
+ when :yellow
28
+ puts_with_exit 'Build has errored. Check build for more info.'
29
+ end
30
+ end
31
+
32
+ def fetch_log
33
+ puts "Fetching log from build..."
34
+ self.log = server.fetch_log
35
+ end
36
+
37
+ def detect_tester_failure
38
+ self.detected_tester = testers.detect do |tester|
39
+ tester.indicates_failure? log
40
+ end
41
+ puts "Failure detected: #{detected_tester.class.name.split('::').last}"
42
+ end
43
+
44
+ def run_failures
45
+ IO.popen detected_tester.command(log) do |io|
46
+ puts 'Running failed specs...'
47
+ io.each { |string| puts string }
48
+ end
49
+ end
50
+
51
+ def puts_with_exit string
52
+ puts string
53
+ exit
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,25 @@
1
+ module Fuci
2
+ class Server
3
+
4
+ # must return either of the following
5
+ # symbols:
6
+ # :red (failure),
7
+ # :yellow (errored),
8
+ # :green (passing)
9
+ def build_status
10
+ raise NotImplementedError
11
+ end
12
+
13
+ # must return a string with characters
14
+ # denoting ascii color removed
15
+ def fetch_log
16
+ raise NotImplementedError
17
+ end
18
+
19
+ private
20
+
21
+ def remove_ascii_color_chars string
22
+ string.gsub /\e\[(\d+)m/, ""
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,18 @@
1
+ module Fuci
2
+ class Tester
3
+
4
+ # must return a boolean telling whether the
5
+ # log passed in indicates a failure made by
6
+ # the tester
7
+ def indicates_failure? log
8
+ raise NotImplementedError
9
+ end
10
+
11
+ # must return a command string to be executed
12
+ # by the system, e.g.
13
+ # "rspec ./spec/features/it_is_cool_spec.rb"
14
+ def command log
15
+ raise NotImplementedError
16
+ end
17
+ end
18
+ end
data/lib/fuci/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Fuci
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1,18 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative '../../../lib/fuci/configurable'
3
+
4
+ describe Fuci::Configurable do
5
+ describe '.configure' do
6
+ it 'yields the block to self' do
7
+ module TestMod
8
+ include Fuci::Configurable
9
+ end
10
+
11
+ test_string = 'configuring!'
12
+ TestMod.expects(:puts).with test_string
13
+ TestMod.configure do |f|
14
+ f.send :puts, test_string
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,70 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative '../../../lib/fuci/git'
3
+
4
+ class TestClass
5
+ include Fuci::Git
6
+ end
7
+
8
+ describe Fuci::Git do
9
+ before { @test_class = TestClass.new }
10
+
11
+ describe '#current_branch_name' do
12
+ it 'returns the current branch' do
13
+ @test_class.stubs(:current_branch_command).
14
+ returns current_branch_command = mock
15
+ @test_class.expects(:with_popen).with current_branch_command
16
+
17
+ @test_class.current_branch_name
18
+ end
19
+ end
20
+
21
+ describe '#remote_repo_name' do
22
+ it 'returns the remote repo name' do
23
+ @test_class.stubs(:remote_repo_command).
24
+ returns remote_repo_command = mock
25
+ @test_class.expects(:with_popen).with remote_repo_command
26
+
27
+ @test_class.remote_repo_name
28
+ end
29
+ end
30
+
31
+ describe '#remote_master_sha' do
32
+ it 'returns the remote master sha' do
33
+ @test_class.stubs(:remote_master_sha_command).
34
+ returns remote_master_sha_command = mock
35
+ @test_class.expects(:with_popen).with remote_master_sha_command
36
+
37
+ @test_class.remote_master_sha
38
+ end
39
+ end
40
+
41
+ describe '#with_popen' do
42
+ it 'runs the command with popen' do
43
+ current_branch = 'current_branch'
44
+ result = @test_class.send :with_popen, "echo #{current_branch}"
45
+
46
+ expect(result).to_equal current_branch
47
+ end
48
+ end
49
+
50
+ describe '#current_branch_command' do
51
+ it 'returns the git/unix command to returnt the current branch' do
52
+ current_branch_command = @test_class.send :current_branch_command
53
+ expect(current_branch_command).to_equal "git branch | sed -n '/\* /s///p'"
54
+ end
55
+ end
56
+
57
+ describe '#remote_repo_command' do
58
+ it 'returns the git/unix command to return the remote owner/repo' do
59
+ command = "git remote -v | grep origin | grep push | awk 'match($0, /:\(.*)\.git/) { print substr($0, RSTART+1, RLENGTH-5) }'"
60
+ expect(@test_class.send :remote_repo_command).to_equal command
61
+ end
62
+ end
63
+
64
+ describe '#remote_master_sha_command' do
65
+ it 'returns the git/unix command to return the remote master sha' do
66
+ current_branch_command = @test_class.send :remote_master_sha_command
67
+ expect(current_branch_command).to_equal "git rev-parse origin/master"
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,43 @@
1
+ require_relative '../../spec_helper'
2
+ stub_class 'Fuci::Tester'
3
+ require_relative '../../../lib/fuci/rspec'
4
+
5
+ describe Fuci::RSpec do
6
+ before { @rspec = Fuci::RSpec.new }
7
+ describe 'composition' do
8
+ it 'inherits from Fuci::Tester' do
9
+ expect(@rspec).to_be_kind_of Fuci::Tester
10
+ end
11
+ end
12
+
13
+ describe '#indicates_failure?' do
14
+ describe 'when the log passed in has "Failed examples:"' do
15
+ before { @log = "irjioerijoijoaf;joia;ijoawfeFailed examples:" }
16
+
17
+ it 'returns true' do
18
+ expect(@rspec.indicates_failure?(@log)).to_equal true
19
+ end
20
+ end
21
+
22
+ describe 'when the log passed in has no "Failed examples:"' do
23
+ before { @log = "irjioerijoijpoop: " }
24
+
25
+ it 'returns false' do
26
+ expect(@rspec.indicates_failure?(@log)).to_equal false
27
+ end
28
+ end
29
+ end
30
+
31
+ describe '#command' do
32
+ it 'returns "rspec <failure string>"' do
33
+ log = """
34
+ rspec is #ljasdfois\nrspec ok #jcicisj\nrspec for #ie
35
+ iejfasdi\nrspec testing #iiiirrpepwpqapc
36
+ """
37
+
38
+ command = @rspec.command log
39
+
40
+ expect(command).to_equal 'rspec --tty is ok for testing'
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,114 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative '../../../lib/fuci/runner'
3
+
4
+ stub_class 'IO'
5
+
6
+ describe Fuci::Runner do
7
+ before { @runner = Fuci::Runner.new }
8
+
9
+ describe '.run' do
10
+ before do
11
+ @runner.expects :initialize_server!
12
+ @runner.expects :initialize_testers!
13
+ @runner.expects :check_build
14
+ @runner.expects :fetch_log
15
+ @runner.expects :detect_tester_failure
16
+ @runner.expects :run_failures
17
+ end
18
+
19
+ it 'initializes the testers, ' +
20
+ 'initializes the server, ' +
21
+ 'fetches the log, ' +
22
+ 'detects which tester has the failure, ' +
23
+ 'and runs the failures.' do
24
+ @runner.run
25
+ end
26
+ end
27
+
28
+ describe '.initialize_server' do
29
+ it 'initializes the server' do
30
+ Fuci.expects :initialize_server!
31
+ @runner.send :initialize_server!
32
+ end
33
+ end
34
+
35
+ describe '.initialize_testers' do
36
+ it 'initializes the testers' do
37
+ Fuci.expects :initialize_testers!
38
+ @runner.send :initialize_testers!
39
+ end
40
+ end
41
+
42
+ describe '.fetch_log' do
43
+ it 'logs fetching; sets the log with delegation to the server' do
44
+ @runner.expects(:puts).with "Fetching log from build..."
45
+ @runner.stubs(:server).returns server = mock
46
+ server.stubs(:fetch_log).returns log = mock
47
+
48
+ @runner.send :fetch_log
49
+
50
+ expect(@runner.send :log ).to_equal log
51
+ end
52
+ end
53
+
54
+ describe '.detect_tester_failure' do
55
+ it 'detects the first tester failure in the log' do
56
+ rspec, konacha, cucumber = mock, mock, mock
57
+ @runner.stubs(:log).returns log = mock
58
+ [rspec, cucumber].each { |t| t.stubs :indicates_failure? }
59
+ konacha.stubs(:indicates_failure?).with(log).returns true
60
+ konacha.class.stubs(:name).returns 'Fuci::Konacha'
61
+ testers = [rspec, konacha, cucumber]
62
+ @runner.expects(:puts).with 'Failure detected: Konacha'
63
+ @runner.stubs(:testers).returns testers
64
+
65
+ @runner.send :detect_tester_failure
66
+
67
+ expect(@runner.send :detected_tester ).to_equal konacha
68
+ end
69
+ end
70
+
71
+ describe '.run_failures' do
72
+ it 'runs the failrues locally' do
73
+ @runner.stubs(:detected_tester).returns detected_tester = mock
74
+ @runner.stubs(:log).returns log = mock
75
+ detected_tester.
76
+ stubs(:command).
77
+ with(log).
78
+ returns command = mock
79
+ IO.expects(:popen).with command
80
+
81
+ @runner.send :run_failures
82
+ end
83
+ end
84
+
85
+ describe '.check_build' do
86
+ describe 'status is green' do
87
+ before { @runner.stubs(:build_status).returns :green }
88
+
89
+ it 'prints a message that the lastest build passed and exits' do
90
+ @runner.expects(:puts).with 'Build is green.'
91
+ @runner.expects :exit
92
+ @runner.send :check_build
93
+ end
94
+ end
95
+
96
+ describe 'status is yellow' do
97
+ before { @runner.stubs(:build_status).returns :yellow }
98
+
99
+ it 'prints a message that the build in question passed is bad and exits' do
100
+ @runner.expects(:puts).with 'Build has errored. Check build for more info.'
101
+ @runner.expects :exit
102
+ @runner.send :check_build
103
+ end
104
+ end
105
+
106
+ describe 'status is red' do
107
+ before { @runner.stubs(:build_status).returns :red }
108
+
109
+ it 'returns nil' do
110
+ expect(@runner.send :check_build ).to_be_nil
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,30 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative '../../../lib/fuci/server'
3
+
4
+ describe Fuci::Server do
5
+ describe '#fetch_log' do
6
+ it 'raises a NotImplemented error' do
7
+ server = Fuci::Server.new
8
+ expect { server.build_status }.to_raise NotImplementedError
9
+ end
10
+ end
11
+
12
+ describe '#fetch_log' do
13
+ it 'raises a NotImplemented error' do
14
+ server = Fuci::Server.new
15
+ expect { server.fetch_log }.to_raise NotImplementedError
16
+ end
17
+ end
18
+
19
+ describe '#remove_ascii_color_chars' do
20
+ it 'removes the ascii color characters' do
21
+ server = Fuci::Server.new
22
+ string = "\e[33mbody"
23
+ clean_string = 'body'
24
+
25
+ processed_string = server.send :remove_ascii_color_chars, string
26
+
27
+ expect(processed_string).to_equal clean_string
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,18 @@
1
+ require_relative '../../spec_helper'
2
+ require_relative '../../../lib/fuci/tester'
3
+
4
+ describe Fuci::Tester do
5
+ before { @tester = Fuci::Tester.new }
6
+
7
+ describe '#indicates_failure?' do
8
+ it 'raises a NotImplemented error' do
9
+ expect { @tester.indicates_failure? '' }.to_raise NotImplementedError
10
+ end
11
+ end
12
+
13
+ describe '#command' do
14
+ it 'raises a NotImplemented error' do
15
+ expect { @tester.command '' }.to_raise NotImplementedError
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,112 @@
1
+ require_relative '../spec_helper'
2
+
3
+ stub_class 'Fuci::Tester'
4
+ stub_class 'Fuci::Runner'
5
+
6
+ require_relative '../../lib/fuci'
7
+
8
+ describe Fuci do
9
+ describe '.run' do
10
+ it 'calls #run on an instnace on runner' do
11
+ Fuci::Runner.stubs(:new).returns runner = mock
12
+ runner.expects :run
13
+
14
+ Fuci.run
15
+ end
16
+ end
17
+
18
+ describe '.server/=' do
19
+ it 'is an accessor' do
20
+ expect(Fuci.server).to_be_nil
21
+ Fuci.server = server = mock
22
+ expect(Fuci.server).to_equal server
23
+ Fuci.server = nil
24
+ end
25
+ end
26
+
27
+ describe '.options/=' do
28
+ after { Fuci.options = {} }
29
+
30
+ it 'is an accessor' do
31
+ expect(Fuci.options).to_equal({})
32
+ Fuci.options = options = { options: :yup }
33
+ expect(Fuci.options).to_equal options
34
+ end
35
+ end
36
+
37
+ describe '.testers' do
38
+ after { Fuci.instance_variable_set :@testers, [] }
39
+
40
+ it 'is an array accessor' do
41
+ expect(Fuci.testers).to_be_instance_of Array
42
+ end
43
+ end
44
+
45
+ describe '.add_testers' do
46
+ before do
47
+ @rspec, @konacha = mock, mock
48
+ mocks = [@rspec, @konacha]
49
+ mocks.each { |m| m.expects :to_ary }
50
+ Fuci.stubs(:default_testers).returns []
51
+ end
52
+ after { Fuci.instance_variable_set :@testers, [] }
53
+
54
+ describe 'when one to many args are passed in' do
55
+ it 'adds the args to testers' do
56
+ Fuci.add_testers @rspec, @konacha
57
+
58
+ testers = Fuci.testers
59
+ expect(testers).to_equal [@rspec, @konacha]
60
+ end
61
+ end
62
+
63
+ describe 'when an array is passed in' do
64
+ it 'adds the args to testers' do
65
+ Fuci.add_testers [@rspec, @konacha]
66
+
67
+ testers = Fuci.testers
68
+ expect(testers).to_equal [@rspec, @konacha]
69
+ end
70
+ end
71
+ end
72
+
73
+ describe '.configure' do
74
+ after { Fuci.server = nil }
75
+
76
+ it 'yields the block with self' do
77
+ server = :server
78
+ Fuci.configure do |f|
79
+ f.server = server
80
+ end
81
+
82
+ expect(Fuci.server).to_equal server
83
+ end
84
+ end
85
+
86
+ describe '.initialize_server!' do
87
+ after { Fuci.server = nil }
88
+
89
+ it 'sets .server to an initialized server' do
90
+ class Cool; end;
91
+ Fuci.server = Cool
92
+ Cool.stubs(:new).returns new_cool = mock
93
+
94
+ Fuci.initialize_server!
95
+
96
+ expect(Fuci.server).to_equal new_cool
97
+ end
98
+ end
99
+
100
+ describe '.initialize_testers!' do
101
+ it 'mutates the testers attribute to initialized testers' do
102
+ class Cool; end;
103
+ Fuci.instance_variable_set :@testers, [Cool]
104
+ Cool.stubs(:new).returns new_cool = mock
105
+ testers = [new_cool]
106
+
107
+ Fuci.initialize_testers!
108
+
109
+ expect(Fuci.testers).to_equal testers
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,28 @@
1
+ require 'minitest/spec/expect'
2
+ require 'mocha/setup'
3
+
4
+ def stub_class klass
5
+ objects = klass.split '::'
6
+
7
+ klass = objects.inject(Object) do |memo, obj|
8
+ unless obj == objects.last
9
+ begin
10
+ memo.const_get obj
11
+ rescue
12
+ memo.const_set obj, Module.new
13
+ end
14
+ else
15
+ begin
16
+ memo.const_get obj
17
+ rescue
18
+ memo.const_set obj, Class.new
19
+ end
20
+ end
21
+
22
+ memo.const_get obj
23
+ end
24
+
25
+ klass.class_eval do
26
+ yield if block_given?
27
+ end
28
+ end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fuci
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dave Jachimiak
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-07-21 00:00:00.000000000 Z
11
+ date: 2013-07-30 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest-spec-expect
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '0.1'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '0.1'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +38,20 @@ dependencies:
24
38
  - - ~>
25
39
  - !ruby/object:Gem::Version
26
40
  version: '1.3'
41
+ - !ruby/object:Gem::Dependency
42
+ name: mocha
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: '0.14'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: '0.14'
27
55
  - !ruby/object:Gem::Dependency
28
56
  name: rake
29
57
  requirement: !ruby/object:Gem::Requirement
@@ -46,14 +74,29 @@ extensions: []
46
74
  extra_rdoc_files: []
47
75
  files:
48
76
  - .gitignore
77
+ - .travis.yml
49
78
  - Gemfile
50
79
  - LICENSE.txt
51
80
  - README.md
52
81
  - Rakefile
53
82
  - fuci.gemspec
54
83
  - lib/fuci.rb
84
+ - lib/fuci/configurable.rb
85
+ - lib/fuci/git.rb
86
+ - lib/fuci/rspec.rb
87
+ - lib/fuci/runner.rb
88
+ - lib/fuci/server.rb
89
+ - lib/fuci/tester.rb
55
90
  - lib/fuci/version.rb
56
- homepage: ''
91
+ - spec/lib/fuci/configurable_spec.rb
92
+ - spec/lib/fuci/git_spec.rb
93
+ - spec/lib/fuci/rspec_spec.rb
94
+ - spec/lib/fuci/runner_spec.rb
95
+ - spec/lib/fuci/server_spec.rb
96
+ - spec/lib/fuci/tester_spec.rb
97
+ - spec/lib/fuci_spec.rb
98
+ - spec/spec_helper.rb
99
+ homepage: https://github.com/davejachimiak/fuci
57
100
  licenses:
58
101
  - MIT
59
102
  metadata: {}
@@ -73,8 +116,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
116
  version: '0'
74
117
  requirements: []
75
118
  rubyforge_project:
76
- rubygems_version: 2.0.2
119
+ rubygems_version: 2.0.6
77
120
  signing_key:
78
121
  specification_version: 4
79
- summary: TBA
80
- test_files: []
122
+ summary: Fuci is a library that covers the general case for running recent failures
123
+ from recent CI (continuous integration) builds locally. It includes interfaces for
124
+ server (e.g. Travis, TeamCity) and tester (e.g. RSpec, Cucumber) extensions.
125
+ test_files:
126
+ - spec/lib/fuci/configurable_spec.rb
127
+ - spec/lib/fuci/git_spec.rb
128
+ - spec/lib/fuci/rspec_spec.rb
129
+ - spec/lib/fuci/runner_spec.rb
130
+ - spec/lib/fuci/server_spec.rb
131
+ - spec/lib/fuci/tester_spec.rb
132
+ - spec/lib/fuci_spec.rb
133
+ - spec/spec_helper.rb