sem 0.5.0 → 0.6.0

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: a57a0aee22d7a70fc1d7ef78d3ae1a7197f90490
4
- data.tar.gz: 709f09561d7c8c3c6549a5fa4732b48f4b250270
3
+ metadata.gz: bc0d24e7b183207c5e5cce1a800be13467d67e72
4
+ data.tar.gz: bce66ac37a1ea8d544f1f38c9f280ee5a4dafa19
5
5
  SHA512:
6
- metadata.gz: e7486fbe7452345748698bad75ad28ade92471b53c08e813543d9e33975a83d8cf570e92cc956d1e6ff68c5b02e3fa5d7c3f537ef93fde9d25298e997dd39d10
7
- data.tar.gz: 25f64de6ab1be1b59daa71eda710d5638c9fcb2a45d5bbb2d5579699791d45baa9fd448e9aaadfb85d0e456c8ebe686409a7414be1312f50aec792b06dc4521c
6
+ metadata.gz: 89048c8949432d45c90fb17ec3d82ea5644ee8c30eec1a80afc1f69ad5a3903443a27a67b576b7756ffcc731f38132800148b79de7b967e88bcfd9548ef43a83
7
+ data.tar.gz: 39e29cd19867577bdf1b1a8bf24d1447247088989fbd3d017937efe5a970fa5e31760caecf6c7e27656ceca3296b1bd0fcfc10f3b5119c5a1e0940d0de87c149
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
+ # gem "semaphore_client", :path => "/home/vagrant/code/api/semaphore-client-generator/output"
4
+
3
5
  # Specify your gem's dependencies in sem.gemspec
4
6
  gemspec
data/exe/sem CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  require "sem"
4
4
 
5
- exit Sem.start(ARGV)
5
+ Sem.start(ARGV)
data/lib/sem/api/org.rb CHANGED
@@ -2,27 +2,29 @@ class Sem::API::Org < SimpleDelegator
2
2
  extend Sem::API::Base
3
3
 
4
4
  def self.all
5
- client.orgs.list.map { |org| new(org) }
5
+ client.orgs.list!.map { |org| new(org) }
6
6
  end
7
7
 
8
8
  def self.find!(org_name)
9
- org = client.orgs.get(org_name)
10
-
11
- raise Sem::Errors::ResourceNotFound.new("Organization", [org_name]) if org.nil?
12
-
13
- new(org)
9
+ new(client.orgs.get!(org_name))
10
+ rescue SemaphoreClient::Exceptions::NotFound
11
+ raise Sem::Errors::ResourceNotFound.new("Organization", [org_name])
14
12
  end
15
13
 
16
14
  def users
17
- Sem::API::Base.client.users.list_for_org(name).map { |user| Sem::API::User.new(user) }
15
+ Sem::API::Base.client.users.list_for_org!(username).map { |user| Sem::API::User.new(user) }
18
16
  end
19
17
 
20
18
  def teams
21
- Sem::API::Base.client.teams.list_for_org(name).map { |team| Sem::API::Team.new(team) }
19
+ Sem::API::Base.client.teams.list_for_org!(username).map { |team| Sem::API::Team.new(username, team) }
22
20
  end
23
21
 
24
22
  def projects
25
- Sem::API::Base.client.projects.list_for_org(name).map { |project| Sem::API::Project.new(project) }
23
+ Sem::API::Base.client.projects.list_for_org!(username).map { |project| Sem::API::Project.new(username, project) }
24
+ end
25
+
26
+ def shared_configs
27
+ Sem::API::Base.client.shared_configs.list_for_org!(username).map { |config| Sem::API::SharedConfig.new(username, config) }
26
28
  end
27
29
 
28
30
  end
@@ -2,31 +2,32 @@ class Sem::API::Project < SimpleDelegator
2
2
  extend Sem::API::Base
3
3
 
4
4
  def self.all
5
- Sem::API::Org.all.map do |org|
6
- client.projects.list_for_org(org.username).map { |project| new(org.username, project) }
7
- end.flatten
5
+ Sem::API::Org.all.map(&:projects).flatten
8
6
  end
9
7
 
10
8
  def self.find!(project_srn)
11
9
  org_name, project_name = Sem::SRN.parse_project(project_srn)
