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 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
@@ -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
- result.files.each { |f|
7
- filename = f.filename.gsub(::SimpleCov.root, '')
8
- puts "#{filename} - #{f.covered_percent.round(2)}%"
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
- puts "Coverage is at #{result.covered_percent.round(2)}%.
11
- #{result.covered_lines} lines covered by test.
12
- #{result.missed_lines} lines not covered by test"
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
@@ -1,3 +1,3 @@
1
1
  module Thong
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
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.1
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-21 00:00:00.000000000 Z
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: &9710000 !ruby/object:Gem::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: *9710000
24
+ version_requirements: *17604240
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: colorize
27
- requirement: &9709380 !ruby/object:Gem::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: *9709380
35
+ version_requirements: *17603580
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: rest-client
38
- requirement: &9708680 !ruby/object:Gem::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: *9708680
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: &9707480 !ruby/object:Gem::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: *9707480
68
+ version_requirements: *17617400
58
69
  - !ruby/object:Gem::Dependency
59
70
  name: rake
60
- requirement: &9723080 !ruby/object:Gem::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: *9723080
79
+ version_requirements: *17616540
69
80
  - !ruby/object:Gem::Dependency
70
81
  name: webmock
71
- requirement: &9722320 !ruby/object:Gem::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: *9722320
90
+ version_requirements: *17615700
80
91
  - !ruby/object:Gem::Dependency
81
92
  name: vcr
82
- requirement: &9721260 !ruby/object:Gem::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: *9721260
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: 1682490243110641045
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: 1682490243110641045
143
+ hash: 4368617769234692345
131
144
  requirements: []
132
145
  rubyforge_project:
133
146
  rubygems_version: 1.8.11