yammerstats 0.1.0

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/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ oauth.yml
2
+ top_updaters.xml
3
+ coverage/
4
+ yammerstats-0.1.0.gem
data/README.rdoc ADDED
@@ -0,0 +1,32 @@
1
+ = yammerstats
2
+
3
+ * http://github.com/pmoran/yammerstats
4
+
5
+ == DESCRIPTION:
6
+
7
+ yammerstats is a simple command line tool for fetching data for a Yammer network and presenting it in a useful way. It runs a Yammer query and outputs the results using an ERB template.
8
+
9
+ The first usage has been focused on generating 3D column charts using http://www.fusioncharts.com.
10
+
11
+ == SYNOPSIS:
12
+
13
+ yammerstats uses yammer4r to query a Yammer network. You will need to follow the steps described by yammer4r to register an application and create a credentials config file.
14
+
15
+ * gem install yammer4r
16
+ * ruby yammer4r/bin/yammer_create_oauth_yml.rb (and follow instructions in the script)
17
+
18
+ To run a stats request, use:
19
+
20
+ yammerstats [options]
21
+
22
+ == EXAMPLE USAGE:
23
+
24
+ Run the default (and currently only) stat top_updaters, generating an xml file that can be consumed by Fusion Charts
25
+ yammerstats --config=oauth.yml
26
+
27
+
28
+ == TODO
29
+
30
+ * Gemify
31
+ * Add possibly useful stats
32
+ * Heat map of user posts - when is a user posting?
data/Rakefile ADDED
@@ -0,0 +1,35 @@
1
+ $:.unshift(File.join(File.dirname(__FILE__), 'lib'))
2
+
3
+ require 'rubygems'
4
+ require 'rake'
5
+ require 'spec/rake/spectask'
6
+
7
+ desc "Run all specs"
8
+ Spec::Rake::SpecTask.new('spec') do |t|
9
+ t.spec_files = FileList['spec/**/*spec.rb']
10
+ end
11
+
12
+ Spec::Rake::SpecTask.new("rcov:spec") do |t|
13
+ t.spec_opts = ['--options', "\"spec/spec.opts\""]
14
+ t.spec_files = FileList['spec/**/*_spec.rb']
15
+ t.rcov = true
16
+ t.rcov_opts = lambda do
17
+ IO.readlines("spec/rcov.opts").map {|l| l.chomp.split " "}.flatten
18
+ end
19
+ end
20
+
21
+ begin
22
+ require 'jeweler'
23
+ Jeweler::Tasks.new do |gemspec|
24
+ gemspec.name = "yammerstats"
25
+ gemspec.summary = "Fetch some (possibly) useful info from your Yammer domain"
26
+ gemspec.description = "Fetches Yammer information and outputs it to the format of your choice, using Erb templates."
27
+ gemspec.email = "workingpeter@gmail.com"
28
+ gemspec.homepage = "http://github.com/pmoran/yammerstats"
29
+ gemspec.authors = ["Peter Moran"]
30
+ end
31
+ rescue LoadError
32
+ puts "Jeweler not available. Install it with: sudo gem install jeweler"
33
+ end
34
+
35
+ task :default => [:spec]
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/bin/yammerstats ADDED
@@ -0,0 +1,49 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
4
+
5
+ require 'optparse'
6
+ require 'yammerstats'
7
+
8
+ OPTIONS = {
9
+ :config => 'oauth.yml',
10
+ :stat => "top_updaters"
11
+ }
12
+
13
+ ARGV.options do |o|
14
+ script_name = File.basename($0)
15
+
16
+ o.set_summary_indent(' ')
17
+ o.banner = "Usage: #{script_name} [OPTIONS]"
18
+ o.define_head "Generate stats for your Yammer network"
19
+ o.separator ""
20
+
21
+ o.on("-c", "--config=val", String, "oauth config file", "Default: #{OPTIONS[:config]}") do |c|
22
+ OPTIONS[:config] = c
23
+ end
24
+ o.on("-s", "--stat=val", String, "Stat to run", "Default: #{OPTIONS[:stat]}") do |s|
25
+ OPTIONS[:stat] = s
26
+ end
27
+ o.on("-t", "--template=val", String, "Erb template file") do |t|
28
+ OPTIONS[:template] = t
29
+ end
30
+ o.on("-o", "--output=val", String, "Output file") do |o|
31
+ OPTIONS[:output] = o
32
+ end
33
+ o.on("-d", "--dump", "Dump results to the screen, rather than an output file") do |d|
34
+ OPTIONS[:dump] = d
35
+ end
36
+ o.on("--stub", "Stub Yammer client for testing purposes") do |s|
37
+ OPTIONS[:stub] = s
38
+ end
39
+
40
+ o.separator ""
41
+
42
+ o.on_tail("-h", "--help", "Show this help message.") { puts o; exit }
43
+ o.parse!
44
+ end
45
+
46
+ require File.expand_path(File.dirname(__FILE__) + "../../lib/ext/yammer/client") if OPTIONS[:stub]
47
+
48
+ stats = Yammer::Stats.new(:config => OPTIONS[:config], :verbose => false)
49
+ stats.send(OPTIONS[:stat], OPTIONS)
@@ -0,0 +1,12 @@
1
+ [
2
+ {
3
+ "timezone":"Sydney","interests":null,"type":"user","contact": {"im":{"provider":"aim","username":""},"email_addresses": [{"type":"primary","address":"r.maldon@diuscomputing.com.au"} ],
4
+ "phone_numbers":[]},"hire_date":null,"location":null,"guid":null,"job_title":"Software Craftsman","network_id":42785,"schools":[],"kids_names":null,"significant_other":null,"web_url":"https://www.yammer.com/diuscomputing.com.au/users/r-maldon","network_domains":["diuscomputing.com.au"],"id":481091,"mugshot_url":"https://assets3.yammer.com/user_uploaded/photos/p1/0044/5440/the-real-shaq_small.jpg","stats":{"updates":21,"following":31,"followers":32},"external_urls":[],
5
+ "full_name":"THE_REAL_SHAQ","name":"r-maldon","url":"https://www.yammer.com/api/v1/users/481091","expertise":null,"summary":null,"previous_companies":[],"birth_date":"","network_name":"diuscomputing.com.au","state":"active"
6
+ },
7
+ {
8
+ "timezone":"Melbourne","interests":null,"type":"user","contact":{"im":{"provider":"aim","username":""},"email_addresses":[{"type":"primary","address":"w.godfrey@diuscomputing.com.au"}],"phone_numbers":[{"type":"mobile","number":"0408409465"}]},"hire_date":null,"location":null,"guid":null,"job_title":"Developer","network_id":42785,"schools":[],"kids_names":null,"significant_other":null,"web_url":"https://www.yammer.com/diuscomputing.com.au/users/w-godfrey","network_domains":["diuscomputing.com.au"],
9
+ "id":394365,"mugshot_url":"https://assets3.yammer.com/images/no_photo_small.gif","stats":{"updates":3,"following":27,"followers":38},"external_urls":[],
10
+ "full_name":"Warner Godfrey","name":"x-godfrey","url":"https://www.yammer.com/api/v1/users/394365","expertise":null,"summary":null,"previous_companies":[],"birth_date":"","network_name":"diuscomputing.com.au","state":"active"
11
+ }
12
+ ]
Binary file
@@ -0,0 +1,16 @@
1
+ <html>
2
+ <head>
3
+ <title>Yammer Stats</title>
4
+ </head>
5
+ <body bgcolor="#ffffff">
6
+ <h2 align="center">Yammer Updates by User</h2>
7
+ <div align="center">
8
+ <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="800" height="400" >
9
+ <param name="movie" value="FCF_Column3D.swf" />
10
+ <param name="FlashVars" value="&dataURL=../data/top_updaters.xml&chartWidth=800&chartHeight=400">
11
+ <param name="quality" value="high" />
12
+ <embed src="FCF_Column3D.swf" width="800" height="400" flashVars="&dataURL=../data/top_updaters.xml&chartWidth=800&chartHeight=400" quality="high" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
13
+ </object>
14
+ </div>
15
+ </body>
16
+ </html>
@@ -0,0 +1,6 @@
1
+ <% COLOURS = %w(AFD8F8, F6BD0F, 8BBA00, FF8E46, 008E8E, D64646, 8E468E, 588526, B3AA00, 008ED6, 9D080D, A186BE) %>
2
+ <graph caption='Top Yammer Updaters' xAxisName='Users' yAxisName='Updates' showNames='1' decimalPrecision='0' formatNumberScale='0' rotateNames="1">
3
+ <% users[0..12].sort_by{|u| u.name }.each_with_index do |user, i| %>
4
+ <set name='<%= user.name %>' value='<%= user.stats.updates %>' color='<%=COLOURS[i]%>' />
5
+ <% end %>
6
+ </graph>
@@ -0,0 +1,15 @@
1
+ module Yammer
2
+ class Client
3
+
4
+ def users(options = {})
5
+ file = "examples/data/users.json"
6
+ p ("Yammer::Client stubbed. Reading users from #{file}")
7
+ s = IO.read(file)
8
+ JSON.parse(s).map do |u|
9
+ Yammer::User.new(mash(u), self)
10
+ end
11
+ end
12
+
13
+ end
14
+ end
15
+
@@ -0,0 +1,33 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ module Yammer
4
+
5
+ class Stats
6
+
7
+ def initialize(options = {})
8
+ options.merge!(:config => "oauth.yml") unless options[:config]
9
+ @yammer = Yammer::Client.new(options)
10
+ end
11
+
12
+ def top_updaters(options = {})
13
+ users = @yammer.users(:sort_by => "messages", :reverse => false)
14
+ if options.delete(:dump) == true
15
+ users.each {|u| puts "#{u.name} - #{u.stats.updates}" }
16
+ else
17
+ template, output_file = options_or_defaults(options)
18
+ output = ERB.new(IO.read(template), nil, '<>').result(binding)
19
+ File.open(output_file, 'w') {|f| f.write(output)}
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def options_or_defaults(options)
26
+ template = options.delete(:template) || 'examples/templates/top_updaters.erb'
27
+ output_file = options.delete(:output) || 'top_updaters.xml'
28
+ [template, output_file]
29
+ end
30
+
31
+ end
32
+
33
+ end
@@ -0,0 +1,6 @@
1
+ require 'rubygems'
2
+ require 'erb'
3
+ require 'ostruct'
4
+
5
+ require 'yammer4r'
6
+ require 'yammer/stats'
data/spec/rcov.opts ADDED
@@ -0,0 +1 @@
1
+ --exclude "spec/*,gems/*"
data/spec/spec.opts ADDED
@@ -0,0 +1,4 @@
1
+ --colour
2
+ --format progress
3
+ --loadby mtime
4
+ --reverse
@@ -0,0 +1,3 @@
1
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + "/../lib"))
2
+ require 'yammerstats'
3
+ require 'spec'
@@ -0,0 +1,55 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')
2
+ require 'ostruct'
3
+
4
+ describe Yammer::Stats do
5
+
6
+ it "initialises a yammer client" do
7
+ stats = Yammer::Stats.new
8
+ stats.instance_variable_get(:@yammer).should_not be_nil
9
+ end
10
+
11
+ context "top updaters" do
12
+
13
+ before(:each) do
14
+ @mock_yammer = mock(Yammer::Client)
15
+ @mock_yammer.stub!("users").and_return([OpenStruct.new(:name => "foo", :stats => OpenStruct.new(:updates => nil))])
16
+ Yammer::Client.stub!("new").and_return(@mock_yammer)
17
+ end
18
+
19
+ it "can dump results to the screen" do
20
+ stats = Yammer::Stats.new
21
+ File.should_not_receive("open")
22
+ stats.top_updaters(:dump => true)
23
+ end
24
+
25
+ describe "with files" do
26
+
27
+ before(:each) do
28
+ @stats = Yammer::Stats.new
29
+ mock_erb = mock(ERB)
30
+ mock_erb.stub!("result")
31
+ ERB.stub!("new").and_return(mock_erb)
32
+ end
33
+
34
+ it "uses default files if not specified" do
35
+ IO.should_receive("read").with("examples/templates/top_updaters.erb")
36
+ File.should_receive("open").with("top_updaters.xml", 'w')
37
+ @stats.top_updaters
38
+ end
39
+
40
+ it "reads a specified template" do
41
+ File.stub!("open")
42
+ IO.should_receive("read").with("foo/bar.erb")
43
+ @stats.top_updaters(:template => "foo/bar.erb")
44
+ end
45
+
46
+ it "writes to a specified output file" do
47
+ File.should_receive("open").with("foo/myoutput.file", 'w')
48
+ @stats.top_updaters(:output => "foo/myoutput.file")
49
+ end
50
+
51
+ end
52
+
53
+ end
54
+
55
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: yammerstats
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Peter Moran
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-12-07 00:00:00 +11:00
13
+ default_executable: yammerstats
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: yammer4r
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.1.5
24
+ version:
25
+ description: Fetches Yammer information and outputs it to the format of your choice, using Erb templates.
26
+ email: workingpeter@gmail.com
27
+ executables:
28
+ - yammerstats
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - README.rdoc
33
+ files:
34
+ - .gitignore
35
+ - README.rdoc
36
+ - Rakefile
37
+ - VERSION
38
+ - bin/yammerstats
39
+ - examples/data/users.json
40
+ - examples/html/FCF_Column3D.swf
41
+ - examples/html/top_updaters.html
42
+ - examples/templates/top_updaters.erb
43
+ - lib/ext/yammer/client.rb
44
+ - lib/yammer/stats.rb
45
+ - lib/yammerstats.rb
46
+ - spec/rcov.opts
47
+ - spec/spec.opts
48
+ - spec/spec_helper.rb
49
+ - spec/yammer/stats_spec.rb
50
+ has_rdoc: true
51
+ homepage: http://github.com/pmoran/yammerstats
52
+ licenses: []
53
+
54
+ post_install_message:
55
+ rdoc_options:
56
+ - --charset=UTF-8
57
+ require_paths:
58
+ - lib
59
+ required_ruby_version: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
65
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: "0"
70
+ version:
71
+ requirements: []
72
+
73
+ rubyforge_project:
74
+ rubygems_version: 1.3.5
75
+ signing_key:
76
+ specification_version: 3
77
+ summary: Fetch some (possibly) useful info from your Yammer domain
78
+ test_files:
79
+ - spec/spec_helper.rb
80
+ - spec/yammer/stats_spec.rb