circler 0.6.0 → 0.6.1

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: 936602f560e2e91450584b8ab2c186a37f2d5739
4
- data.tar.gz: 91e836604c0338e304a4084f70a4fb2d7f1f867f
3
+ metadata.gz: 911139590b6993d3e20d1617a4a075205846ef5d
4
+ data.tar.gz: 65679b7ae60bddf899dd63bb96e35bd702db7cde
5
5
  SHA512:
6
- metadata.gz: e186b0c3a8e57895ba5be1f158afeebeb58a838f5c0f25bae3b40c746b1f07f15bbb57e064e222f7490832a8ab345ba96a74c14a7d44eeae2437300806023f76
7
- data.tar.gz: 62d8a1f21cb6cb2e0db79479d767abf4959b088dfcbbec160af95918ad2606507b9fdce0d02075d3aac78193e87434c55b7dc8e9d7d2bedd638a2d9a9ab1a17a
6
+ metadata.gz: e3e827801221bdcecd1e8211545385a79d27093e2346baacc4daf28f2e2e8a8915582f108a8f301a04c62d10367474d348a087224e1973157a179a31819233bb
7
+ data.tar.gz: a396a9550c1f72bb5f88e7227b567d3afbcc6d5ac064b2d259aefb80cf88d8fbe54fbb73859fd0dc4ba6e3595b2a66a6b037abdc10952d8aa4e99329401a324e
@@ -1,55 +1,68 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- circler (0.6.0)
5
- circleci (~> 1.0.3)
4
+ circler (0.6.1)
5
+ circleci (~> 1.1.0)
6
6
  colorize (~> 0.8.1)
7
- faraday (~> 0.11.0)
7
+ faraday (~> 0.12.0)
8
8
  highline (~> 1.7.8)
9
9
  launchy (~> 2.4.3)
10
10
  pusher-client (~> 0.6.2)
11
11
  rugged (~> 0.25.1.1)
12
- terminal-notifier (~> 1.7.1)
13
- terminal-table (~> 1.7.3)
12
+ terminal-notifier (~> 1.8.0)
13
+ terminal-table (~> 1.8.0)
14
14
  thor (~> 0.19.4)
15
15
 
16
16
  GEM
17
17
  remote: https://rubygems.org/
18
18
  specs:
19
- addressable (2.5.0)
19
+ addressable (2.5.1)
20
20
  public_suffix (~> 2.0, >= 2.0.2)
21
- circleci (1.0.3)
21
+ ast (2.3.0)
22
+ circleci (1.1.0)
22
23
  colorize (0.8.1)
23
24
  diff-lcs (1.3)
24
- faraday (0.11.0)
25
+ faraday (0.12.2)
25
26
  multipart-post (>= 1.2, < 3)
26
27
  highline (1.7.8)
27
- json (2.0.3)
28
+ json (2.1.0)
28
29
  launchy (2.4.3)
29
30
  addressable (~> 2.3)
30
31
  multipart-post (2.0.0)
32
+ parser (2.4.0.0)
33
+ ast (~> 2.2)
34
+ powerpack (0.1.1)
31
35
  public_suffix (2.0.5)
32
36
  pusher-client (0.6.2)
33
37
  json
34
38
  websocket (~> 1.0)
39
+ rainbow (2.2.2)
40
+ rake
35
41
  rake (12.0.0)
36
- rspec (3.5.0)
37
- rspec-core (~> 3.5.0)
38
- rspec-expectations (~> 3.5.0)
39
- rspec-mocks (~> 3.5.0)
40
- rspec-core (3.5.4)
41
- rspec-support (~> 3.5.0)
42
- rspec-expectations (3.5.0)
42
+ rspec (3.6.0)
43
+ rspec-core (~> 3.6.0)
44
+ rspec-expectations (~> 3.6.0)
45
+ rspec-mocks (~> 3.6.0)
46
+ rspec-core (3.6.0)
47
+ rspec-support (~> 3.6.0)
48
+ rspec-expectations (3.6.0)
43
49
  diff-lcs (>= 1.2.0, < 2.0)
44
- rspec-support (~> 3.5.0)
45
- rspec-mocks (3.5.0)
50
+ rspec-support (~> 3.6.0)
51
+ rspec-mocks (3.6.0)
46
52
  diff-lcs (>= 1.2.0, < 2.0)
