sem 0.2.3 → 0.2.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/lib/sem/api/base.rb +11 -13
- data/lib/sem/api/env_var.rb +7 -0
- data/lib/sem/api/file.rb +7 -0
- data/lib/sem/api/org.rb +28 -0
- data/lib/sem/api/project.rb +50 -0
- data/lib/sem/api/shared_config.rb +109 -0
- data/lib/sem/api/team.rb +90 -0
- data/lib/sem/api/user.rb +8 -0
- data/lib/sem/api.rb +7 -8
- data/lib/sem/cli/orgs.rb +12 -12
- data/lib/sem/cli/projects.rb +30 -32
- data/lib/sem/cli/shared_configs.rb +71 -67
- data/lib/sem/cli/teams.rb +84 -106
- data/lib/sem/version.rb +1 -1
- data/lib/sem/views/env_vars.rb +2 -2
- data/lib/sem/views/files.rb +2 -2
- data/lib/sem/views/orgs.rb +12 -14
- data/lib/sem/views/projects.rb +28 -29
- data/lib/sem/views/shared_configs.rb +32 -20
- data/lib/sem/views/teams.rb +47 -65
- data/lib/sem/views/users.rb +6 -6
- data/lib/sem.rb +5 -0
- data/sem.gemspec +4 -0
- metadata +59 -36
- data/lib/sem/api/env_vars.rb +0 -22
- data/lib/sem/api/files.rb +0 -21
- data/lib/sem/api/orgs.rb +0 -42
- data/lib/sem/api/projects.rb +0 -42
- data/lib/sem/api/shared_configs.rb +0 -103
- data/lib/sem/api/teams.rb +0 -69
- data/lib/sem/api/traits/associated_with_org.rb +0 -17
- data/lib/sem/api/traits/associated_with_project.rb +0 -29
- data/lib/sem/api/traits/associated_with_shared_config.rb +0 -31
- data/lib/sem/api/traits/associated_with_team.rb +0 -29
- data/lib/sem/api/traits.rb +0 -10
- data/lib/sem/api/users.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6c386662fdc6f698a75d2a465bf2341995130638
|
4
|
+
data.tar.gz: 8042f7c3359a3ff026658784aed2950fd6b36d7d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9c29dda2661f328865b4671e5da73d5bfb50a5d68619f9201a72c14aad2fd07f2382c7ddb65ce4a96616e70d0952789055d7e95db1ba5a8547307d69afdfb1c7
|
7
|
+
data.tar.gz: 61246d6688a5618bdafb366d56855ad8553c05f8b037ad652b00d698a81db2e53dfc47e5269ef5cdd925509c390fa4a0a197bf6cb0145edbf048c89b39417159
|
data/.rubocop.yml
CHANGED
data/lib/sem/api/base.rb
CHANGED
@@ -1,15 +1,13 @@
|
|
1
|
-
module Sem
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
12
|
-
end
|
13
|
-
end
|
1
|
+
module Sem::API::Base
|
2
|
+
module_function
|
3
|
+
|
4
|
+
def client
|
5
|
+
@client ||= SemaphoreClient.new(
|
6
|
+
Sem::Configuration.auth_token,
|
7
|
+
:api_url => Sem::Configuration.api_url,
|
8
|
+
:verbose => (Sem.log_level == Sem::LOG_LEVEL_TRACE),
|
9
|
+
:auto_paginate => true
|
10
|
+
)
|
14
11
|
end
|
12
|
+
|
15
13
|
end
|
data/lib/sem/api/file.rb
ADDED
data/lib/sem/api/org.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
class Sem::API::Org < SimpleDelegator
|
2
|
+
extend Sem::API::Base
|
3
|
+
|
4
|
+
def self.all
|
5
|
+
client.orgs.list.map { |org| new(org) }
|
6
|
+
end
|
7
|
+
|
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)
|
14
|
+
end
|
15
|
+
|
16
|
+
def users
|
17
|
+
Sem::API::Base.client.users.list_for_org(name).map { |user| Sem::API::User.new(user) }
|
18
|
+
end
|
19
|
+
|
20
|
+
def teams
|
21
|
+
Sem::API::Base.client.teams.list_for_org(name).map { |team| Sem::API::Team.new(team) }
|
22
|
+
end
|
23
|
+
|
24
|
+
def projects
|
25
|
+
Sem::API::Base.client.projects.list_for_org(name).map { |project| Sem::API::Project.new(project) }
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
class Sem::API::Project < SimpleDelegator
|
2
|
+
extend Sem::API::Base
|
3
|
+
|
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
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.find!(project_srn)
|
11
|
+
org_name, project_name = Sem::SRN.parse_project(project_srn)
|
12
|
+
|
13
|
+
# TODO: fix .to_a bug in client
|
14
|
+
|
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?
|
18
|
+
|
19
|
+
new(org_name, project)
|
20
|
+
end
|
21
|
+
|
22
|
+
attr_reader :org_name
|
23
|
+
|
24
|
+
def initialize(org_name, project)
|
25
|
+
@org_name = org_name
|
26
|
+
|
27
|
+
super(project)
|
28
|
+
end
|
29
|
+
|
30
|
+
def full_name
|
31
|
+
"#{@org_name}/#{name}"
|
32
|
+
end
|
33
|
+
|
34
|
+
def teams
|
35
|
+
client.teams.list_for_project(id).map { |team| Sem::API::Team.new(org_name, team) }
|
36
|
+
end
|
37
|
+
|
38
|
+
def shared_configs
|
39
|
+
Sem::API::Base.client.shared_configs.list_for_project(id).map { |project| Sem::API::SharedConfig.new(org_name, project) }
|
40
|
+
end
|
41
|
+
|
42
|
+
def add_shared_config(shared_config)
|
43
|
+
Sem::API::Base.client.shared_configs.attach_to_project(shared_config.id, id)
|
44
|
+
end
|
45
|
+
|
46
|
+
def remove_shared_config(shared_config)
|
47
|
+
Sem::API::Base.client.shared_configs.detach_from_project(shared_config.id, id)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
class Sem::API::SharedConfig < SimpleDelegator
|
2
|
+
extend Sem::API::Base
|
3
|
+
|
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
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.find!(shared_config_srn)
|
11
|
+
org_name, shared_config_name = Sem::SRN.parse_shared_config(shared_config_srn)
|
12
|
+
|
13
|
+
configs = client.shared_configs.list_for_org(org_name)
|
14
|
+
config = configs.find { |c| c.name == shared_config_name }
|
15
|
+
|
16
|
+
if config.nil?
|
17
|
+
raise Sem::Errors::ResourceNotFound.new("Shared Configuration", [org_name, shared_config_name])
|
18
|
+
end
|
19
|
+
|
20
|
+
new(org_name, config)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.create!(shared_config_srn, args = {})
|
24
|
+
org_name, shared_config_name = Sem::SRN.parse_shared_config(shared_config_srn)
|
25
|
+
|
26
|
+
shared_config = client.shared_configs.create_for_org(org_name, args.merge(:name => shared_config_name))
|
27
|
+
|
28
|
+
if shared_config.nil?
|
29
|
+
raise Sem::Errors::ResourceNotCreated.new("Shared Configuration", [org_name, shared_config_name])
|
30
|
+
end
|
31
|
+
|
32
|
+
new(org_name, shared_config)
|
33
|
+
end
|
34
|
+
|
35
|
+
attr_reader :org_name
|
36
|
+
|
37
|
+
def initialize(org_name, shared_config)
|
38
|
+
@org_name = org_name
|
39
|
+
|
40
|
+
super(shared_config)
|
41
|
+
end
|
42
|
+
|
43
|
+
def full_name
|
44
|
+
"#{org_name}/#{name}"
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_config_file(args)
|
48
|
+
file = Sem::API::Base.client.config_files.create_for_shared_config(id, args)
|
49
|
+
|
50
|
+
if file.nil?
|
51
|
+
raise Sem::Errors::ResourceNotCreated.new("Configuration File", [org_name, path])
|
52
|
+
end
|
53
|
+
|
54
|
+
Sem::API::File.new(file)
|
55
|
+
end
|
56
|
+
|
57
|
+
def remove_config_file(path)
|
58
|
+
file = files.find { |f| f.path == path }
|
59
|
+
|
60
|
+
if file.nil?
|
61
|
+
raise Sem::Errors::ResourceNotCreated.new("Configuration File", [org_name, path])
|
62
|
+
end
|
63
|
+
|
64
|
+
Sem::API::Base.client.config_files.delete(file.id)
|
65
|
+
end
|
66
|
+
|
67
|
+
def add_env_var(args)
|
68
|
+
env_var = Sem::API::Base.client.env_vars.create_for_shared_config(id, args)
|
69
|
+
|
70
|
+
if env_var.nil?
|
71
|
+
raise Sem::Errors::ResourceNotCreated.new("Environment Variable", [org_name, args[:name]])
|
72
|
+
end
|
73
|
+
|
74
|
+
Sem::API::EnvVar.new(env_var)
|
75
|
+
end
|
76
|
+
|
77
|
+
def remove_env_var(name)
|
78
|
+
env_var = env_vars.find { |var| var.name == name }
|
79
|
+
|
80
|
+
if env_var.nil?
|
81
|
+
raise Sem::Errors::ResourceNotCreated.new("Environment Variable", [org_name, name])
|
82
|
+
end
|
83
|
+
|
84
|
+
Sem::API::Base.client.env_vars.delete(env_var.id)
|
85
|
+
end
|
86
|
+
|
87
|
+
def update!(args)
|
88
|
+
shared_config = Sem::API::Base.client.shared_configs.update(id, args)
|
89
|
+
|
90
|
+
if shared_config.nil?
|
91
|
+
raise Sem::Errors::ResourceNotUpdated.new("Shared Configuration", [org_name, name])
|
92
|
+
end
|
93
|
+
|
94
|
+
self.class.new(org_name, shared_config)
|
95
|
+
end
|
96
|
+
|
97
|
+
def delete!
|
98
|
+
Sem::API::Base.client.shared_configs.delete(id)
|
99
|
+
end
|
100
|
+
|
101
|
+
def files
|
102
|
+
Sem::API::Base.client.config_files.list_for_shared_config(id).map { |file| Sem::API::File.new(file) }
|
103
|
+
end
|
104
|
+
|
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) }
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
data/lib/sem/api/team.rb
ADDED
@@ -0,0 +1,90 @@
|
|
1
|
+
class Sem::API::Team < SimpleDelegator
|
2
|
+
extend Sem::API::Base
|
3
|
+
|
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
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.find!(team_srn)
|
11
|
+
org_name, team_name = Sem::SRN.parse_team(team_srn)
|
12
|
+
|
13
|
+
team = client.teams.list_for_org(org_name).find { |t| t.name == team_name }
|
14
|
+
|
15
|
+
raise Sem::Errors::ResourceNotFound.new("Team", [org_name, team_name]) if team.nil?
|
16
|
+
|
17
|
+
new(org_name, team)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.create!(team_srn, args)
|
21
|
+
org_name, team_name = Sem::SRN.parse_team(team_srn)
|
22
|
+
|
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?
|
26
|
+
|
27
|
+
new(org_name, team)
|
28
|
+
end
|
29
|
+
|
30
|
+
attr_reader :org_name
|
31
|
+
|
32
|
+
def initialize(org_name, team)
|
33
|
+
@org_name = org_name
|
34
|
+
|
35
|
+
super(team)
|
36
|
+
end
|
37
|
+
|
38
|
+
def full_name
|
39
|
+
"#{org_name}/#{name}"
|
40
|
+
end
|
41
|
+
|
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]) if new_team.nil?
|
46
|
+
|
47
|
+
self.class.new(@org_name, new_team)
|
48
|
+
end
|
49
|
+
|
50
|
+
def add_user(username)
|
51
|
+
Sem::API::Base.client.users.attach_to_team(username, id)
|
52
|
+
end
|
53
|
+
|
54
|
+
def remove_user(username)
|
55
|
+
Sem::API::Base.client.users.detach_from_team(username, id)
|
56
|
+
end
|
57
|
+
|
58
|
+
def add_project(project)
|
59
|
+
Sem::API::Base.client.projects.attach_to_team(project.id, id)
|
60
|
+
end
|
61
|
+
|
62
|
+
def remove_project(project)
|
63
|
+
Sem::API::Base.client.projects.detach_from_team(project.id, id)
|
64
|
+
end
|
65
|
+
|
66
|
+
def add_shared_config(config)
|
67
|
+
Sem::API::Base.client.shared_configs.attach_to_team(config.id, id)
|
68
|
+
end
|
69
|
+
|
70
|
+
def remove_shared_config(config)
|
71
|
+
Sem::API::Base.client.shared_configs.detach_from_team(config.id, id)
|
72
|
+
end
|
73
|
+
|
74
|
+
def delete!
|
75
|
+
Sem::API::Base.client.teams.delete(id)
|
76
|
+
end
|
77
|
+
|
78
|
+
def users
|
79
|
+
Sem::API::Base.client.users.list_for_team(id).map { |user| Sem::API::User.new(user) }
|
80
|
+
end
|
81
|
+
|
82
|
+
def projects
|
83
|
+
Sem::API::Base.client.projects.list_for_team(id).map { |project| Sem::API::Project.new(org_name, project) }
|
84
|
+
end
|
85
|
+
|
86
|
+
def shared_configs
|
87
|
+
Sem::API::Base.client.shared_configs.list_for_team(id).map { |config| Sem::API::SharedConfig.new(org_name, config) }
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
data/lib/sem/api/user.rb
ADDED
data/lib/sem/api.rb
CHANGED
@@ -1,13 +1,12 @@
|
|
1
1
|
module Sem
|
2
2
|
module API
|
3
|
-
require_relative "api/traits"
|
4
3
|
require_relative "api/base"
|
5
|
-
require_relative "api/
|
6
|
-
require_relative "api/
|
7
|
-
require_relative "api/
|
8
|
-
require_relative "api/
|
9
|
-
require_relative "api/
|
10
|
-
require_relative "api/
|
11
|
-
require_relative "api/
|
4
|
+
require_relative "api/org"
|
5
|
+
require_relative "api/user"
|
6
|
+
require_relative "api/project"
|
7
|
+
require_relative "api/env_var"
|
8
|
+
require_relative "api/file"
|
9
|
+
require_relative "api/shared_config"
|
10
|
+
require_relative "api/team"
|
12
11
|
end
|
13
12
|
end
|
data/lib/sem/cli/orgs.rb
CHANGED
@@ -2,27 +2,27 @@ class Sem::CLI::Orgs < Dracula
|
|
2
2
|
|
3
3
|
desc "list", "list organizations"
|
4
4
|
def list
|
5
|
-
orgs = Sem::API::
|
5
|
+
orgs = Sem::API::Org.all
|
6
6
|
|
7
|
-
|
7
|
+
if !orgs.empty?
|
8
|
+
Sem::Views::Orgs.list(orgs)
|
9
|
+
else
|
10
|
+
Sem::Views::Orgs.create_first_org
|
11
|
+
end
|
8
12
|
end
|
9
13
|
|
10
14
|
desc "info", "shows detailed information about an organization"
|
11
|
-
def info(
|
12
|
-
|
15
|
+
def info(org_name)
|
16
|
+
org = Sem::API::Org.find!(org_name)
|
13
17
|
|
14
|
-
|
15
|
-
|
16
|
-
Sem::Views::Orgs.info(org_instance)
|
18
|
+
Sem::Views::Orgs.info(org)
|
17
19
|
end
|
18
20
|
|
19
21
|
desc "members", "list members of an organization"
|
20
|
-
def members(
|
21
|
-
|
22
|
-
|
23
|
-
users = Sem::API::Users.list_for_org(org_name)
|
22
|
+
def members(org_name)
|
23
|
+
org = Sem::API::Org.find!(org_name)
|
24
24
|
|
25
|
-
Sem::Views::Users.list(users)
|
25
|
+
Sem::Views::Users.list(org.users)
|
26
26
|
end
|
27
27
|
|
28
28
|
end
|
data/lib/sem/cli/projects.rb
CHANGED
@@ -2,59 +2,57 @@ class Sem::CLI::Projects < Dracula
|
|
2
2
|
|
3
3
|
desc "list", "list projects"
|
4
4
|
def list
|
5
|
-
projects = Sem::API::
|
5
|
+
projects = Sem::API::Project.all
|
6
6
|
|
7
|
-
|
7
|
+
if !projects.empty?
|
8
|
+
Sem::Views::Projects.list(projects)
|
9
|
+
else
|
10
|
+
Sem::Views::Projects.setup_first_project
|
11
|
+
end
|
8
12
|
end
|
9
13
|
|
10
14
|
desc "info", "shows detailed information about a project"
|
11
|
-
def info(
|
12
|
-
|
13
|
-
|
14
|
-
project_instance = Sem::API::Projects.info(org_name, project_name).to_h
|
15
|
+
def info(project_name)
|
16
|
+
project = Sem::API::Project.find!(project_name)
|
15
17
|
|
16
|
-
Sem::Views::Projects.info(
|
18
|
+
Sem::Views::Projects.info(project)
|
17
19
|
end
|
18
20
|
|
19
21
|
class SharedConfigs < Dracula
|
20
|
-
desc "list", "list shared configurations on a project"
|
21
|
-
def list(project)
|
22
|
-
org_name, project_name = Sem::SRN.parse_project(project)
|
23
22
|
|
24
|
-
|
25
|
-
|
26
|
-
Sem::
|
23
|
+
desc "list", "list shared configurations on a project"
|
24
|
+
def list(project_name)
|
25
|
+
project = Sem::API::Project.find!(project_name)
|
26
|
+
shared_configs = project.shared_configs
|
27
|
+
|
28
|
+
if !shared_configs.empty?
|
29
|
+
Sem::Views::SharedConfigs.list(shared_configs)
|
30
|
+
else
|
31
|
+
Sem::Views::Projects.attach_first_shared_config(project)
|
32
|
+
end
|
27
33
|
end
|
28
34
|
|
29
35
|
desc "add", "attach a shared configuration to a project"
|
30
|
-
def add(
|
31
|
-
|
32
|
-
|
36
|
+
def add(project_name, shared_config_name)
|
37
|
+
project = Sem::API::Project.find!(project_name)
|
38
|
+
shared_config = Sem::API::SharedConfig.find!(shared_config_name)
|
33
39
|
|
34
|
-
|
35
|
-
abort Sem::Views::Projects.org_names_not_matching("project", "shared configuration", project, shared_config)
|
36
|
-
end
|
37
|
-
|
38
|
-
Sem::API::SharedConfigs.add_to_project(project_org_name, project_name, shared_config_name)
|
40
|
+
project.add_shared_config(shared_config)
|
39
41
|
|
40
|
-
puts "Shared Configuration #{
|
42
|
+
puts "Shared Configuration #{shared_config_name} added to the project."
|
41
43
|
end
|
42
44
|
|
43
45
|
desc "remove", "removes a shared configuration from the project"
|
44
|
-
def remove(
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
if project_org_name != shared_config_org_name
|
49
|
-
abort Sem::Views::Projects.org_names_not_matching("project", "shared configuration", project, shared_config)
|
50
|
-
end
|
46
|
+
def remove(project_name, shared_config_name)
|
47
|
+
project = Sem::API::Project.find!(project_name)
|
48
|
+
shared_config = Sem::API::SharedConfig.find!(shared_config_name)
|
51
49
|
|
52
|
-
|
50
|
+
project.remove_shared_config(shared_config)
|
53
51
|
|
54
|
-
puts "Shared Configuration #{
|
52
|
+
puts "Shared Configuration #{shared_config_name} removed from the project."
|
55
53
|
end
|
54
|
+
|
56
55
|
end
|
57
56
|
|
58
57
|
register "shared-configs", "manage shared configurations", SharedConfigs
|
59
|
-
|
60
58
|
end
|