yamwow 0.0.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/messages_by_topic_request.rb +18 -0
- data/lib/yamwow/messages_by_topic_response.rb +11 -0
- data/lib/yamwow/praise.rb +68 -0
- data/lib/yamwow/praise_csv_generator.rb +19 -0
- data/lib/yamwow/praise_request.rb +14 -0
- data/lib/yamwow/praise_response.rb +27 -0
- data/lib/yamwow/request_base.rb +26 -0
- data/lib/yamwow/topic_request.rb +16 -0
- data/lib/yamwow/topic_response.rb +15 -0
- data/lib/yamwow.rb +1 -0
- metadata +65 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
require_relative 'request_base'
|
2
|
+
require_relative 'topic_request'
|
3
|
+
require_relative 'messages_by_topic_response'
|
4
|
+
|
5
|
+
module YamWow
|
6
|
+
class MessagesByTopicRequest < RequestBase
|
7
|
+
|
8
|
+
def send(topic_name)
|
9
|
+
topic_request = TopicRequest.new @oauth_credentials
|
10
|
+
topic_response = topic_request.send topic_name
|
11
|
+
raise "Topic '#{topic_name}' was not found." unless topic_response
|
12
|
+
response = access_token.get "https://www.yammer.com/api/v1/messages/about_topic/#{topic_response.topic_id}.json?threaded=true"
|
13
|
+
response_data = JSON.parse response.body
|
14
|
+
MessagesByTopicResponse.new response_data
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'time'
|
2
|
+
|
3
|
+
module YamWow
|
4
|
+
class Praise
|
5
|
+
|
6
|
+
def initialize(message, references)
|
7
|
+
@message = message
|
8
|
+
@references = references
|
9
|
+
@parsed_body = @message['body']['parsed']
|
10
|
+
@plain_body = @message['body']['plain']
|
11
|
+
end
|
12
|
+
|
13
|
+
def recipient_tags
|
14
|
+
split_recipients @parsed_body
|
15
|
+
end
|
16
|
+
|
17
|
+
def recipient_names
|
18
|
+
split_recipients(@plain_body).map { |r| r.delete('@') }
|
19
|
+
end
|
20
|
+
|
21
|
+
def sender_tag
|
22
|
+
"[[user:#{sender_id}]]"
|
23
|
+
end
|
24
|
+
|
25
|
+
def sender_name
|
26
|
+
get_name sender_id
|
27
|
+
end
|
28
|
+
|
29
|
+
def reason
|
30
|
+
attachments = @message['attachments'] || []
|
31
|
+
reason = attachments.map { |a| m = a['name'].match(/Praise: (.+)/m); m ? m[1] : nil }[0]
|
32
|
+
reason || @parsed_body
|
33
|
+
end
|
34
|
+
|
35
|
+
def reason_single_line
|
36
|
+
reason.gsub("\n", ' ').strip
|
37
|
+
end
|
38
|
+
|
39
|
+
def date_created
|
40
|
+
Time.parse @message['created_at']
|
41
|
+
end
|
42
|
+
|
43
|
+
def like_count
|
44
|
+
@message['liked_by']['count'].to_i
|
45
|
+
end
|
46
|
+
|
47
|
+
def url
|
48
|
+
@message['web_url']
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def sender_id
|
54
|
+
@message['sender_id']
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_name(id)
|
58
|
+
@references.select { |r| r['id'] == id }[0]['full_name']
|
59
|
+
end
|
60
|
+
|
61
|
+
def split_recipients(recipients)
|
62
|
+
recipients = recipients.include?('praised') ? recipients.match(/praised (.+)/)[1] : ''
|
63
|
+
recipients.gsub!(' and ', ', ')
|
64
|
+
recipients.split(', ')
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'csv'
|
2
|
+
|
3
|
+
module YamWow
|
4
|
+
class PraiseCsvGenerator
|
5
|
+
|
6
|
+
def initialize(column_headers)
|
7
|
+
@column_headers = column_headers
|
8
|
+
end
|
9
|
+
|
10
|
+
def generate(praises)
|
11
|
+
CSV.generate do |csv|
|
12
|
+
csv << @column_headers
|
13
|
+
praises = praises.sort { |x, y| y.date_created <=> x.date_created }
|
14
|
+
praises.each { |p| csv << yield(p) }
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'messages_by_topic_request'
|
2
|
+
require_relative 'praise_response'
|
3
|
+
|
4
|
+
module YamWow
|
5
|
+
class PraiseRequest < RequestBase
|
6
|
+
|
7
|
+
def send
|
8
|
+
messages_by_topic_request = MessagesByTopicRequest.new @oauth_credentials
|
9
|
+
messages_by_topic_response = messages_by_topic_request.send 'praise'
|
10
|
+
PraiseResponse.new messages_by_topic_response.response_data
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative 'praise'
|
2
|
+
|
3
|
+
module YamWow
|
4
|
+
class PraiseResponse
|
5
|
+
|
6
|
+
attr_reader :response_data
|
7
|
+
|
8
|
+
def initialize(response_data)
|
9
|
+
@response_data = response_data
|
10
|
+
end
|
11
|
+
|
12
|
+
def praises
|
13
|
+
root_messages.map { |m| Praise.new m, references }
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def root_messages
|
19
|
+
@response_data['messages'].select { |m| m['replied_to_id'].nil? }
|
20
|
+
end
|
21
|
+
|
22
|
+
def references
|
23
|
+
@response_data['references']
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'oauth'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module YamWow
|
5
|
+
class RequestBase
|
6
|
+
|
7
|
+
def initialize(oauth_credentials)
|
8
|
+
@oauth_credentials = oauth_credentials
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def access_token
|
14
|
+
@access_token ||= get_access_token
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def get_access_token
|
20
|
+
o = @oauth_credentials
|
21
|
+
consumer = OAuth::Consumer.new o[:consumer_key], o[:consumer_secret], {:site => 'https://www.yammer.com', :scheme => :header}
|
22
|
+
OAuth::AccessToken.from_hash consumer, :oauth_token => o[:oauth_key], :oauth_token_secret => o[:oauth_secret]
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require_relative 'request_base'
|
2
|
+
require_relative 'topic_response'
|
3
|
+
|
4
|
+
module YamWow
|
5
|
+
class TopicRequest < RequestBase
|
6
|
+
|
7
|
+
def send(topic_name)
|
8
|
+
response = access_token.get "https://www.yammer.com/api/v1/autocomplete.json?prefix=#{topic_name}"
|
9
|
+
response_data = JSON.parse response.body
|
10
|
+
topics = response_data['topics'] || []
|
11
|
+
matching_topic = topics.select { |t| t['name'].downcase == topic_name.downcase }[0]
|
12
|
+
matching_topic ? TopicResponse.new(matching_topic) : nil
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
end
|
data/lib/yamwow.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Dir[File.expand_path(File.dirname(__FILE__) + '/yamwow/*.rb')].each { |f| require f }
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yamwow
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Matthew Riley
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: oauth
|
16
|
+
requirement: &70216953166900 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70216953166900
|
25
|
+
description:
|
26
|
+
email: matthew-github@matthewriley.name
|
27
|
+
executables: []
|
28
|
+
extensions: []
|
29
|
+
extra_rdoc_files: []
|
30
|
+
files:
|
31
|
+
- lib/yamwow/messages_by_topic_request.rb
|
32
|
+
- lib/yamwow/messages_by_topic_response.rb
|
33
|
+
- lib/yamwow/praise.rb
|
34
|
+
- lib/yamwow/praise_csv_generator.rb
|
35
|
+
- lib/yamwow/praise_request.rb
|
36
|
+
- lib/yamwow/praise_response.rb
|
37
|
+
- lib/yamwow/request_base.rb
|
38
|
+
- lib/yamwow/topic_request.rb
|
39
|
+
- lib/yamwow/topic_response.rb
|
40
|
+
- lib/yamwow.rb
|
41
|
+
homepage: http://rubygems.org/gems/yamwow
|
42
|
+
licenses: []
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ! '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
requirements: []
|
60
|
+
rubyforge_project:
|
61
|
+
rubygems_version: 1.8.15
|
62
|
+
signing_key:
|
63
|
+
specification_version: 3
|
64
|
+
summary: Exploring the Yammer API.
|
65
|
+
test_files: []
|