omniauth_china 0.0.2 → 0.0.3

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.
Files changed (53) hide show
  1. data/Gemfile +12 -0
  2. data/Gemfile.lock +188 -0
  3. data/Rakefile +13 -1
  4. data/lib/omniauth_china/oauth_china.rb +1 -1
  5. data/lib/omniauth_china/version.rb +1 -1
  6. data/spec/omniauth_china/strategies/douban_spec.rb +40 -0
  7. data/spec/omniauth_china/strategies/t163_spec.rb +5 -0
  8. data/spec/omniauth_china/strategies/tsina_spec.rb +5 -0
  9. data/spec/omniauth_china/strategies/tsohu_spec.rb +5 -0
  10. data/spec/spec_helper.rb +33 -0
  11. data/spec/support/shared_examples.rb +29 -0
  12. data/test/dummy/Rakefile +7 -0
  13. data/test/dummy/app/controllers/application_controller.rb +3 -0
  14. data/test/dummy/app/helpers/application_helper.rb +2 -0
  15. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  16. data/test/dummy/config/application.rb +45 -0
  17. data/test/dummy/config/boot.rb +10 -0
  18. data/test/dummy/config/database.yml +22 -0
  19. data/test/dummy/config/environment.rb +5 -0
  20. data/test/dummy/config/environments/development.rb +26 -0
  21. data/test/dummy/config/environments/production.rb +49 -0
  22. data/test/dummy/config/environments/test.rb +35 -0
  23. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  24. data/test/dummy/config/initializers/inflections.rb +10 -0
  25. data/test/dummy/config/initializers/mime_types.rb +5 -0
  26. data/test/dummy/config/initializers/secret_token.rb +7 -0
  27. data/test/dummy/config/initializers/session_store.rb +8 -0
  28. data/test/dummy/config/locales/en.yml +5 -0
  29. data/test/dummy/config/routes.rb +58 -0
  30. data/test/dummy/config.ru +4 -0
  31. data/test/dummy/db/test.sqlite3 +0 -0
  32. data/test/dummy/log/development.log +0 -0
  33. data/test/dummy/log/production.log +0 -0
  34. data/test/dummy/log/server.log +0 -0
  35. data/test/dummy/log/test.log +27 -0
  36. data/test/dummy/public/404.html +26 -0
  37. data/test/dummy/public/422.html +26 -0
  38. data/test/dummy/public/500.html +26 -0
  39. data/test/dummy/public/favicon.ico +0 -0
  40. data/test/dummy/public/javascripts/application.js +2 -0
  41. data/test/dummy/public/javascripts/controls.js +965 -0
  42. data/test/dummy/public/javascripts/dragdrop.js +974 -0
  43. data/test/dummy/public/javascripts/effects.js +1123 -0
  44. data/test/dummy/public/javascripts/prototype.js +6001 -0
  45. data/test/dummy/public/javascripts/rails.js +175 -0
  46. data/test/dummy/public/stylesheets/.gitkeep +0 -0
  47. data/test/dummy/script/rails +6 -0
  48. data/test/integration/navigation_test.rb +7 -0
  49. data/test/omniauth_china/strategies/douban_test.rb +40 -0
  50. data/test/omniauth_china_test.rb +7 -0
  51. data/test/support/integration_case.rb +5 -0
  52. data/test/test_helper.rb +54 -0
  53. metadata +98 -4