12
10
 
13
- # TODO: fix .to_a bug in client
11
+ projects = client.projects.list_for_org!(org_name, :name => project_name)
12
+ project = projects.to_a.first
14
13
 
15
- project = client.projects.list_for_org(org_name, :name => project_name).to_a.first
16
-
17
- raise Sem::Errors::ResourceNotFound.new("Project", [org_name, project_name]) if project.nil?
14
+ if project.nil?
15
+ raise Sem::Errors::ResourceNotFound.new("Project", [org_name, project_name])
16
+ end
18
17
 
19
18
  new(org_name, project)
19
+ rescue SemaphoreClient::Exceptions::NotFound
20
+ raise Sem::Errors::ResourceNotFound.new("Project", [org_name, project_name])
20
21
  end
21
22
 
22
23
  def self.create!(project_srn, args)
23
24
  org_name, name = Sem::SRN.parse_project(project_srn)
24
25
 
25
- project = client.projects.create_for_org(org_name, args.merge(:name => name))
26
-
27
- raise Sem::Errors::ResourceNotCreated.new("Project", [org_name, name]) if project.nil?
26
+ project = client.projects.create_for_org!(org_name, args.merge(:name => name))
28
27
 
29
28
  new(org_name, project)
29
+ rescue SemaphoreClient::Exceptions::NotFound
30
+ raise Sem::Errors::ResourceNotFound.new("Organization", [org_name])
30
31
  end
31
32
 
32
33
  attr_reader :org_name
@@ -41,36 +42,36 @@ class Sem::API::Project < SimpleDelegator
41
42
  "#{@org_name}/#{name}"
42
43
  end
43
44
 
44
- def teams
45
- client.teams.list_for_project(id).map { |team| Sem::API::Team.new(org_name, team) }
46
- end
47
-
48
45
  def shared_configs
49
- Sem::API::Base.client.shared_configs.list_for_project(id).map { |config| Sem::API::SharedConfig.new(org_name, config) }
46
+ Sem::API::Base.client.shared_configs.list_for_project!(id).map { |config| Sem::API::SharedConfig.new(org_name, config) }
50
47
  end
51
48
 
52
49
  def add_shared_config(shared_config)
53
- Sem::API::Base.client.shared_configs.attach_to_project(shared_config.id, id)
50
+ Sem::API::Base.client.shared_configs.attach_to_project!(shared_config.id, id)
51
+ rescue SemaphoreClient::Exceptions::NotFound
52
+ raise Sem::Errors::ResourceNotFound.new("Shared Configuration", [shared_config.full_name])
54
53
  end
55
54
 
56
55
  def remove_shared_config(shared_config)
57
- Sem::API::Base.client.shared_configs.detach_from_project(shared_config.id, id)
56
+ Sem::API::Base.client.shared_configs.detach_from_project!(shared_config.id, id)
57
+ rescue SemaphoreClient::Exceptions::NotFound
58
+ raise Sem::Errors::ResourceNotFound.new("Shared Configuration", [shared_config.full_name])
58
59
  end
59
60
 
60
61
  def config_files
61
- Sem::API::Base.client.config_files.list_for_project(id).map { |file| Sem::API::File.new(file) }
62
+ Sem::API::Base.client.config_files.list_for_project!(id).map { |file| Sem::API::File.new(file) }
62
63
  end
63
64
 
64
65
  def env_vars
65
- Sem::API::Base.client.env_vars.list_for_project(id).map { |var| Sem::API::EnvVar.new(var) }
66
+ Sem::API::Base.client.env_vars.list_for_project!(id).map { |var| Sem::API::EnvVar.new(var) }
66
67
  end
67
68
 
68
69
  def add_env_var(env_var)
69
- Sem::API::Base.client.env_vars.attach_to_project(env_var.id, id)
70
+ Sem::API::Base.client.env_vars.attach_to_project!(env_var.id, id)
70
71
  end
71
72
 
72
73
  def add_config_file(config_file)
73
- Sem::API::Base.client.config_files.attach_to_project(config_file.id, id)
74
+ Sem::API::Base.client.config_files.attach_to_project!(config_file.id, id)
74
75
  end
75
76
 
