yam 0.0.6 → 1.0.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 (88) hide show
  1. data.tar.gz.sig +0 -0
  2. data/.travis.yml +5 -0
  3. data/.yardopts +10 -0
  4. data/AUTHORS +1 -0
  5. data/CHANGELOG.md +7 -0
  6. data/CONTRIBUTING.md +0 -7
  7. data/Gemfile +27 -1
  8. data/README.md +190 -67
  9. data/Rakefile +9 -3
  10. data/certs/public.pem +20 -0
  11. data/lib/yammer.rb +47 -0
  12. data/lib/yammer/api.rb +29 -0
  13. data/lib/yammer/api/autocomplete.rb +39 -0
  14. data/lib/yammer/api/group.rb +92 -0
  15. data/lib/yammer/api/group_membership.rb +46 -0
  16. data/lib/yammer/api/invitation.rb +39 -0
  17. data/lib/yammer/api/like.rb +57 -0
  18. data/lib/yammer/api/message.rb +227 -0
  19. data/lib/yammer/api/network.rb +35 -0
  20. data/lib/yammer/api/notification.rb +32 -0
  21. data/lib/yammer/api/open_graph_object.rb +92 -0
  22. data/lib/yammer/api/pending_attachment.rb +64 -0
  23. data/lib/yammer/api/search.rb +42 -0
  24. data/lib/yammer/api/subscription.rb +32 -0
  25. data/lib/yammer/api/thread.rb +37 -0
  26. data/lib/yammer/api/topic.rb +37 -0
  27. data/lib/yammer/api/user.rb +168 -0
  28. data/lib/yammer/api_handler.rb +27 -0
  29. data/lib/yammer/api_response.rb +57 -0
  30. data/lib/yammer/base.rb +208 -0
  31. data/lib/yammer/client.rb +100 -0
  32. data/lib/yammer/configurable.rb +81 -0
  33. data/lib/yammer/error.rb +75 -0
  34. data/lib/yammer/group.rb +27 -0
  35. data/lib/yammer/group_membership.rb +25 -0
  36. data/lib/yammer/http_adapter.rb +100 -0
  37. data/lib/yammer/identity_map.rb +56 -0
  38. data/lib/yammer/message.rb +32 -0
  39. data/lib/yammer/message_body.rb +27 -0
  40. data/lib/yammer/pending_attachment.rb +19 -0
  41. data/lib/yammer/thread.rb +58 -0
  42. data/lib/yammer/user.rb +66 -0
  43. data/lib/yammer/version.rb +32 -0
  44. data/{lib/yam/configuration.rb → spec/api/autocomplete_spec.rb} +18 -23
  45. data/spec/api/group_membership_spec.rb +48 -0
  46. data/spec/api/group_spec.rb +76 -0
  47. data/spec/api/invitation_spec.rb +60 -0
  48. data/spec/api/like_spec.rb +46 -0
  49. data/spec/api/message_spec.rb +136 -0
  50. data/spec/api/network_spec.rb +41 -0
  51. data/{lib/yam/client.rb → spec/api/notification_spec.rb} +22 -4
  52. data/spec/api/open_graph_object_spec.rb +67 -0
  53. data/spec/api/pending_attachment_spec.rb +56 -0
  54. data/{lib/yam/constants.rb → spec/api/search_spec.rb} +21 -8
  55. data/spec/api/subscription_spec.rb +41 -0
  56. data/{lib/yam.rb → spec/api/thread_spec.rb} +19 -12
  57. data/{lib/yam/request.rb → spec/api/topic_spec.rb} +19 -15
  58. data/spec/api/user_spec.rb +108 -0
  59. data/spec/api_response.rb +86 -0
  60. data/spec/client_spec.rb +364 -0
  61. data/spec/error_spec.rb +88 -0
  62. data/spec/fixtures/group.json +1 -0
  63. data/spec/fixtures/message.json +1 -0
  64. data/spec/fixtures/messages_in_thread.json +1 -0
  65. data/spec/fixtures/portal_thread.json +1 -0
  66. data/spec/fixtures/private_thread.json +1 -0
  67. data/spec/fixtures/public_thread.json +1 -0
  68. data/spec/fixtures/user.json +1 -0
  69. data/spec/fixtures/users_followed.json +1 -0
  70. data/spec/fixtures/users_following.json +1 -0
  71. data/spec/http_adapter_spec.rb +109 -0
  72. data/spec/identity_map_spec.rb +127 -0
  73. data/spec/mocks/attachment.txt +1 -0
  74. data/spec/model/base_spec.rb +196 -0
  75. data/spec/model/group_membership_spec.rb +57 -0
  76. data/spec/model/group_spec.rb +73 -0
  77. data/spec/model/message_spec.rb +74 -0
  78. data/spec/model/thread_spec.rb +91 -0
  79. data/spec/model/user_spec.rb +222 -0
  80. data/spec/spec_helper.rb +39 -14
  81. data/yam.gemspec +50 -28
  82. metadata +270 -187
  83. metadata.gz.sig +0 -0
  84. data/lib/yam/api.rb +0 -53
  85. data/lib/yam/connection.rb +0 -57
  86. data/lib/yam/version.rb +0 -20
  87. data/spec/yam/client_spec.rb +0 -50
  88. data/spec/yam_spec.rb +0 -87