47
- rspec-support (~> 3.5.0)
48
- rspec-support (3.5.0)
53
+ rspec-support (~> 3.6.0)
54
+ rspec-support (3.6.0)
55
+ rubocop (0.47.1)
56
+ parser (>= 2.3.3.1, < 3.0)
57
+ powerpack (~> 0.1)
58
+ rainbow (>= 1.99.1, < 3.0)
59
+ ruby-progressbar (~> 1.7)
60
+ unicode-display_width (~> 1.0, >= 1.0.1)
61
+ ruby-progressbar (1.8.1)
49
62
  rugged (0.25.1.1)
50
- terminal-notifier (1.7.1)
51
- terminal-table (1.7.3)
52
- unicode-display_width (~> 1.1.1)
63
+ terminal-notifier (1.8.0)
64
+ terminal-table (1.8.0)
65
+ unicode-display_width (~> 1.1, >= 1.1.1)
53
66
  thor (0.19.4)
54
67
  unicode-display_width (1.1.3)
55
68
  websocket (1.2.4)
@@ -62,6 +75,7 @@ DEPENDENCIES
62
75
  circler!
63
76
  rake
64
77
  rspec
78
+ rubocop (~> 0.47.1)
65
79
 
66
80
  BUNDLED WITH
67
81
  1.12.5
data/README.md CHANGED
@@ -28,9 +28,9 @@ Commands:
28
28
  circle browse # open circle ci website
29
29
  circle build # show build description
30
30
  circle builds # list builds
31
- circle help [COMMAND] # Describe available commands or one specific command
31
+ circle help [COMMAND] # describe available commands or one specific command
32
32
  circle projects # list projects
33
- circle retry # show build description
33
+ circle retry # retry a build
34
34
  circle version # show gem version
35
35
  circle watch # watch a build in real time
36
36
 
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
- require "bundler/gem_tasks"
2
- require "rspec/core/rake_task"
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
3
 
4
4
  RSpec::Core::RakeTask.new(:spec)
5
5
 
6
- task :default => :spec
6
+ task default: :spec
data/bin/circle CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  require 'circler'
4
4
 
5
- Circler::CLI.start # ここ追加
5
+ Circler::CLI.start
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require "bundler/setup"
4
- require "circler"
3
+ require 'bundler/setup'
4
+ require 'circler'
5
5
 
6
6
  # You can add fixtures and/or initialization code here to make experimenting
7
7
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +10,5 @@ require "circler"
10
10
  # require "pry"
11
11
  # Pry.start
12
12
 
13
- require "irb"
13
+ require 'irb'
14
14
  IRB.start
@@ -3,35 +3,47 @@ lib = File.expand_path('../lib', __FILE__)
3
3
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
  require 'circler/version'
5
5
 
6
- Gem::Specification.new do |spec|
7
- spec.name = "circler"
8
- spec.version = Circler::VERSION
9
- spec.authors = ["unhappychoice"]
10
- spec.email = ["unhappychoice@gmail.com"]
11
-
12
- spec.summary = %q{CLI tool for CircleCI}
13
- spec.description = %q{A command line tool for CircleCI}
14
- spec.homepage = "https://github.com/unhappychoice/circler"
15
- spec.license = "MIT"
16
- spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
- spec.bindir = "exe"
18
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
- spec.require_paths = ["lib"]
20
-
21
- # Production
6
+ def production_dependency(spec)
22
7
  spec.add_dependency 'pusher-client', '~> 0.6.2'
23
8
  spec.add_dependency 'thor', '~> 0.19.4'
24
- spec.add_dependency 'faraday', '~> 0.11.0'
9
+ spec.add_dependency 'faraday', '~> 0.12.0'
25
10
  spec.add_dependency 'launchy', '~> 2.4.3'
26
- spec.add_dependency 'circleci', '~> 1.0.3'
11
+ spec.add_dependency 'circleci', '~> 1.1.0'
27
12
  spec.add_dependency 'rugged', '~> 0.25.1.1'
28
- spec.add_dependency 'terminal-table', '~> 1.7.3'
13
+ spec.add_dependency 'terminal-table', '~> 1.8.0'
29
14
  spec.add_dependency 'highline', '~> 1.7.8'
30
15
  spec.add_dependency 'colorize', '~> 0.8.1'