76
77
  end
@@ -2,15 +2,13 @@ class Sem::API::SharedConfig < SimpleDelegator
2
2
  extend Sem::API::Base
3
3
 
4
4
  def self.all
5
- Sem::API::Org.all.pmap do |org|
6
- client.shared_configs.list_for_org(org.username).map { |config| new(org.username, config) }
7
- end.flatten
5
+ Sem::API::Org.all.pmap(&:shared_configs).flatten
8
6
  end
9
7
 
10
8
  def self.find!(shared_config_srn)
11
9
  org_name, shared_config_name = Sem::SRN.parse_shared_config(shared_config_srn)
12
10
 
13
- configs = client.shared_configs.list_for_org(org_name)
11
+ configs = client.shared_configs.list_for_org!(org_name)
14
12
  config = configs.find { |c| c.name == shared_config_name }
15
13
 
16
14
  if config.nil?
@@ -18,12 +16,14 @@ class Sem::API::SharedConfig < SimpleDelegator
18
16
  end
19
17
 
20
18
  new(org_name, config)
19
+ rescue SemaphoreClient::Exceptions::NotFound
20
+ raise Sem::Errors::ResourceNotFound.new("Shared Configuration", [org_name, shared_config_name])
21
21
  end
22
22
 
23
23
  def self.create!(shared_config_srn, args = {})
24
24
  org_name, shared_config_name = Sem::SRN.parse_shared_config(shared_config_srn)
25
25
 
26
- shared_config = client.shared_configs.create_for_org(org_name, args.merge(:name => shared_config_name))
26
+ shared_config = client.shared_configs.create_for_org!(org_name, args.merge(:name => shared_config_name))
27
27
 
28
28
  if shared_config.nil?
29
29
  raise Sem::Errors::ResourceNotCreated.new("Shared Configuration", [org_name, shared_config_name])
@@ -45,7 +45,7 @@ class Sem::API::SharedConfig < SimpleDelegator
45
45
  end
46
46
 
47
47
  def add_config_file(args)
48
- file = Sem::API::Base.client.config_files.create_for_shared_config(id, args)
48
+ file = Sem::API::Base.client.config_files.create_for_shared_config!(id, args)
49
49
 
50
50
  if file.nil?
51
51
  raise Sem::Errors::ResourceNotCreated.new("Configuration File", [org_name, path])
@@ -61,11 +61,11 @@ class Sem::API::SharedConfig < SimpleDelegator
61
61
  raise Sem::Errors::ResourceNotCreated.new("Configuration File", [org_name, path])
62
62
  end
63
63
 
64
- Sem::API::Base.client.config_files.delete(file.id)
64
+ Sem::API::Base.client.config_files.delete!(file.id)
65
65
  end
66
66
 
67
67
  def add_env_var(args)
68
- env_var = Sem::API::Base.client.env_vars.create_for_shared_config(id, args)
68
+ env_var = Sem::API::Base.client.env_vars.create_for_shared_config!(id, args)
69
69
 
70
70
  if env_var.nil?
71
71
  raise Sem::Errors::ResourceNotCreated.new("Environment Variable", [org_name, args[:name]])
@@ -81,11 +81,11 @@ class Sem::API::SharedConfig < SimpleDelegator
81
81
  raise Sem::Errors::ResourceNotFound.new("Environment Variable", [org_name, name])
82
82
  end
83
83
 
84
- Sem::API::Base.client.env_vars.delete(env_var.id)
84
+ Sem::API::Base.client.env_vars.delete!(env_var.id)
85
85
  end
86
86
 
87
87
  def update!(args)
88
- shared_config = Sem::API::Base.client.shared_configs.update(id, args)
88
+ shared_config = Sem::API::Base.client.shared_configs.update!(id, args)
89
89
 
90
90
  if shared_config.nil?
91
91
  raise Sem::Errors::ResourceNotUpdated.new("Shared Configuration", [org_name, name])
@@ -95,15 +95,15 @@ class Sem::API::SharedConfig < SimpleDelegator
95
95
  end
96
96
 
97
97
  def delete!
98
- Sem::API::Base.client.shared_configs.delete(id)
98
+ Sem::API::Base.client.shared_configs.delete!(id)
99
99
  end
