ribose-cli 0.1.0 → 0.5.0

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.
Files changed (40) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/test.yml +27 -0
  3. data/.gitignore +1 -0
  4. data/.rubocop.yml +9 -1075
  5. data/Gemfile +3 -0
  6. data/README.md +315 -7
  7. data/bin/console +2 -5
  8. data/bin/ribose +22 -0
  9. data/lib/ribose/cli/auth.rb +10 -0
  10. data/lib/ribose/cli/command.rb +60 -0
  11. data/lib/ribose/cli/commands/base.rb +80 -0
  12. data/lib/ribose/cli/commands/conversation.rb +114 -0
  13. data/lib/ribose/cli/commands/file.rb +96 -0
  14. data/lib/ribose/cli/commands/invitation.rb +81 -0
  15. data/lib/ribose/cli/commands/join_space.rb +78 -0
  16. data/lib/ribose/cli/commands/member.rb +81 -0
  17. data/lib/ribose/cli/commands/message.rb +98 -0
  18. data/lib/ribose/cli/commands/note.rb +98 -0
  19. data/lib/ribose/cli/commands/space.rb +86 -0
  20. data/lib/ribose/cli/rcfile.rb +67 -0
  21. data/lib/ribose/cli/util.rb +22 -0
  22. data/lib/ribose/cli/version.rb +2 -2
  23. data/lib/ribose/cli.rb +21 -2
  24. data/ribose-cli.gemspec +11 -3
  25. data/spec/acceptance/config_spec.rb +17 -0
  26. data/spec/acceptance/conversation_spec.rb +90 -0
  27. data/spec/acceptance/file_spec.rb +80 -0
  28. data/spec/acceptance/invitation_spec.rb +109 -0
  29. data/spec/acceptance/join_space_spec.rb +73 -0
  30. data/spec/acceptance/member_spec.rb +87 -0
  31. data/spec/acceptance/message_spec.rb +67 -0
  32. data/spec/acceptance/note_spec.rb +61 -0
  33. data/spec/acceptance/space_spec.rb +112 -0
  34. data/spec/fixtures/.riboserc +4 -0
  35. data/spec/ribose/cli/rcfile_spec.rb +27 -0
  36. data/spec/spec_helper.rb +15 -1
  37. data/spec/support/console_helper.rb +29 -0
  38. metadata +113 -18
  39. data/.travis.yml +0 -5
  40. 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