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.
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