31
- spec.add_dependency 'terminal-notifier', '~> 1.7.1'
16
+ spec.add_dependency 'terminal-notifier', '~> 1.8.0'
17
+ end
18
+
19
+ def development_dependency(spec)
20
+ spec.add_development_dependency 'bundler'
21
+ spec.add_development_dependency 'rake'
22
+ spec.add_development_dependency 'rspec'
23
+ spec.add_development_dependency 'rubocop', '~> 0.47.1'
24
+ end
25
+
26
+ def project_files
27
+ `git ls-files -z`
28
+ .split("\x0")
29
+ .reject { |f| f.match(%r{^(test|spec|features)/}) }
30
+ end
31
+
32
+ Gem::Specification.new do |spec|
33
+ spec.name = 'circler'
34
+ spec.version = Circler::VERSION
35
+ spec.authors = ['unhappychoice']
36
+ spec.email = ['unhappychoice@gmail.com']
37
+
38
+ spec.summary = 'CLI tool for CircleCI'
39
+ spec.description = 'A command line tool for CircleCI'
40
+ spec.homepage = 'https://github.com/unhappychoice/circler'
41
+ spec.license = 'MIT'
42
+ spec.files = project_files
43
+ spec.bindir = 'exe'
44
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
45
+ spec.require_paths = ['lib']
32
46
 
33
- # Development
34
- spec.add_development_dependency "bundler"
35
- spec.add_development_dependency "rake"
36
- spec.add_development_dependency "rspec"
47
+ production_dependency spec
48
+ development_dependency spec
37
49
  end
data/exe/circle CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  require 'circler'
4
4
 
5
- Circler::CLI.start # ここ追加
5
+ Circler::CLI.start
@@ -30,7 +30,7 @@ require 'circler/networking/pusher_client'
30
30
  module Circler
31
31
  class CLI < Thor
32
32
  desc 'projects', 'list projects'
33
- method_option :format, aliases: 'f', type: :string, banner: 'pretty/simple', default: 'pretty'
33
+ method_option :format, aliases: 'f', type: :string, banner: 'pretty/simple'
34
34
  def projects
35
35
  ProjectsCommand.run(options)
36
36
  end
@@ -38,7 +38,7 @@ module Circler
38
38
  desc 'builds', 'list builds'
39
39
  method_option :project, aliases: 'p', type: :string, banner: 'user/project'
40
40
  method_option :branch, aliases: 'b', type: :string, banner: 'some-branch'
41
- method_option :format, aliases: 'f', type: :string, banner: 'pretty/simple', default: 'pretty'
41
+ method_option :format, aliases: 'f', type: :string, banner: 'pretty/simple'
42
42
  def builds
43
43
  BuildsCommand.run(options)
44
44
  end
@@ -1,7 +1,7 @@
1
1
  module Circler
2
2
  class BaseCommand
3
3
  class << self
4
- def setup_token()
4
+ def setup_token
5
5
  CircleCi.configure do |config|
6
6
  config.token = ENV['CIRCLE_CI_TOKEN'] || ask('Circle CI token ? :')
7
7
  end
@@ -10,8 +10,8 @@ module Circler
10
10
  def project_name(options)
11
11
  if options.project
12
12
  options.project
13
- elsif self.reponame
14
- self.reponame
13
+ elsif reponame
14
+ reponame
15
15
  else
16
16
  say ProjectPrinter.new(Project.all)
17
17
  ask('Input user-name/project-name :')
@@ -21,13 +21,18 @@ module Circler
21
21
  def reponame
22
22
  repository = Rugged::Repository.new('.')
23
23
  origin = repository.remotes.find { |r| r.name == 'origin' }
24
- return $1 if origin.url =~ %r{git@github.com:([\w_-]+/[\w_-]+)\.git}
24
+ regexp = %r{git@github.com(?::|/)([\w_-]+/[\w_-]+)(?:\.git)*}
25
+ return Regexp.last_match(1) if origin.url =~ regexp
25
26
  nil
26
27
  end
27
28
 
28
29
  def build_number(options)
29
30
  options.build || ask('Input build number')
30
31
  end
32
+
33
+ def should_be_pretty(options)
34
+ options['format'] != 'simple'
35
+ end
31
36
  end
32
37
  end
33
38
  end
@@ -10,7 +10,7 @@ module Circler
10
10
 
11
11
  def url(project, number)
12
12
  return "https://circleci.com/gh/#{project}" unless number
13
- return "https://circleci.com/gh/#{project}/#{number}"
13
+ "https://circleci.com/gh/#{project}/#{number}"
14
14
  end
