thong 0.0.1 → 0.0.2
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/lib/thong.rb +6 -1
- data/lib/thong/api.rb +63 -0
- data/lib/thong/configuration.rb +61 -0
- data/lib/thong/simplecov.rb +55 -7
- data/lib/thong/version.rb +1 -1
- data/thong.gemspec +1 -0
- metadata +31 -18
data/lib/thong.rb
CHANGED
@@ -1,11 +1,14 @@
|
|
1
1
|
require 'colorize'
|
2
2
|
require 'simplecov'
|
3
3
|
require "thong/version"
|
4
|
+
require "thong/configuration"
|
5
|
+
require "thong/api"
|
6
|
+
|
4
7
|
require "thong/simplecov"
|
5
8
|
|
6
9
|
module Thong
|
7
10
|
extend self
|
8
|
-
|
11
|
+
|
9
12
|
attr_accessor :adapter
|
10
13
|
|
11
14
|
def wear!(simplecov_setting=nil, &block)
|
@@ -26,8 +29,10 @@ module Thong
|
|
26
29
|
if simplecov_setting
|
27
30
|
puts "[Thong] Using SimpleCov's '#{simplecov_setting}' settings.".colorize(:green)
|
28
31
|
if block_given?
|
32
|
+
puts "block given"
|
29
33
|
::SimpleCov.start(simplecov_setting) { instance_eval &block }
|
30
34
|
else
|
35
|
+
puts "regular run"
|
31
36
|
::SimpleCov.start(simplecov_setting)
|
32
37
|
end
|
33
38
|
elsif block_given?
|
data/lib/thong/api.rb
ADDED
@@ -0,0 +1,63 @@
|
|
1
|
+
module Thong
|
2
|
+
class API
|
3
|
+
require 'multi_json'
|
4
|
+
require 'rest_client'
|
5
|
+
|
6
|
+
CONFIG = Thong::Configuration.configuration
|
7
|
+
THONG_URL = CONFIG.fetch(:thong_url) { nil }
|
8
|
+
API_VERSION = "v1"
|
9
|
+
ENDPOINT = "#{THONG_URL}/api/#{API_VERSION}"
|
10
|
+
|
11
|
+
|
12
|
+
def self.post_json(endpoint, hash)
|
13
|
+
disable_net_blockers!
|
14
|
+
url = endpoint_to_url(endpoint)
|
15
|
+
puts "[Thong] Submitting to #{ENDPOINT}".colorize(:cyan)
|
16
|
+
hash = hash.merge(CONFIG)
|
17
|
+
response = RestClient.post(url, :json_file => hash_to_file(hash))
|
18
|
+
response_hash = MultiJson.load(response.to_str)
|
19
|
+
puts "[Thong] #{ response_hash['message'] }".colorize(:cyan)
|
20
|
+
if response_hash['message']
|
21
|
+
puts "[Thong] #{response_hash['url'].underline}".colorize(:cyan)
|
22
|
+
end
|
23
|
+
rescue RestClient::ServiceUnavailable
|
24
|
+
puts "[Thong] API timeout ocurred, but data should still be processed".colorize(:red)
|
25
|
+
rescue RestClient::InternalServerError
|
26
|
+
puts "[Thong] API internal error occured, please check the log files in your Thong Server".colorize(:red)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def self.disable_net_blockers!
|
32
|
+
if defined?(WebMock) &&
|
33
|
+
allow = WebMock::Config.instance.allow || []
|
34
|
+
WebMock::Config.instance.allow = [*allow].push THONG_URL
|
35
|
+
end
|
36
|
+
|
37
|
+
if defined?(FakeWeb)
|
38
|
+
allow = FakeWeb.allow_net_connect || []
|
39
|
+
FakeWeb.allow_net_connect = [*allow].push THONG_URL
|
40
|
+
end
|
41
|
+
|
42
|
+
if defined?(VCR)
|
43
|
+
VCR.send(VCR.version.major < 2 ? :config : :configure) do |c|
|
44
|
+
c.ignore_hosts THONG_URL
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.endpoint_to_url(endpoint)
|
50
|
+
"#{ENDPOINT}/#{endpoint}"
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.hash_to_file(hash)
|
54
|
+
file = nil
|
55
|
+
Tempfile.open(['thong-upload', 'json']) do |tmpfile|
|
56
|
+
tmpfile.write(MultiJson.dump hash)
|
57
|
+
file = tmpfile
|
58
|
+
end
|
59
|
+
File.new(file.path, 'rb')
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module Thong
|
2
|
+
module Configuration
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
def self.configuration
|
6
|
+
config = {
|
7
|
+
:git => git,
|
8
|
+
}
|
9
|
+
|
10
|
+
yml = self.yaml_config
|
11
|
+
|
12
|
+
if yml
|
13
|
+
config[:configuratiom] = yml
|
14
|
+
config[:thong_url] = yml.fetch(:thong_url) { "http://localhost:3000" }
|
15
|
+
else
|
16
|
+
puts "[Thong] No configuration file found. Will not send data anywhere.".colorize(:red)
|
17
|
+
end
|
18
|
+
config
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.yaml_config
|
22
|
+
if self.config_file && File.exists?(self.config_file)
|
23
|
+
YAML::load_file(self.config_file)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def self.config_file
|
28
|
+
File.expand_path(File.join(Dir.pwd, ".thong.yml"))
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.git
|
32
|
+
git_hash = {}
|
33
|
+
|
34
|
+
git_hash[:head] = {
|
35
|
+
:id => `git log -1 --pretty=format:'%H'`,
|
36
|
+
:author_name => `git log -1 --pretty=format:'%aN'`,
|
37
|
+
:author_email => `git log -1 --pretty=format:'%ae'`,
|
38
|
+
:committer_name => `git log -1 --pretty=format:'%cN'`,
|
39
|
+
:committer_email => `git log -1 --pretty=format:'%ce'`,
|
40
|
+
:message => `git log -1 --pretty=format:'%s'`
|
41
|
+
}
|
42
|
+
|
43
|
+
branch = `git branch`.split("\n").delete_if { |i| i[0] != "*" }
|
44
|
+
git_hash[:branch] = [branch].flatten.first.gsub("* ","")
|
45
|
+
|
46
|
+
remotes = nil
|
47
|
+
begin
|
48
|
+
remotes = `git remote -v`.split(/\n/).map do |remote|
|
49
|
+
splits = remote.split(" ").compact
|
50
|
+
{:name => splits[0], :url => splits[1]}
|
51
|
+
end.uniq
|
52
|
+
rescue
|
53
|
+
end
|
54
|
+
|
55
|
+
git_hash[:remotes] = remotes
|
56
|
+
|
57
|
+
git_hash
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/lib/thong/simplecov.rb
CHANGED
@@ -1,16 +1,64 @@
|
|
1
|
-
require 'json'
|
2
1
|
module Thong
|
3
2
|
module SimpleCov
|
4
3
|
class Formatter
|
5
4
|
def format(result)
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
source_files = []
|
6
|
+
result.files.each { |file|
|
7
|
+
filename = file.filename.gsub(::SimpleCov.root, '.')
|
8
|
+
|
9
|
+
file_coverage = {}
|
10
|
+
file_coverage[:source] = File.open(file.filename, "rb:utf-8").read
|
11
|
+
file_coverage[:name] = filename
|
12
|
+
file_coverage[:percent] = file.covered_percent.round(2)
|
13
|
+
source_files << file_coverage
|
9
14
|
}
|
10
|
-
|
11
|
-
|
12
|
-
|
15
|
+
global_coverage = {
|
16
|
+
:percent => result.covered_percent.round(2),
|
17
|
+
:covered_lines => result.covered_lines,
|
18
|
+
:missed_lines => result.missed_lines,
|
19
|
+
:command_name => result.command_name,
|
20
|
+
:run_at => result.created_at,
|
21
|
+
:covered_files => source_files.size,
|
22
|
+
}
|
23
|
+
display_results(global_coverage)
|
24
|
+
|
25
|
+
if ::Thong::API::CONFIG.fetch(:thong_url) { nil }
|
26
|
+
API.post_json "jobs", {:source_files => source_files, :test_framework => result.command_name.downcase, :run_at => result.created_at}
|
27
|
+
end
|
28
|
+
|
29
|
+
true
|
30
|
+
|
31
|
+
rescue Exception => e
|
32
|
+
display_error e
|
33
|
+
end
|
34
|
+
|
35
|
+
def display_results(coverage)
|
36
|
+
|
37
|
+
if coverage[:percent] > 90
|
38
|
+
color = "green"
|
39
|
+
elsif coverage[:percent] > 80
|
40
|
+
color = "yellow"
|
41
|
+
else
|
42
|
+
color = "red"
|
43
|
+
end
|
44
|
+
|
45
|
+
puts "[Thong] #{coverage[:command_name]} Report generated at #{coverage[:run_at]}".colorize(:green)
|
46
|
+
puts "- #{coverage[:covered_files]} files analyzed".colorize(:white)
|
47
|
+
puts "- #{coverage[:covered_lines]} lines covered by tests.".colorize(:green)
|
48
|
+
puts "- #{coverage[:missed_lines]} lines not covered by tests".colorize(:red)
|
49
|
+
puts "- Coverage is at #{coverage[:percent]}%".colorize(color.to_sym)
|
50
|
+
end
|
51
|
+
|
52
|
+
def display_error(e)
|
53
|
+
puts "Thong encountered an exception:".colorize(:red)
|
54
|
+
puts e.class.to_s.colorize(:red)
|
55
|
+
puts e.message.colorize(:red)
|
56
|
+
if e.respond_to?(:response) && e.response
|
57
|
+
puts e.response.to_s.colorize(:red)
|
58
|
+
end
|
59
|
+
false
|
13
60
|
end
|
61
|
+
|
14
62
|
end
|
15
63
|
end
|
16
64
|
end
|
data/lib/thong/version.rb
CHANGED
data/thong.gemspec
CHANGED
@@ -20,6 +20,7 @@ Gem::Specification.new do |gem|
|
|
20
20
|
gem.add_dependency 'simplecov', ">= 0.7"
|
21
21
|
gem.add_dependency 'colorize'
|
22
22
|
gem.add_dependency 'rest-client'
|
23
|
+
gem.add_dependency 'multi_json'
|
23
24
|
|
24
25
|
gem.add_development_dependency 'rspec'
|
25
26
|
gem.add_development_dependency 'rake'
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: thong
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-09-
|
12
|
+
date: 2013-09-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: simplecov
|
16
|
-
requirement: &
|
16
|
+
requirement: &17604240 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0.7'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *17604240
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: colorize
|
27
|
-
requirement: &
|
27
|
+
requirement: &17603580 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *17603580
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rest-client
|
38
|
-
requirement: &
|
38
|
+
requirement: &17602620 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,21 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *17602620
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: multi_json
|
49
|
+
requirement: &17618340 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
type: :runtime
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *17618340
|
47
58
|
- !ruby/object:Gem::Dependency
|
48
59
|
name: rspec
|
49
|
-
requirement: &
|
60
|
+
requirement: &17617400 !ruby/object:Gem::Requirement
|
50
61
|
none: false
|
51
62
|
requirements:
|
52
63
|
- - ! '>='
|
@@ -54,10 +65,10 @@ dependencies:
|
|
54
65
|
version: '0'
|
55
66
|
type: :development
|
56
67
|
prerelease: false
|
57
|
-
version_requirements: *
|
68
|
+
version_requirements: *17617400
|
58
69
|
- !ruby/object:Gem::Dependency
|
59
70
|
name: rake
|
60
|
-
requirement: &
|
71
|
+
requirement: &17616540 !ruby/object:Gem::Requirement
|
61
72
|
none: false
|
62
73
|
requirements:
|
63
74
|
- - ! '>='
|
@@ -65,10 +76,10 @@ dependencies:
|
|
65
76
|
version: '0'
|
66
77
|
type: :development
|
67
78
|
prerelease: false
|
68
|
-
version_requirements: *
|
79
|
+
version_requirements: *17616540
|
69
80
|
- !ruby/object:Gem::Dependency
|
70
81
|
name: webmock
|
71
|
-
requirement: &
|
82
|
+
requirement: &17615700 !ruby/object:Gem::Requirement
|
72
83
|
none: false
|
73
84
|
requirements:
|
74
85
|
- - =
|
@@ -76,10 +87,10 @@ dependencies:
|
|
76
87
|
version: '1.7'
|
77
88
|
type: :development
|
78
89
|
prerelease: false
|
79
|
-
version_requirements: *
|
90
|
+
version_requirements: *17615700
|
80
91
|
- !ruby/object:Gem::Dependency
|
81
92
|
name: vcr
|
82
|
-
requirement: &
|
93
|
+
requirement: &17614740 !ruby/object:Gem::Requirement
|
83
94
|
none: false
|
84
95
|
requirements:
|
85
96
|
- - =
|
@@ -87,7 +98,7 @@ dependencies:
|
|
87
98
|
version: 1.11.3
|
88
99
|
type: :development
|
89
100
|
prerelease: false
|
90
|
-
version_requirements: *
|
101
|
+
version_requirements: *17614740
|
91
102
|
description: Self hosted version of CoverAlls
|
92
103
|
email:
|
93
104
|
- telmox@gmail.com
|
@@ -101,6 +112,8 @@ files:
|
|
101
112
|
- README.md
|
102
113
|
- Rakefile
|
103
114
|
- lib/thong.rb
|
115
|
+
- lib/thong/api.rb
|
116
|
+
- lib/thong/configuration.rb
|
104
117
|
- lib/thong/simplecov.rb
|
105
118
|
- lib/thong/version.rb
|
106
119
|
- thong.gemspec
|
@@ -118,7 +131,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
118
131
|
version: '0'
|
119
132
|
segments:
|
120
133
|
- 0
|
121
|
-
hash:
|
134
|
+
hash: 4368617769234692345
|
122
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
123
136
|
none: false
|
124
137
|
requirements:
|
@@ -127,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
127
140
|
version: '0'
|
128
141
|
segments:
|
129
142
|
- 0
|
130
|
-
hash:
|
143
|
+
hash: 4368617769234692345
|
131
144
|
requirements: []
|
132
145
|
rubyforge_project:
|
133
146
|
rubygems_version: 1.8.11
|