see 0.0.18 → 0.0.19

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6fc1306fce1ef8f89fa0b52530fbc82aff7a2c53
4
- data.tar.gz: 8c7faa2c59a0b29377c8d462248734a549dc102d
3
+ metadata.gz: 6e47f55852b907f2b8f9a11d0c25d87cffe20f70
4
+ data.tar.gz: 54a4f9a4e89dc083415c94745b71689dbc79160f
5
5
  SHA512:
6
- metadata.gz: 5abb94324a05d965ed219007999038d9574e8883ca5c41341519e43577535dff250b8ab307bb24e04403222717f1348bd7e38bb5f05df6dcf584d1f9d9b46073
7
- data.tar.gz: d32de757c172c7f6693612802d521cb08519726e44d8b9b174ef9a7943b52a6e29023b958d8cb871b594ba8c64668637923a5fadbdaaaa598d0368d1f19a1fc9
6
+ metadata.gz: dfdd63c1919cdbf72082b65e3f5c7374d51c8f2c83558ffac215a70ecc176f64e5fcf815f4a3a0e9bc22a4683e6d76b85ae62c991ad1ca813f0b6b9865fb79ff
7
+ data.tar.gz: f3e9e3bef0b665e1fa860b87dafe026fec90fba94c1676f90eb8a19c2de2d9b2c7841fcd5d656d9e3e423eac28b7d9f2a31efb686c381c1d5d4c68f38d3e84d1
data/lib/see.rb CHANGED
@@ -1,6 +1,3 @@
1
+ require 'see/config'
1
2
  require 'see/plugins'
2
- require 'see/plugins/github'
3
- require 'see/plugins/pivotal'
4
- require 'see/plugins/travis'
5
- require 'see/plugins/circle'
6
3
  require 'see/runner'
@@ -0,0 +1,18 @@
1
+ require 'yaml'
2
+
3
+ module See
4
+ module Config
5
+ def self.load
6
+ config_path = "#{Dir.pwd}/see.yml"
7
+ begin
8
+ config = YAML.load_file(config_path)
9
+ rescue => error
10
+ puts "No configuration file found (tried #{config_path})".yellow
11
+ puts ' (if the file exists it may be malformed)'
12
+ puts " #{error}".light_red
13
+ exit 1
14
+ end
15
+ config
16
+ end
17
+ end
18
+ end
@@ -1,25 +1,47 @@
1
+ require 'colorize'
2
+
1
3
  module See
2
4
  module Plugins
3
- require 'colorize'
4
-
5
- def self.run_plugin(name, config)
6
- plugins = See::Plugins.constants.map do |const|
7
- plugin = See::Plugins.const_get(const).new
5
+ def self.find_plugins(name)
6
+ See::Plugins.constants.select do |const|
7
+ const != :Plugin
8
+ end.map do |const|
9
+ See::Plugins.const_get(const).new
8
10
  end.select do |plugin|
9
11
  plugin.config_name == name
10
12
  end
11
-
12
- lines = []
13
+ end
14
+
15
+ def self.run_plugin(name, config)
16
+ plugins = find_plugins(name)
13
17
  if plugins.empty?
14
- lines << "\nNo plugin found with the name \"#{name}\"".light_red
15
- else
16
- plugins.each do |plugin|
17
- lines << "\n"
18
- lines << plugin.display_name.light_magenta
19
- lines.concat(plugin.run(config, config[plugin.config_name]))
18
+ return ["\nNo plugin found with the name \"#{name}\"".light_red]
19
+ end
20
+
21
+ lines = ["\n"]
22
+ lines << plugins.map do |plugin|
23
+ lines_from_plugin = [plugin.display_name.light_magenta]
24
+ begin
25
+ lines_from_plugin << plugin.run(config, config[plugin.config_name])
26
+ rescue => error
27
+ lines_from_plugin << [" #{error.message}".red]
28
+ end
29
+ end
30
+ end
31
+
32
+ class Plugin
33
+ def access_token(name)
34
+ token = ENV[name]
35
+ unless token
36
+ raise " You must set #{name} env variable"
20
37
  end
