yamwow 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/yamwow/client.rb +19 -19
- data/lib/yamwow/facade.rb +18 -6
- data/lib/yamwow/group.rb +5 -0
- data/lib/yamwow/group_request.rb +47 -0
- data/lib/yamwow/group_response.rb +11 -0
- data/lib/yamwow/message.rb +6 -49
- data/lib/yamwow/messages_for_topic_request.rb +99 -0
- data/lib/yamwow/messages_for_topic_response.rb +11 -0
- data/lib/yamwow/praise_request.rb +6 -5
- data/lib/yamwow/throttle.rb +0 -9
- data/lib/yamwow/topic.rb +5 -0
- data/lib/yamwow/topic_request.rb +34 -7
- data/lib/yamwow/topic_response.rb +3 -7
- data/lib/yamwow/user.rb +5 -0
- data/lib/yamwow.rb +2 -1
- metadata +14 -8
- data/lib/yamwow/messages_by_topic_request.rb +0 -57
- data/lib/yamwow/messages_by_topic_response.rb +0 -16
data/lib/yamwow/client.rb
CHANGED
@@ -1,32 +1,32 @@
|
|
1
|
-
require '
|
2
|
-
|
1
|
+
require 'yam'
|
2
|
+
require_relative 'throttle'
|
3
3
|
|
4
4
|
module YamWow
|
5
5
|
class Client
|
6
6
|
|
7
|
-
def initialize(
|
8
|
-
@
|
7
|
+
def initialize(oauth_token)
|
8
|
+
@yam = Yam.new oauth_token, nil
|
9
|
+
@message_throttle = Throttle.new 10, 30
|
10
|
+
@autocomplete_throttle = Throttle.new 10, 10
|
9
11
|
end
|
10
12
|
|
11
|
-
def
|
12
|
-
|
13
|
-
|
14
|
-
puts "GET #{url}"
|
15
|
-
response = access_token.get url
|
16
|
-
JSON.parse response.body
|
17
|
-
end
|
13
|
+
def get_messages(path=nil, params={})
|
14
|
+
path = path ? File.join('messages', path) : 'messages.json'
|
15
|
+
get path, params, @message_throttle
|
18
16
|
end
|
19
17
|
|
20
|
-
|
21
|
-
|
22
|
-
def access_token
|
23
|
-
@access_token ||= get_access_token
|
18
|
+
def get_autocomplete(params={})
|
19
|
+
get 'autocomplete.json', params, @autocomplete_throttle
|
24
20
|
end
|
25
21
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
22
|
+
private
|
23
|
+
|
24
|
+
def get(path, params, throttle)
|
25
|
+
path = '/' + path unless path.start_with? '/'
|
26
|
+
throttle.when_ready do
|
27
|
+
puts "GET #{path} #{params.inspect}"
|
28
|
+
@yam.get path, params
|
29
|
+
end
|
30
30
|
end
|
31
31
|
|
32
32
|
end
|
data/lib/yamwow/facade.rb
CHANGED
@@ -1,21 +1,33 @@
|
|
1
1
|
module YamWow
|
2
2
|
class Facade
|
3
3
|
|
4
|
-
def initialize(
|
5
|
-
@client = Client.new
|
4
|
+
def initialize(oauth_token)
|
5
|
+
@client = Client.new oauth_token
|
6
6
|
end
|
7
7
|
|
8
8
|
def messages_for_topic(topic_name, options={})
|
9
|
-
request =
|
10
|
-
response = request.send
|
9
|
+
request = MessagesForTopicRequest.new @client, topic_name, options
|
10
|
+
response = request.send
|
11
11
|
response.messages
|
12
12
|
end
|
13
13
|
|
14
14
|
def praises(options={})
|
15
|
-
request = PraiseRequest.new @client
|
16
|
-
response = request.send
|
15
|
+
request = PraiseRequest.new @client, options
|
16
|
+
response = request.send
|
17
17
|
response.praises
|
18
18
|
end
|
19
19
|
|
20
|
+
def topic(topic_name)
|
21
|
+
request = TopicRequest.new @client, topic_name
|
22
|
+
response = request.send
|
23
|
+
response.topic
|
24
|
+
end
|
25
|
+
|
26
|
+
def group(group_name)
|
27
|
+
request = GroupRequest.new @client, group_name
|
28
|
+
response = request.send
|
29
|
+
response.group
|
30
|
+
end
|
31
|
+
|
20
32
|
end
|
21
33
|
end
|
data/lib/yamwow/group.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require_relative 'group'
|
2
|
+
require_relative 'group_response'
|
3
|
+
|
4
|
+
module YamWow
|
5
|
+
class GroupRequest
|
6
|
+
|
7
|
+
def initialize(client, group_name)
|
8
|
+
@client = client
|
9
|
+
@group_name = group_name.gsub /[^0-9a-z]/i, ''
|
10
|
+
end
|
11
|
+
|
12
|
+
def send
|
13
|
+
group_data = get_group_data
|
14
|
+
group_data ? build_response(group_data) : build_empty_response
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def get_group_data
|
20
|
+
data = send_autocomplete_request
|
21
|
+
topics = data['groups'] || []
|
22
|
+
topics.select { |t| t['name'].downcase == @group_name.downcase }[0]
|
23
|
+
end
|
24
|
+
|
25
|
+
def send_autocomplete_request
|
26
|
+
prefix = 'to:' + @group_name.downcase
|
27
|
+
@client.get_autocomplete prefix: prefix
|
28
|
+
end
|
29
|
+
|
30
|
+
def build_empty_response
|
31
|
+
GroupResponse.new nil
|
32
|
+
end
|
33
|
+
|
34
|
+
def build_response(group_data)
|
35
|
+
group = build_group group_data
|
36
|
+
GroupResponse.new group
|
37
|
+
end
|
38
|
+
|
39
|
+
def build_group(group_data)
|
40
|
+
g = YamWow::Group.new
|
41
|
+
g.id = group_data['id']
|
42
|
+
g.name = group_data['full_name']
|
43
|
+
g
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
data/lib/yamwow/message.rb
CHANGED
@@ -3,73 +3,30 @@ require 'time'
|
|
3
3
|
module YamWow
|
4
4
|
class Message
|
5
5
|
|
6
|
-
|
7
|
-
@message_data = message_data
|
8
|
-
@reference_data = reference_data
|
9
|
-
end
|
10
|
-
|
11
|
-
def id
|
12
|
-
@message_data['id']
|
13
|
-
end
|
6
|
+
attr_accessor :id, :plain_body, :parsed_body, :date_created, :like_count, :url, :sender, :reply_to_id, :attachments
|
14
7
|
|
15
8
|
def sender_tag
|
16
|
-
"[[user:#{
|
9
|
+
"[[user:#{@sender.id}]]"
|
17
10
|
end
|
18
11
|
|
19
12
|
def sender_name
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
def plain_body
|
24
|
-
body['plain']
|
13
|
+
@sender.name
|
25
14
|
end
|
26
15
|
|
27
16
|
def plain_body_single_line
|
28
|
-
single_line plain_body
|
29
|
-
end
|
30
|
-
|
31
|
-
def parsed_body
|
32
|
-
body['parsed']
|
17
|
+
single_line @plain_body
|
33
18
|
end
|
34
19
|
|
35
20
|
def parsed_body_single_line
|
36
|
-
single_line parsed_body
|
37
|
-
end
|
38
|
-
|
39
|
-
def date_created
|
40
|
-
Time.parse @message_data['created_at']
|
41
|
-
end
|
42
|
-
|
43
|
-
def like_count
|
44
|
-
@message_data['liked_by']['count'].to_i
|
45
|
-
end
|
46
|
-
|
47
|
-
def url
|
48
|
-
@message_data['web_url']
|
49
|
-
end
|
50
|
-
|
51
|
-
def attachments
|
52
|
-
@message_data['attachments']
|
21
|
+
single_line @parsed_body
|
53
22
|
end
|
54
23
|
|
55
24
|
def thread_root?
|
56
|
-
@
|
25
|
+
@reply_to_id.nil?
|
57
26
|
end
|
58
27
|
|
59
28
|
private
|
60
29
|
|
61
|
-
def sender_id
|
62
|
-
@message_data['sender_id']
|
63
|
-
end
|
64
|
-
|
65
|
-
def body
|
66
|
-
@message_data['body']
|
67
|
-
end
|
68
|
-
|
69
|
-
def get_name(id)
|
70
|
-
@reference_data.select { |r| r['id'] == id }[0]['full_name']
|
71
|
-
end
|
72
|
-
|
73
30
|
def single_line(text)
|
74
31
|
text.gsub("\n", ' ').strip
|
75
32
|
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require_relative 'topic_request'
|
2
|
+
require_relative 'messages_for_topic_response'
|
3
|
+
require_relative 'message'
|
4
|
+
require_relative 'user'
|
5
|
+
|
6
|
+
module YamWow
|
7
|
+
class MessagesForTopicRequest
|
8
|
+
|
9
|
+
def initialize(client, topic_name, options={})
|
10
|
+
@client = client
|
11
|
+
@topic_name = topic_name
|
12
|
+
@options = options
|
13
|
+
end
|
14
|
+
|
15
|
+
|
16
|
+
def send
|
17
|
+
@messages = []
|
18
|
+
loop_finished = false
|
19
|
+
|
20
|
+
until loop_finished
|
21
|
+
response_data = send_messages_request
|
22
|
+
before_message_count = @messages.length
|
23
|
+
add_messages response_data['messages'], response_data['references']
|
24
|
+
after_message_count = @messages.length
|
25
|
+
no_more_messages = before_message_count == after_message_count
|
26
|
+
loop_finished = no_more_messages || limit_reached
|
27
|
+
end
|
28
|
+
|
29
|
+
build_response
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def send_messages_request
|
35
|
+
@client.get_messages "about_topic/#{topic_id}.json", threaded: true, older_than: oldest_message_id
|
36
|
+
end
|
37
|
+
|
38
|
+
def topic_id
|
39
|
+
@topic_id ||= get_topic_id
|
40
|
+
end
|
41
|
+
|
42
|
+
def get_topic_id
|
43
|
+
request = TopicRequest.new @client, @topic_name
|
44
|
+
response = request.send
|
45
|
+
raise "Topic '#{@topic_name}' was not found." unless response.topic
|
46
|
+
response.topic.id
|
47
|
+
end
|
48
|
+
|
49
|
+
def oldest_message_id
|
50
|
+
last_message = @messages.sort { |x, y| y.date_created <=> x.date_created }.last
|
51
|
+
last_message.id if last_message
|
52
|
+
end
|
53
|
+
|
54
|
+
def add_messages(messages_data, reference_data)
|
55
|
+
@messages += build_messages messages_data, reference_data
|
56
|
+
@messages = @messages[0..limit_count-1] if limit_count > 0
|
57
|
+
end
|
58
|
+
|
59
|
+
def build_messages(messages_data, reference_data)
|
60
|
+
messages_data.map { |m| build_message m, reference_data }.select { |m| m.thread_root? }
|
61
|
+
end
|
62
|
+
|
63
|
+
def build_message(message_data, reference_data)
|
64
|
+
d = message_data
|
65
|
+
m = Message.new
|
66
|
+
m.id = d['id']
|
67
|
+
m.plain_body = d['body']['plain']
|
68
|
+
m.parsed_body = d['body']['parsed']
|
69
|
+
m.date_created = Time.parse d['created_at']
|
70
|
+
m.like_count = d['liked_by']['count'].to_i
|
71
|
+
m.url = d['web_url']
|
72
|
+
m.sender = build_user d['sender_id'], reference_data
|
73
|
+
m.reply_to_id = d['replied_to_id']
|
74
|
+
m.attachments = d['attachments']
|
75
|
+
m
|
76
|
+
end
|
77
|
+
|
78
|
+
def build_user(user_id, reference_data)
|
79
|
+
d = reference_data.select { |r| r['id'] == user_id }[0]
|
80
|
+
u = User.new
|
81
|
+
u.id = d['id']
|
82
|
+
u.name = d['full_name']
|
83
|
+
u
|
84
|
+
end
|
85
|
+
|
86
|
+
def limit_reached
|
87
|
+
limit_count > 0 ? @messages.length == limit_count : false
|
88
|
+
end
|
89
|
+
|
90
|
+
def limit_count
|
91
|
+
@options[:limit_count] ? @options[:limit_count].to_i : 0
|
92
|
+
end
|
93
|
+
|
94
|
+
def build_response
|
95
|
+
MessagesForTopicResponse.new @messages
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
@@ -1,15 +1,16 @@
|
|
1
|
-
require_relative '
|
1
|
+
require_relative 'messages_for_topic_request'
|
2
2
|
|
3
3
|
module YamWow
|
4
4
|
class PraiseRequest
|
5
5
|
|
6
|
-
def initialize(client)
|
6
|
+
def initialize(client, options={})
|
7
7
|
@client = client
|
8
|
+
@options = options
|
8
9
|
end
|
9
10
|
|
10
|
-
def send
|
11
|
-
messages_by_topic_request =
|
12
|
-
messages_by_topic_response = messages_by_topic_request.send
|
11
|
+
def send
|
12
|
+
messages_by_topic_request = MessagesForTopicRequest.new @client, 'praise', @options
|
13
|
+
messages_by_topic_response = messages_by_topic_request.send
|
13
14
|
PraiseResponse.new messages_by_topic_response.messages
|
14
15
|
end
|
15
16
|
|
data/lib/yamwow/throttle.rb
CHANGED
@@ -1,13 +1,4 @@
|
|
1
1
|
module YamWow
|
2
|
-
|
3
|
-
def self.message_throttle
|
4
|
-
@message_throttle ||= Throttle.new 10, 30
|
5
|
-
end
|
6
|
-
|
7
|
-
def self.autocomplete_throttle
|
8
|
-
@autocomplete_throttle ||= Throttle.new 10, 10
|
9
|
-
end
|
10
|
-
|
11
2
|
class Throttle
|
12
3
|
|
13
4
|
def initialize(max_requests, duration_in_seconds)
|
data/lib/yamwow/topic.rb
ADDED
data/lib/yamwow/topic_request.rb
CHANGED
@@ -1,18 +1,45 @@
|
|
1
|
+
require_relative 'topic'
|
1
2
|
require_relative 'topic_response'
|
2
|
-
require_relative 'throttle'
|
3
3
|
|
4
4
|
module YamWow
|
5
5
|
class TopicRequest
|
6
6
|
|
7
|
-
def initialize(client)
|
7
|
+
def initialize(client, topic_name)
|
8
8
|
@client = client
|
9
|
+
@topic_name = topic_name
|
9
10
|
end
|
10
11
|
|
11
|
-
def send
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
12
|
+
def send
|
13
|
+
topic_data = get_topic_data
|
14
|
+
topic_data ? build_response(topic_data) : build_empty_response
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def get_topic_data
|
20
|
+
data = send_autocomplete_request
|
21
|
+
topics = data['topics'] || []
|
22
|
+
topics.select { |t| t['name'].downcase == @topic_name.downcase }[0]
|
23
|
+
end
|
24
|
+
|
25
|
+
def send_autocomplete_request
|
26
|
+
@client.get_autocomplete prefix: @topic_name.downcase
|
27
|
+
end
|
28
|
+
|
29
|
+
def build_empty_response
|
30
|
+
TopicResponse.new nil
|
31
|
+
end
|
32
|
+
|
33
|
+
def build_response(topic_data)
|
34
|
+
topic = build_topic topic_data
|
35
|
+
TopicResponse.new topic
|
36
|
+
end
|
37
|
+
|
38
|
+
def build_topic(topic_data)
|
39
|
+
t = Topic.new
|
40
|
+
t.id = topic_data['id']
|
41
|
+
t.name = topic_data['name']
|
42
|
+
t
|
16
43
|
end
|
17
44
|
|
18
45
|
end
|
@@ -1,14 +1,10 @@
|
|
1
1
|
module YamWow
|
2
2
|
class TopicResponse
|
3
3
|
|
4
|
-
attr_reader :
|
4
|
+
attr_reader :topic
|
5
5
|
|
6
|
-
def initialize(
|
7
|
-
@
|
8
|
-
end
|
9
|
-
|
10
|
-
def topic_id
|
11
|
-
@topic_data['id']
|
6
|
+
def initialize(topic)
|
7
|
+
@topic = topic
|
12
8
|
end
|
13
9
|
|
14
10
|
end
|
data/lib/yamwow/user.rb
ADDED
data/lib/yamwow.rb
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
Dir[File.expand_path(File.dirname(__FILE__) + '/yamwow/*.rb')].each { |f| require f }
|
1
|
+
Dir[File.expand_path(File.dirname(__FILE__) + '/yamwow/*.rb')].each { |f| require f }
|
2
|
+
|
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.0.
|
4
|
+
version: 0.0.5
|
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-01-
|
12
|
+
date: 2013-01-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: &
|
15
|
+
name: yam
|
16
|
+
requirement: &70137642787560 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70137642787560
|
25
25
|
description:
|
26
26
|
email: matthew-github@matthewriley.name
|
27
27
|
executables: []
|
@@ -31,15 +31,20 @@ files:
|
|
31
31
|
- lib/yamwow/client.rb
|
32
32
|
- lib/yamwow/csv_generator.rb
|
33
33
|
- lib/yamwow/facade.rb
|
34
|
+
- lib/yamwow/group.rb
|
35
|
+
- lib/yamwow/group_request.rb
|
36
|
+
- lib/yamwow/group_response.rb
|
34
37
|
- lib/yamwow/message.rb
|
35
|
-
- lib/yamwow/
|
36
|
-
- lib/yamwow/
|
38
|
+
- lib/yamwow/messages_for_topic_request.rb
|
39
|
+
- lib/yamwow/messages_for_topic_response.rb
|
37
40
|
- lib/yamwow/praise.rb
|
38
41
|
- lib/yamwow/praise_request.rb
|
39
42
|
- lib/yamwow/praise_response.rb
|
40
43
|
- lib/yamwow/throttle.rb
|
44
|
+
- lib/yamwow/topic.rb
|
41
45
|
- lib/yamwow/topic_request.rb
|
42
46
|
- lib/yamwow/topic_response.rb
|
47
|
+
- lib/yamwow/user.rb
|
43
48
|
- lib/yamwow.rb
|
44
49
|
homepage: http://rubygems.org/gems/yamwow
|
45
50
|
licenses: []
|
@@ -64,5 +69,6 @@ rubyforge_project:
|
|
64
69
|
rubygems_version: 1.8.15
|
65
70
|
signing_key:
|
66
71
|
specification_version: 3
|
67
|
-
summary:
|
72
|
+
summary: YamWow is a Ruby Gem built on top of the Yammer REST API to provide useful,
|
73
|
+
higher level operations.
|
68
74
|
test_files: []
|
@@ -1,57 +0,0 @@
|
|
1
|
-
require_relative 'topic_request'
|
2
|
-
require_relative 'messages_by_topic_response'
|
3
|
-
require_relative 'throttle'
|
4
|
-
|
5
|
-
module YamWow
|
6
|
-
class MessagesByTopicRequest
|
7
|
-
|
8
|
-
def initialize(client)
|
9
|
-
@client = client
|
10
|
-
end
|
11
|
-
|
12
|
-
def send(topic_name, options={})
|
13
|
-
topic_id = get_topic_id topic_name
|
14
|
-
limit_count = (options[:limit_count] || 0).to_i
|
15
|
-
|
16
|
-
oldest_message_id = nil
|
17
|
-
reference_data = []
|
18
|
-
messages = []
|
19
|
-
limit_reached = false
|
20
|
-
|
21
|
-
loop do
|
22
|
-
response_data = get topic_id, oldest_message_id
|
23
|
-
reference_data += response_data['references']
|
24
|
-
message_data = response_data['messages']
|
25
|
-
messages += message_data.map { |m| Message.new m, reference_data }.select { |m| m.thread_root? }
|
26
|
-
|
27
|
-
if limit_count > 0
|
28
|
-
messages = messages[0..limit_count-1]
|
29
|
-
limit_reached = messages.length == limit_count
|
30
|
-
end
|
31
|
-
|
32
|
-
response = MessagesByTopicResponse.new messages
|
33
|
-
oldest_message_reached = response.oldest_message_id == oldest_message_id
|
34
|
-
loop_finished = oldest_message_reached || limit_reached
|
35
|
-
return response if loop_finished
|
36
|
-
|
37
|
-
oldest_message_id = response.oldest_message_id
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
private
|
42
|
-
|
43
|
-
def get_topic_id(topic_name)
|
44
|
-
request = TopicRequest.new @client
|
45
|
-
response = request.send topic_name
|
46
|
-
raise "Topic '#{topic_name}' was not found." unless response
|
47
|
-
response.topic_id
|
48
|
-
end
|
49
|
-
|
50
|
-
def get(topic_id, older_than=nil)
|
51
|
-
url = "messages/about_topic/#{topic_id}.json?threaded=true"
|
52
|
-
url += "&older_than=#{older_than}" if older_than
|
53
|
-
@client.get url, YamWow.message_throttle
|
54
|
-
end
|
55
|
-
|
56
|
-
end
|
57
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module YamWow
|
2
|
-
class MessagesByTopicResponse
|
3
|
-
|
4
|
-
attr_reader :messages
|
5
|
-
|
6
|
-
def initialize(messages)
|
7
|
-
@messages = messages
|
8
|
-
end
|
9
|
-
|
10
|
-
def oldest_message_id
|
11
|
-
last_message = messages.sort { |x, y| y.date_created <=> x.date_created }.last
|
12
|
-
last_message.id if last_message
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|