15
15
  end
16
16
  end
@@ -5,13 +5,14 @@ module Circler
5
5
  setup_token
6
6
  username, reponame = project_name(options).split('/')
7
7
 
8
- if options.branch
9
- builds = Build.branch(username, reponame, options.branch)
10
- else
11
- builds = Build.all(username, reponame)
12
- end
8
+ builds =
9
+ if options.branch
10
+ Build.branch(username, reponame, options.branch)
11
+ else
12
+ Build.all(username, reponame)
13
+ end
13
14
 
14
- say BuildPrinter.new(builds, compact: options['format'] == 'simple')
15
+ say BuildPrinter.new(builds, pretty: should_be_pretty(options))
15
16
  end
16
17
  end
17
18
  end
@@ -7,7 +7,7 @@ module Circler
7
7
  number = build_number(options)
8
8
  build = Build.cancel(username, reponame, number)
9
9
  if build.username
10
- say "build #{build.username}/#{build.reponame} #{build.build_number} is canceled."
10
+ say "build #{build.project_name} #{build.build_number} is canceled."
11
11
  else
12
12
  say "failed to cancel #{username}/#{reponame} #{number}."
13
13
  end
@@ -3,7 +3,7 @@ module Circler
3
3
  class << self
4
4
  def run(options)
5
5
  setup_token
6
- say ProjectPrinter.new(Project.all, compact: options['format'] == 'simple')
6
+ say ProjectPrinter.new(Project.all, pretty: should_be_pretty(options))
7
7
  end
8
8
  end
9
9
  end
@@ -7,9 +7,9 @@ module Circler
7
7
  number = build_number(options)
8
8
  build = Build.retry(username, reponame, number)
9
9
  if build.username
10
- say "build #{build.username}/#{build.reponame} #{build.build_number} is triggered."
10
+ say "build #{username}/#{reponame} #{build.build_number} is triggered"
11
11
  else
12
- say "failed to trigger #{username}/#{reponame} #{number}."
12
+ say "failed to trigger #{username}/#{reponame} #{number}"
13
13
  end
14
14
  end
15
15
  end
@@ -3,14 +3,11 @@ module Circler
3
3
  class << self
4
4
  def run(options)
5
5
  setup_token
6
+ setup_client
6
7
 
7
8
  build = get_build(options)
8
9
 
9
- if !build.nil? && build.running?
10
- say 'Connecting to pusher'.blue
11
- setup_client
12
- say 'Connected'.blue
13
-
10
+ if build && build.running?
14
11
  start_watch(build)
15
12
  wait_until_finish
16
13
  finalize(build, build.channel_name)
@@ -21,61 +18,53 @@ module Circler
21
18
 
22
19
  private
23
20
 
24
- def setup_client()
25
- @@client = CirclerPusherClient.new
26
- @@client.connect
21
+ def setup_client
22
+ @client = CirclerPusherClient.new
23
+ @client.connect
27
24
  end
28
25
 
29
26
  def get_build(options)
30
27
  username, reponame = project_name(options).split('/')
31
- number = build_number(options)
28
+ number = build_number options
32
29
  Build.get(username, reponame, number)
33
30
  end
34
31
 
35
32
  def start_watch(build)
36
- @@running = true
37
- print_bordered "Start watching #{build.username}/#{build.reponame} build ##{build.build_number}".blue
38
- TerminalNotifier.notify("Start to build #{build.username}/#{build.reponame} build ##{build.build_number}")
33
+ @running = true
34
+ text = "Start watching #{build.project_name} ##{build.build_number}"
35
+ print_bordered text
36
+ TerminalNotifier.notify text
39
37
 
40
- bind_event_handling(build.channel_name)
38
+ bind_event_handling build.channel_name
41
39
  end
42
40
 
43
41
  def bind_event_handling(channel)
44
- @@client.bind(channel, 'newAction') do |data|
45
- JSON.parse(data).each do |d|
46
- print_bordered d['log']['name'].green
47
- end
42
+ @client.bind_event_json(channel, 'newAction') do |json|
43
+ print_bordered json['log']['name'].green
48
44
  end
49
45
 
50
- @@client.bind(channel, 'appendAction') do |data|
51
- JSON.parse(data).each { |d| say d['out']['message'] }
46
+ @client.bind_event_json(channel, 'appendAction') do |json|
47
+ say json['out']['message']
52
48
  end
53
49
 