100
100
 
101
101
  def files
102
- Sem::API::Base.client.config_files.list_for_shared_config(id).map { |file| Sem::API::File.new(file) }
102
+ Sem::API::Base.client.config_files.list_for_shared_config!(id).map { |file| Sem::API::File.new(file) }
103
103
  end
104
104
 
105
105
  def env_vars
106
- Sem::API::Base.client.env_vars.list_for_shared_config(id).map { |env_var| Sem::API::EnvVar.new(env_var) }
106
+ Sem::API::Base.client.env_vars.list_for_shared_config!(id).map { |env_var| Sem::API::EnvVar.new(env_var) }
107
107
  end
108
108
 
109
109
  end
data/lib/sem/api/team.rb CHANGED
@@ -2,29 +2,31 @@ class Sem::API::Team < SimpleDelegator
2
2
  extend Sem::API::Base
3
3
 
4
4
  def self.all
5
- Sem::API::Org.all.pmap do |org|
6
- client.teams.list_for_org(org.username).map { |team| new(org.username, team) }
7
- end.flatten
5
+ Sem::API::Org.all.pmap(&:teams).flatten
8
6
  end
9
7
 
10
8
  def self.find!(team_srn)
11
9
  org_name, team_name = Sem::SRN.parse_team(team_srn)
12
10
 
13
- team = client.teams.list_for_org(org_name).find { |t| t.name == team_name }
11
+ team = client.teams.list_for_org!(org_name).find { |t| t.name == team_name }
14
12
 
15
- raise Sem::Errors::ResourceNotFound.new("Team", [org_name, team_name]) if team.nil?
13
+ if team.nil?
14
+ raise Sem::Errors::ResourceNotFound.new("Team", [org_name, team_name])
15
+ end
16
16
 
17
17
  new(org_name, team)
18
+ rescue SemaphoreClient::Exceptions::NotFound
19
+ raise Sem::Errors::ResourceNotFound.new("Team", [org_name, team_name])
18
20
  end
19
21
 
20
22
  def self.create!(team_srn, args)
21
23
  org_name, team_name = Sem::SRN.parse_team(team_srn)
22
24
 
23
- team = client.teams.create_for_org(org_name, args.merge(:name => team_name))
24
-
25
- raise Sem::Errors::ResourceNotCreated.new("Team", [org_name, team_name]) if team.nil?
25
+ team = client.teams.create_for_org!(org_name, args.merge(:name => team_name))
26
26
 
27
27
  new(org_name, team)
28
+ rescue SemaphoreClient::Exceptions::NotFound
29
+ raise Sem::Errors::ResourceNotFound.new("Organization", [org_name])
28
30
  end
29
31
 
30
32
  attr_reader :org_name
@@ -39,52 +41,62 @@ class Sem::API::Team < SimpleDelegator
39
41
  "#{org_name}/#{name}"
40
42
  end
41
43
 
42
- def update(args)
43
- new_team = Sem::API::Base.client.teams.update(id, args)
44
-
45
- raise Sem::Errors::ResourceNotUpdated.new("Team", [@org_name, name]) unless new_team
44
+ def update!(args)
45
+ new_team = Sem::API::Base.client.teams.update!(id, args)
46
46
 
47
47
  self.class.new(@org_name, new_team)
48
48
  end
49
49
 
50
50
  def add_user(username)
51
- Sem::API::Base.client.users.attach_to_team(username, id)
51
+ Sem::API::Base.client.users.attach_to_team!(username, id)
52
+ rescue SemaphoreClient::Exceptions::NotFound
53
+ raise Sem::Errors::ResourceNotFound.new("User", [username])
52
54
  end
53
55
 
54
56
  def remove_user(username)
55
- Sem::API::Base.client.users.detach_from_team(username, id)
57
+ Sem::API::Base.client.users.detach_from_team!(username, id)
58
+ rescue SemaphoreClient::Exceptions::NotFound
59
+ raise Sem::Errors::ResourceNotFound.new("User", [username])
56
60
  end
57
61
 
58
62
  def add_project(project)
