ribose-cli 0.1.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/test.yml +27 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +9 -1075
- data/Gemfile +3 -0
- data/README.md +315 -7
- data/bin/console +2 -5
- data/bin/ribose +22 -0
- data/lib/ribose/cli/auth.rb +10 -0
- data/lib/ribose/cli/command.rb +60 -0
- data/lib/ribose/cli/commands/base.rb +80 -0
- data/lib/ribose/cli/commands/conversation.rb +114 -0
- data/lib/ribose/cli/commands/file.rb +96 -0
- data/lib/ribose/cli/commands/invitation.rb +81 -0
- data/lib/ribose/cli/commands/join_space.rb +78 -0
- data/lib/ribose/cli/commands/member.rb +81 -0
- data/lib/ribose/cli/commands/message.rb +98 -0
- data/lib/ribose/cli/commands/note.rb +98 -0
- data/lib/ribose/cli/commands/space.rb +86 -0
- data/lib/ribose/cli/rcfile.rb +67 -0
- data/lib/ribose/cli/util.rb +22 -0
- data/lib/ribose/cli/version.rb +2 -2
- data/lib/ribose/cli.rb +21 -2
- data/ribose-cli.gemspec +11 -3
- data/spec/acceptance/config_spec.rb +17 -0
- data/spec/acceptance/conversation_spec.rb +90 -0
- data/spec/acceptance/file_spec.rb +80 -0
- data/spec/acceptance/invitation_spec.rb +109 -0
- data/spec/acceptance/join_space_spec.rb +73 -0
- data/spec/acceptance/member_spec.rb +87 -0
- data/spec/acceptance/message_spec.rb +67 -0
- data/spec/acceptance/note_spec.rb +61 -0
- data/spec/acceptance/space_spec.rb +112 -0
- data/spec/fixtures/.riboserc +4 -0
- data/spec/ribose/cli/rcfile_spec.rb +27 -0
- data/spec/spec_helper.rb +15 -1
- data/spec/support/console_helper.rb +29 -0
- metadata +113 -18
- data/.travis.yml +0 -5
- data/spec/ribose/cli_spec.rb +0 -4
@@ -0,0 +1,96 @@
|
|
1
|
+
module Ribose
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
class File < Commands::Base
|
5
|
+
desc "list", "Listing the files for a space"
|
6
|
+
option :format, aliases: "-f", desc: "Output format, eg: json"
|
7
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
8
|
+
|
9
|
+
def list
|
10
|
+
say(build_output(list_files(options), options))
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "show", "Details for a space file"
|
14
|
+
option :file_id, required: true, desc: "The space file ID"
|
15
|
+
option :format, aliases: "-f", desc: "Output format, eg: json"
|
16
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
17
|
+
|
18
|
+
def show
|
19
|
+
file = Ribose::SpaceFile.fetch(options[:space_id], options[:file_id])
|
20
|
+
say(build_resource_output(file, options))
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "add", "Adding a new fille to a space"
|
24
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
25
|
+
option :description, aliases: "-d", desc: "The file upload description"
|
26
|
+
option :tag_list, aliases: "-t", desc: "File tags, separated by commas"
|
27
|
+
|
28
|
+
def add(file)
|
29
|
+
file_upload = create_upload(file, options)
|
30
|
+
|
31
|
+
if file_upload.id
|
32
|
+
say("#{file_upload.name} added to your space!")
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
desc "update", "Update a space file"
|
37
|
+
option :file_name, aliases: "-n", desc: "New name for the file"
|
38
|
+
option :description, aliases: "-d", desc: "New description for file"
|
39
|
+
option :tags, aliases: "-t", desc: "File tags, separated by commas"
|
40
|
+
option :file_id, required: true, aliases: "-f", desc: "Space file ID"
|
41
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
42
|
+
|
43
|
+
def update
|
44
|
+
update_file(symbolize_keys(options))
|
45
|
+
say("The file has been updated with new attributes")
|
46
|
+
rescue Ribose::UnprocessableEntity
|
47
|
+
say("Something went wrong! Please check required attributes")
|
48
|
+
end
|
49
|
+
|
50
|
+
desc "remove", "Remove a space file"
|
51
|
+
option :file_id, required: true, aliases: "-f", desc: "Space file ID"
|
52
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
53
|
+
|
54
|
+
def remove
|
55
|
+
Ribose::SpaceFile.delete(options[:space_id], options[:file_id])
|
56
|
+
say("The file has been removed from your space!")
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def list_files(attributes)
|
62
|
+
@files ||= Ribose::SpaceFile.all(attributes[:space_id])
|
63
|
+
end
|
64
|
+
|
65
|
+
def create_upload(file, attributes = {})
|
66
|
+
Ribose::SpaceFile.create(
|
67
|
+
attributes[:space_id],
|
68
|
+
file: file,
|
69
|
+
tag_list: attributes[:tag_list],
|
70
|
+
description: attributes[:description],
|
71
|
+
)
|
72
|
+
end
|
73
|
+
|
74
|
+
def update_file(attributes)
|
75
|
+
Ribose::SpaceFile.update(
|
76
|
+
attributes.delete(:space_id),
|
77
|
+
attributes.delete(:file_id),
|
78
|
+
attributes,
|
79
|
+
)
|
80
|
+
end
|
81
|
+
|
82
|
+
def table_headers
|
83
|
+
["ID", "Name", "Versions"]
|
84
|
+
end
|
85
|
+
|
86
|
+
def table_field_names
|
87
|
+
%w(id name author content_type content_size version)
|
88
|
+
end
|
89
|
+
|
90
|
+
def table_rows(files)
|
91
|
+
files.map { |file| [file.id, file.name, file.version] }
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Ribose
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
class Invitation < Commands::Base
|
5
|
+
desc "list", "List space invitations"
|
6
|
+
option :query, type: :hash, desc: "Query parameters as hash"
|
7
|
+
option :format, aliases: "-f", desc: "Output format, eg: json"
|
8
|
+
|
9
|
+
def list
|
10
|
+
say(build_output(Ribose::SpaceInvitation.all(options), options))
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "add", "Add a new space member"
|
14
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
15
|
+
option :user_id, aliases: "-u", type: :hash, desc: "Invitee's IDS"
|
16
|
+
option :email, aliases: "-e", type: :hash, desc: "Invitee's emails"
|
17
|
+
option :message, aliases: "-m", desc: "Space invitation message"
|
18
|
+
|
19
|
+
def add
|
20
|
+
invoke(Member, :add)
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "update", "Update a space invitation"
|
24
|
+
option :role_id, aliases: "-r", desc: "The Role ID"
|
25
|
+
option :state, aliases: "-s", desc: "New state for invitation"
|
26
|
+
option :invitation_id, required: true, desc: "Invitation UUID"
|
27
|
+
|
28
|
+
def update
|
29
|
+
update_invitation(options)
|
30
|
+
say("Space invitation has been updated!")
|
31
|
+
rescue Ribose::UnprocessableEntity
|
32
|
+
say("Something went wrong! Please check required attributes")
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "accept", "Accept a space invitation"
|
36
|
+
option :invitation_id, required: true, desc: "Invitation UUID"
|
37
|
+
|
38
|
+
def accept
|
39
|
+
Ribose::SpaceInvitation.accept(options[:invitation_id])
|
40
|
+
say("Space invitation has been accepted!")
|
41
|
+
end
|
42
|
+
|
43
|
+
desc "reject", "Reject a space invitation"
|
44
|
+
option :invitation_id, required: true, desc: "Invitation UUID"
|
45
|
+
|
46
|
+
def reject
|
47
|
+
Ribose::SpaceInvitation.reject(options[:invitation_id])
|
48
|
+
say("Space invitation has been rejected!")
|
49
|
+
end
|
50
|
+
|
51
|
+
desc "remove", "Remove a space invitation"
|
52
|
+
option :invitation_id, required: true, desc: "Invitation UUID"
|
53
|
+
|
54
|
+
def remove
|
55
|
+
Ribose::SpaceInvitation.cancel(options[:invitation_id])
|
56
|
+
say("Space invitation has been removed!")
|
57
|
+
rescue Ribose::Forbidden
|
58
|
+
say("Could not remove the specified invitation")
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def update_invitation(attributes)
|
64
|
+
Ribose::SpaceInvitation.update(
|
65
|
+
attributes.delete(:invitation_id), attributes
|
66
|
+
)
|
67
|
+
end
|
68
|
+
|
69
|
+
def table_headers
|
70
|
+
["ID", "Inviter", "Type", "Space Name"]
|
71
|
+
end
|
72
|
+
|
73
|
+
def table_rows(invitations)
|
74
|
+
invitations.map do |invt|
|
75
|
+
[invt.id, invt.inviter.name, invt.type, invt.space.name]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
module Ribose
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
class JoinSpace < Commands::Base
|
5
|
+
desc "list", "List join space requests"
|
6
|
+
option :query, type: :hash, desc: "Query parameters as hash"
|
7
|
+
option :format, aliases: "-f", desc: "Output format, eg: json"
|
8
|
+
|
9
|
+
def list
|
10
|
+
say(build_output(Ribose::JoinSpaceRequest.all(options), options))
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "show", "Fetch a join space request"
|
14
|
+
option :format, aliases: "-f", desc: "Output format, eg: json"
|
15
|
+
option :request_id, required: true, aliases: "-r", desc: "Request UUID"
|
16
|
+
|
17
|
+
def show
|
18
|
+
join_space = Ribose::JoinSpaceRequest.fetch(options[:request_id])
|
19
|
+
say(build_resource_output(join_space, options))
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "add", "Create a join space request"
|
23
|
+
option :type, aliases: "-t", desc: "The join request type"
|
24
|
+
option :state, desc: "The state for the join space request"
|
25
|
+
option :message, aliases: "-m", desc: "The join request message"
|
26
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
27
|
+
|
28
|
+
def add
|
29
|
+
create_join_request(options)
|
30
|
+
say("Join space request has been sent successfully!")
|
31
|
+
rescue Ribose::UnprocessableEntity
|
32
|
+
say("Something went wrong! Please check required attributes")
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "accept", "Accept a join space request"
|
36
|
+
option :request_id, required: true, aliases: "-r", desc: "Request UUID"
|
37
|
+
|
38
|
+
def accept
|
39
|
+
Ribose::JoinSpaceRequest.accept(options[:request_id])
|
40
|
+
say("Join space request has been accepted!")
|
41
|
+
end
|
42
|
+
|
43
|
+
desc "reject", "Reject a join space request"
|
44
|
+
option :request_id, required: true, aliases: "-r", desc: "Request UUID"
|
45
|
+
|
46
|
+
def reject
|
47
|
+
Ribose::JoinSpaceRequest.reject(options[:request_id])
|
48
|
+
say("Join space request has been rejected!")
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def create_join_request(attributes)
|
54
|
+
Ribose::JoinSpaceRequest.create(
|
55
|
+
state: attributes[:state] || 0,
|
56
|
+
space_id: attributes[:space_id],
|
57
|
+
body: attributes[:message] || "",
|
58
|
+
type: attributes[:type] || "Invitation::JoinSpaceRequest",
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
62
|
+
def table_headers
|
63
|
+
["ID", "Inviter", "Type", "Space Name"]
|
64
|
+
end
|
65
|
+
|
66
|
+
def table_field_names
|
67
|
+
%w(id email body state type)
|
68
|
+
end
|
69
|
+
|
70
|
+
def table_rows(requests)
|
71
|
+
requests.map do |req|
|
72
|
+
[req.id, req.inviter.name, req.type, req.space.name]
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Ribose
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
class Member < Commands::Base
|
5
|
+
desc "list", "List space members"
|
6
|
+
option :format, aliases: "-f", desc: "Output format, eg: json"
|
7
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
8
|
+
|
9
|
+
def list
|
10
|
+
say(build_output(Ribose::Member.all(options[:space_id]), options))
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "add", "Add a new space member"
|
14
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
15
|
+
option :user_id, aliases: "-u", type: :hash, desc: "Invitee's IDS"
|
16
|
+
option :email, aliases: "-e", type: :hash, desc: "Invitee's emails"
|
17
|
+
option :message, aliases: "-m", desc: "Space invitation message"
|
18
|
+
|
19
|
+
def add
|
20
|
+
add_member_to_space(options)
|
21
|
+
say("Invitation has been sent successfully!")
|
22
|
+
rescue Ribose::UnprocessableEntity
|
23
|
+
say("Something went wrong! Please check required attributes")
|
24
|
+
end
|
25
|
+
|
26
|
+
desc "update", "Update existing member details"
|
27
|
+
option :role_id, required: true, aliases: "-r", desc: "The role id"
|
28
|
+
option :member_id, required: true, aliases: "-m", desc: "Member UUID"
|
29
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
30
|
+
|
31
|
+
def update
|
32
|
+
update_member_role(options)
|
33
|
+
say("Member has been updated with new role!")
|
34
|
+
rescue Ribose::UnprocessableEntity
|
35
|
+
say("Something went wrong! Please check required attributes")
|
36
|
+
end
|
37
|
+
|
38
|
+
desc "remove", "Remove a space member"
|
39
|
+
option :member_id, required: true, aliases: "-m", desc: "Member UUID"
|
40
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
41
|
+
|
42
|
+
def remove
|
43
|
+
Ribose::Member.delete(options[:space_id], options[:member_id])
|
44
|
+
say("The member has been removed from this space")
|
45
|
+
rescue Ribose::UnprocessableEntity
|
46
|
+
say("Something went wrong! Please provide a valid id/uuid")
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def add_member_to_space(attributes)
|
52
|
+
Ribose::SpaceInvitation.mass_create(
|
53
|
+
attributes[:space_id],
|
54
|
+
body: attributes[:message] || "",
|
55
|
+
emails: (attributes[:email] || {}).keys,
|
56
|
+
user_ids: (attributes[:user_id] || {}).keys,
|
57
|
+
role_ids: (attributes[:email] || {}).merge(
|
58
|
+
attributes[:user_id] || {},
|
59
|
+
),
|
60
|
+
)
|
61
|
+
end
|
62
|
+
|
63
|
+
def update_member_role(attributes)
|
64
|
+
Ribose::MemberRole.assign(
|
65
|
+
attributes[:space_id], attributes[:member_id], attributes[:role_id]
|
66
|
+
)
|
67
|
+
end
|
68
|
+
|
69
|
+
def table_headers
|
70
|
+
["ID", "Name", "Role Name"]
|
71
|
+
end
|
72
|
+
|
73
|
+
def table_rows(members)
|
74
|
+
members.map do |member|
|
75
|
+
[member.user_id, member.user.name, member.role_name_in_space]
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
module Ribose
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
class Message < Commands::Base
|
5
|
+
desc "list", "Listing Messages"
|
6
|
+
option :conversation_id, aliases: "-c", required: true
|
7
|
+
option :format, aliases: "-f", desc: "Output format, eg: json"
|
8
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
9
|
+
|
10
|
+
def list
|
11
|
+
say(build_output(list_messages, options))
|
12
|
+
end
|
13
|
+
|
14
|
+
desc "add", "Add New Message to Conversation"
|
15
|
+
option :message_body, required: true, aliases: "-b"
|
16
|
+
option :conversation_id, aliases: "-c", required: true
|
17
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
18
|
+
|
19
|
+
def add
|
20
|
+
message = create_message(options)
|
21
|
+
say("Messge has been posted! Id: " + message.id)
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "update", "Update an existing Message"
|
25
|
+
option :message_body, required: true, aliases: "-b"
|
26
|
+
option :message_id, required: true, aliases: "-m"
|
27
|
+
option :conversation_id, aliases: "-c", required: true
|
28
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
29
|
+
|
30
|
+
def update
|
31
|
+
update_message(options)
|
32
|
+
say("Messge has been updated!")
|
33
|
+
end
|
34
|
+
|
35
|
+
desc "remove", "Remove A Conversation from Space"
|
36
|
+
option :message_id, required: true, aliases: "-m"
|
37
|
+
option :conversation_id, aliases: "-c", required: true
|
38
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
39
|
+
|
40
|
+
def remove
|
41
|
+
remove_message(options)
|
42
|
+
say("The message has been removed!")
|
43
|
+
rescue
|
44
|
+
say("Please provide a valid message UUID")
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def list_messages
|
50
|
+
@messages ||= Ribose::Message.all(
|
51
|
+
space_id: options[:space_id],
|
52
|
+
conversation_id: options[:conversation_id],
|
53
|
+
)
|
54
|
+
end
|
55
|
+
|
56
|
+
def create_message(options)
|
57
|
+
Ribose::Message.create(
|
58
|
+
space_id: options[:space_id],
|
59
|
+
contents: options[:message_body],
|
60
|
+
conversation_id: options[:conversation_id],
|
61
|
+
)
|
62
|
+
end
|
63
|
+
|
64
|
+
def update_message(options)
|
65
|
+
Ribose::Message.update(
|
66
|
+
space_id: options[:space_id],
|
67
|
+
message_id: options[:message_id],
|
68
|
+
contents: options[:message_body],
|
69
|
+
conversation_id: options[:conversation_id],
|
70
|
+
)
|
71
|
+
end
|
72
|
+
|
73
|
+
def remove_message(options)
|
74
|
+
Ribose::Message.remove(
|
75
|
+
space_id: options[:space_id],
|
76
|
+
message_id: options[:message_id],
|
77
|
+
conversation_id: options[:conversation_id],
|
78
|
+
)
|
79
|
+
end
|
80
|
+
|
81
|
+
def sanitize(content, length = 30)
|
82
|
+
content = content.to_s.gsub(/<\/?[^>]*>/, "")
|
83
|
+
Ribose::CLI::Util.truncate(content, length)
|
84
|
+
end
|
85
|
+
|
86
|
+
def table_headers
|
87
|
+
["ID", "User", "Message"]
|
88
|
+
end
|
89
|
+
|
90
|
+
def table_rows(messages)
|
91
|
+
messages.map do |message|
|
92
|
+
[message.id, message.user.name, sanitize(message.contents)]
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
module Ribose
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
class Note < Commands::Base
|
5
|
+
desc "list", "Listing notes for a user space"
|
6
|
+
option :format, aliases: "-f", desc: "Output format, eg: json"
|
7
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
8
|
+
|
9
|
+
def list
|
10
|
+
say(build_output(list_notes(options), options))
|
11
|
+
end
|
12
|
+
|
13
|
+
desc "show", "Show details for a note"
|
14
|
+
option :format, aliases: "-f", desc: "Output format, eg: json"
|
15
|
+
option :note_id, required: true, aliases: "-n", desc: "The Note UUID"
|
16
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
17
|
+
|
18
|
+
def show
|
19
|
+
note = Ribose::Wiki.fetch(options[:space_id], options[:note_id])
|
20
|
+
say(build_resource_output(note, options))
|
21
|
+
end
|
22
|
+
|
23
|
+
desc "add", "Add a new note to a user space"
|
24
|
+
option :title, required: true, desc: "The title for the note"
|
25
|
+
option :tag_list, aliases: "-t", desc: "Note tags, separated by commas"
|
26
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
27
|
+
|
28
|
+
def add
|
29
|
+
note = create_note(options)
|
30
|
+
say("Note has been posted added! Id: " + note.id.to_s)
|
31
|
+
end
|
32
|
+
|
33
|
+
desc "update", "Update details for an existing note"
|
34
|
+
option :note_id, required: true, aliases: "-n", desc: "The Note UUID"
|
35
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
36
|
+
option :title, desc: "The title for the note"
|
37
|
+
option :tag_list, aliases: "-t", desc: "Note tags, separated by commas"
|
38
|
+
|
39
|
+
def update
|
40
|
+
update_note(options)
|
41
|
+
say("Your space note has been updated!")
|
42
|
+
rescue Ribose::UnprocessableEntity
|
43
|
+
say("Something went wrong!, please check required attributes")
|
44
|
+
end
|
45
|
+
|
46
|
+
desc "remove", "Removes a note from a space"
|
47
|
+
option :note_id, required: true, aliases: "-n", desc: "The Note UUID"
|
48
|
+
option :space_id, required: true, aliases: "-s", desc: "The Space UUID"
|
49
|
+
|
50
|
+
def remove
|
51
|
+
remove_note(options)
|
52
|
+
say("The note has been removed!")
|
53
|
+
rescue
|
54
|
+
say("Could not remove the specified note")
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def list_notes(attributes)
|
60
|
+
@notes ||= Ribose::Wiki.all(attributes[:space_id])
|
61
|
+
end
|
62
|
+
|
63
|
+
def create_note(attributes)
|
64
|
+
Ribose::Wiki.create(
|
65
|
+
attributes[:space_id],
|
66
|
+
name: attributes[:title],
|
67
|
+
tag_list: attributes[:tag_list] || "",
|
68
|
+
)
|
69
|
+
end
|
70
|
+
|
71
|
+
def update_note(attributes)
|
72
|
+
Ribose::Wiki.update(
|
73
|
+
attributes[:space_id],
|
74
|
+
attributes[:note_id],
|
75
|
+
name: attributes[:title] || "",
|
76
|
+
tag_list: attributes[:tag_list] || "",
|
77
|
+
)
|
78
|
+
end
|
79
|
+
|
80
|
+
def remove_note(attributes)
|
81
|
+
Ribose::Wiki.delete(attributes[:space_id], attributes[:note_id])
|
82
|
+
end
|
83
|
+
|
84
|
+
def table_headers
|
85
|
+
["ID", "Name", "Revisions"]
|
86
|
+
end
|
87
|
+
|
88
|
+
def table_field_names
|
89
|
+
%w(id space_id name address version revision tag_list)
|
90
|
+
end
|
91
|
+
|
92
|
+
def table_rows(notes)
|
93
|
+
notes.map { |note| [note.id, note.name, note.revision] }
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Ribose
|
2
|
+
module CLI
|
3
|
+
module Commands
|
4
|
+
class Space < Commands::Base
|
5
|
+
desc "list", "List user spaces"
|
6
|
+
option :format, aliases: "-f", desc: "Output format, eg: json"
|
7
|
+
|
8
|
+
def list
|
9
|
+
say(build_output(list_user_spaces, options))
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "show", "Details for a space"
|
13
|
+
option :space_id, aliases: "-s", description: "The Space UUID"
|
14
|
+
option :format, aliases: "-f", desc: "Output format, eg: json"
|
15
|
+
|
16
|
+
def show
|
17
|
+
space = Ribose::Space.fetch(options[:space_id])
|
18
|
+
say(build_resource_output(space, options))
|
19
|
+
end
|
20
|
+
|
21
|
+
desc "add", "Add a new user space"
|
22
|
+
option :name, aliases: "-n", desc: "Name of the space"
|
23
|
+
option :description, desc: "The description for space"
|
24
|
+
option :category_id, desc: "The category for this space"
|
25
|
+
option :access, default: "open", desc: "The visiblity for the space"
|
26
|
+
|
27
|
+
def add
|
28
|
+
space = Ribose::Space.create(**symbolize_keys(options))
|
29
|
+
say("New Space created! Id: " + space.id)
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "update", "Update an existing space"
|
33
|
+
option :space_id, required: true, desc: "The Space UUID"
|
34
|
+
option :access, desc: "The visiblity for the space"
|
35
|
+
option :name, aliases: "-n", desc: "Name of the space"
|
36
|
+
option :description, desc: "The description for space"
|
37
|
+
option :category_id, desc: "The category for this space"
|
38
|
+
|
39
|
+
def update
|
40
|
+
attributes = symbolize_keys(options)
|
41
|
+
Ribose::Space.update(attributes.delete(:space_id), attributes)
|
42
|
+
say("Your space has been updated!")
|
43
|
+
rescue Ribose::UnprocessableEntity
|
44
|
+
say("Something went wrong!, please check required attributes")
|
45
|
+
end
|
46
|
+
|
47
|
+
desc "remove", "Remove an existing space"
|
48
|
+
option :space_id, required: true, desc: "The Space UUID"
|
49
|
+
option :confirmation, required: true, desc: "The confirmation"
|
50
|
+
|
51
|
+
def remove
|
52
|
+
remove_space(options)
|
53
|
+
say("The Sapce has been removed!")
|
54
|
+
rescue
|
55
|
+
say("Please provide a valid Space UUID")
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def list_user_spaces
|
61
|
+
@user_spaces ||= Ribose::Space.all
|
62
|
+
end
|
63
|
+
|
64
|
+
def remove_space(attributes)
|
65
|
+
Ribose::Space.remove(
|
66
|
+
attributes[:space_id],
|
67
|
+
password_confirmation: attributes[:confirmation],
|
68
|
+
)
|
69
|
+
end
|
70
|
+
|
71
|
+
def table_headers
|
72
|
+
["ID", "Name", "Active?"]
|
73
|
+
end
|
74
|
+
|
75
|
+
def table_rows(spaces)
|
76
|
+
spaces.map { |space| [space.id, space.name, space.active ] }
|
77
|
+
end
|
78
|
+
|
79
|
+
# Single resource fields
|
80
|
+
def table_field_names
|
81
|
+
%w(id name visibility active members_count role_name)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require "yaml"
|
2
|
+
require "singleton"
|
3
|
+
|
4
|
+
module Ribose
|
5
|
+
module CLI
|
6
|
+
class RCFile
|
7
|
+
attr_reader :path, :data
|
8
|
+
FILE_NAME = ".riboserc".freeze
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@path = build_rcfile_path
|
12
|
+
@data = load_configuration
|
13
|
+
end
|
14
|
+
|
15
|
+
def set(email:, password:, token: nil, api_host: nil)
|
16
|
+
data[:api_token] = token
|
17
|
+
data[:user_email] = email
|
18
|
+
data[:user_password] = password
|
19
|
+
data[:api_host] = api_host
|
20
|
+
|
21
|
+
write_api_details_to_file
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.api_token
|
25
|
+
new.data[:api_token]
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.user_email
|
29
|
+
new.data[:user_email]
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.user_password
|
33
|
+
new.data[:user_password]
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.api_host
|
37
|
+
ENV.fetch("RIBOSE_API_HOST", new.data[:api_host])
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.set(email:, password:, token: nil, api_host: nil)
|
41
|
+
new.set(token: token, email: email, password: password, api_host: api_host)
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
def build_rcfile_path
|
47
|
+
File.join(File.expand_path("~"), FILE_NAME)
|
48
|
+
end
|
49
|
+
|
50
|
+
def load_configuration
|
51
|
+
YAML.load_file(path)
|
52
|
+
rescue Errno::ENOENT
|
53
|
+
default_configuration
|
54
|
+
end
|
55
|
+
|
56
|
+
def default_configuration
|
57
|
+
{ api_token: nil, user_email: nil }
|
58
|
+
end
|
59
|
+
|
60
|
+
def write_api_details_to_file
|
61
|
+
File.open(path, File::RDWR | File::TRUNC | File::CREAT, 0o0600) do |rc|
|
62
|
+
rc.write(data.to_yaml)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|