@@ -0,0 +1,32 @@
1
+ # Copyright (c) Microsoft Corporation
2
+ # All rights reserved.
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR
8
+ # CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
9
+ # WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE,
10
+ # FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
11
+
12
+ # See the Apache Version 2.0 License for specific language governing
13
+ # permissions and limitations under the License.
14
+
15
+ module Yammer
16
+ class Version
17
+ MAJOR = 1 unless defined? Yammer::MAJOR
18
+ MINOR = 0 unless defined? Yammer::MINOR
19
+ PATCH = 0 unless defined? Yammer::PATCH
20
+ PRE = nil unless defined? Yammer::PRE
21
+
22
+ class << self
23
+
24
+ # @return [String]
25
+ def to_s
26
+ [MAJOR, MINOR, PATCH, PRE].compact.join('.')
27
+ end
28
+
29
+ end
30
+
31
+ end
32
+ end
@@ -1,3 +1,5 @@
1
+ # -*- encoding: utf-8 -*-
2
+
1
3
  # Copyright (c) Microsoft Corporation
2
4
  # All rights reserved.
3
5
  #
@@ -15,32 +17,25 @@
15
17
  # See the Apache Version 2.0 License for specific language governing
16
18
  # permissions and limitations under the License.
17
19
 
18
- require 'yam/version'
19
-
20
- module Yam
21
- module Configuration
22
- DEFAULT_ADAPTER = :net_http
23
- DEFAULT_API_ENDPOINT = 'https://www.yammer.com/api/v1/'
24
- DEFAULT_USER_AGENT = "Yam Ruby Gem #{Yam::VERSION}".freeze
25
- VALID_OPTIONS_KEYS = [:adapter, :endpoint, :user_agent].freeze
20
+ require File.expand_path('../../spec_helper', __FILE__)
26
21
 
27
- attr_accessor *VALID_OPTIONS_KEYS
22
+ describe Yammer::Api::Autocomplete do
28
23
 
29
- def self.extended(base)
30
- base.set_defaults
31
- end
24
+ before :all do
25
+ @client = Yammer::Client.new(
26
+ :site_url => 'https://www.yammer.com',
27
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
28
+ :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
29
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
30
+ )
31
+ end
32
32
 
33
- def options
34
- options = {}
35
- VALID_OPTIONS_KEYS.each { |k| options[k] = send(k) }
36
- options
37
- end
33
+ subject { @client }
38
34
 