38
+ token
21
39
  end
22
- lines
23
40
  end
24
41
  end
25
42
  end
43
+
44
+ require_relative 'plugins/github'
45
+ require_relative 'plugins/pivotal'
46
+ require_relative 'plugins/travis'
47
+ require_relative 'plugins/circle'
@@ -3,7 +3,7 @@ require 'circleci'
3
3
 
4
4
  module See
5
5
  module Plugins
6
- class Circle
6
+ class Circle < Plugin
7
7
  def display_name
8
8
  'CircleCi'
9
9
  end
@@ -12,43 +12,43 @@ module See
12
12
  'circle'
13
13
  end
14
14
 
15
- def run(config, plugin_config)
16
- lines = []
17
- token = ENV['CIRCLE_CI_ACCESS_TOKEN']
18
- unless token
19
- lines << " You must set CIRCLE_CI_ACCESS_TOKEN env variable".red
20
- return lines
21
- end
22
-
15
+ def latest_builds(account, repository, lines)
16
+ token = access_token('CIRCLE_CI_ACCESS_TOKEN')
23
17
  CircleCi.configure do |cfg|
24
18
  cfg.token = token
25
19
  end
26
20
 
27
- response = CircleCi::Project.recent_builds(plugin_config['account'], plugin_config['repository'])
21
+ response = CircleCi::Project.recent_builds(account, repository)
28
22
  if response.errors.length > 0
29
23
  lines << " Errors encountered:".red
30
24
  response.errors.each do |error|
31
25
  lines << " - " + "Error #{error.code}:".red + " #{JSON.parse(error.message)['message'].strip}"
26
+ raise
32
27
  end
28
+ end
29
+
30
+ response.body[0..4]
31
+ end
32
+
33
+ def run(config, plugin_config)
34
+ lines = []
35
+
36
+ begin
37
+ builds = latest_builds(plugin_config['account'], plugin_config['repository'], lines)
38
+ rescue => error
33
39
  return lines
34
40
  end
35
41
 
36
42
  lines << " Latest Builds:".light_blue
37
- response.body[0..4].each do |thing|
38
- if thing['committer_date']
39
- time = "- #{Date.parse(thing['committer_date']).strftime("%b %e,%l:%M %p")}".black
40
- end
41
- if thing['status'].match(/failed|not_run/)
42
- status = thing['status'].red
43
- else
44
- status = thing['status'].green
45
- end
46
- if thing['committer_name']
47
- name = "[#{thing['committer_name']}]".cyan
48
- else
49
- name = ""
50
- end
51
- lines << " - #{status.capitalize} #{thing["vcs_revision"][0..8].light_yellow} #{("#"+thing['build_num'].to_s).light_green} #{thing['subject']} #{name} #{time}"
43
+ lines << builds.map do |build|
44
+ time = "- #{Date.parse(build['committer_date']).strftime("%b %e,%l:%M %p")}".black if build['committer_date']
45
+ was_bad = build['status'].match(/failed|not_run/)
46
+ status = build['status'].capitalize.send(was_bad ? :red : :green)
47
+ name = "[#{build['committer_name']}]".cyan ||= ''
48
+ commit_id = build["vcs_revision"][0..8].light_yellow
49
+ build_number = ("#"+build['build_num'].to_s).light_green
50
+
51
+ " - #{status} #{commit_id} #{build_number} #{build['subject']} #{name} #{time}"
52
52
  end
53
53
  lines
54
54
  end
@@ -2,7 +2,7 @@ require 'octokit'
2
2
 
3
3
  module See
4
4
  module Plugins
5
- class GitHub
5
+ class GitHub < Plugin
6
6
  def display_name
7
7
  'GitHub'
8
8
  end
@@ -13,42 +13,34 @@ module See
13
13
 