59
- Sem::API::Base.client.projects.attach_to_team(project.id, id)
63
+ Sem::API::Base.client.projects.attach_to_team!(project.id, id)
64
+ rescue SemaphoreClient::Exceptions::NotFound
65
+ raise Sem::Errors::ResourceNotFound.new("Project", [project.full_name])
60
66
  end
61
67
 
62
68
  def remove_project(project)
63
- Sem::API::Base.client.projects.detach_from_team(project.id, id)
69
+ Sem::API::Base.client.projects.detach_from_team!(project.id, id)
70
+ rescue SemaphoreClient::Exceptions::NotFound
71
+ raise Sem::Errors::ResourceNotFound.new("Project", [project.full_name])
64
72
  end
65
73
 
66
74
  def add_shared_config(config)
67
- Sem::API::Base.client.shared_configs.attach_to_team(config.id, id)
75
+ Sem::API::Base.client.shared_configs.attach_to_team!(config.id, id)
76
+ rescue SemaphoreClient::Exceptions::NotFound
77
+ raise Sem::Errors::ResourceNotFound.new("Shared Configuration", [config.full_name])
68
78
  end
69
79
 
70
80
  def remove_shared_config(config)
71
- Sem::API::Base.client.shared_configs.detach_from_team(config.id, id)
81
+ Sem::API::Base.client.shared_configs.detach_from_team!(config.id, id)
82
+ rescue SemaphoreClient::Exceptions::NotFound
83
+ raise Sem::Errors::ResourceNotFound.new("Shared Configuration", [config.full_name])
72
84
  end
73
85
 
74
86
  def delete!
75
- Sem::API::Base.client.teams.delete(id)
87
+ Sem::API::Base.client.teams.delete!(id)
76
88
  end
77
89
 
78
90
  def users
79
- Sem::API::Base.client.users.list_for_team(id).map { |user| Sem::API::User.new(user) }
91
+ Sem::API::Base.client.users.list_for_team!(id).map { |user| Sem::API::User.new(user) }
80
92
  end
81
93
 
82
94
  def projects
83
- Sem::API::Base.client.projects.list_for_team(id).map { |project| Sem::API::Project.new(org_name, project) }
95
+ Sem::API::Base.client.projects.list_for_team!(id).map { |project| Sem::API::Project.new(org_name, project) }
84
96
  end
85
97
 
86
98
  def shared_configs
87
- Sem::API::Base.client.shared_configs.list_for_team(id).map { |config| Sem::API::SharedConfig.new(org_name, config) }
99
+ Sem::API::Base.client.shared_configs.list_for_team!(id).map { |config| Sem::API::SharedConfig.new(org_name, config) }
88
100
  end
89
101
 
90
102
  end
data/lib/sem/api/user.rb CHANGED
@@ -2,7 +2,7 @@ class Sem::API::User < SimpleDelegator
2
2
  extend Sem::API::Base
3
3
 
4
4
  def self.all
5
- client.users.list.map { |user| new(user) }
5
+ client.users.list!.map { |user| new(user) }
6
6
  end
7
7
 
8
8
  end
data/lib/sem/cli/teams.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  class Sem::CLI::Teams < Dracula
2
2
 
3
+ ALLOWED_PERMISSIONS = ["admin", "edit", "read"].freeze
4
+
3
5
  desc "list", "list teams"
4
6
  def list
5
7
  teams = Sem::API::Team.all
@@ -23,7 +25,13 @@ class Sem::CLI::Teams < Dracula
23
25
  :aliases => "p",
24
26
  :desc => "Permission level of the team in the organization"
25
27
  def create(team_name)
26
- team = Sem::API::Team.create!(team_name, :permission => options[:permission])
28
+ permission = options[:permission]
29
+
30
+ unless ALLOWED_PERMISSIONS.include?(permission)
31
+ abort "Permission must be one of [#{ALLOWED_PERMISSIONS.join(", ")}]"
32
+ end
33
+
34
+ team = Sem::API::Team.create!(team_name, :permission => permission)
27
35
 
28
36
  Sem::Views::Teams.info(team)
29
37
  end
@@ -36,7 +44,7 @@ class Sem::CLI::Teams < Dracula
36
44
  abort "Team can't change its organization" unless new_org_name == old_org_name
37
45
 
38
46
  team = Sem::API::Team.find!(old_team_name)