@@ -0,0 +1,175 @@
1
+ (function() {
2
+ // Technique from Juriy Zaytsev
3
+ // http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
4
+ function isEventSupported(eventName) {
5
+ var el = document.createElement('div');
6
+ eventName = 'on' + eventName;
7
+ var isSupported = (eventName in el);
8
+ if (!isSupported) {
9
+ el.setAttribute(eventName, 'return;');
10
+ isSupported = typeof el[eventName] == 'function';
11
+ }
12
+ el = null;
13
+ return isSupported;
14
+ }
15
+
16
+ function isForm(element) {
17
+ return Object.isElement(element) && element.nodeName.toUpperCase() == 'FORM'
18
+ }
19
+
20
+ function isInput(element) {
21
+ if (Object.isElement(element)) {
22
+ var name = element.nodeName.toUpperCase()
23
+ return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA'
24
+ }
25
+ else return false
26
+ }
27
+
28
+ var submitBubbles = isEventSupported('submit'),
29
+ changeBubbles = isEventSupported('change')
30
+
31
+ if (!submitBubbles || !changeBubbles) {
32
+ // augment the Event.Handler class to observe custom events when needed
33
+ Event.Handler.prototype.initialize = Event.Handler.prototype.initialize.wrap(
34
+ function(init, element, eventName, selector, callback) {
35
+ init(element, eventName, selector, callback)
36
+ // is the handler being attached to an element that doesn't support this event?
37
+ if ( (!submitBubbles && this.eventName == 'submit' && !isForm(this.element)) ||
38
+ (!changeBubbles && this.eventName == 'change' && !isInput(this.element)) ) {
39
+ // "submit" => "emulated:submit"
40
+ this.eventName = 'emulated:' + this.eventName
41
+ }
42
+ }
43
+ )
44
+ }
45
+
46
+ if (!submitBubbles) {
47
+ // discover forms on the page by observing focus events which always bubble
48
+ document.on('focusin', 'form', function(focusEvent, form) {
49
+ // special handler for the real "submit" event (one-time operation)
50
+ if (!form.retrieve('emulated:submit')) {
51
+ form.on('submit', function(submitEvent) {
52
+ var emulated = form.fire('emulated:submit', submitEvent, true)
53
+ // if custom event received preventDefault, cancel the real one too
54
+ if (emulated.returnValue === false) submitEvent.preventDefault()
55
+ })
56
+ form.store('emulated:submit', true)
57
+ }
58
+ })
59
+ }
60
+
61
+ if (!changeBubbles) {
62
+ // discover form inputs on the page
63
+ document.on('focusin', 'input, select, texarea', function(focusEvent, input) {
64
+ // special handler for real "change" events
65
+ if (!input.retrieve('emulated:change')) {
66
+ input.on('change', function(changeEvent) {
67
+ input.fire('emulated:change', changeEvent, true)
68
+ })
69
+ input.store('emulated:change', true)
70
+ }
71
+ })
72
+ }
73
+
74
+ function handleRemote(element) {
75
+ var method, url, params;
76
+
77
+ var event = element.fire("ajax:before");
78
+ if (event.stopped) return false;
79
+
80
+ if (element.tagName.toLowerCase() === 'form') {
81
+ method = element.readAttribute('method') || 'post';
82
+ url = element.readAttribute('action');
83
+ params = element.serialize();
84
+ } else {
85
+ method = element.readAttribute('data-method') || 'get';
86
+ url = element.readAttribute('href');
87
+ params = {};
88
+ }
89
+
90
+ new Ajax.Request(url, {
91
+ method: method,
92
+ parameters: params,
93
+ evalScripts: true,
94
+
95
+ onComplete: function(request) { element.fire("ajax:complete", request); },
96
+ onSuccess: function(request) { element.fire("ajax:success", request); },
97
+ onFailure: function(request) { element.fire("ajax:failure", request); }
98
+ });
99
+
100
+ element.fire("ajax:after");
101
+ }
102
+
103
+ function handleMethod(element) {
104
+ var method = element.readAttribute('data-method'),
105
+ url = element.readAttribute('href'),
106
+ csrf_param = $$('meta[name=csrf-param]')[0],
107
+ csrf_token = $$('meta[name=csrf-token]')[0];
108
+
109
+ var form = new Element('form', { method: "POST", action: url, style: "display: none;" });
110
+ element.parentNode.insert(form);
111
+
112
+ if (method !== 'post') {
113
+ var field = new Element('input', { type: 'hidden', name: '_method', value: method });
114
+ form.insert(field);
115
+ }
116
+
117
+ if (csrf_param) {
118
+ var param = csrf_param.readAttribute('content'),
119
+ token = csrf_token.readAttribute('content'),
120
+ field = new Element('input', { type: 'hidden', name: param, value: token });
121
+ form.insert(field);
122
+ }
123
+
124
+ form.submit();
125
+ }
126
+
127
+
128
+ document.on("click", "*[data-confirm]", function(event, element) {
129
+ var message = element.readAttribute('data-confirm');
130
+ if (!confirm(message)) event.stop();
131
+ });
132
+
133
+ document.on("click", "a[data-remote]", function(event, element) {
134
+ if (event.stopped) return;
135
+ handleRemote(element);
136
+ event.stop();
137
+ });
138
+
139
+ document.on("click", "a[data-method]", function(event, element) {
140
+ if (event.stopped) return;
141
+ handleMethod(element);
142
+ event.stop();
143
+ });
144
+
145
+ document.on("submit", function(event) {
146
+ var element = event.findElement(),
147
+ message = element.readAttribute('data-confirm');
148
+ if (message && !confirm(message)) {
149
+ event.stop();
150
+ return false;
151
+ }
152
+
153
+ var inputs = element.select("input[type=submit][data-disable-with]");
154
+ inputs.each(function(input) {
155
+ input.disabled = true;
156
+ input.writeAttribute('data-original-value', input.value);
157
+ input.value = input.readAttribute('data-disable-with');
158
+ });
159
+
160
+ var element = event.findElement("form[data-remote]");
161
+ if (element) {
162
+ handleRemote(element);
163
+ event.stop();
164
+ }
165
+ });
166
+
167
+ document.on("ajax:after", "form", function(event, element) {
168
+ var inputs = element.select("input[type=submit][disabled=true][data-disable-with]");
169
+ inputs.each(function(input) {
170
+ input.value = input.readAttribute('data-original-value');
171
+ input.removeAttribute('data-original-value');
172
+ input.disabled = false;
173
+ });
174
+ });
175
+ })();
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class NavigationTest < ActiveSupport::IntegrationCase
4
+ test "truth" do
5
+ assert_kind_of Dummy::Application, Rails.application
6
+ end
7
+ end
@@ -0,0 +1,40 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
+
3
+ describe OmniAuth::Strategies::Douban do
4
+
5
+ def app
6
+ Rack::Builder.new {
7
+ use OmniAuth::Test::PhonySession
8
+ use OmniAuth::Builder do
9
+ provider :douban, 'abc', 'def'
10
+ end
11
+ run lambda { |env| [200, {'Content-Type' => 'text/plain'}, [env.key?('omniauth.auth').to_s]] }
12
+ }.to_app
13
+ end
14
+
15
+ def session
16
+ last_request.env['rack.session']
17
+ end
18
+
19
+ before do
20
+ stub_request(:post, 'http://www.douban.com/service/auth/request_token').
21
+ to_return(:body => "oauth_token=yourtoken&oauth_token_secret=yoursecret&oauth_callback_confirmed=false")
22
+ end
23
+
24
+ describe '/auth/{name}' do
25
+ before do
26
+ get '/auth/douban'
27
+ end
28
+ it 'should redirect to authorize_url' do
29
+ last_response.should be_redirect
30
+ oauth_callback = CGI.escape('http://example.org/auth/douban/callback')
31
+ last_response.headers['Location'].should == "http://www.douban.com/service/auth/authorize?oauth_callback=#{oauth_callback}&oauth_token=yourtoken"
32
+ end
33
+
34
+ it 'should set appropriate session variables' do
35
+ session[:oauth].should == {:douban => {:callback_confirmed => false, :request_token => 'yourtoken', :request_secret => 'yoursecret'}}
36
+ end
37
+ end
38
+
39
+ it_should_behave_like 'an oauth strategy'
40
+ end
@@ -0,0 +1,7 @@
1
+ require 'test_helper'
2
+
3
+ class OmniauthChinaTest < ActiveSupport::TestCase
4
+ test "truth" do
5
+ assert_kind_of Module, OmniauthChina
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ # Define a bare test case to use with Capybara
2
+ class ActiveSupport::IntegrationCase < ActiveSupport::TestCase
3
+ include Capybara
4
+ include Rails.application.routes.url_helpers
5
+ end
@@ -0,0 +1,54 @@
1
+ # Configure Rails Envinronment
2
+ ENV["RAILS_ENV"] = "test"
3
+
4
+ require File.expand_path("../dummy/config/environment.rb", __FILE__)
5
+ require "rails/test_help"
6
+
7
+ require 'rubygems'
8
+ require 'bundler'
9
+ Bundler.setup
10
+ require 'rspec'
11
+ require 'rspec/autorun'
12
+ require 'webmock/rspec'
13
+ require 'rack/test'
14
+ require 'omniauth/core'
15
+ require 'omniauth/test'
16
+ require 'omniauth/oauth'
17
+
18
+ ActionMailer::Base.delivery_method = :test
19
+ ActionMailer::Base.perform_deliveries = true
20
+ ActionMailer::Base.default_url_options[:host] = "test.com"
21
+
22
+ Rails.backtrace_cleaner.remove_silencers!
23
+
24
+ # Configure capybara for integration testing
25
+ require "capybara/rails"
26
+ Capybara.default_driver = :rack_test
27
+ Capybara.default_selector = :css
28
+
29
+ # Run any available migration
30
+ ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
31
+
32
+ # Load support files
33
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
34
+
35
+ # RSpec
36
+ RSpec.configure do |config|
37
+ config.include WebMock
38
+ config.include Rack::Test::Methods
39
+ config.extend OmniAuth::Test::StrategyMacros, :type => :strategy
40
+ end
41
+
42
+ def strategy_class
43
+ meta = self.class.metadata
44
+ while meta.key?(:example_group)
45
+ meta = meta[:example_group]
46
+ end
47
+ meta[:describes]
48
+ end
49
+
50
+ def app
51
+ lambda{|env| [200, {}, ['Hello']]}
52
+ end
53
+
54
+ WebMock.disable_net_connect!
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 2
9
- version: 0.0.2
8
+ - 3
9
+ version: 0.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Qi He
@@ -42,6 +42,7 @@ extra_rdoc_files: []
42
42
  files:
43
43
  - .gitignore
44
44
  - Gemfile
45
+ - Gemfile.lock
45
46
  - Rakefile
46
47
  - lib/omniauth_china.rb
47
48
  - lib/omniauth_china/oauth_china.rb
@@ -51,6 +52,53 @@ files:
51
52
  - lib/omniauth_china/strategies/tsohu.rb
52
53
  - lib/omniauth_china/version.rb
53
54
  - omniauth_china.gemspec
55
+ - spec/omniauth_china/strategies/douban_spec.rb
56
+ - spec/omniauth_china/strategies/t163_spec.rb
57
+ - spec/omniauth_china/strategies/tsina_spec.rb
58
+ - spec/omniauth_china/strategies/tsohu_spec.rb
59
+ - spec/spec_helper.rb
60
+ - spec/support/shared_examples.rb
61
+ - test/dummy/Rakefile
62
+ - test/dummy/app/controllers/application_controller.rb
63
+ - test/dummy/app/helpers/application_helper.rb
64
+ - test/dummy/app/views/layouts/application.html.erb
65
+ - test/dummy/config.ru
66
+ - test/dummy/config/application.rb
67
+ - test/dummy/config/boot.rb
68
+ - test/dummy/config/database.yml
69
+ - test/dummy/config/environment.rb
70
+ - test/dummy/config/environments/development.rb
71
+ - test/dummy/config/environments/production.rb
72
+ - test/dummy/config/environments/test.rb
73
+ - test/dummy/config/initializers/backtrace_silencers.rb
74
+ - test/dummy/config/initializers/inflections.rb
75
+ - test/dummy/config/initializers/mime_types.rb
76
+ - test/dummy/config/initializers/secret_token.rb
77
+ - test/dummy/config/initializers/session_store.rb
78
+ - test/dummy/config/locales/en.yml
79
+ - test/dummy/config/routes.rb
80
+ - test/dummy/db/test.sqlite3
81
+ - test/dummy/log/development.log
82
+ - test/dummy/log/production.log
83
+ - test/dummy/log/server.log
84
+ - test/dummy/log/test.log
85
+ - test/dummy/public/404.html
86
+ - test/dummy/public/422.html
87
+ - test/dummy/public/500.html
88
+ - test/dummy/public/favicon.ico
89
+ - test/dummy/public/javascripts/application.js
90
+ - test/dummy/public/javascripts/controls.js
91
+ - test/dummy/public/javascripts/dragdrop.js
92
+ - test/dummy/public/javascripts/effects.js
93
+ - test/dummy/public/javascripts/prototype.js
94
+ - test/dummy/public/javascripts/rails.js
95
+ - test/dummy/public/stylesheets/.gitkeep
96
+ - test/dummy/script/rails
97
+ - test/integration/navigation_test.rb
98
+ - test/omniauth_china/strategies/douban_test.rb
99
+ - test/omniauth_china_test.rb
100
+ - test/support/integration_case.rb
101
+ - test/test_helper.rb
54
102
  has_rdoc: true
