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.
@@ -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: []