39
- team = team.update(:name => new_name)
47
+ team = team.update!(:name => new_name)
40
48
 
41
49
  Sem::Views::Teams.info(team)
42
50
  end
@@ -47,8 +55,14 @@ class Sem::CLI::Teams < Dracula
47
55
  :aliases => "p",
48
56
  :desc => "Permission level of the team in the organization"
49
57
  def set_permission(team_name) # rubocop:disable Style/AccessorMethodName
58
+ permission = options[:permission]
59
+
60
+ unless ALLOWED_PERMISSIONS.include?(permission)
61
+ abort "Permission must be one of [#{ALLOWED_PERMISSIONS.join(", ")}]"
62
+ end
63
+
50
64
  team = Sem::API::Team.find!(team_name)
51
- team = team.update(:permission => options[:permission])
65
+ team = team.update!(:permission => permission)
52
66
 
53
67
  Sem::Views::Teams.info(team)
54
68
  end
data/lib/sem/cli.rb CHANGED
@@ -15,7 +15,7 @@ module Sem
15
15
  desc "login", "Log in to semaphore from the command line"
16
16
  option "auth-token", :required => true
17
17
  long_desc <<-DESC
18
- You can find your auth_token on the bottom of the users settings page https://semaphoreci.com/users/edit.
18
+ You can find your auth-token on the bottom of the users settings page https://semaphoreci.com/users/edit.
19
19
  DESC
20
20
  def login
21
21
  auth_token = options["auth-token"]
data/lib/sem/errors.rb CHANGED
@@ -1,7 +1,15 @@
1
1
  module Sem::Errors
2
2
  Base = Class.new(StandardError)
3
3
 
4
- InvalidSRN = Class.new(StandardError)
4
+ class InvalidSRN < StandardError
5
+ def message
6
+ [
7
+ "[ERROR] Invalid parameter formatting.",
8
+ "",
9
+ super
10
+ ].join("\n")
11
+ end
12
+ end
5
13
 
6
14
  class ResourceException < Base
7
15
  def initialize(resource, path)
@@ -35,7 +43,24 @@ module Sem::Errors
35
43
  end
36
44
 
37
45
  module Auth
38
- NoCredentials = Class.new(Sem::Errors::Base)
39
- InvalidCredentials = Class.new(Sem::Errors::Base)
46
+ class NoCredentials < Sem::Errors::Base
47
+ def message
48
+ [
49
+ "[ERROR] You are not logged in.",
50
+ "",
51
+ "Log in with '#{Sem::CLI.program_name} login --auth-token <token>'"
52
+ ].join("\n")
53
+ end
54
+ end
55
+
56
+ class InvalidCredentials < Sem::Errors::Base
57
+ def message
58
+ [
59
+ "[ERROR] Your credentials are invalid.",
60
+ "",
61
+ "Log in with '#{Sem::CLI.program_name} login --auth-token <token>'"
62
+ ].join("\n")
63
+ end
64
+ end
40
65
  end
41
66
  end
data/lib/sem/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Sem
2
- VERSION = "0.5.0".freeze
2
+ VERSION = "0.6.0".freeze
3
3
  end
@@ -4,7 +4,9 @@ class Sem::Views::EnvVars < Sem::Views::Base
4
4
  header = ["ID", "NAME", "ENCRYPTED?", "CONTENT"]
5
5
 
6
6
  body = env_vars.map do |var|
7
- [var.id, var.name, var.encrypted?, var.content]
7
+ content = var.encrypted? ? "*encrypted*" : var.content
8
+
9
+ [var.id, var.name, var.encrypted?, content]
8
10
  end
9
11
 
10
12
  print_table([header, *body])
data/lib/sem.rb CHANGED
@@ -21,75 +21,55 @@ module Sem
21
21
  @trace_mode == true
22
22
  end
23
23
 
24
+ def run_in_trace_mode!
25
+ @trace_mode = true
26
+ end
27
+
24
28
  # Returns exit status as a number.
29
+ # rubocop:disable Metrics/AbcSize
25
30
  def start(args)
26
- if args.include?("--trace")
27
- @trace_mode = true
28
-
29
- args.delete("--trace")
30
- end
31
+ args.delete("--trace") && run_in_trace_mode! if args.include?("--trace")
31
32
 