54
- @@client.bind(channel, 'updateAction') do |data|
55
- JSON.parse(data).each do |d|
56
- @@running = d['log']['name'] != 'Disable SSH'
57
- end
50
+ @client.bind_event_json(channel, 'updateAction') do |json|
51
+ @running = json['log']['name'] != 'Disable SSH'
58
52
  end
59
53
  end
60
54
 
61
55
  def wait_until_finish
62
- while @@running
63
- sleep(1)
64
- end
56
+ sleep(1) while @running
65
57
  end
66
58
 
67
59
  def finalize(build, channel)
68
- @@client.unsubscribe(channel)
69
-
70
- print_bordered "Finish watching #{build.username}/#{build.reponame} build ##{build.build_number}".blue
71
- TerminalNotifier.notify("Finish building #{build.username}/#{build.reponame} build ##{build.build_number}")
60
+ @client.unsubscribe(channel)
61
+ text = "Finish watching #{build.project_name} ##{build.build_number}"
62
+ print_bordered text.blue
63
+ TerminalNotifier.notify text
72
64
  end
73
65
 
74
66
  def print_bordered(text)
75
- say Terminal::Table.new(
76
- rows: [[text]],
77
- style: { width: 120 }
78
- ).to_s
67
+ say Terminal::Table.new(rows: [[text]], style: { width: 120 }).to_s
79
68
  end
80
69
  end
81
70
  end
@@ -14,6 +14,12 @@ class CirclerPusherClient
14
14
  end
15
15
  end
16
16
 
17
+ def bind_event_json(channel, event)
18
+ bind(channel, event) do |data|
19
+ JSON.parse(data).each { |json| yield(json) }
20
+ end
21
+ end
22
+
17
23
  def unsubscribe(channel)
18
24
  @socket.unsubscribe(channel)
19
25
  end
@@ -27,7 +33,7 @@ class CirclerPusherClient
27
33
  def pusher_options
28
34
  {
29
35
  secure: true,
30
- auth_method: Proc.new { |a, b| auth(a, b) },
36
+ auth_method: proc { |a, b| auth(a, b) },
31
37
  logger: Logger.new('/dev/null')
32
38
  }
33
39
  end
@@ -1,40 +1,57 @@
1
1
  module Circler
2
2
  class BuildPrinter
3
- def initialize(builds, compact: false)
3
+ def initialize(builds, pretty: true)
4
4
  @builds = builds
5
- @compact = compact
5
+ @pretty = pretty
6
6
  end
7
7
 
8
8
  def to_s
9
- if @compact
10
- max_row_widths = max_row_widths(@builds)
11
- @builds.map(&:information)
12
- .map { |array| array.map.with_index { |column, index| column.to_s + ' ' * (max_row_widths[index] - column.to_s.size) }.join(' ').to_s }
13
- .join("\n")
14
- else
15
- Terminal::Table.new(title: title, headings: headings, rows: rows).to_s
16
- end
9
+ @pretty ? print_pretty : print_compact
17
10
  end
18
11
 
19
12
  private
20
13
 
14
+ def print_compact
15
+ rows.map { |row| pad_columns_by_space(row, max_row_widths) }.join("\n")
16
+ end
17
+
18
+ def print_pretty
19
+ Terminal::Table.new(title: title, headings: headings, rows: rows).to_s
20
+ end
21
+
21
22
  def title
22
- "Recent Builds / #{@builds.first.username}/#{@builds.first.reponame}".green
23
+ build = @builds.first
24
+ "Recent Builds / #{build.project_name}".green
23
25
  end
24
26
 
25
27
  def headings
26
- ['Number', 'Status', 'Branch', 'Author', 'Commit', 'Duration', 'Start time']
28
+ %w(Number Status Branch Author Commit Duration StartTime)
27
29
  end
28
30
 
29
31
  def rows
30
32
  @builds.map(&:information)
31
33
  end
32
34
 
33
- def max_row_widths(builds)
34
- builds.map(&:information)
35
- .map { |array| array.map(&:to_s).map(&:size) }
36
- .transpose
37
- .map(&:max)
35
+ def max_row_widths
36
+ @builds
37
+ .map(&:information)
38
+ .map { |array| array.map(&:to_s).map(&:size) }
39
+ .transpose
40
+ .map(&:max)
41
+ end
42
+
43
+ def pad_columns_by_space(columns, max_widths)
44
+ columns
45
+ .map
46
+ .with_index { |column, i| pad_column_by_space(column, max_widths, i) }
47
+ .join(' ')
48
+ .to_s
49
+ end
50
+
51
+ def pad_column_by_space(column, max_widths, index)
52
+ column_string = column.to_s
53
+ spaces = ' ' * (max_widths[index] - column_string.size)
54
+ column_string + spaces
38
55
  end
