ribose 0.1.0 → 0.2.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 (129) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +539 -970
  4. data/.sample.pryrc +4 -0
  5. data/CHANGELOG.md +5 -0
  6. data/README.md +539 -3
  7. data/bin/console +2 -5
  8. data/lib/ribose.rb +31 -1
  9. data/lib/ribose/actions.rb +10 -0
  10. data/lib/ribose/actions/all.rb +43 -0
  11. data/lib/ribose/actions/base.rb +11 -0
  12. data/lib/ribose/actions/create.rb +44 -0
  13. data/lib/ribose/actions/delete.rb +32 -0
  14. data/lib/ribose/actions/fetch.rb +44 -0
  15. data/lib/ribose/actions/update.rb +35 -0
  16. data/lib/ribose/app_data.rb +15 -0
  17. data/lib/ribose/app_relation.rb +12 -0
  18. data/lib/ribose/base.rb +48 -0
  19. data/lib/ribose/calendar.rb +22 -0
  20. data/lib/ribose/client.rb +31 -0
  21. data/lib/ribose/config.rb +21 -0
  22. data/lib/ribose/configuration.rb +25 -0
  23. data/lib/ribose/connection.rb +39 -0
  24. data/lib/ribose/connection_invitation.rb +51 -0
  25. data/lib/ribose/conversation.rb +87 -0
  26. data/lib/ribose/error.rb +30 -0
  27. data/lib/ribose/feed.rb +11 -0
  28. data/lib/ribose/file_uploader.rb +93 -0
  29. data/lib/ribose/join_space_request.rb +41 -0
  30. data/lib/ribose/leaderboard.rb +19 -0
  31. data/lib/ribose/member.rb +34 -0
  32. data/lib/ribose/message.rb +94 -0
  33. data/lib/ribose/profile.rb +56 -0
  34. data/lib/ribose/request.rb +122 -0
  35. data/lib/ribose/resource_helper.rb +81 -0
  36. data/lib/ribose/response/raise_error.rb +15 -0
  37. data/lib/ribose/rspec.rb +19 -0
  38. data/lib/ribose/session.rb +48 -0
  39. data/lib/ribose/setting.rb +16 -0
  40. data/lib/ribose/space.rb +30 -0
  41. data/lib/ribose/space_file.rb +49 -0
  42. data/lib/ribose/space_invitation.rb +70 -0
  43. data/lib/ribose/stream.rb +15 -0
  44. data/lib/ribose/user.rb +42 -0
  45. data/lib/ribose/version.rb +1 -1
  46. data/lib/ribose/widget.rb +11 -0
  47. data/lib/ribose/wiki.rb +80 -0
  48. data/ribose.gemspec +6 -0
  49. data/spec/fixtures/app_data.json +188 -0
  50. data/spec/fixtures/app_relation.json +19 -0
  51. data/spec/fixtures/app_relations.json +89 -0
  52. data/spec/fixtures/calendar.json +12 -0
  53. data/spec/fixtures/calendars.json +34 -0
  54. data/spec/fixtures/connection_invitation.json +26 -0
  55. data/spec/fixtures/connection_invitation_accepted.json +26 -0
  56. data/spec/fixtures/connection_invitations.json +28 -0
  57. data/spec/fixtures/connection_invitations_created.json +37 -0
  58. data/spec/fixtures/connection_suggestion.json +22 -0
  59. data/spec/fixtures/connections.json +28 -0
  60. data/spec/fixtures/conversation.json +26 -0
  61. data/spec/fixtures/conversation_created.json +31 -0
  62. data/spec/fixtures/conversations.json +34 -0
  63. data/spec/fixtures/empty.json +1 -0
  64. data/spec/fixtures/feeds.json +84 -0
  65. data/spec/fixtures/file_upload_prepared.json +17 -0
  66. data/spec/fixtures/file_uploaded.json +38 -0
  67. data/spec/fixtures/general_information.json +16 -0
  68. data/spec/fixtures/join_space_request_created.json +26 -0
  69. data/spec/fixtures/join_space_request_updated.json +25 -0
  70. data/spec/fixtures/join_space_requests.json +34 -0
  71. data/spec/fixtures/leaderboard.json +21 -0
  72. data/spec/fixtures/login.html +323 -0
  73. data/spec/fixtures/members.json +20 -0
  74. data/spec/fixtures/message.json +22 -0
  75. data/spec/fixtures/messages.json +24 -0
  76. data/spec/fixtures/ping.json +3 -0
  77. data/spec/fixtures/profile.json +10 -0
  78. data/spec/fixtures/sample.png +0 -0
  79. data/spec/fixtures/setting.json +16 -0
  80. data/spec/fixtures/settings.json +18 -0
  81. data/spec/fixtures/space.json +59 -0
  82. data/spec/fixtures/space_created.json +59 -0
  83. data/spec/fixtures/space_file.json +58 -0
  84. data/spec/fixtures/space_invitation.json +32 -0
  85. data/spec/fixtures/space_invitation_updated.json +35 -0
  86. data/spec/fixtures/space_invitations.json +34 -0
  87. data/spec/fixtures/space_mass_invitations.json +46 -0
  88. data/spec/fixtures/spaces.json +61 -0
  89. data/spec/fixtures/stream.json +176 -0
  90. data/spec/fixtures/user_activated.json +6 -0
  91. data/spec/fixtures/widgets.json +50 -0
  92. data/spec/fixtures/wiki.json +79 -0
  93. data/spec/fixtures/wikis.json +197 -0
  94. data/spec/ribose/actions/create_spec.rb +40 -0
  95. data/spec/ribose/actions/delete_spec.rb +24 -0
  96. data/spec/ribose/actions/fetch_spec.rb +32 -0
  97. data/spec/ribose/actions/update_spec.rb +36 -0
  98. data/spec/ribose/app_data_spec.rb +15 -0
  99. data/spec/ribose/app_relation_spec.rb +27 -0
  100. data/spec/ribose/calendar_spec.rb +50 -0
  101. data/spec/ribose/client_spec.rb +48 -0
  102. data/spec/ribose/config_spec.rb +41 -0
  103. data/spec/ribose/connection_invitation_spec.rb +79 -0
  104. data/spec/ribose/connection_spec.rb +26 -0
  105. data/spec/ribose/conversation_spec.rb +84 -0
  106. data/spec/ribose/error_spec.rb +67 -0
  107. data/spec/ribose/feed_spec.rb +14 -0
  108. data/spec/ribose/file_uploader_spec.rb +30 -0
  109. data/spec/ribose/join_space_request_spec.rb +70 -0
  110. data/spec/ribose/leaderboard_spec.rb +13 -0
  111. data/spec/ribose/member_spec.rb +16 -0
  112. data/spec/ribose/message_spec.rb +69 -0
  113. data/spec/ribose/profile_spec.rb +40 -0
  114. data/spec/ribose/request_spec.rb +66 -0
  115. data/spec/ribose/resource_helper_spec.rb +58 -0
  116. data/spec/ribose/session_spec.rb +46 -0
  117. data/spec/ribose/setting_spec.rb +40 -0
  118. data/spec/ribose/space_file_spec.rb +41 -0
  119. data/spec/ribose/space_invitation_spec.rb +117 -0
  120. data/spec/ribose/space_spec.rb +70 -0
  121. data/spec/ribose/stream_spec.rb +14 -0
  122. data/spec/ribose/user_spec.rb +48 -0
  123. data/spec/ribose/widget_spec.rb +14 -0
  124. data/spec/ribose/wiki_spec.rb +67 -0
  125. data/spec/spec_helper.rb +11 -0
  126. data/spec/support/fake_ribose_api.rb +431 -0
  127. data/spec/support/file_upload_stub.rb +76 -0
  128. metadata +190 -3
  129. data/spec/ribose_spec.rb +0 -4