14
14
  def run(config, plugin_config)
15
15
  info = []
16
- token = ENV['GITHUB_ACCESS_TOKEN']
17
- unless token
18
- info << " You must set GITHUB_ACCESS_TOKEN env variable".red
19
- return info
20
- end
16
+ token = access_token('GITHUB_ACCESS_TOKEN')
21
17
 
22
- client = Octokit::Client.new :access_token => token
23
18
  account = plugin_config['account']
24
19
  repository = plugin_config['repository']
25
20
  github_name = [account, repository].join '/'
26
21
 
22
+ client = Octokit::Client.new :access_token => token
27
23
  pull_requests = client.pull_requests(github_name)
28
- if pull_requests.count > 0
29
- info << " Open pull requests:".light_blue
30
- pull_requests.each do |pull_request|
31
- username = "[#{pull_request.user.login}]".cyan
32
- time = "- #{pull_request.updated_at.strftime("%b %e,%l:%M %p")}".black
33
- info << " - #{pull_request.title} #{username} #{time}"
34
- end
35
- else
36
- info << " No open pull requests".yellow
37
- end
24
+ info.concat(show_collection('Pull Requests', pull_requests))
38
25
 
39
26
  issues = client.issues(github_name)
40
- if issues.count > 0
41
- info << " Open issues:".light_blue
42
- issues.each do |issue|
43
- username = "[#{issue.user.login}]".cyan
44
- time = "- #{issue.updated_at.strftime("%b %e,%l:%M %p")}".black
45
- info << " - #{issue.title} #{username} #{time}"
46
- end
47
- else
48
- info << "No open issues".yellow
49
- end
27
+ info.concat(show_collection('Issues', issues))
50
28
  info
51
29
  end
30
+
31
+ def show_collection(name, collection)
32
+ if collection.count == 0
33
+ return [" No open #{name.downcase}".yellow]
34
+ end
35
+
36
+ info = []
37
+ info << " Open #{name.downcase}:".light_blue
38
+ info << collection.map do |github_object|
39
+ username = "[#{github_object.user.login}]".cyan
40
+ time = "- #{github_object.updated_at.strftime("%b %e,%l:%M %p")}".black
41
+ " - #{github_object.title} #{username} #{time}"
42
+ end
43
+ end
52
44
  end
53
45
  end
54
46
  end
@@ -2,7 +2,7 @@ require 'pivotal-tracker'
2
2
 
3
3
  module See
4
4
  module Plugins
5
- class Pivotal
5
+ class Pivotal < Plugin
6
6
  def display_name
7
7
  'Pivotal Tracker'
8
8
  end
@@ -12,14 +12,10 @@ module See
12
12
  end
13
13
 
14
14
  def run(config, plugin_config)
15
- info = []
16
- token = ENV['PIVOTAL_TRACKER_ACCESS_TOKEN']
17
- unless token
18
- info << " You must set PIVOTAL_TRACKER_ACCESS_TOKEN env variable".red
19
- return info
20
- end
15
+ lines = []
16
+ @token = access_token('PIVOTAL_TRACKER_ACCESS_TOKEN')
21
17
 
22
- PivotalTracker::Client.token = token
18
+ PivotalTracker::Client.token = @token
23
19
  project = PivotalTracker::Project.find(plugin_config['project'])
24
20
 
25
21
  next_unowned_story = nil
@@ -40,23 +36,23 @@ module See
40
36
  end
41
37
 
42
38
  if stories.length > 0
43
- info << " Stories being worked on:".light_blue
44
- info << stories
39
+ lines << " Stories being worked on:".light_blue
40
+ lines << stories
45
41
  else
46
- info << " No stories being worked on".yellow
42
+ lines << " No stories being worked on".yellow
47
43
  end
48
44
 
49
45
 
50
46
  if next_unowned_story
