motion-specwrap 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 +17 -0
- data/Gemfile +4 -0
- data/LICENSE +22 -0
- data/README.md +18 -0
- data/Rakefile +2 -0
- data/bin/motion-specwrap +43 -0
- data/lib/motion-specwrap/config.rb +12 -0
- data/lib/motion-specwrap/spec_setup.rb +16 -0
- data/lib/motion-specwrap/version.rb +5 -0
- data/lib/motion-specwrap.rb +2 -0
- data/motion-specwrap.gemspec +17 -0
- metadata +72 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2012 Keyvan Fatehi
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# Motion::Specwrap
|
2
|
+
You may use this gem if you are using a continuous integration server and wish that RubyMotion's `rake spec` command behaved as you would expect (e.g. return an exit status code that reflects your build condition)
|
3
|
+
|
4
|
+
### Usage
|
5
|
+
Add `motion-specwrap` to your Gemfile, run `bundle`, add `motion-specwrap` to your project's Rakefile.
|
6
|
+
Now you may execute `bundle exec motion-specwrap` instead of `bundle exec rake spec` in order to get a proper exit value corresponding to your tests passing or failing. Woohoo!
|
7
|
+
|
8
|
+
### The Problem
|
9
|
+
* When running "rake spec" in your RubyMotion project, you always get an exit status of 0, irrespective of the tests passing or failing. I believe this is the case because when checking the status code, we are actually getting the Simulator's status code, despite Bacon exiting (from within the context of the simulator) with a proper code.
|
10
|
+
* This is a problem when integrating your RubyMotion app into a continuous integration workflow which uses this exit status to determine if the build passed or failed. Specifically, I've created this in order to bring RubyMotion support to OctopusCI (http://octopusci.com)
|
11
|
+
* The problem was reported on 06-06-2012 here: https://groups.google.com/forum/?fromgroups#!topic/rubymotion/1unBYE0wJ-0
|
12
|
+
|
13
|
+
### The Workaround
|
14
|
+
1. Bacon is made to output its exit status code to standard output, such that:
|
15
|
+
2. A wrapper script is provided which runs rake spec as normal, checks the exit status code printed by Bacon, and uses it to exit with the correct exit status code.
|
16
|
+
|
17
|
+
### Final Remarks
|
18
|
+
I am hoping that lrz goes ahead and solves the original problem in a later patch to RubyMotion. Until then, we can use this.
|
data/Rakefile
ADDED
data/bin/motion-specwrap
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
regexp = /Specwrap captured exit status code: (\d*)/
|
5
|
+
|
6
|
+
def watch_for(file, pattern)
|
7
|
+
linebuf = ""
|
8
|
+
f = File.open(file,"r")
|
9
|
+
f.seek(0,IO::SEEK_END)
|
10
|
+
while true do
|
11
|
+
select([f])
|
12
|
+
line = f.gets
|
13
|
+
if !line.nil?
|
14
|
+
if (matches = line.match(pattern))
|
15
|
+
exit(matches[1].to_i)
|
16
|
+
else
|
17
|
+
if line.include? "\n"
|
18
|
+
puts linebuf + line
|
19
|
+
linebuf.clear
|
20
|
+
else
|
21
|
+
linebuf << line
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
file = Tempfile.new "motion-specwrap"
|
29
|
+
|
30
|
+
begin
|
31
|
+
file_watch_thread = Thread.new do
|
32
|
+
watch_for(file.path, regexp)
|
33
|
+
end
|
34
|
+
Open3.popen2e("rake spec > #{file.path}") do |stdin, out_and_err, wait_thr|
|
35
|
+
while (line = out_and_err.gets)
|
36
|
+
puts line
|
37
|
+
end
|
38
|
+
end
|
39
|
+
ensure
|
40
|
+
file_watch_thread.join unless file_watch_thread.nil?
|
41
|
+
file.close
|
42
|
+
file.unlink
|
43
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Bacon
|
2
|
+
def self.context_did_finish(context)
|
3
|
+
handle_specification_end
|
4
|
+
Counter[:context_depth] -= 1
|
5
|
+
if (@current_context_index + 1) < @contexts.size
|
6
|
+
@current_context_index += 1
|
7
|
+
run
|
8
|
+
else
|
9
|
+
# DONE
|
10
|
+
handle_summary
|
11
|
+
status_code = Counter.values_at(:failed, :errors).inject(:+)
|
12
|
+
puts "Specwrap captured exit status code: #{status_code}"
|
13
|
+
exit(status_code)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/motion-specwrap/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.authors = ["Keyvan Fatehi"]
|
6
|
+
gem.email = ["keyvanfatehi@gmail.com"]
|
7
|
+
gem.description = "Exit value support wrapper for RubyMotion's 'rake spec'"
|
8
|
+
gem.summary = "Exit value support wrapper for RubyMotion's 'rake spec'"
|
9
|
+
gem.homepage = "https://github.com/mdks/motion-specwrap"
|
10
|
+
|
11
|
+
gem.files = `git ls-files`.split($\)
|
12
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
13
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
14
|
+
gem.name = "motion-specwrap"
|
15
|
+
gem.require_paths = ["lib"]
|
16
|
+
gem.version = Motion::Specwrap::VERSION
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: motion-specwrap
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 1
|
8
|
+
version: "0.1"
|
9
|
+
platform: ruby
|
10
|
+
authors:
|
11
|
+
- Keyvan Fatehi
|
12
|
+
autorequire:
|
13
|
+
bindir: bin
|
14
|
+
cert_chain: []
|
15
|
+
|
16
|
+
date: 2012-06-07 00:00:00 -07:00
|
17
|
+
default_executable:
|
18
|
+
dependencies: []
|
19
|
+
|
20
|
+
description: Exit value support wrapper for RubyMotion's 'rake spec'
|
21
|
+
email:
|
22
|
+
- keyvanfatehi@gmail.com
|
23
|
+
executables:
|
24
|
+
- motion-specwrap
|
25
|
+
extensions: []
|
26
|
+
|
27
|
+
extra_rdoc_files: []
|
28
|
+
|
29
|
+
files:
|
30
|
+
- .gitignore
|
31
|
+
- Gemfile
|
32
|
+
- LICENSE
|
33
|
+
- README.md
|
34
|
+
- Rakefile
|
35
|
+
- bin/motion-specwrap
|
36
|
+
- lib/motion-specwrap.rb
|
37
|
+
- lib/motion-specwrap/config.rb
|
38
|
+
- lib/motion-specwrap/spec_setup.rb
|
39
|
+
- lib/motion-specwrap/version.rb
|
40
|
+
- motion-specwrap.gemspec
|
41
|
+
has_rdoc: true
|
42
|
+
homepage: https://github.com/mdks/motion-specwrap
|
43
|
+
licenses: []
|
44
|
+
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options: []
|
47
|
+
|
48
|
+
require_paths:
|
49
|
+
- lib
|
50
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
segments:
|
55
|
+
- 0
|
56
|
+
version: "0"
|
57
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
segments:
|
62
|
+
- 0
|
63
|
+
version: "0"
|
64
|
+
requirements: []
|
65
|
+
|
66
|
+
rubyforge_project:
|
67
|
+
rubygems_version: 1.3.6
|
68
|
+
signing_key:
|
69
|
+
specification_version: 3
|
70
|
+
summary: Exit value support wrapper for RubyMotion's 'rake spec'
|
71
|
+
test_files: []
|
72
|
+
|