em-facebook 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.
@@ -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