32
33
  Sem::CLI.start(args)
33
-
34
- 0
35
- rescue Sem::Errors::ResourceNotFound => e
36
- puts e.message
37
-
38
- 1
39
- rescue Sem::Errors::ResourceException => e
40
- puts e.message
41
-
42
- 1
43
- rescue Sem::Errors::InvalidSRN => e
44
- on_invalid_srn(e)
45
-
46
- 1
47
- rescue Sem::Errors::Auth::NoCredentials
48
- on_no_credentials
49
-
50
- 1
51
- rescue Sem::Errors::Auth::InvalidCredentials
52
- on_invalid_credentials
53
-
54
- 1
34
+ rescue Sem::Errors::Base => e
35
+ abort e.message
36
+ rescue SemaphoreClient::Exceptions::Conflict, SemaphoreClient::Exceptions::NotAllowed => e
37
+ abort "[ERROR] #{e.message}"
38
+ rescue SemaphoreClient::Exceptions::Unauthorized => e
39
+ abort "[ERROR] #{e.message}. Check if your credentials are valid."
40
+ rescue SemaphoreClient::Exceptions::ServerError => e
41
+ abort on_server_error(e)
42
+ rescue SemaphoreClient::Exceptions::UnprocessableEntity => e
43
+ abort "[ERROR] #{e.message}"
55
44
  rescue StandardError => e
56
- on_unhandled_error(e)
57
-
58
- 1
45
+ abort on_unhandled_error(e)
59
46
  end
60
47
 
61
48
  private
62
49
 
63
- def on_invalid_srn(exception)
64
- puts "[ERROR] Invalid parameter formatting."
65
- puts ""
66
- puts exception.message
67
- end
68
-
69
- def on_no_credentials
70
- puts "[ERROR] You are not logged in."
71
- puts ""
72
- puts "Log in with '#{Sem::CLI.program_name} login --auth-token <token>'"
73
- end
74
-
75
- def on_invalid_credentials
76
- puts "[ERROR] Your credentials are invalid."
77
- puts ""
78
- puts "Log in with '#{Sem::CLI.program_name} login --auth-token <token>'"
50
+ def on_server_error(exception)
51
+ [
52
+ "[ERROR] Semaphore API returned status #{exception.code}.",
53
+ "",
54
+ exception.message,
55
+ "",
56
+ "Please report this issue to https://semaphoreci.com/support."
57
+ ].join("\n")
79
58
  end
80
59
 
81
60
  def on_unhandled_error(exception)
82
- puts "[PANIC] Unhandled error."
83
- puts ""
84
- puts "Well, this is embarrassing. An unknown error was detected."
85
- puts ""
86
- puts "Exception:"
87
- puts exception.message
88
- puts ""
89
- puts "Backtrace: "
90
- puts exception.backtrace
91
- puts ""
92
- puts "Please report this issue to https://semaphoreci.com/support."
61
+ [
62
+ "[PANIC] Unhandled error.",
63
+ "",
64
+ "Well, this is embarrassing. An unknown error was detected.",
65
+ "",
66
+ "#{exception.class.name}: #{exception.message}",
67
+ "",
68
+ "Backtrace: ",
69
+ exception.backtrace,
70
+ "",
71
+ "Please report this issue to https://semaphoreci.com/support."
72
+ ].join("\n")
93
73
  end
94
74
  end
95
75
 
data/sem.gemspec CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_dependency "semaphore_client", "2.7.0"
24
+ spec.add_dependency "semaphore_client", "2.8.1"
25
25
  spec.add_dependency "dracula", "~> 0.4.0"
26
26
  spec.add_dependency "pmap", "~> 1.1.1"
27
27
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Igor Šarčević
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-10-06 00:00:00.000000000 Z
11
+ date: 2017-10-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: semaphore_client
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - '='
18
18
  - !ruby/object:Gem::Version
19
- version: 2.7.0
19
+ version: 2.8.1
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - '='
25
25
  - !ruby/object:Gem::Version
26
- version: 2.7.0
26
+ version: 2.8.1
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: dracula
29
29
  requirement: !ruby/object:Gem::Requirement