39
56
  end
40
57
  end
@@ -1,21 +1,31 @@
1
1
  module Circler
2
2
  class ProjectPrinter
3
3
  attr_accessor :compact
4
- def initialize(projects, compact: false)
4
+ def initialize(projects, pretty: true)
5
5
  @projects = projects
6
- @compact = compact
6
+ @pretty = pretty
7
7
  end
8
8
 
9
9
  def to_s
10
- if @compact
11
- @projects.map(&:information).map { |array| array.join('/').to_s }.sort.join("\n")
12
- else
13
- Terminal::Table.new(
14
- title: 'Projects'.green,
15
- headings: ['User name', 'Repository name'],
16
- rows: @projects.map(&:information)
17
- ).to_s
18
- end
10
+ @pretty ? print_pretty : print_compact
11
+ end
12
+
13
+ private
14
+
15
+ def print_compact
16
+ @projects
17
+ .map(&:information)
18
+ .map { |array| array.join('/').to_s }
19
+ .sort
20
+ .join("\n")
21
+ end
22
+
23
+ def print_pretty
24
+ Terminal::Table.new(
25
+ title: 'Projects'.green,
26
+ headings: ['User name', 'Repository name'],
27
+ rows: @projects.map(&:information)
28
+ ).to_s
19
29
  end
20
30
  end
21
31
  end
@@ -1,33 +1,20 @@
1
1
  module Circler
2
2
  class StepPrinter
3
- def initialize(steps, compact: false)
3
+ def initialize(steps, pretty: true)
4
4
  @steps = steps
5
- @compact = compact
5
+ @pretty = pretty
6
6
  end
7
7
 
8
8
  def to_s
9
- table = Terminal::Table.new do |t|
9
+ Terminal::Table.new do |t|
10
10
  @steps
11
- .group_by {|s| s.type }
11
+ .group_by(&:type)
12
12
  .each do |key, steps|
13
13
  t << :separator
14
- t << [{ value: key.green, alignment: :center, :colspan => 2 }]
15
- steps.each do |s|
16
- t << :separator
17
-
18
- s.actions.each do |a|
19
- t << [
20
- colorize_by_status(a.name.slice(0..120), a.status),
21
- format_time(a.run_time_millis)
22
- ]
23
- if a.failed? && a.log
24
- t << [{ value: a.log, alignment: :left, colspan: 2}]
25
- end
26
- end
27
- end
14
+ t << [{ value: key.green, alignment: :center, colspan: 2 }]
15
+ steps.each { |s| print_actions(t, s) }
28
16
  end
29
- end
30
- table.to_s
17
+ end.to_s
31
18
  end
32
19
 
33
20
  private
@@ -45,8 +32,21 @@ module Circler
45
32
  def format_time(time)
46
33
  return '' unless time
47
34
  minute = format('%02d', time / 1000 / 60)
48
- second = format('%02d', (time / 1000) % 60)
35
+ second = format('%02d', (time / 1000) % 60)
49
36
  "#{minute}:#{second}"
50
37
  end
38
+
39
+ def print_actions(table, step)
40
+ table << :separator
41
+ step.actions.each do |a|
42
+ table << [
43
+ colorize_by_status(a.name.slice(0..120), a.status),
44
+ format_time(a.run_time_millis)
45
+ ]
46
+ if a.failed? && a.log
47
+ table << [{ value: a.log, alignment: :left, colspan: 2 }]
48
+ end
49
+ end
50
+ end
51
51
  end
52
52
  end
@@ -10,13 +10,13 @@ module Circler
10
10
 
11
11
  def log
12
12
  request(@hash['output_url'])
