jstewart-yammer4r 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README ADDED
@@ -0,0 +1,16 @@
1
+ = Yammer4R
2
+
3
+ == Developers
4
+ * {Jim Patterson} <jimp79 at gmail dot com>
5
+
6
+ == Description
7
+ Yammer4R provides an object based API to query or update your Yammer account via pure Ruby. It hides the ugly HTTP/REST code from your code.
8
+
9
+ == External Dependencies
10
+ * Ruby 1.8 (tested with 1.8.7)
11
+ * JSON gem (tested with versions: 1.1.3)
12
+ * OAuth gem (tested with versions: 0.2.7)
13
+ * RSpec gem (tested with versions: 1.1.11)
14
+
15
+ == Usage Examples
16
+ Coming soon...
data/example.rb ADDED
@@ -0,0 +1,17 @@
1
+ require 'yammer'
2
+
3
+ # Create a new Yammer Client
4
+ yammer = Yammer::Client.new
5
+
6
+ # Get all messages
7
+ messages = yammer.messages
8
+ puts messages.size
9
+ puts messages.last.inspect
10
+
11
+ # Print out all the users
12
+ yammer.users.each do |u|
13
+ puts "#{u.name} - #{u.me?}"
14
+ end
15
+
16
+
17
+
@@ -0,0 +1,30 @@
1
+ class String
2
+ def to_boolean
3
+ case self
4
+ when 'true'
5
+ true
6
+ when 'false'
7
+ false
8
+ else
9
+ nil
10
+ end
11
+ end
12
+ end
13
+
14
+ class Hash
15
+ def symbolize_keys
16
+ inject({}) do |options, (key, value)|
17
+ options[(key.to_sym rescue key) || key] = value
18
+ options
19
+ end
20
+ end
21
+
22
+ def symbolize_keys!
23
+ self.replace(self.symbolize_keys)
24
+ end
25
+
26
+ def assert_has_keys(*valid_keys)
27
+ missing_keys = [valid_keys].flatten - keys
28
+ raise(ArgumentError, "Missing Option(s): #{missing_keys.join(", ")}") unless missing_keys.empty?
29
+ end
30
+ end
@@ -0,0 +1,96 @@
1
+ module Yammer
2
+ class Client
3
+ def initialize(options={})
4
+ options.assert_has_keys(:consumer, :access) unless options.has_key?(:config)
5
+
6
+ yammer_url = options.delete(:yammer_host) || "https://yammer.com"
7
+ @api_path = "/api/v1/"
8
+
9
+ if options[:config]
10
+ config = YAML.load(open(options[:config]))
11
+ options[:consumer] = config['consumer'].symbolize_keys
12
+ options[:access] = config['access'].symbolize_keys
13
+ end
14
+
15
+ consumer = OAuth::Consumer.new(options[:consumer][:key], options[:consumer][:secret], :site => yammer_url)
16
+ @access_token = OAuth::AccessToken.new(consumer, options[:access][:token], options[:access][:secret])
17
+ end
18
+
19
+
20
+ # TODO: modularize message and user handling
21
+ def messages(action = :all, params = {})
22
+ params.merge!(:resource => :messages)
23
+ params.merge!(:action => action) unless action == :all
24
+
25
+ parsed_response = JSON.parse(yammer_request(:get, params).body)
26
+ older_available = parsed_response['meta']['older_available']
27
+
28
+ ml = parsed_response['messages'].map do |m|
29
+ Yammer::Message.new(m)
30
+ end
31
+ Yammer::MessageList.new(ml, older_available, self)
32
+ end
33
+
34
+ # POST or DELETE a message
35
+ def message(action, params)
36
+ params.merge!(:resource => :messages)
37
+ yammer_request(action, params)
38
+ end
39
+
40
+ def users
41
+ JSON.parse(yammer_request(:get, {:resource => :users}).body).map do |u|
42
+ Yammer::User.new(u, self)
43
+ end
44
+ end
45
+
46
+ def user(id)
47
+ u = JSON.parse(yammer_request(:get, {:resource => :users, :id => id}).body)
48
+ Yammer::User.new(u, self)
49
+ end
50
+
51
+ def current_user
52
+ u = JSON.parse(yammer_request(:get, {:resource => :users, :action => :current}).body)
53
+ Yammer::User.new(u, self)
54
+ end
55
+ alias_method :me, :current_user
56
+
57
+ private
58
+
59
+ def yammer_request(http_method, options)
60
+ request_uri = @api_path + options.delete(:resource).to_s
61
+ [:action, :id].each {|k| request_uri += "/#{options.delete(k)}" if options.has_key?(k) }
62
+ request_uri += ".json"
63
+
64
+ if options.any?
65
+ request_uri += "?#{create_query_string(options)}" unless http_method == :post
66
+ end
67
+
68
+ if http_method == :post
69
+ handle_response(@access_token.send(http_method, request_uri, options))
70
+ else
71
+ handle_response(@access_token.send(http_method, request_uri))
72
+ end
73
+ end
74
+
75
+ def create_query_string(options)
76
+ options.map {|k, v| "#{OAuth::Helper.escape(k)}=#{OAuth::Helper.escape(v)}"}.join('&')
77
+ end
78
+
79
+ def handle_response(response)
80
+ # TODO: Write classes for exceptions
81
+ case response.code.to_i
82
+ when 200..201
83
+ response
84
+ when 400
85
+ raise "400 Bad request"
86
+ when 401
87
+ raise "Authentication failed. Check your username and password"
88
+ when 503
89
+ raise "503: Service Unavailable"
90
+ else
91
+ raise "Error. HTTP Response #{response.code}"
92
+ end
93
+ end
94
+
95
+ end
96
+ end
@@ -0,0 +1,26 @@
1
+ class Yammer::Message
2
+
3
+ attr_reader :id, :url, :web_url, :replied_to_id, :thread_id,
4
+ :body_plain, :body_parsed, :message_type, :client_type,
5
+ :sender_id, :sender_type
6
+
7
+ def initialize(m)
8
+ @id = m['id']
9
+ @url = m['url']
10
+ @web_url = m['web_url']
11
+ @replied_to_id = m['replied_to_id']
12
+ @thread_id = m['thread_id']
13
+ @body_plain = m['body']['plain']
14
+ @body_parsed = m['body']['parsed']
15
+ @message_type = m['message_type']
16
+ @client_type = m['client_type']
17
+ @sender_id = m['sender_id']
18
+ @sender_type = m['sender_type']
19
+ begin
20
+ @created_at = m['created_at']
21
+ rescue ArgumentError => e
22
+ @created_at = nil
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,20 @@
1
+ class Yammer::MessageList < Array
2
+
3
+ attr_reader :older_available, :ids
4
+
5
+ def initialize(a, oa, c)
6
+ super(a)
7
+ @older_available = oa
8
+ @client = c
9
+ @ids = a.map {|m| m.id}.sort
10
+ end
11
+
12
+ def first
13
+ self[0]
14
+ end
15
+
16
+ def last
17
+ self[self.size - 1]
18
+ end
19
+
20
+ end
@@ -0,0 +1,72 @@
1
+ class Yammer::User
2
+
3
+ attr_reader :id, :url, :web_url, :name, :full_name, :mugshot_url,
4
+ :job_title, :location, :stats, :contact,
5
+ :hire_date, :birth_date, :network_name, :full_user
6
+
7
+ def initialize(u, c)
8
+ @client = c
9
+ @id = u['id']
10
+ @url = u['url']
11
+ @web_url = u['web_url']
12
+ @name = u['name']
13
+ @full_name = u['full_name']
14
+ @mugshot_url = u['mugshot_url']
15
+ @job_title = u['job_title']
16
+ # These attributes will be nil when User is a reference
17
+ @network_id = u['network_id']
18
+ @location = u['location']
19
+ @stats = u['stats']
20
+ @contact = u['contact']
21
+ @hire_date = u['hire_date']
22
+ @birth_date = u['birth_date']
23
+ @network_name = u['network_name']
24
+ end
25
+
26
+ def network_id
27
+ get_full_user unless @network_id
28
+ @network_id
29
+ end
30
+
31
+ def location
32
+ get_full_user unless @location
33
+ @location
34
+ end
35
+
36
+ def stats
37
+ get_full_user unless @stats
38
+ @stats
39
+ end
40
+
41
+ def contact
42
+ get_full_user unless @contact
43
+ @contact
44
+ end
45
+
46
+ def hire_date
47
+ get_full_user unless @hire_date
48
+ @hire_date
49
+ end
50
+
51
+ def birth_date
52
+ get_full_user unless @birth_date
53
+ @birth_date
54
+ end
55
+
56
+ def network_name
57
+ get_full_user unless @network_name
58
+ @network_name
59
+ end
60
+
61
+ def me?
62
+ @id == @client.me.id
63
+ end
64
+
65
+ private
66
+ def get_full_user
67
+ response = @client.access_token.get "/api/v1/users/#{id}.json"
68
+ u = JSON.parse(response.body)
69
+ initialize(u, @client)
70
+ end
71
+
72
+ end
data/lib/yammer4r.rb ADDED
@@ -0,0 +1,13 @@
1
+ require('rubygems')
2
+ require('date')
3
+ require('yaml')
4
+ require('open-uri')
5
+ require('json')
6
+ require('oauth')
7
+
8
+ $:.unshift(File.dirname(__FILE__))
9
+ require('ext/core_ext')
10
+ require('yammer/client')
11
+ require('yammer/message')
12
+ require('yammer/message_list')
13
+ require('yammer/user')
@@ -0,0 +1,7 @@
1
+ consumer:
2
+ key: CLIENT_KEY
3
+ secret: CLIENT_SECRET
4
+
5
+ access:
6
+ token: CONSUMER_TOKEN
7
+ secret: CONSUMER_SECRET
metadata ADDED
@@ -0,0 +1,81 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jstewart-yammer4r
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.2
5
+ platform: ruby
6
+ authors:
7
+ - Jim Patterson
8
+ - Jason Stewart
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2009-02-18 00:00:00 -08:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: json
18
+ type: :runtime
19
+ version_requirement:
20
+ version_requirements: !ruby/object:Gem::Requirement
21
+ requirements:
22
+ - - ">="
23
+ - !ruby/object:Gem::Version
24
+ version: 1.1.3
25
+ version:
26
+ - !ruby/object:Gem::Dependency
27
+ name: oauth
28
+ type: :runtime
29
+ version_requirement:
30
+ version_requirements: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: 0.2.7
35
+ version:
36
+ description: Yammer4R provides an object based API to query or update your Yammer account via pure Ruby. It hides the ugly HTTP/REST code from your code.
37
+ email: jimp79@gmail.com
38
+ executables: []
39
+
40
+ extensions: []
41
+
42
+ extra_rdoc_files: []
43
+
44
+ files:
45
+ - README
46
+ - example.rb
47
+ - oauth.yml.template
48
+ - lib/yammer4r.rb
49
+ - lib/yammer/client.rb
50
+ - lib/yammer/message.rb
51
+ - lib/yammer/message_list.rb
52
+ - lib/yammer/user.rb
53
+ - lib/ext/core_ext.rb
54
+ has_rdoc: false
55
+ homepage: http://github.com/jpatterson/yammer4r
56
+ post_install_message:
57
+ rdoc_options: []
58
+
59
+ require_paths:
60
+ - lib
61
+ required_ruby_version: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: "0"
66
+ version:
67
+ required_rubygems_version: !ruby/object:Gem::Requirement
68
+ requirements:
69
+ - - ">="
70
+ - !ruby/object:Gem::Version
71
+ version: "0"
72
+ version:
73
+ requirements: []
74
+
75
+ rubyforge_project:
76
+ rubygems_version: 1.2.0
77
+ signing_key:
78
+ specification_version: 2
79
+ summary: Yammer access for ruby
80
+ test_files: []
81
+