hellhound-twitter 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2010 Pedro Del Gallego.
2
+
3
+ Permission is hereby granted, free of charge, to any person
4
+ obtaining a copy of this software and associated documentation
5
+ files (the "Software"), to deal in the Software without
6
+ restriction, including without limitation the rights to use,
7
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the
9
+ Software is furnished to do so, subject to the following
10
+ conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
+ OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,24 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+
4
+ begin
5
+ require 'jeweler'
6
+ Jeweler::Tasks.new do |s|
7
+ s.name = 'hellhound-twitter'
8
+ s.summary = 'A auth system that relay in twitter oauth'
9
+ s.email = 'pedro.delgallego@gmail.com'
10
+ s.homepage = 'http://github.com/pedrodelgallego/hellhound-twitter'
11
+ s.version = '0.0.3'
12
+ s.authors = ["Pedro Del Gallego"]
13
+ s.files = FileList['[A-Z]*', '{lib,spec,bin,examples}/**/*']
14
+
15
+ s.add_dependency 'rack'
16
+ s.add_dependency 'rack-oauth'
17
+ s.add_dependency 'sinatra'
18
+
19
+ s.extra_rdoc_files = %w( README.rdoc )
20
+ end
21
+ Jeweler::GemcutterTasks.new
22
+ rescue LoadError
23
+ puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
24
+ end
@@ -0,0 +1,42 @@
1
+ %w( rubygems sinatra rack-oauth
2
+ json haml dm-core memcached
3
+ ).each {|gem| require gem}
4
+
5
+ require File.expand_path(File.join(File.dirname(__FILE__), "../lib/hellhound-twitter.rb"))
6
+
7
+ configure do
8
+ use Rack::OAuth, :key => '',
9
+ :secret => '',
10
+ :site => 'http://twitter.com'
11
+
12
+ # If you want to use the cache just uncomment the next line
13
+ # Sinatra::Hellhound::CACHE = Memcached.new
14
+
15
+ end
16
+
17
+ helpers do
18
+ include Rack::OAuth::Methods
19
+ include Sinatra::Hellhound::Helpers
20
+
21
+ def get_user twitter_id
22
+ # The user is not in the cache so do something to get it from there
23
+ session[:user]
24
+ end
25
+ end
26
+
27
+ get "/" do
28
+ logged_in? ? "Hi #{current_user}! " : "Hi stranger"
29
+ end
30
+
31
+ get "/oauth_complete" do
32
+ create_or_retrive_user do |user_data|
33
+ # Do something smart to create you user and return it to the method
34
+ user_data["name"]
35
+ end
36
+ redirect "/"
37
+ end
38
+
39
+ get "/logout" do
40
+ logout!
41
+ redirect "/"
42
+ end
@@ -0,0 +1,82 @@
1
+ require 'sinatra/base'
2
+ require 'rack-oauth'
3
+
4
+ module Sinatra
5
+ module Hellhound
6
+ module Helpers
7
+
8
+ ##
9
+ # Returns the user from the database, it can be overwritten to
10
+ # adapat to the other strategies
11
+ #
12
+ def get_user twitter_id
13
+ raise Exception, "You need to override this method"
14
+ end
15
+
16
+ ##
17
+ # Returns the current_user, it's an instance of <tt>user</tt> model
18
+ #
19
+ def current_user
20
+ if session[:user]
21
+ Sinatra::Hellhound::CACHE ? Sinatra::Hellhound::CACHE.get("user-#{session[:user]}") : get_user(session[:user])
22
+ end
23
+ end
24
+
25
+ ##
26
+ # Returns true if +current_user+ is logged and active.
27
+ #
28
+ def logged_in?
29
+ !! session[:user]
30
+ end
31
+
32
+
33
+ ##
34
+ # Returns the user that logged out and remove user from the
35
+ # cache and the session
36
+ #
37
+ def logout!
38
+ user = session[:user]
39
+ session.clear
40
+ user
41
+ end
42
+
43
+ ##
44
+ # Retrive the user from the database or create a new one if it
45
+ # doesn't exists.
46
+ #
47
+ # If you want to store the user in memcached them you need to
48
+ # return the user at the end of the block
49
+ #
50
+ # I.e
51
+ #
52
+ # create_or_retrive_user do |user_data| #
53
+ # user = User.find :twitter_id => user_data["id"].to_s
54
+ # User.create :twitter_id => user_data["id"].to_s unless user
55
+ # user
56
+ # end
57
+ #
58
+ def create_or_retrive_user(&block)
59
+ user_data = get_credentials
60
+ session[:user] = user_data["id"].to_s
61
+ user = yield user_data
62
+
63
+ Sinatra::Hellhound::CACHE.set "user-#{session[:user]}", user if Sinatra::Hellhound::CACHE
64
+ end
65
+
66
+ ##
67
+ # Returns a Hash with the user data.
68
+ #
69
+ def get_credentials
70
+ user_data = JSON.parse(get_access_token.get('/account/verify_credentials.json').body)
71
+ end
72
+ end
73
+
74
+ Sinatra::Hellhound::CACHE = nil
75
+
76
+ def self.registered(app)
77
+ app.enable :sessions
78
+ end
79
+ end # Module Hellhound
80
+
81
+ register Hellhound
82
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hellhound-twitter
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 0
8
+ - 3
9
+ version: 0.0.3
10
+ platform: ruby
11
+ authors:
12
+ - Pedro Del Gallego
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-05-12 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: rack
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 0
29
+ version: "0"
30
+ type: :runtime
31
+ version_requirements: *id001
32
+ - !ruby/object:Gem::Dependency
33
+ name: rack-oauth
34
+ prerelease: false
35
+ requirement: &id002 !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ segments:
40
+ - 0
41
+ version: "0"
42
+ type: :runtime
43
+ version_requirements: *id002
44
+ - !ruby/object:Gem::Dependency
45
+ name: sinatra
46
+ prerelease: false
47
+ requirement: &id003 !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ segments:
52
+ - 0
53
+ version: "0"
54
+ type: :runtime
55
+ version_requirements: *id003
56
+ description:
57
+ email: pedro.delgallego@gmail.com
58
+ executables: []
59
+
60
+ extensions: []
61
+
62
+ extra_rdoc_files: []
63
+
64
+ files:
65
+ - LICENSE
66
+ - README
67
+ - Rakefile
68
+ - examples/simple-login-twitter.rb
69
+ - lib/hellhound-twitter.rb
70
+ has_rdoc: true
71
+ homepage: http://github.com/pedrodelgallego/hellhound-twitter
72
+ licenses: []
73
+
74
+ post_install_message:
75
+ rdoc_options:
76
+ - --charset=UTF-8
77
+ require_paths:
78
+ - lib
79
+ required_ruby_version: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ segments:
84
+ - 0
85
+ version: "0"
86
+ required_rubygems_version: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - ">="
89
+ - !ruby/object:Gem::Version
90
+ segments:
91
+ - 0
92
+ version: "0"
93
+ requirements: []
94
+
95
+ rubyforge_project:
96
+ rubygems_version: 1.3.6
97
+ signing_key:
98
+ specification_version: 3
99
+ summary: A auth system that relay in twitter oauth
100
+ test_files:
101
+ - examples/simple-login-twitter.rb