51
- info << " Next story that can be worked on:".light_blue
47
+ lines << " Next story that can be worked on:".light_blue
52
48
  time = "- #{next_unowned_story.created_at.strftime("%b %e,%l:%M %p")}".black
53
49
  id = "#{next_unowned_story.id}".light_yellow
54
50
  name = next_unowned_story.name
55
- info << " - #{id} #{name} #{time}"
51
+ lines << " - #{id} #{name} #{time}"
56
52
  else
57
- info << "No stories ready to work on".yellow
53
+ lines << "No stories ready to work on".yellow
58
54
  end
59
- info
55
+ lines
60
56
  end
61
57
  end
62
58
  end
@@ -1,12 +1,6 @@
1
- require 'yaml'
2
-
3
1
  module See
4
- class Runner
2
+ module Runner
5
3
  def self.run
6
- Runner.new.run
7
- end
8
-
9
- def run
10
4
  #
11
5
  # Whole thing happens in two major steps:
12
6
  # 1. load ./see.yml
@@ -15,41 +9,47 @@ module See
15
9
  # 2. provide information from each configured plugin
16
10
  # (provide content at the top and no content at the bottom)
17
11
  #
18
- config_path = "#{Dir.pwd}/see.yml"
19
- begin
20
- config = YAML.load_file(config_path)
21
- rescue
22
- puts "No configuration file found (tried #{config_path})".yellow
23
- puts ' (if the file exists it may be malformed)'
24
- exit 1
25
- end
26
-
27
- progress = Thread.new do
28
- print "Pulling data from #{config.length} source#{config.length == 1 ? '' : 's'}"
29
- loop do
30
- sleep 0.25
31
- print '.'
32
- end
33
- end
34
-
35
- threads = []
36
- config.each do |cfg|
37
- threads << Thread.new do
12
+ config = See::Config.load
13
+ progress = ProgressIndicator.start(config.length)
14
+ threads = config.map do |cfg|
15
+ Thread.new do
38
16
  begin
39
- Thread.current[:lines] = [See::Plugins.run_plugin(cfg[0], config)]
17
+ Thread.current[:lines] = See::Plugins.run_plugin(cfg[0], config)
40
18
  rescue => error
41
- Thread.current[:lines] = ["Error running plugin: #{cfg[0]}".red]
42
- Thread.current[:lines] << " #{error}".light_red
19
+ Thread.current[:lines] = "\nError running plugin: #{cfg[0]}".red
20
+ Thread.current[:lines] << "\n #{error}".light_red
43
21
  end
44
22
  end
45
23
  end
46
24
 
47
- lines = threads.map { |t| t.join[:lines].flatten }
48
- progress.kill
25
+ lines = threads.map { |t| t.join[:lines] }.sort_by { |l| l[0] }
26
+ progress.stop
49
27
 
50
28
  puts
51
- lines.sort_by { |l| l[0] }.each { |l| puts l }
29
+ lines.each { |t| puts t }
52
30
  puts
53
31
  end
32
+
33
+ class ProgressIndicator
34
+ def self.start(things_todo_count)
35
+ progress = ProgressIndicator.new
36
+ progress.start(things_todo_count)
37
+ progress
38
+ end
39
+
40
+ def start(things_todo_count)
41
+ @progress = Thread.new do
42
+ print "Pulling data from #{things_todo_count} source#{things_todo_count == 1 ? '' : 's'}"
43
+ loop do
44
+ sleep 0.25
45
+ print '.'
46
+ end
47
+ end
48
+ end
49
+
50
+ def stop
51
+ @progress.kill
52
+ end
53
+ end
54
54
  end
55
55
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: see
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.18
4
+ version: 0.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Avila
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-21 00:00:00.000000000 Z
11
+ date: 2014-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -130,6 +130,7 @@ extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
132
  - bin/see
133
+ - lib/see/config.rb
133
134
  - lib/see/plugins.rb
134
135
  - lib/see/plugins/github.rb
135
136
  - lib/see/plugins/pivotal.rb