em-facebook 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm 1.9.3@em-facebook --create
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in em-facebook.gemspec
4
+ gemspec
@@ -0,0 +1,5 @@
1
+
2
+ ### 0.1.0 (2012-02-23)
3
+
4
+ * A simple first version
5
+ * Supports the "/me" and "/me/music" end-points
@@ -0,0 +1,19 @@
1
+ EM-Facebook
2
+ ===========
3
+
4
+ A very simple em-synchrony based Facebook Graph API client.
5
+
6
+ Example usage
7
+ -------------
8
+
9
+ ```ruby
10
+ require 'em-facebook'
11
+
12
+ EM.synchrony do
13
+ facebook = EM::Facebook.new('access token')
14
+ facebook.me # => ...
15
+ facebook.music # => ...
16
+
17
+ EM.stop
18
+ end
19
+ ```
@@ -0,0 +1,10 @@
1
+ require 'bundler/gem_tasks'
2
+ require 'rspec/core/rake_task'
3
+
4
+ task :default => [:spec]
5
+ task :test => [:spec]
6
+
7
+ RSpec::Core::RakeTask.new(:spec) do |t|
8
+ t.rspec_opts = '--color'
9
+ t.pattern = 'spec/**/*_spec.rb'
10
+ end
@@ -0,0 +1,26 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "em-facebook/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "em-facebook"
7
+ s.version = EventMachine::Facebook::VERSION
8
+ s.authors = ["Niklas Holmgren", "Sebastian Falk"]
9
+ s.email = ["niklas@sutajio.se", "sebastian.falk@netlight.se"]
10
+ s.homepage = "http://github.com/ProjectDaisy/em-facebook"
11
+ s.summary = %q{EM-Synchrony based Facebook Graph API client}
12
+ s.description = s.summary
13
+
14
+ s.rubyforge_project = "em-facebook"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_dependency "em-synchrony"
22
+ s.add_dependency "multi_json"
23
+
24
+ s.add_development_dependency "rspec"
25
+ s.add_development_dependency "rake"
26
+ end
@@ -0,0 +1,8 @@
1
+ require 'em-synchrony'
2
+ require 'em-synchrony/em-http'
3
+ require 'multi_json'
4
+
5
+ require 'cgi'
6
+
7
+ require 'em-facebook/version'
8
+ require 'em-facebook/facebook'
@@ -0,0 +1,45 @@
1
+ module EventMachine
2
+ class Facebook
3
+ class Exception < RuntimeError; end
4
+
5
+ API_URL = 'https://graph.facebook.com/'
6
+
7
+ def initialize(access_token = nil)
8
+ @access_token = access_token
9
+ end
10
+
11
+ def me
12
+ response = get('me')
13
+ response['error'].nil? ? response : nil
14
+ end
15
+
16
+ def music
17
+ response = get('me/music')
18
+ response['error'].nil? ? response : nil
19
+ end
20
+
21
+ protected
22
+
23
+ def url(path)
24
+ if @access_token
25
+ "#{API_URL}#{path}?access_token=#{CGI.escape(@access_token)}"
26
+ else
27
+ "#{API_URL}#{path}"
28
+ end
29
+ end
30
+
31
+ def get(path)
32
+ http = client(url(path)).get
33
+ if http.response_header.status == 0
34
+ raise Exception.new('Facebook connection failure')
35
+ else
36
+ MultiJson.decode(http.response)
37
+ end
38
+ end
39
+
40
+ def client(url)
41
+ EM::HttpRequest.new(url)
42
+ end
43
+
44
+ end
45
+ end
@@ -0,0 +1,5 @@
1
+ module EventMachine
2
+ class Facebook
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,40 @@
1
+ require File.expand_path('spec/spec_helper')
2
+ require 'em-facebook'
3
+
4
+ describe EventMachine::Facebook do
5
+
6
+ around(:each) do |example|
7
+ EM.synchrony do
8
+ example.run
9
+ EM.stop
10
+ end
11
+ end
12
+
13
+ let(:access_token) do
14
+ 'AAACiDgkUZCv8BAFV4VWWySqQ4S6dmTr32f8ur2fMK1kUh3V9S9MyK8sgrMHYvLpJ9TVT2gkUBWmL6cSSx6oC1hkFOUkhHl29myKGYNAZDZD'
15
+ end
16
+
17
+ it 'raises an exception when there is something wrong with network/facebook server/etc' do
18
+ user_token = 'somebadtoken'
19
+ facebook = EM::Facebook.new(user_token)
20
+ facebook.stub!(:url).and_return('http://notaworkingfacebookurl.facebook.com')
21
+ lambda { facebook.me }.should raise_error(EM::Facebook::Exception)
22
+ end
23
+
24
+ it 'returns nil when the access token is not valid' do
25
+ EM::Facebook.new('an erronous access token').me.should == nil
26
+ end
27
+
28
+ it 'responds with a correct user when the access token is valid' do
29
+ user_hash = EM::Facebook.new(access_token).me
30
+ user_hash['id'].should == '100003368997874'
31
+ user_hash['name'].should == 'Test Testsson'
32
+ end
33
+
34
+ it 'responds with an artist array when calling for music using a valid access token' do
35
+ music_hash = EM::Facebook.new(access_token).music
36
+ music_hash.should_not == nil
37
+ music_hash['data'].kind_of?(Array).should == true
38
+ end
39
+
40
+ end
@@ -0,0 +1 @@
1
+ require 'pp'
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: em-facebook
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Niklas Holmgren
9
+ - Sebastian Falk
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2012-02-23 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: em-synchrony
17
+ requirement: &70243687661800 !ruby/object:Gem::Requirement
18
+ none: false
19
+ requirements:
20
+ - - ! '>='
21
+ - !ruby/object:Gem::Version
22
+ version: '0'
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: *70243687661800
26
+ - !ruby/object:Gem::Dependency
27
+ name: multi_json
28
+ requirement: &70243687661320 !ruby/object:Gem::Requirement
29
+ none: false
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: *70243687661320
37
+ - !ruby/object:Gem::Dependency
38
+ name: rspec
39
+ requirement: &70243687660820 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ type: :development
46
+ prerelease: false
47
+ version_requirements: *70243687660820
48
+ - !ruby/object:Gem::Dependency
49
+ name: rake
50
+ requirement: &70243687660280 !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ! '>='
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ type: :development
57
+ prerelease: false
58
+ version_requirements: *70243687660280
59
+ description: EM-Synchrony based Facebook Graph API client
60
+ email:
61
+ - niklas@sutajio.se
62
+ - sebastian.falk@netlight.se
63
+ executables: []
64
+ extensions: []
65
+ extra_rdoc_files: []
66
+ files:
67
+ - .gitignore
68
+ - .rvmrc
69
+ - Gemfile
70
+ - HISTORY.md
71
+ - README.md
72
+ - Rakefile
73
+ - em-facebook.gemspec
74
+ - lib/em-facebook.rb
75
+ - lib/em-facebook/facebook.rb
76
+ - lib/em-facebook/version.rb
77
+ - spec/facebook_spec.rb
78
+ - spec/spec_helper.rb
79
+ homepage: http://github.com/ProjectDaisy/em-facebook
80
+ licenses: []
81
+ post_install_message:
82
+ rdoc_options: []
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ none: false
87
+ requirements:
88
+ - - ! '>='
89
+ - !ruby/object:Gem::Version
90
+ version: '0'
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ requirements: []
98
+ rubyforge_project: em-facebook
99
+ rubygems_version: 1.8.15
100
+ signing_key:
101
+ specification_version: 3
102
+ summary: EM-Synchrony based Facebook Graph API client
103
+ test_files:
104
+ - spec/facebook_spec.rb
105
+ - spec/spec_helper.rb