yamwow 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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,11 @@
1
+ module YamWow
2
+ class MessagesByTopicResponse
3
+
4
+ attr_reader :response_data
5
+
6
+ def initialize(response_data)
7
+ @response_data = response_data
8
+ end
9
+
10
+ end
11
+ 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
@@ -0,0 +1,15 @@
1
+ module YamWow
2
+ class TopicResponse
3
+
4
+ attr_reader :response_data
5
+
6
+ def initialize(response_data)
7
+ @response_data = response_data
8
+ end
9
+
10
+ def topic_id
11
+ @response_data['id']
12
+ end
13
+
14
+ end
15
+ 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: []