ribose 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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