13
- .map{ |r|
13
+ .map do |r|
14
14
  r['message']
15
15
  .gsub(/\r\n/, "\n")
16
16
  .gsub(/\e\[A\r\e\[2K/, '')
17
17
  .scan(/.{1,120}/)
18
18
  .join("\n")
19
- }
19
+ end
20
20
  .join("\n")
21
21
  end
22
22
 
@@ -3,14 +3,14 @@ module Circler
3
3
  class << self
4
4
  def all(username, reponame)
5
5
  CircleCi::Project.recent_builds(username, reponame)
6
- .body
7
- .map { |b| Build.new(b) }
6
+ .body
7
+ .map { |b| Build.new(b) }
8
8
  end
9
9
 
10
10
  def branch(username, reponame, branch)
11
11
  CircleCi::Project.recent_builds_branch(username, reponame, branch)
12
- .body
13
- .map { |b| Build.new(b) }
12
+ .body
13
+ .map { |b| Build.new(b) }
14
14
  end
15
15
 
16
16
  def get(username, reponame, number)
@@ -22,7 +22,7 @@ module Circler
22
22
  end
23
23
 
24
24
  def cancel(username, reponame, number)
25
- Build.new(CircleCi::Build.cancel(username, reponame, number).body)
25
+ Build.new(CircleCi::Build.cancel(username, reponame, number).body)
26
26
  end
27
27
  end
28
28
 
@@ -54,6 +54,10 @@ module Circler
54
54
  "private-#{username}@#{reponame}@#{build_number}@vcs-github@0"
55
55
  end
56
56
 
57
+ def project_name
58
+ "#{username}/#{reponame}"
59
+ end
60
+
57
61
  def information
58
62
  [
59
63
  @hash['build_num'],
@@ -62,18 +66,18 @@ module Circler
62
66
  @hash['author_name'],
63
67
  (@hash['subject'] || '').slice(0..60),
64
68
  format_time(@hash['build_time_millis']),
65
- @hash['start_time'],
69
+ @hash['start_time']
66
70
  ]
67
71
  end
68
72
 
69
73
  def steps
70
74
  hash = @hash['steps'].group_by { |s| s['actions'].first['type'] }
71
- hash.flat_map { |type, value| value.map{ |v| Step.new(type, v) }}
75
+ hash.flat_map { |type, value| value.map { |v| Step.new(type, v) } }
72
76
  end
73
77
 
74
78
  private
75
79
 
76
- def self.colorize_by_status(string, status)
80
+ def colorize_by_status(string, status)
77
81
  case status
78
82
  when 'success', 'fixed' then string.green
79
83
  when 'canceled' then string.yellow
@@ -83,19 +87,11 @@ module Circler
83
87
  end
84
88
  end
85
89
 
86
- def colorize_by_status(string, status)
87
- self.class.colorize_by_status(string, status)
88
- end
89
-
90
- def self.format_time(time)
90
+ def format_time(time)
91
91
  return '' unless time
92
92
  minute = format('%02d', time / 1000 / 60)
93
- second = format('%02d', (time / 1000) % 60)
93
+ second = format('%02d', (time / 1000) % 60)
94
94
  "#{minute}:#{second}"
95
95
  end
96
-
97
- def format_time(time)
98
- self.class.format_time(time)
99
- end
100
96
  end
101
97
  end
@@ -10,7 +10,7 @@ module Circler
10
10
  end
11
11
 
12
12
  def actions
13
- @hash['actions'].map{ |a| Action.new(a) }
13
+ @hash['actions'].map { |a| Action.new(a) }
14
14
  end
15
15
  end
16
16
  end
@@ -1,3 +1,3 @@
1
1
  module Circler
2
- VERSION = "0.6.0"
2
+ VERSION = '0.6.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: circler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - unhappychoice
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-25 00:00:00.000000000 Z
11
+ date: 2017-08-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pusher-client
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 0.11.0
47
+ version: 0.12.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 0.11.0
54
+ version: 0.12.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: launchy
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 1.0.3
75
+ version: 1.1.0
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 1.0.3
82
+ version: 1.1.0
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rugged
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -100,14 +100,14 @@ dependencies:
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: 1.7.3
103
+ version: 1.8.0
104
104
  type: :runtime
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: 1.7.3
110
+ version: 1.8.0
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: highline
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 1.7.1
145
+ version: 1.8.0
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 1.7.1
152
+ version: 1.8.0
153
153
  - !ruby/object:Gem::Dependency
154
154
  name: bundler
155
155
  requirement: !ruby/object:Gem::Requirement
@@ -192,6 +192,20 @@ dependencies:
192
192
  - - ">="
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: rubocop
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: 0.47.1
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: 0.47.1
195
209
  description: A command line tool for CircleCI
196
210
  email:
197
211
  - unhappychoice@gmail.com