39
- def set_defaults
40
- self.adapter = DEFAULT_ADAPTER
41
- self.endpoint = DEFAULT_API_ENDPOINT
42
- self.user_agent = DEFAULT_USER_AGENT
43
- self
35
+ describe '#autocomplete' do
36
+ it 'should fetch autocomplete data' do
37
+ subject.should_receive(:get).with('/api/v1/autocomplete/ranked', { :prefix => 'alc' })
38
+ subject.autocomplete({ :prefix => 'alc' })
44
39
  end
45
40
  end
46
- end
41
+ end
@@ -0,0 +1,48 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # Copyright (c) Microsoft Corporation
4
+ # All rights reserved.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
13
+ # ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY
14
+ # IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR
15
+ # PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
16
+ #
17
+ # See the Apache Version 2.0 License for specific language governing
18
+ # permissions and limitations under the License.
19
+
20
+ require File.expand_path('../../spec_helper', __FILE__)
21
+
22
+ describe Yammer::Api::GroupMembership do
23
+
24
+ before :all do
25
+ @client = Yammer::Client.new(
26
+ :site_url => 'https://www.yammer.com',
27
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
28
+ :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
29
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
30
+ )
31
+ end
32
+
33
+ subject { @client }
34
+
35
+ describe '#get_group_membership' do
36
+ it 'should fetch a group membership' do
37
+ subject.should_receive(:get).with('/api/v1/group_memberships/1')
38
+ subject.get_group_membership(1)
39
+ end
40
+ end
41
+
42
+ describe '#create_group_membership' do
43
+ it 'should create a group membership' do
44
+ subject.should_receive(:post).with('/api/v1/group_memberships', { :group_id => 2 })
45
+ subject.create_group_membership(2)
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,76 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # Copyright (c) Microsoft Corporation
4
+ # All rights reserved.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
13
+ # ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY
14
+ # IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR
15
+ # PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
16
+ #
17
+ # See the Apache Version 2.0 License for specific language governing
18
+ # permissions and limitations under the License.
19
+
20
+ require File.expand_path('../../spec_helper', __FILE__)
21
+
22
+ describe Yammer::Api::Group do
23
+
24
+ before :all do
25
+ @client = Yammer::Client.new(
26
+ :site_url => 'https://www.yammer.com',
27
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
28
+ :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
29
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
30
+ )
31
+ end
32
+
33
+ subject { @client }
34
+
35
+ describe '#all_groups' do
36
+ it 'should fetch all groups in network' do
37
+ subject.should_receive(:get).with('/api/v1/groups', {})
38
+ subject.all_groups
39
+ end
40
+ end
41
+
42
+ describe '#groups_for_user' do
43
+ it 'should fetch all groups for user' do
44
+ subject.should_receive(:get).with('/api/v1/groups/for_user/2')
45
+ subject.groups_for_user(2)
46
+ end
47
+ end
48
+
49
+ describe '#get_group' do
50
+ it 'should fetch a thread' do
51
+ subject.should_receive(:get).with('/api/v1/groups/1')
52
+ subject.get_group(1)
53
+ end
54
+ end
55
+
56
+ describe '#create_group' do
57
+ it 'should fetch a thread' do
58
+ subject.should_receive(:post).with('/api/v1/groups', {
59
+ :name => 'my group',
60
+ :description => 'A test group',
61
+ :private => false
62
+ })
63
+ subject.create_group(:name => 'my group', :description => 'A test group', :private => false)
64
+ end
65
+ end
66
+
67
+ describe '#update_group' do
68
+ it 'should fetch a thread' do
69
+ subject.should_receive(:post).with('/api/v1/groups/2', {
70
+ :name => 'another group',
71
+ :description => 'A modified group description',
72
+ })
73
+ subject.update_group(2, :name => 'another group', :description => 'A modified group description')
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,60 @@
1
+ # Copyright (c) Microsoft Corporation
2
+ # All rights reserved.
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR
8
+ # CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
9
+ # WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE,
10
+ # FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
11
+
12
+ # See the Apache Version 2.0 License for specific language governing
13
+ # permissions and limitations under the License.
14
+
15
+ require File.expand_path('../../spec_helper', __FILE__)
16
+
17
+ describe Yammer::Api::Search do
18
+
19
+ before :all do
20
+ @client = Yammer::Client.new(
21
+ :site_url => 'https://www.yammer.com',
22
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
23
+ :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
24
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
25
+ )
26
+ end
27
+
28
+ subject { @client }
29
+
30
+ describe '#invite' do
31
+
32
+ context 'with single email as string' do
33
+ it 'should invite users' do
34
+ subject.should_receive(:post).with('/api/v1/invitations', { :email => 'alice@yammer.com' })
35
+ subject.invite('alice@yammer.com ')
36
+ end
37
+ end
38
+
39
+ context 'with single email as array' do
40
+ it 'should invite users' do
41
+ subject.should_receive(:post).with('/api/v1/invitations', { :email => 'bob@yammer.com' })
42
+ subject.invite(%w{bob@yammer.com})
43
+ end
44
+ end
45
+
46
+ context 'with multiple emails as string' do
47
+ it 'should invite users' do
48
+ subject.should_receive(:post).with('/api/v1/invitations', { :email => 'bob@yammer.com,alice@yammer.com' })
49
+ subject.invite(' bob@yammer.com,alice@yammer.com ')
50
+ end
51
+ end
52
+
53
+ context 'with multiple emails as array' do
54
+ it 'should invite users' do
55
+ subject.should_receive(:post).with('/api/v1/invitations', { :email => 'bob@yammer.com,alice@yammer.com' })
56
+ subject.invite(%w{ bob@yammer.com alice@yammer.com })
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,46 @@
1
+ # Copyright (c) Microsoft Corporation
2
+ # All rights reserved.
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
6
+ #
7
+ # THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR
8
+ # CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING
9
+ # WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE,
10
+ # FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
11
+
12
+ # See the Apache Version 2.0 License for specific language governing
13
+ # permissions and limitations under the License.
14
+
15
+ require File.expand_path('../../spec_helper', __FILE__)
16
+
17
+ describe Yammer::Api::Topic do
18
+
19
+ before :all do
20
+ @client = Yammer::Client.new(
21
+ :site_url => 'https://www.yammer.com',
22
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
23
+ :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
24
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
25
+ )
26
+ end
27
+
28
+ subject { @client }
29
+
30
+ describe '#likes' do
31
+ it 'should check if user likes open graph object' do
32
+ subject.should_receive(:get).with('/api/v1/likes/open_graph_object/1')
33
+ subject.likes_open_graph_object?(1)
34
+ end
35
+
36
+ it 'should like open graph object' do
37
+ subject.should_receive(:post).with('/api/v1/likes', :id => 1, :type => 'OpenGraphObject')
38
+ subject.like('OpenGraphObject', 1)
39
+ end
40
+
41
+ it 'should unlike open graph object' do
42
+ subject.should_receive(:delete).with('/api/v1/likes/1')
43
+ subject.unlike(1)
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,136 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ # Copyright (c) Microsoft Corporation
4
+ # All rights reserved.
5
+ #
6
+ # Licensed under the Apache License, Version 2.0 (the "License");
7
+ # you may not use this file except in compliance with the License.
8
+ # You may obtain a copy of the License at
9
+ #
10
+ # http://www.apache.org/licenses/LICENSE-2.0
11
+ #
12
+ # THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
13
+ # ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY
14
+ # IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR
15
+ # PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
16
+ #
17
+ # See the Apache Version 2.0 License for specific language governing
18
+ # permissions and limitations under the License.
19
+
20
+ require File.expand_path('../../spec_helper', __FILE__)
21
+
22
+ describe Yammer::Api::Message do
23
+
24
+ before :all do
25
+ @client = Yammer::Client.new(
26
+ :site_url => 'https://www.yammer.com',
27
+ :client_id => 'PRbTcg9qjgKsp4jjpm1pw',
28
+ :client_secret => 'Xn7kp7Ly0TCY4GtZWkmSsqGEPg10DmMADyjWkf2U',
29
+ :access_token => 'TolNOFka9Uls2DxahNi78A'
30
+ )
31
+ end
32
+
33
+ subject { @client }
34
+
35
+ describe '#all_messages' do
36
+ context 'with options' do
37
+ it 'should get_messages' do
38
+ params = { :page => 1 }
39
+ subject.should_receive(:get).with('/api/v1/messages', params)
40
+ subject.all_messages(params)
41
+ end
42
+ end
43
+
44
+ context 'without options' do
45
+ it 'should return all messages viewable by a user' do
46
+ subject.should_receive(:get).with('/api/v1/messages', {})
47
+ subject.all_messages
48
+ end
49
+ end
50
+ end
51
+
52
+ describe '#create_message' do
53
+ it 'should create_message' do
54
+ message = 'Greetings, we come in peace'
55
+ subject.should_receive(:post).with('/api/v1/messages', :body => message)
56
+ subject.create_message(message)
57
+ end
58
+ end
59
+
60
+ describe '#message' do
61
+ it 'should fetch a message' do
62
+ subject.should_receive(:get).with('/api/v1/messages/3')
63
+ subject.get_message(3)
64
+ end
65
+ end
66
+
67
+ describe '#delete_message' do
68
+ it 'should delete a message' do
69
+ subject.should_receive(:delete).with('/api/v1/messages/4')
70
+ subject.delete_message(4)
71
+ end
72
+ end
73
+
74
+ describe '#messages_sent' do
75
+ it 'should fetch messages sent by a user' do
76
+ subject.should_receive(:get).with('/api/v1/messages/sent', {})
77
+ subject.messages_sent
78
+ end
79
+ end
80
+
81
+ describe '#messages_received' do
82
+ it 'should fetch messages received by a user' do
83
+ subject.should_receive(:get).with('/api/v1/messages/received', {})
84
+ subject.messages_received
85
+ end
86
+ end
87
+
88
+ describe '#private_messages' do
89
+ it 'should fetch private messages' do
90
+ subject.should_receive(:get).with('/api/v1/messages/private', {})
91
+ subject.private_messages
92
+ end
93
+ end
94
+
95
+ describe '#followed_messages' do
96
+ it 'should fetch messages followed by a user' do
97
+ subject.should_receive(:get).with('/api/v1/messages/following', {})
98
+ subject.followed_messages
99
+ end
100
+ end
101
+
102
+ describe '#messages_from_user' do
103
+ it 'should fetch messages created by a user' do
104
+ subject.should_receive(:get).with('/api/v1/messages/from_user/14', {})
105
+ subject.messages_from_user(14)
106
+ end
107
+ end
108
+
109
+ describe '#messages_about_topic' do
110
+ it 'should fetch messages about a topic' do
111
+ subject.should_receive(:get).with('/api/v1/messages/about_topic/19', {})
112
+ subject.messages_about_topic(19)
113
+ end
114
+ end
115
+
116
+ describe '#messages_in_group' do
117
+ it 'should fetch messages in group' do
118
+ subject.should_receive(:get).with('/api/v1/messages/in_group/26', {})
119
+ subject.messages_in_group(26)
120
+ end
121
+ end
122
+
123
+ describe '#messages_liked_by' do
124
+ it 'should fetch messages liked by user' do
125
+ subject.should_receive(:get).with('/api/v1/messages/liked_by/58', {})
126
+ subject.messages_liked_by(58)
127
+ end
128
+ end
129
+
130
+ describe '#messages_in_thread' do
131
+ it 'should fetch messages in thread' do
132
+ subject.should_receive(:get).with('/api/v1/messages/in_thread/97', {})
133
+ subject.messages_in_thread(97)
134
+ end
135
+ end
136
+ end