55
103
  homepage: http://rubygems.org/gems/omniauth_china
56
104
  licenses: []
@@ -83,5 +131,51 @@ rubygems_version: 1.3.7
83
131
  signing_key:
84
132
  specification_version: 3
85
133
  summary: "OmniAuth extention: omniauth for china"
86
- test_files: []
87
-
134
+ test_files:
135
+ - spec/omniauth_china/strategies/douban_spec.rb
136
+ - spec/omniauth_china/strategies/t163_spec.rb
137
+ - spec/omniauth_china/strategies/tsina_spec.rb
138
+ - spec/omniauth_china/strategies/tsohu_spec.rb
139
+ - spec/spec_helper.rb
140
+ - spec/support/shared_examples.rb
141
+ - test/dummy/Rakefile
142
+ - test/dummy/app/controllers/application_controller.rb
143
+ - test/dummy/app/helpers/application_helper.rb
144
+ - test/dummy/app/views/layouts/application.html.erb
145
+ - test/dummy/config.ru
146
+ - test/dummy/config/application.rb
147
+ - test/dummy/config/boot.rb
148
+ - test/dummy/config/database.yml
149
+ - test/dummy/config/environment.rb
150
+ - test/dummy/config/environments/development.rb
151
+ - test/dummy/config/environments/production.rb
152
+ - test/dummy/config/environments/test.rb
153
+ - test/dummy/config/initializers/backtrace_silencers.rb
154
+ - test/dummy/config/initializers/inflections.rb
155
+ - test/dummy/config/initializers/mime_types.rb
156
+ - test/dummy/config/initializers/secret_token.rb
157
+ - test/dummy/config/initializers/session_store.rb
158
+ - test/dummy/config/locales/en.yml
159
+ - test/dummy/config/routes.rb
160
+ - test/dummy/db/test.sqlite3
161
+ - test/dummy/log/development.log
162
+ - test/dummy/log/production.log
163
+ - test/dummy/log/server.log
164
+ - test/dummy/log/test.log
165
+ - test/dummy/public/404.html
166
+ - test/dummy/public/422.html
167
+ - test/dummy/public/500.html
168
+ - test/dummy/public/favicon.ico
169
+ - test/dummy/public/javascripts/application.js
170
+ - test/dummy/public/javascripts/controls.js
171
+ - test/dummy/public/javascripts/dragdrop.js
172
+ - test/dummy/public/javascripts/effects.js
173
+ - test/dummy/public/javascripts/prototype.js
174
+ - test/dummy/public/javascripts/rails.js
175
+ - test/dummy/public/stylesheets/.gitkeep
176
+ - test/dummy/script/rails
177
+ - test/integration/navigation_test.rb
178
+ - test/omniauth_china/strategies/douban_test.rb
179
+ - test/omniauth_china_test.rb
180
+ - test/support/integration_case.rb
181
+ - test/test_helper.rb