yamwow 0.1.0 → 0.1.1
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.
- data/lib/yamwow/client.rb +30 -14
- data/lib/yamwow/facade.rb +41 -13
- data/lib/yamwow/messages_responder.rb +35 -0
- data/lib/yamwow/praise_messages_responder.rb +48 -0
- data/lib/yamwow/requests/groups/group_with_name_request.rb +27 -0
- data/lib/yamwow/requests/messages/limited_messages_with_topic_id_request.rb +15 -0
- data/lib/yamwow/requests/messages/messages_with_topic_id_request.rb +33 -0
- data/lib/yamwow/requests/messages/messages_with_topic_name_request.rb +22 -0
- data/lib/yamwow/requests/messages/praise_messages_request.rb +15 -0
- data/lib/yamwow/requests/topics/limited_topics_with_prefix_request.rb +24 -0
- data/lib/yamwow/requests/topics/topic_with_name_request.rb +25 -0
- data/lib/yamwow/requests/topics/topics_request.rb +20 -0
- data/lib/yamwow/requests/topics/topics_with_prefix_request.rb +40 -0
- data/lib/yamwow/requests/users/current_user_request.rb +16 -0
- data/lib/yamwow/requests.rb +1 -1
- data/lib/yamwow/throttle.rb +1 -1
- data/lib/yamwow/topics_responder.rb +22 -0
- data/lib/yamwow.rb +9 -1
- metadata +39 -12
- data/lib/yamwow/requests/current_user_request.rb +0 -18
- data/lib/yamwow/requests/group_with_name_request.rb +0 -29
- data/lib/yamwow/requests/messages_with_topic_request.rb +0 -78
- data/lib/yamwow/requests/praise_request.rb +0 -52
- data/lib/yamwow/requests/topic_with_id_request.rb +0 -17
- data/lib/yamwow/requests/topic_with_name_request.rb +0 -31
- data/lib/yamwow/requests/topics_request.rb +0 -37
- data/lib/yamwow/requests/topics_with_prefix_request.rb +0 -36
data/lib/yamwow/client.rb
CHANGED
@@ -4,35 +4,51 @@ require_relative 'throttle'
|
|
4
4
|
module YamWow
|
5
5
|
class Client
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
@yam = Yam.new
|
9
|
-
@
|
10
|
-
|
11
|
-
|
7
|
+
def initialize(access_token)
|
8
|
+
@yam = Yam.new access_token, nil
|
9
|
+
@throttles = {
|
10
|
+
messages: Throttle.new(10, 30),
|
11
|
+
autocomplete: Throttle.new(10, 10),
|
12
|
+
other: Throttle.new(10, 10)
|
13
|
+
}
|
12
14
|
end
|
13
15
|
|
14
|
-
def
|
15
|
-
|
16
|
-
get path, params, @message_throttle
|
16
|
+
def get_autocomplete(params={})
|
17
|
+
get 'autocomplete.json', params
|
17
18
|
end
|
18
19
|
|
19
|
-
def
|
20
|
-
get '
|
20
|
+
def get_current_user
|
21
|
+
get 'users/current.json'
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_messages_about_topic(topic_id, params={})
|
25
|
+
get "messages/about_topic/#{topic_id}.json", params
|
21
26
|
end
|
22
27
|
|
23
|
-
def
|
24
|
-
get
|
28
|
+
def get_topic(topic_id)
|
29
|
+
get "topics/#{topic_id}.json"
|
25
30
|
end
|
26
31
|
|
27
32
|
private
|
28
33
|
|
29
|
-
def get(path, params
|
34
|
+
def get(path, params={})
|
30
35
|
path = '/' + path unless path.start_with? '/'
|
31
|
-
throttle.when_ready do
|
36
|
+
throttle(path).when_ready do
|
32
37
|
puts "GET #{path} #{params.inspect}"
|
33
38
|
@yam.get path, params
|
34
39
|
end
|
35
40
|
end
|
36
41
|
|
42
|
+
def throttle(path)
|
43
|
+
case
|
44
|
+
when path.start_with?('/messages')
|
45
|
+
@throttles[:messages]
|
46
|
+
when path.start_with?('/autocomplete')
|
47
|
+
@throttles[:autocomplete]
|
48
|
+
else
|
49
|
+
@throttles[:other]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
37
53
|
end
|
38
54
|
end
|
data/lib/yamwow/facade.rb
CHANGED
@@ -1,35 +1,63 @@
|
|
1
1
|
require_relative 'client'
|
2
2
|
require_relative 'requests'
|
3
|
+
require_relative 'topics_responder'
|
4
|
+
require_relative 'messages_responder'
|
5
|
+
require_relative 'praise_messages_responder'
|
3
6
|
|
4
7
|
module YamWow
|
5
8
|
class Facade
|
6
9
|
|
7
|
-
def initialize(
|
8
|
-
|
10
|
+
def initialize(access_token)
|
11
|
+
client = Client.new access_token
|
12
|
+
topics_responder = TopicsResponder.new
|
13
|
+
messages_responder = MessagesResponder.new
|
14
|
+
praise_messages_responder = PraiseMessagesResponder.new messages_responder
|
15
|
+
|
16
|
+
@group_with_name_request = GroupWithNameRequest.new client
|
17
|
+
|
18
|
+
limited_topics_with_prefix_request = LimitedTopicsWithPrefixRequest.new client, topics_responder
|
19
|
+
@topics_with_prefix_request = TopicsWithPrefixRequest.new topics_responder, limited_topics_with_prefix_request
|
20
|
+
@topic_with_name_request = TopicWithNameRequest.new @topics_with_prefix_request
|
21
|
+
@topics_request = TopicsRequest.new topics_responder, @topics_with_prefix_request
|
22
|
+
|
23
|
+
limited_messages_with_topic_id_request = LimitedMessagesWithTopicIdRequest.new client, messages_responder
|
24
|
+
@messages_with_topic_id_request = MessagesWithTopicIdRequest.new messages_responder, limited_messages_with_topic_id_request
|
25
|
+
@messages_with_topic_name_request = MessagesWithTopicNameRequest.new @topic_with_name_request, @messages_with_topic_id_request
|
26
|
+
@praise_messages_request = PraiseMessagesRequest.new praise_messages_responder, @messages_with_topic_name_request
|
27
|
+
|
28
|
+
@current_user_request = CurrentUserRequest.new client
|
29
|
+
end
|
30
|
+
|
31
|
+
def group_with_name(group_name)
|
32
|
+
@group_with_name_request.send group_name
|
9
33
|
end
|
10
34
|
|
11
|
-
def
|
12
|
-
|
35
|
+
def messages_with_topic_id(topic_id)
|
36
|
+
@messages_with_topic_id_request.send(topic_id)
|
13
37
|
end
|
14
38
|
|
15
|
-
def
|
16
|
-
|
39
|
+
def messages_with_topic_name(topic_name)
|
40
|
+
@messages_with_topic_name_request.send topic_name
|
17
41
|
end
|
18
42
|
|
19
|
-
def
|
20
|
-
|
43
|
+
def praise_messages
|
44
|
+
@praise_messages_request.send
|
21
45
|
end
|
22
46
|
|
23
|
-
def
|
24
|
-
|
47
|
+
def topic_with_name(topic_name)
|
48
|
+
@topic_with_name_request.send topic_name
|
25
49
|
end
|
26
50
|
|
27
|
-
def
|
28
|
-
|
51
|
+
def topics
|
52
|
+
@topics_request.send
|
53
|
+
end
|
54
|
+
|
55
|
+
def topics_with_prefix(topic_prefix)
|
56
|
+
@topics_with_prefix_request.send topic_prefix
|
29
57
|
end
|
30
58
|
|
31
59
|
def current_user
|
32
|
-
|
60
|
+
@current_user_request.send
|
33
61
|
end
|
34
62
|
|
35
63
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'time'
|
2
|
+
require_relative 'response'
|
3
|
+
|
4
|
+
module YamWow
|
5
|
+
class MessagesResponder
|
6
|
+
|
7
|
+
def create_response(messages, references=[])
|
8
|
+
@messages = messages
|
9
|
+
@references = references
|
10
|
+
remove_comments
|
11
|
+
sort_by_most_recent_first
|
12
|
+
enhance_messages
|
13
|
+
YamWow::Response.new @messages, @references
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def remove_comments
|
19
|
+
@messages.select! { |m| m['replied_to_id'].nil? }
|
20
|
+
end
|
21
|
+
|
22
|
+
def sort_by_most_recent_first
|
23
|
+
@messages.sort! { |x, y| Time.parse(y['created_at']) <=> Time.parse(x['created_at']) }
|
24
|
+
end
|
25
|
+
|
26
|
+
def enhance_messages
|
27
|
+
@messages.each { |m| enhance_message m }
|
28
|
+
end
|
29
|
+
|
30
|
+
def enhance_message(message)
|
31
|
+
message['sender_tag'] = "[[user:#{message['sender_id']}]]" if message['sender_id']
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module YamWow
|
2
|
+
class PraiseMessagesResponder
|
3
|
+
|
4
|
+
def initialize(messages_responder)
|
5
|
+
@messages_responder = messages_responder
|
6
|
+
end
|
7
|
+
|
8
|
+
def create_response(messages, references=[])
|
9
|
+
@messages = messages
|
10
|
+
@references = references
|
11
|
+
enhance_messages
|
12
|
+
@messages_responder.create_response @messages, @references
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def enhance_messages
|
18
|
+
@messages.each { |m| enhance_message m }
|
19
|
+
end
|
20
|
+
|
21
|
+
def enhance_message(message)
|
22
|
+
praise_attachment = praise_attachment message
|
23
|
+
praise_attachment ? enhance_message_with_praise_attachment(message, praise_attachment) : enhance_normal_message(message)
|
24
|
+
end
|
25
|
+
|
26
|
+
def enhance_message_with_praise_attachment(message, praise_attachment)
|
27
|
+
message['praise_message'] = praise_attachment['name'].match(/Praise: (.+)/m)[1]
|
28
|
+
message['praise_recipient_names'] = split_recipients(message['body']['plain']).map { |r| r.gsub '@', '' }.join ', '
|
29
|
+
message['praise_recipient_tags'] = split_recipients(message['body']['parsed']).join ', '
|
30
|
+
end
|
31
|
+
|
32
|
+
def enhance_normal_message(message)
|
33
|
+
message['praise_message'] = message['body']['parsed']
|
34
|
+
end
|
35
|
+
|
36
|
+
def praise_attachment(message)
|
37
|
+
attachments = message['attachments'] || []
|
38
|
+
attachments.select { |a| a['type'] == 'ymodule' }.select { |a| a['ymodule']['app_id'] == 'praise' }.first
|
39
|
+
end
|
40
|
+
|
41
|
+
def split_recipients(recipients)
|
42
|
+
recipients = recipients.to_s.include?('praised') ? recipients.match(/praised (.+)/)[1] : ''
|
43
|
+
recipients.gsub!(' and ', ', ')
|
44
|
+
recipients.split(', ')
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative '../../response'
|
2
|
+
|
3
|
+
module YamWow
|
4
|
+
class GroupWithNameRequest
|
5
|
+
|
6
|
+
def initialize(client)
|
7
|
+
@client = client
|
8
|
+
end
|
9
|
+
|
10
|
+
def send(group_name)
|
11
|
+
@group_name = group_name
|
12
|
+
Response.new group_with_name
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
|
17
|
+
def group_with_name
|
18
|
+
groups_with_prefix.select { |g| g['full_name'].casecmp(@group_name) == 0 }.first
|
19
|
+
end
|
20
|
+
|
21
|
+
def groups_with_prefix
|
22
|
+
data = @client.get_autocomplete prefix: 'to:' + @group_name
|
23
|
+
data['groups'] || []
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module YamWow
|
2
|
+
class LimitedMessagesWithTopicIdRequest
|
3
|
+
|
4
|
+
def initialize(client, responder)
|
5
|
+
@client = client
|
6
|
+
@responder = responder
|
7
|
+
end
|
8
|
+
|
9
|
+
def send(topic_id, options={})
|
10
|
+
data = @client.get_messages_about_topic topic_id, threaded: true, older_than: options[:older_than_id]
|
11
|
+
@responder.create_response data['messages'], data['references']
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module YamWow
|
2
|
+
class MessagesWithTopicIdRequest
|
3
|
+
|
4
|
+
def initialize(responder, limited_messages_with_topic_id_request)
|
5
|
+
@responder = responder
|
6
|
+
@limited_messages_with_topic_id_request = limited_messages_with_topic_id_request
|
7
|
+
end
|
8
|
+
|
9
|
+
def send(topic_id)
|
10
|
+
@topic_id = topic_id
|
11
|
+
@messages = []
|
12
|
+
@references = []
|
13
|
+
add_messages
|
14
|
+
@responder.create_response @messages, @references
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def add_messages
|
20
|
+
response = @limited_messages_with_topic_id_request.send(@topic_id, older_than_id: oldest_message_id)
|
21
|
+
@messages += response.data
|
22
|
+
@references += response.reference_data
|
23
|
+
add_messages unless response.data.empty?
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def oldest_message_id
|
29
|
+
@messages.empty? ? nil : @messages.last['id']
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module YamWow
|
2
|
+
class MessagesWithTopicNameRequest
|
3
|
+
|
4
|
+
def initialize(topic_with_name_request, messages_with_topic_id_request)
|
5
|
+
@messages_with_topic_id_request = messages_with_topic_id_request
|
6
|
+
@topic_with_name_request = topic_with_name_request
|
7
|
+
end
|
8
|
+
|
9
|
+
def send(topic_name)
|
10
|
+
@topic_name = topic_name
|
11
|
+
@messages_with_topic_id_request.send topic_id
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def topic_id
|
17
|
+
response = @topic_with_name_request.send @topic_name
|
18
|
+
response.data['id'] if response.data
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module YamWow
|
2
|
+
class PraiseMessagesRequest
|
3
|
+
|
4
|
+
def initialize(responder, messages_with_topic_name_request)
|
5
|
+
@responder = responder
|
6
|
+
@messages_with_topic_name_request = messages_with_topic_name_request
|
7
|
+
end
|
8
|
+
|
9
|
+
def send
|
10
|
+
r = @messages_with_topic_name_request.send 'praise'
|
11
|
+
@responder.create_response r.data, r.reference_data
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module YamWow
|
2
|
+
class LimitedTopicsWithPrefixRequest
|
3
|
+
|
4
|
+
LIMIT = 50
|
5
|
+
|
6
|
+
def initialize(client, responder)
|
7
|
+
@client = client
|
8
|
+
@responder = responder
|
9
|
+
end
|
10
|
+
|
11
|
+
def send(topic_prefix)
|
12
|
+
@topic_prefix = topic_prefix
|
13
|
+
@responder.create_response topics
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def topics
|
19
|
+
data = @client.get_autocomplete prefix: @topic_prefix
|
20
|
+
data['topics'] || []
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module YamWow
|
2
|
+
class TopicWithNameRequest
|
3
|
+
|
4
|
+
def initialize(topics_with_prefix_request)
|
5
|
+
@topics_with_prefix_request = topics_with_prefix_request
|
6
|
+
end
|
7
|
+
|
8
|
+
def send(topic_name)
|
9
|
+
@topic_name = topic_name
|
10
|
+
Response.new topic_with_name
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def topic_with_name
|
16
|
+
topics_with_prefix.select { |t| t['name'].casecmp(@topic_name) == 0 }.first
|
17
|
+
end
|
18
|
+
|
19
|
+
def topics_with_prefix
|
20
|
+
response = @topics_with_prefix_request.send @topic_name
|
21
|
+
response.data || []
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module YamWow
|
2
|
+
class TopicsRequest
|
3
|
+
|
4
|
+
def initialize(responder, topics_with_prefix_request)
|
5
|
+
@responder = responder
|
6
|
+
@topics_with_prefix_request = topics_with_prefix_request
|
7
|
+
@prefixes = ('0'..'9').to_a + ('a'..'z').to_a
|
8
|
+
end
|
9
|
+
|
10
|
+
def send
|
11
|
+
topics = []
|
12
|
+
@prefixes.each do |prefix|
|
13
|
+
response = @topics_with_prefix_request.send prefix
|
14
|
+
topics += response.data
|
15
|
+
end
|
16
|
+
@responder.create_response topics
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module YamWow
|
2
|
+
class TopicsWithPrefixRequest
|
3
|
+
|
4
|
+
def initialize(responder, limited_topics_with_prefix_request)
|
5
|
+
@responder = responder
|
6
|
+
@limited_topics_with_prefix_request = limited_topics_with_prefix_request
|
7
|
+
end
|
8
|
+
|
9
|
+
def send(topic_prefix)
|
10
|
+
@topic_prefix = topic_prefix
|
11
|
+
@topics = []
|
12
|
+
add_topics(@topic_prefix) { find_topics @topic_prefix }
|
13
|
+
@responder.create_response @topics
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def find_topics(prefix)
|
19
|
+
range.each do |suffix|
|
20
|
+
next_prefix = prefix + suffix
|
21
|
+
add_topics(next_prefix) { find_topics next_prefix }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def range
|
26
|
+
first_char = @topic_prefix[0]
|
27
|
+
first_char.to_i.to_s == first_char ? ('0'..'9') : ('a'..'z')
|
28
|
+
end
|
29
|
+
|
30
|
+
def add_topics(prefix)
|
31
|
+
response = @limited_topics_with_prefix_request.send prefix
|
32
|
+
topics = response.data || []
|
33
|
+
yield if topics.length == LimitedTopicsWithPrefixRequest::LIMIT
|
34
|
+
@topics += [topics].flatten
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
|
data/lib/yamwow/requests.rb
CHANGED
@@ -1 +1 @@
|
|
1
|
-
Dir[File.expand_path(File.dirname(__FILE__) + '/requests
|
1
|
+
Dir[File.expand_path(File.dirname(__FILE__) + '/requests/**/*_request.rb')].each { |f| require f }
|
data/lib/yamwow/throttle.rb
CHANGED
@@ -0,0 +1,22 @@
|
|
1
|
+
require_relative 'response'
|
2
|
+
|
3
|
+
module YamWow
|
4
|
+
class TopicsResponder
|
5
|
+
|
6
|
+
def create_response(topics)
|
7
|
+
@topics = topics
|
8
|
+
remove_duplicates
|
9
|
+
sort_by_name
|
10
|
+
Response.new @topics
|
11
|
+
end
|
12
|
+
|
13
|
+
def remove_duplicates
|
14
|
+
@topics.uniq! { |t| t['id'] }
|
15
|
+
end
|
16
|
+
|
17
|
+
def sort_by_name
|
18
|
+
@topics.sort! { |x, y| x['full_name'].to_s.downcase <=> y['full_name'].to_s.downcase }
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
end
|
data/lib/yamwow.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yamwow
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-03-01 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: yam
|
16
|
-
requirement: &
|
16
|
+
requirement: &70253074602400 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,29 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70253074602400
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &70253074601420 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70253074601420
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec-mocks
|
38
|
+
requirement: &70253074600560 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70253074600560
|
25
47
|
description:
|
26
48
|
email: matthew-github@matthewriley.name
|
27
49
|
executables: []
|
@@ -32,17 +54,22 @@ files:
|
|
32
54
|
- lib/yamwow/client.rb
|
33
55
|
- lib/yamwow/enumerable_extensions.rb
|
34
56
|
- lib/yamwow/facade.rb
|
35
|
-
- lib/yamwow/
|
36
|
-
- lib/yamwow/
|
37
|
-
- lib/yamwow/requests/
|
38
|
-
- lib/yamwow/requests/
|
39
|
-
- lib/yamwow/requests/
|
40
|
-
- lib/yamwow/requests/
|
41
|
-
- lib/yamwow/requests/
|
42
|
-
- lib/yamwow/requests/
|
57
|
+
- lib/yamwow/messages_responder.rb
|
58
|
+
- lib/yamwow/praise_messages_responder.rb
|
59
|
+
- lib/yamwow/requests/groups/group_with_name_request.rb
|
60
|
+
- lib/yamwow/requests/messages/limited_messages_with_topic_id_request.rb
|
61
|
+
- lib/yamwow/requests/messages/messages_with_topic_id_request.rb
|
62
|
+
- lib/yamwow/requests/messages/messages_with_topic_name_request.rb
|
63
|
+
- lib/yamwow/requests/messages/praise_messages_request.rb
|
64
|
+
- lib/yamwow/requests/topics/limited_topics_with_prefix_request.rb
|
65
|
+
- lib/yamwow/requests/topics/topic_with_name_request.rb
|
66
|
+
- lib/yamwow/requests/topics/topics_request.rb
|
67
|
+
- lib/yamwow/requests/topics/topics_with_prefix_request.rb
|
68
|
+
- lib/yamwow/requests/users/current_user_request.rb
|
43
69
|
- lib/yamwow/requests.rb
|
44
70
|
- lib/yamwow/response.rb
|
45
71
|
- lib/yamwow/throttle.rb
|
72
|
+
- lib/yamwow/topics_responder.rb
|
46
73
|
- lib/yamwow.rb
|
47
74
|
homepage: http://rubygems.org/gems/yamwow
|
48
75
|
licenses: []
|
@@ -1,18 +0,0 @@
|
|
1
|
-
#GET https://www.yammer.com/api/v1/users/current.json
|
2
|
-
|
3
|
-
require_relative '../response'
|
4
|
-
|
5
|
-
module YamWow
|
6
|
-
class CurrentUserRequest
|
7
|
-
|
8
|
-
def initialize(client)
|
9
|
-
@client = client
|
10
|
-
end
|
11
|
-
|
12
|
-
def send
|
13
|
-
user = @client.get_other 'users/current.json'
|
14
|
-
Response.new user
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require_relative '../response'
|
2
|
-
|
3
|
-
module YamWow
|
4
|
-
class GroupWithNameRequest
|
5
|
-
|
6
|
-
def initialize(client, group_name)
|
7
|
-
@client = client
|
8
|
-
@group_name = group_name.downcase.gsub(/[^0-9a-z]/i, '')
|
9
|
-
end
|
10
|
-
|
11
|
-
def send
|
12
|
-
groups = get_groups
|
13
|
-
group = first_group_with_matching_name groups
|
14
|
-
Response.new group
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
18
|
-
|
19
|
-
def get_groups
|
20
|
-
r = @client.get_autocomplete prefix: 'to:' + @group_name
|
21
|
-
r['groups'] || []
|
22
|
-
end
|
23
|
-
|
24
|
-
def first_group_with_matching_name(groups)
|
25
|
-
groups.select { |g| g['name'] == @group_name }.first
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
end
|
@@ -1,78 +0,0 @@
|
|
1
|
-
require 'time'
|
2
|
-
require_relative '../response'
|
3
|
-
require_relative 'topic_with_name_request'
|
4
|
-
|
5
|
-
module YamWow
|
6
|
-
class MessagesWithTopicRequest
|
7
|
-
|
8
|
-
def initialize(client, topic_name, options={})
|
9
|
-
@client = client
|
10
|
-
@topic_name = topic_name
|
11
|
-
@options = options
|
12
|
-
end
|
13
|
-
|
14
|
-
def send
|
15
|
-
@messages = []
|
16
|
-
@references = []
|
17
|
-
loop_finished = topic_id.nil?
|
18
|
-
|
19
|
-
until loop_finished
|
20
|
-
response_data = send_messages_request
|
21
|
-
before_message_count = @messages.length
|
22
|
-
add_messages response_data['messages'], response_data['references']
|
23
|
-
after_message_count = @messages.length
|
24
|
-
no_more_messages = before_message_count == after_message_count
|
25
|
-
loop_finished = no_more_messages || limit_reached
|
26
|
-
end
|
27
|
-
|
28
|
-
@messages.sort! { |x, y| Time.parse(y['created_at']) <=> Time.parse(x['created_at']) }
|
29
|
-
|
30
|
-
Response.new @messages, @references
|
31
|
-
end
|
32
|
-
|
33
|
-
private
|
34
|
-
|
35
|
-
def send_messages_request
|
36
|
-
@client.get_messages "about_topic/#{topic_id}.json", threaded: true, older_than: oldest_message_id
|
37
|
-
end
|
38
|
-
|
39
|
-
def topic_id
|
40
|
-
@topic_id ||= get_topic_id
|
41
|
-
end
|
42
|
-
|
43
|
-
def get_topic_id
|
44
|
-
request = TopicWithNameRequest.new @client, @topic_name
|
45
|
-
response = request.send
|
46
|
-
topic = response.data
|
47
|
-
topic.id if topic
|
48
|
-
end
|
49
|
-
|
50
|
-
def oldest_message_id
|
51
|
-
sorted_messages = @messages.sort { |x, y| Time.parse(y['created_at']) <=> Time.parse(x['created_at']) }
|
52
|
-
last_message = sorted_messages.last
|
53
|
-
last_message.id if last_message
|
54
|
-
end
|
55
|
-
|
56
|
-
def add_messages(messages_data, reference_data)
|
57
|
-
@messages += build_messages messages_data, reference_data
|
58
|
-
@messages = @messages[0..limit_count-1] if limit_count > 0
|
59
|
-
@references += reference_data
|
60
|
-
end
|
61
|
-
|
62
|
-
def build_messages(messages_data, reference_data)
|
63
|
-
messages_data.select { |m| m['replied_to_id'].nil? }.each do |m|
|
64
|
-
m['like_count'] = m['liked_by']['count'].to_i
|
65
|
-
m['sender_tag'] = "[[user:#{m['sender_id']}]]"
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def limit_reached
|
70
|
-
limit_count > 0 ? @messages.length == limit_count : false
|
71
|
-
end
|
72
|
-
|
73
|
-
def limit_count
|
74
|
-
@options[:limit_count] ? @options[:limit_count].to_i : 0
|
75
|
-
end
|
76
|
-
|
77
|
-
end
|
78
|
-
end
|
@@ -1,52 +0,0 @@
|
|
1
|
-
require_relative 'messages_with_topic_request'
|
2
|
-
|
3
|
-
module YamWow
|
4
|
-
class PraiseRequest
|
5
|
-
|
6
|
-
def initialize(client, options={})
|
7
|
-
@client = client
|
8
|
-
@options = options
|
9
|
-
end
|
10
|
-
|
11
|
-
def send
|
12
|
-
get_messages_with_praise_topic
|
13
|
-
end
|
14
|
-
|
15
|
-
def get_messages_with_praise_topic
|
16
|
-
r = MessagesWithTopicRequest.new(@client, 'praise', @options).send
|
17
|
-
r.data.each do |m|
|
18
|
-
m['praise_message'] = reason m
|
19
|
-
m['praise_recipient_names'] = recipient_names m
|
20
|
-
m['praise_recipient_tags'] = recipient_tags m
|
21
|
-
end
|
22
|
-
r
|
23
|
-
end
|
24
|
-
|
25
|
-
private
|
26
|
-
|
27
|
-
def reason(message)
|
28
|
-
begin
|
29
|
-
attachments = message['attachments'] || []
|
30
|
-
praise_attachment = attachments.select { |a| a['type'] == 'ymodule' }.select { |a| a['ymodule']['app_id'] == 'praise' }.first
|
31
|
-
praise_attachment ? praise_attachment['name'].match(/Praise: (.+)/m)[1] : message['body']['parsed']
|
32
|
-
rescue
|
33
|
-
'(failed to extract reason)'
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def recipient_names(message)
|
38
|
-
split_recipients(message['body']['plain']).map { |r| r.gsub '@', '' }.join ', '
|
39
|
-
end
|
40
|
-
|
41
|
-
def recipient_tags(message)
|
42
|
-
split_recipients(message['body']['parsed']).join ', '
|
43
|
-
end
|
44
|
-
|
45
|
-
def split_recipients(recipients)
|
46
|
-
recipients = recipients.include?('praised') ? recipients.match(/praised (.+)/)[1] : ''
|
47
|
-
recipients.gsub!(' and ', ', ')
|
48
|
-
recipients.split(', ')
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
end
|
@@ -1,17 +0,0 @@
|
|
1
|
-
require_relative '../response'
|
2
|
-
|
3
|
-
module YamWow
|
4
|
-
class TopicWithIdRequest
|
5
|
-
|
6
|
-
def initialize(client, topic_id)
|
7
|
-
@client = client
|
8
|
-
@topic_id = topic_id
|
9
|
-
end
|
10
|
-
|
11
|
-
def send
|
12
|
-
topic = @client.get_other "topics/#{@topic_id}.json"
|
13
|
-
Response.new topic
|
14
|
-
end
|
15
|
-
|
16
|
-
end
|
17
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
require_relative '../response'
|
2
|
-
require_relative 'topics_with_prefix_request'
|
3
|
-
|
4
|
-
module YamWow
|
5
|
-
class TopicWithNameRequest
|
6
|
-
|
7
|
-
def initialize(client, topic_name, options={})
|
8
|
-
@client = client
|
9
|
-
@topic_name = topic_name
|
10
|
-
@detailed = options[:detailed]
|
11
|
-
end
|
12
|
-
|
13
|
-
def send
|
14
|
-
topics = get_topics
|
15
|
-
topic = first_topic_with_matching_name topics
|
16
|
-
Response.new topic
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def get_topics
|
22
|
-
response = TopicsWithPrefixRequest.new(@client, @topic_name, detailed: @detailed).send
|
23
|
-
response.data || []
|
24
|
-
end
|
25
|
-
|
26
|
-
def first_topic_with_matching_name(topics)
|
27
|
-
topics.select { |t| t['name'].casecmp(@topic_name) == 0 }.first
|
28
|
-
end
|
29
|
-
|
30
|
-
end
|
31
|
-
end
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require_relative '../response'
|
2
|
-
require_relative 'topics_with_prefix_request'
|
3
|
-
|
4
|
-
module YamWow
|
5
|
-
class TopicsRequest
|
6
|
-
|
7
|
-
def initialize(client, options={})
|
8
|
-
@client = client
|
9
|
-
@detailed = options[:detailed]
|
10
|
-
end
|
11
|
-
|
12
|
-
def send
|
13
|
-
@topics = []
|
14
|
-
process_range '0', '9'
|
15
|
-
process_range 'a', 'z'
|
16
|
-
@topics.uniq! { |t| t['id'] }
|
17
|
-
@topics.sort! { |x, y| x['name'].downcase <=> y['name'].downcase }
|
18
|
-
Response.new @topics
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def process_range(first, last, current=nil)
|
24
|
-
((current.to_s + first)..(current.to_s + last)).each do |prefix|
|
25
|
-
topics = send_topics_with_prefix_request prefix
|
26
|
-
@topics += topics
|
27
|
-
process_range first, last, prefix if topics.length == 50
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def send_topics_with_prefix_request(topic_prefix)
|
32
|
-
response = TopicsWithPrefixRequest.new(@client, topic_prefix, detailed: @detailed).send
|
33
|
-
response.data || []
|
34
|
-
end
|
35
|
-
|
36
|
-
end
|
37
|
-
end
|
@@ -1,36 +0,0 @@
|
|
1
|
-
require_relative '../response'
|
2
|
-
require_relative 'topic_with_id_request'
|
3
|
-
|
4
|
-
module YamWow
|
5
|
-
class TopicsWithPrefixRequest
|
6
|
-
|
7
|
-
def initialize(client, topic_prefix, options={})
|
8
|
-
@client = client
|
9
|
-
@topic_prefix = topic_prefix
|
10
|
-
@detailed = options[:detailed]
|
11
|
-
end
|
12
|
-
|
13
|
-
def send
|
14
|
-
topics = get_topics
|
15
|
-
topics.each { |t| add_details t } if @detailed
|
16
|
-
Response.new topics
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def get_topics
|
22
|
-
response = @client.get_autocomplete(prefix: @topic_prefix)
|
23
|
-
response['topics'] || []
|
24
|
-
end
|
25
|
-
|
26
|
-
def add_details(topic)
|
27
|
-
r = get_detailed_topic topic['id']
|
28
|
-
topic.merge! r.data
|
29
|
-
end
|
30
|
-
|
31
|
-
def get_detailed_topic(topic_id)
|
32
|
-
TopicWithIdRequest.new(@client, topic_id).send
|
33
|
-
end
|
34
|
-
|
35
|
-
end
|
36
|
-
end
|