twitter_connect 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/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2010 [Richard Huang]
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,57 @@
1
+ # TwitterConnect
2
+
3
+ facebook connect style twitter oauth
4
+
5
+ ## Demo
6
+
7
+ [http://twitter-connect.heroku.com](http://twitter-connect.heroku.com)
8
+
9
+ ## Install
10
+
11
+ <pre><code>script/plugin install git://github.com/flyerhzm/twitter_connect.git</code></pre>
12
+
13
+ ## Usage
14
+
15
+ 1 define <code>config/twitter.yml</code>
16
+ <pre><code>
17
+ development:
18
+ consumer_token:
19
+ consumer_secret:
20
+ logout_url:
21
+ production:
22
+ consumer_token:
23
+ consumer_secret:
24
+ logout_url:
25
+ </code></pre>
26
+ consumer_token and consumer_secret are fetched after you registered a twitter app.
27
+ logout_url is where the app go to when user logs out or the session expired.
28
+
29
+ 2 define routes
30
+ <pre><code>
31
+ map.twitter_oauth '/twitter_oauth', :controller => 'twitter_connects', :action => 'oauth'
32
+ map.twitter_callback '/twitter_callback', :controller => 'twitter_connects', :action => 'callback'
33
+ map.twitter_logout '/twitter_logout', :controller => 'twitter_connects', :action => 'logout'
34
+ </code></pre>
35
+
36
+ 3 add javascript to html header
37
+ <pre><code>
38
+ <%= javascript_include_tag 'twitter_connect' %>
39
+ </code></pre>
40
+
41
+ 4 add twitter login link on view page
42
+ <pre><code>
43
+ <%= tc_login_button "window.location.reload()" %>
44
+ </code></pre>
45
+ Or:
46
+ <pre><code>
47
+ <%= tc_login_button "window.location.href = '#{tweets_path}'", :class_name => 'twitter_button' %>
48
+ </code></pre>
49
+ <code>tc_login_button</code> has two parameters, first is the callback javascript, second is customized parameter :text or :class_name
50
+
51
+ 5 add twitter logout link on view page
52
+ <pre><code>
53
+ <%= link_to "Logout from Twitter", twitter_logout_path %>
54
+ </code></pre>
55
+
56
+
57
+ Copyright (c) 2010 [Richard Huang], released under the MIT license
data/README_rails3.md ADDED
@@ -0,0 +1,57 @@
1
+ # TwitterConnect
2
+
3
+ facebook connect style twitter oauth
4
+
5
+ ## Demo
6
+
7
+ [http://twitter-connect.heroku.com](http://twitter-connect.heroku.com)
8
+
9
+ ## Install
10
+
11
+ <pre><code>rails plugin install git://github.com/flyerhzm/twitter_connect.git</code></pre>
12
+
13
+ ## Usage
14
+
15
+ 1 define <code>config/twitter.yml</code>
16
+ <pre><code>
17
+ development:
18
+ consumer_token:
19
+ consumer_secret:
20
+ logout_url:
21
+ production:
22
+ consumer_token:
23
+ consumer_secret:
24
+ logout_url:
25
+ </code></pre>
26
+ consumer_token and consumer_secret are fetched after you registered a twitter app.
27
+ logout_url is where the app go to when user logs out or the session expired.
28
+
29
+ 2 define routes
30
+ <pre><code>
31
+ match '/twitter_oauth', :to => "twitter_connects#oauth", :as => :twitter_oauth
32
+ match '/twitter_callback', :to => "twitter_connects#callback", :as => :twitter_callback
33
+ match '/twitter_logout', :to => "twitter_connects#logout", :as => :twitter_logout
34
+ </code></pre>
35
+
36
+ 3 add javascript to html header
37
+ <pre><code>
38
+ <%= javascript_include_tag 'twitter_connect' %>
39
+ </code></pre>
40
+
41
+ 4 add twitter login link on view page
42
+ <pre><code>
43
+ <%= tc_login_button "window.location.reload()" %>
44
+ </code></pre>
45
+ Or:
46
+ <pre><code>
47
+ <%= tc_login_button "window.location.href = '#{tweets_path}'", :class_name => 'twitter_button' %>
48
+ </code></pre>
49
+ <code>tc_login_button</code> has two parameters, first is the callback javascript, second is customized parameter :text or :class_name
50
+
51
+ 5 add twitter logout link on view page
52
+ <pre><code>
53
+ <%= link_to "Logout from Twitter", twitter_logout_path %>
54
+ </code></pre>
55
+
56
+
57
+ Copyright (c) 2010 [Richard Huang], released under the MIT license
data/Rakefile ADDED
@@ -0,0 +1,36 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+ require 'jeweler'
5
+
6
+ desc 'Default: run unit tests.'
7
+ task :default => :test
8
+
9
+ desc 'Test the twitter_connect plugin.'
10
+ Rake::TestTask.new(:test) do |t|
11
+ t.libs << 'lib'
12
+ t.libs << 'test'
13
+ t.pattern = 'test/**/*_test.rb'
14
+ t.verbose = true
15
+ end
16
+
17
+ desc 'Generate documentation for the twitter_connect plugin.'
18
+ Rake::RDocTask.new(:rdoc) do |rdoc|
19
+ rdoc.rdoc_dir = 'rdoc'
20
+ rdoc.title = 'TwitterConnect'
21
+ rdoc.options << '--line-numbers' << '--inline-source'
22
+ rdoc.rdoc_files.include('README')
23
+ rdoc.rdoc_files.include('lib/**/*.rb')
24
+ end
25
+
26
+ Jeweler::Tasks.new do |gemspec|
27
+ gemspec.name = "twitter_connect"
28
+ gemspec.summary = "facebook connect style twitter oauth"
29
+ gemspec.description = "facebook connect style twitter oauth"
30
+ gemspec.email = "flyerhzm@gmail.com"
31
+ gemspec.homepage = "http://github.com/flyerhzm/twitter_connect"
32
+ gemspec.authors = ["Richard Huang"]
33
+ gemspec.files.exclude '.gitignore'
34
+ gemspec.add_dependency 'twitter'
35
+ end
36
+ Jeweler::GemcutterTasks.new
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
data/init.rb ADDED
@@ -0,0 +1,4 @@
1
+ twitter_config = "#{RAILS_ROOT}/config/twitter.yml"
2
+
3
+ require 'twitter_connect'
4
+ TwitterConnect.load_configuration(twitter_config)
data/install.rb ADDED
@@ -0,0 +1 @@
1
+ # Install hook code here
@@ -0,0 +1,32 @@
1
+ class TwitterConnectsController < ActionController::Base
2
+ def oauth
3
+ oauth = get_oauth
4
+ request_token = oauth.set_callback_url twitter_callback_url
5
+ session[:rtoken] = request_token.token
6
+ session[:rsecret] = request_token.secret
7
+
8
+ redirect_to request_token.authorize_url
9
+ end
10
+
11
+ def callback
12
+ oauth = get_oauth
13
+ oauth.authorize_from_request(session[:rtoken], session[:rsecret], params[:oauth_verifier])
14
+ session[:rtoken] = nil
15
+ session[:rsecret] = nil
16
+ session[:atoken] = oauth.access_token.token
17
+ session[:asecret] = oauth.access_token.secret
18
+ render :file => File.dirname(__FILE__) + '/../views/twitter_connects/callback.html.erb'
19
+ end
20
+
21
+ def logout
22
+ session[:atoken] = nil
23
+ session[:asecret] = nil
24
+
25
+ redirect_to TwitterConnect.configuration['logout_url'] || root_url
26
+ end
27
+
28
+ private
29
+ def get_oauth
30
+ oauth = Twitter::OAuth.new(TwitterConnect.configuration['consumer_token'], TwitterConnect.configuration['consumer_secret'])
31
+ end
32
+ end
@@ -0,0 +1,10 @@
1
+ module TwitterConnectsHelper
2
+
3
+ def tc_login_button(login_callback, options={})
4
+ if session[:atoken] and session[:asecret]
5
+ link_to options[:text] || 'Sign in with Twitter', '#', :onclick => login_callback, :class => "#{options[:class_name]}"
6
+ else
7
+ link_to options[:text] || 'Sign in with Twitter', twitter_oauth_url, :onlogin => login_callback, :class => "#{options[:class_name]} twitter_oauth"
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,15 @@
1
+ <?xml version='1.0' encoding='utf-8' ?>
2
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
4
+ <head>
5
+ <meta content='text/html;charset=UTF-8' http-equiv='content-type' />
6
+ </head>
7
+ <body>
8
+ <script type='text/javascript'>
9
+ //<![CDATA[
10
+ self.close();
11
+ //]]>
12
+ </script>
13
+ </body>
14
+
15
+ </html>
@@ -0,0 +1,60 @@
1
+ if (!TwitterConnect) {
2
+ var TwitterConnect = {};
3
+ }
4
+ TwitterConnect.Twitter = new function() {
5
+ var self = this;
6
+
7
+ this.setOauthUrl = function(url) {
8
+ self.oauth_url = url;
9
+ }
10
+
11
+ this.setCallback = function(callback) {
12
+ self.callback = callback;
13
+ }
14
+
15
+ this.startTwitterConnect = function() {
16
+ var popupParams = 'location=0,status=0,width=800,height=400';
17
+ self._twitterWindow = window.open(self.oauth_url, 'twitterConnectWindow', popupParams);
18
+ self._twitterInterval = window.setInterval(self.completeTwitterConnect, 500);
19
+ }
20
+
21
+ this.completeTwitterConnect = function() {
22
+ if (self._twitterWindow.closed) {
23
+ window.clearInterval(self._twitterInterval);
24
+ eval(self.callback);
25
+ }
26
+ }
27
+ };
28
+
29
+ function _loadTwitterConnect() {
30
+ if (document.getElementsByClassName == undefined) {
31
+ document.getElementsByClassName = function(className) {
32
+ var hasClassName = new RegExp("(?:^|\\s)" + className + "(?:$|\\s)");
33
+ var allElements = document.getElementsByTagName("*");
34
+ var results = [];
35
+
36
+ var element;
37
+ for (var i = 0; (element = allElements[i]) != null; i++) {
38
+ var elementClass = element.className;
39
+ if (elementClass && elementClass.indexOf(className) != -1 && hasClassName.test(elementClass))
40
+ results.push(element);
41
+ }
42
+
43
+ return results;
44
+ }
45
+ }
46
+
47
+ var oauths = document.getElementsByClassName('twitter_oauth');
48
+ for (var i = 0; i < oauths.length; i++) {
49
+ var oauth = oauths[i];
50
+ oauth.onclick = function() {
51
+ TwitterConnect.Twitter.setOauthUrl(oauth.getAttribute('href'));
52
+ TwitterConnect.Twitter.setCallback(oauth.getAttribute('onlogin'));
53
+ TwitterConnect.Twitter.startTwitterConnect();
54
+ return false;
55
+ }
56
+ }
57
+ };
58
+
59
+ _loadSuper = window.onload;
60
+ window.onload = (typeof window.onload != 'function') ? _loadTwitterConnect : function() { _loadSuper(); _loadTwitterConnect(); };
@@ -0,0 +1,42 @@
1
+ module TwitterConnect
2
+ @consumer_token = nil
3
+ @consumer_secret = nil
4
+
5
+ class <<self
6
+ def load_configuration(twitter_yaml_file)
7
+ return false unless File.exist?(twitter_yaml_file)
8
+ @configuration = YAML.load_file(twitter_yaml_file)[RAILS_ENV]
9
+ end
10
+
11
+ def configuration
12
+ @configuration
13
+ end
14
+ end
15
+ end
16
+
17
+ require 'app/controllers/twitter_connects_controller'
18
+ require 'app/helpers/twitter_connects_helper'
19
+
20
+ module ActionController
21
+ class Base
22
+ helper TwitterConnectsHelper
23
+
24
+ def set_twitter_client
25
+ begin
26
+ oauth = Twitter::OAuth.new(TwitterConnect.configuration['consumer_token'], TwitterConnect.configuration['consumer_secret'])
27
+ oauth.authorize_from_access(session[:atoken], session[:asecret])
28
+ @twitter_client = Twitter::Base.new(oauth)
29
+ rescue Twitter::Unauthorized
30
+ redirect_to TwitterConnect.configuration['logout_url'] || root_url
31
+ end
32
+ end
33
+
34
+ attr_reader :twitter_client
35
+ end
36
+ end
37
+
38
+ require 'ftools'
39
+
40
+ unless File.exist?(File.join(Rails.root, "/public/javascripts/twitter_connect.js"))
41
+ File.copy(File.join(File.dirname(__FILE__), "/public/javascripts/twitter_connect.js"), File.join(Rails.root, "/public/javascripts/twitter_connect.js"))
42
+ end
data/rails/init.rb ADDED
@@ -0,0 +1 @@
1
+ require File.join(File.dirname(__FILE__),'../init.rb')
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :twitter_connect do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,5 @@
1
+ require 'rubygems'
2
+ require 'active_support'
3
+ require 'active_support/test_case'
4
+
5
+ require File.join(File.dirname(__FILE__) + '/../lib/twitter_connect')
@@ -0,0 +1,8 @@
1
+ require 'test_helper'
2
+
3
+ class TwitterConnectTest < ActiveSupport::TestCase
4
+ # Replace this with your real tests.
5
+ test "the truth" do
6
+ assert true
7
+ end
8
+ end
data/uninstall.rb ADDED
@@ -0,0 +1 @@
1
+ # Uninstall hook code here
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: twitter_connect
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 1
8
+ - 0
9
+ version: 0.1.0
10
+ platform: ruby
11
+ authors:
12
+ - Richard Huang
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-03-31 00:00:00 +08:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: twitter
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
+ description: facebook connect style twitter oauth
33
+ email: flyerhzm@gmail.com
34
+ executables: []
35
+
36
+ extensions: []
37
+
38
+ extra_rdoc_files:
39
+ - README.md
40
+ - README_rails3.md
41
+ files:
42
+ - MIT-LICENSE
43
+ - README.md
44
+ - README_rails3.md
45
+ - Rakefile
46
+ - VERSION
47
+ - init.rb
48
+ - install.rb
49
+ - lib/app/controllers/twitter_connects_controller.rb
50
+ - lib/app/helpers/twitter_connects_helper.rb
51
+ - lib/app/views/twitter_connects/callback.html.erb
52
+ - lib/public/javascripts/twitter_connect.js
53
+ - lib/twitter_connect.rb
54
+ - rails/init.rb
55
+ - tasks/twitter_connect_tasks.rake
56
+ - test/test_helper.rb
57
+ - test/twitter_connect_test.rb
58
+ - uninstall.rb
59
+ has_rdoc: true
60
+ homepage: http://github.com/flyerhzm/twitter_connect
61
+ licenses: []
62
+
63
+ post_install_message:
64
+ rdoc_options:
65
+ - --charset=UTF-8
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ segments:
73
+ - 0
74
+ version: "0"
75
+ required_rubygems_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ segments:
80
+ - 0
81
+ version: "0"
82
+ requirements: []
83
+
84
+ rubyforge_project:
85
+ rubygems_version: 1.3.6
86
+ signing_key:
87
+ specification_version: 3
88
+ summary: facebook connect style twitter oauth
89
+ test_files:
90
+ - test/test_helper.rb
91
+ - test/twitter_connect_test.rb