@@ -0,0 +1,46 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Ribose::Session do
4
+ describe ".create" do
5
+ it "creates a new user session" do
6
+ username = "super.user"
7
+ password = "supper.secreet.password"
8
+
9
+ stub_session_creation_request_via_web
10
+ session = Ribose::Session.create(username: username, password: password)
11
+
12
+ expect(session["created_at"]).not_to be_nil
13
+ expect(session["authentication_token"]).to eq("user-super-secret-token")
14
+ end
15
+ end
16
+
17
+ def login_url
18
+ ribose_url_for("login")
19
+ end
20
+
21
+ def ribose_url_for(*endpoints)
22
+ [Ribose.configuration.web_url, *endpoints].join("/")
23
+ end
24
+
25
+ def stub_session_creation_request_via_web
26
+ stub_get_request_with_login_page
27
+ stub_post_request_with_empty_body
28
+ stub_general_inforomation_request
29
+ end
30
+
31
+ def stub_get_request_with_login_page
32
+ stub_request(:get, login_url).and_return(
33
+ body: ribose_fixture("login", "html"),
34
+ headers: { content_type: "text/html" },
35
+ )
36
+ end
37
+
38
+ def stub_general_inforomation_request
39
+ stub_request(:get, ribose_url_for(["settings", "general", "info"])).
40
+ and_return(body: ribose_fixture("general_information"), status: 200)
41
+ end
42
+
43
+ def stub_post_request_with_empty_body
44
+ stub_request(:post, login_url).and_return(body: ribose_fixture("empty"))
45
+ end
46
+ end
@@ -0,0 +1,40 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Ribose::Setting do
4
+ describe ".all" do
5
+ it "lists the user settings" do
6
+ stub_ribose_setting_list_api
7
+ settings = Ribose::Setting.all
8
+
9
+ expect(settings.first.id).not_to be_nil
10
+ expect(settings.first.type).to eq("Setting::Personal")
11
+ expect(settings.first.time_zone_detected).to eq("Asia/Bangkok")
12
+ end
13
+ end
14
+
15
+ describe ".fetch" do
16
+ it "fetches the details for a setting" do
17
+ setting_id = 123_456_789
18
+ stub_ribose_setting_find_api(setting_id)
19
+ setting = Ribose::Setting.fetch(setting_id)
20
+
21
+ expect(setting.id).to eq(setting_id)
22
+ expect(setting.type).to eq("Setting::Personal")
23
+ expect(setting.time_zone_detected).to eq("Asia/Bangkok")
24
+ end
25
+ end
26
+
27
+ describe ".update" do
28
+ it "updates a setting with provided details" do
29
+ new_theme_id = 6
30
+ setting_id = 123_456_789
31
+
32
+ stub_ribose_setting_update_api(setting_id, theme_id: new_theme_id)
33
+ setting = Ribose::Setting.update(setting_id, theme_id: new_theme_id)
34
+
35
+ expect(setting.id).to eq(setting_id)
36
+ expect(setting.type).to eq("Setting::Personal")
37
+ expect(setting.theme_id).to eq(new_theme_id.to_s)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,41 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Ribose::SpaceFile do
4
+ describe ".all" do
5
+ it "retrieve files uploaded to a spce" do
6
+ space_id = 123_456_789
7
+ stub_ribose_space_file_list(space_id)
8
+
9
+ files = Ribose::SpaceFile.all(space_id)
10
+
11
+ expect(files.first.id).not_to be_nil
12
+ expect(files.first.name).to eq("sample-file.png")
13
+ expect(files.first.versions.first.version).to eq(1)
14
+ end
15
+ end
16
+
17
+ describe ".create" do
18
+ it "creates a new file with provided details" do
19
+ space_id = 123_456_789
20
+
21
+ stub_ribose_space_file_upload_api(space_id, file_attributes)
22
+ file = Ribose::SpaceFile.create(space_id, file_attributes)
23
+
24
+ expect(file.id).not_to be_nil
25
+ expect(file.author).to eq("John Doe")
26
+ expect(file.content_type).to eq("image/png")
27
+ end
28
+ end
29
+
30
+ def file_attributes
31
+ {
32
+ file: sample_fixture_file,
33
+ description: "This is a sample file",
34
+ tag_list: "Details tag for the file",
35
+ }
36
+ end
37
+
38
+ def sample_fixture_file
39
+ @sample_file ||= File.join(Ribose.root, "spec/fixtures/sample.png")
40
+ end
41
+ end
@@ -0,0 +1,117 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Ribose::SpaceInvitation do
4
+ describe ".all" do
5
+ it "retrieves the list of space invitations" do
6
+ stub_ribose_space_invitation_lis_api
7
+ invitations = Ribose::SpaceInvitation.all
8
+
9
+ expect(invitations.count).to eq(1)
10
+ expect(invitations.first.type).to eq("Invitation::ToSpace")
11
+ expect(invitations.first.space.name).to eq("The CLI Space")
12
+ end
13
+ end
14
+
15
+ describe ".create" do
16
+ it "creates an invitation to a specific space" do
17
+ stub_ribose_space_invitation_create_api(invitation_attributes)
18
+ invitation = Ribose::SpaceInvitation.create(invitation_attributes)
19
+
20
+ expect(invitation.id).not_to be_nil
21
+ expect(invitation.inviter.name).to eq("John Doe")
22
+ expect(invitation.type).to eq("Invitation::ToSpace")
23
+ expect(invitation.space.name).to eq("Trip to Mars!")
24
+ end
25
+ end
26
+
27
+ describe ".mass_create" do
28
+ it "creates multiple inviations to a space" do
29
+ space_id = 123_456_789
30
+
31
+ attributes = {
32
+ role_ids: [123_456_789],
33
+ emails: ["jennie.doe@example.com"],
34
+ body: "Hi, I would like to join you to this space",
35
+ }
36
+
37
+ stub_ribose_space_invitation_mass_create(space_id, attributes)
38
+ invitation = Ribose::SpaceInvitation.mass_create(space_id, attributes)
39
+
40
+ expect(
41
+ invitation.success.emails.first[0].to_s,
42
+ ).to eq(attributes[:emails].first.to_s)
43
+ end
44
+ end
45
+
46
+ describe ".update" do
47
+ it "updates a space invitation" do
48
+ invitation_id = 123_456_789
49
+ attributes = { role_id: 123 }
50
+
51
+ stub_ribose_space_invitation_update_api(invitation_id, attributes)
52
+ invitation = Ribose::SpaceInvitation.update(invitation_id, attributes)
53
+
54
+ expect(invitation.id).not_to be_nil
55
+ expect(invitation.role_id).not_to be_nil
56
+ expect(invitation.type).to eq("Invitation::ToSpace")
57
+ end
58
+ end
59
+
60
+ describe ".accept" do
61
+ it "accepts a space invitation" do
62
+ invitation_id = 123_456_789
63
+ stub_ribose_space_invitation_update_api(invitation_id, state: 1)
64
+
65
+ invitation = Ribose::SpaceInvitation.accept(invitation_id)
66
+
67
+ expect(invitation.state).to eq(1)
68
+ expect(invitation.id).not_to be_nil
69
+ expect(invitation.type).to eq("Invitation::ToSpace")
70
+ end
71
+ end
72
+
73
+ describe ".resend" do
74
+ it "resends a space invitation to non-member email" do
75
+ invitation_id = 123_456_789
76
+
77
+ stub_ribose_space_invitation_resend_api(invitation_id)
78
+ invitation = Ribose::SpaceInvitation.resend(invitation_id)
79
+
80
+ expect(invitation.to_space).not_to be_nil
81
+ expect(invitation.to_space.id).not_to be_nil
82
+ end
83
+ end
84
+
85
+ describe ".reject" do
86
+ it "rejects a space invitation" do
87
+ invitation_id = 123_456_789
88
+ stub_ribose_space_invitation_update_api(invitation_id, state: 2)
89
+
90
+ invitation = Ribose::SpaceInvitation.reject(invitation_id)
91
+
92
+ expect(invitation.id).not_to be_nil
93
+ expect(invitation.state).not_to be_nil
94
+ expect(invitation.type).to eq("Invitation::ToSpace")
95
+ end
96
+ end
97
+
98
+ describe ".cancel" do
99
+ it "cancels a space invitation" do
100
+ invitation_id = 123_456_789
101
+ stub_ribose_space_invitation_cancel_api(invitation_id)
102
+
103
+ expect do
104
+ Ribose::SpaceInvitation.cancel(invitation_id)
105
+ end.not_to raise_error
106
+ end
107
+ end
108
+
109
+ def invitation_attributes
110
+ @invitation ||= {
111
+ state: "0",
112
+ body: "Please join!",
113
+ space_id: "123_456_789",
114
+ invitee_id: "456_789_012",
115
+ }
116
+ end
117
+ end
@@ -0,0 +1,70 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Ribose::Space do
4
+ describe ".all" do
5
+ it "retrieves the list of user spaces" do
6
+ stub_ribose_space_list_api
7
+ spaces = Ribose::Space.all
8
+
9
+ expect(spaces.first.id).to eq("0e8d5c16-1a31-4df9-83d9-eeaa374d5adc")
10
+ expect(spaces.first.name).to eq("Work")
11
+ expect(spaces.first.visibility).to eq("invisible")
12
+ end
13
+ end
14
+
15
+ describe ".fetch" do
16
+ it "fetches a specific user space" do
17
+ space_id = 123_456_789
18
+
19
+ stub_ribose_space_fetch_api(space_id)
20
+ space = Ribose::Space.fetch(space_id)
21
+
22
+ expect(space.id).not_to be_nil
23
+ expect(space.name).to eq("Work")
24
+ expect(space.role_name).to eq("Administrator")
25
+ end
26
+ end
27
+
28
+ describe ".create" do
29
+ it "creates a new space with provided details" do
30
+ stub_ribose_space_create_api(space_attributes)
31
+ space = Ribose::Space.create(space_attributes)
32
+
33
+ expect(space.id).not_to be_nil
34
+ expect(space.visibility).to eq("invisible")
35
+ expect(space.name).to eq("Trip to the Mars")
36
+ end
37
+ end
38
+
39
+ describe ".update" do
40
+ it "updates a space with provided details" do
41
+ space_id = 123_456_789
42
+
43
+ stub_ribose_space_update_api(space_id, space_attributes)
44
+ space = Ribose::Space.update(space_id, space_attributes)
45
+
46
+ expect(space.id).not_to be_nil
47
+ expect(space.visibility).to eq("invisible")
48
+ end
49
+ end
50
+
51
+ describe ".remove" do
52
+ it "removes an existing space" do
53
+ space_uuid = "8c63c209-8b98-41aa-a320-336462476ea1"
54
+ stub_ribose_space_remove_api(space_uuid, confirmation: true)
55
+
56
+ expect do
57
+ Ribose::Space.remove(space_uuid, confirmation: true)
58
+ end.not_to raise_error
59
+ end
60
+ end
61
+
62
+ def space_attributes
63
+ {
64
+ access: "private",
65
+ space_category_id: 12,
66
+ description: "The long awaited dream!",
67
+ name: "Trip to the Mars",
68
+ }
69
+ end
70
+ end
@@ -0,0 +1,14 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Ribose::Stream do
4
+ describe ".all" do
5
+ it "retreives the list of notifications stream" do
6
+ stub_ribose_stream_list_api
7
+ stream = Ribose::Stream.all
8
+
9
+ expect(stream.notifications.count).to eq(3)
10
+ expect(stream.notifications.first.id).not_to be_nil
11
+ expect(stream.notifications.first.data.first.info.action).to eq("create")
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,48 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Ribose::User do
4
+ before { restore_to_default_config }
5
+ after { set_configuration_for_test_env }
6
+
7
+ describe ".create" do
8
+ it "creates a new signup request for user" do
9
+ user_attributes = { email: "john.doe@example.com" }
10
+ stub_ribose_app_user_create_api(user_attributes)
11
+
12
+ expect do
13
+ Ribose::User.create(user_attributes)
14
+ end.not_to raise_error
15
+ end
16
+ end
17
+
18
+ describe ".activate" do
19
+ it "complete the user signup process" do
20
+ stub_ribose_app_user_activate_api(user_attributes)
21
+ user = Ribose::User.activate(user_attributes)
22
+
23
+ expect(user.id).not_to be_nil
24
+ expect(user.name).to eq("John Doe")
25
+ expect(user.connected).to be_truthy
26
+ end
27
+ end
28
+
29
+ def user_attributes
30
+ @user_attributes ||= {
31
+ email: "john.doe@example.com",
32
+ password: "SecurePassword",
33
+ otp: "OTP_RECEIVED_VIA_EMAIL",
34
+ }
35
+ end
36
+
37
+ def restore_to_default_config
38
+ Ribose.configuration.api_token = nil
39
+ Ribose.configuration.user_email = nil
40
+ end
41
+
42
+ def set_configuration_for_test_env
43
+ Ribose.configure do |config|
44
+ config.api_token = ENV["RIBOSE_API_TOKEN"] || "RIBOSE_API_TOKEN"
45
+ config.user_email = ENV["RIBOSE_USER_EMAIL"] || "RIBOSE_USER_EMAIL"
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,14 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Ribose::Widget do
4
+ describe ".all" do
5
+ it "retrieves the list of widgets" do
6
+ stub_ribose_widget_list_api
7
+ widgets = Ribose::Widget.all
8
+
9
+ expect(widgets.first.id).not_to be_nil
10
+ expect(widgets.first.status).to eq("loaded")
11
+ expect(widgets.first.type).to eq("Widget::RssFeed")
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,67 @@
1
+ require "spec_helper"
2
+
3
+ RSpec.describe Ribose::Wiki do
4
+ describe ".all" do
5
+ it "retrieves the list of wiki pages" do
6
+ space_id = 123_456
7
+
8
+ stub_ribose_wiki_list_api(space_id)
9
+ wikis = Ribose::Wiki.all(space_id)
10
+
11
+ expect(wikis.count).to eq(2)
12
+ expect(wikis.first.name).to eq("Wiki Page One")
13
+ expect(wikis.last.name).to eq("Wiki Page Two")
14
+ end
15
+ end
16
+
17
+ describe ".fetch" do
18
+ it "retrieves the details for a wiki page" do
19
+ wiki_id = 456_789
20
+ space_id = 123_456
21
+
22
+ stub_ribose_wiki_fetch_api(space_id, wiki_id)
23
+ wiki = Ribose::Wiki.fetch(space_id, wiki_id)
24
+
25
+ expect(wiki.name).to eq("Wiki Page One")
26
+ expect(wiki.history.current_ver).to eq(1)
27
+ expect(wiki.updater.name).to eq("John Doe")
28
+ end
29
+ end
30
+
31
+ describe ".create" do
32
+ it "creates a new wiki page in space" do
33
+ space_id = 123_456
34
+ attributes = { name: "Wiki Page One" }
35
+
36
+ stub_ribose_wiki_create_api(space_id, attributes)
37
+ wiki = Ribose::Wiki.create(space_id, attributes)
38
+
39
+ expect(wiki.id).not_to be_nil
40
+ expect(wiki.name).to eq(attributes[:name])
41
+ end
42
+ end
43
+
44
+ describe ".update" do
45
+ it "updates a wiki with provided details" do
46
+ wiki_id = 456_789
47
+ space_id = 123_456
48
+ attributes = { name: "Wiki Page One" }
49
+
50
+ stub_ribose_wiki_update_api(space_id, wiki_id, attributes)
51
+ wiki = Ribose::Wiki.update(space_id, wiki_id, attributes)
52
+
53
+ expect(wiki.id).not_to be_nil
54
+ expect(wiki.name).to eq("Wiki Page One")
55
+ end
56
+ end
57
+
58
+ describe ".delete" do
59
+ it "deletes an existing space wiki page" do
60
+ wiki_id = 456_789
61
+ space_id = 123_456
62
+
63
+ stub_ribose_wiki_delete_api(space_id, wiki_id)
64
+ expect { Ribose::Wiki.delete(space_id, wiki_id) }.not_to raise_error
65
+ end
66
+ end
67
+ end