oauth2 0.1.1 → 0.2.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/.gemtest +0 -0
- data/.gitignore +1 -0
- data/.rspec +1 -1
- data/Rakefile +2 -17
- data/lib/oauth2/access_token.rb +5 -1
- data/lib/oauth2/client.rb +1 -13
- data/lib/oauth2/response_object.rb +8 -8
- data/lib/oauth2/strategy/web_server.rb +13 -9
- data/lib/oauth2/version.rb +1 -1
- data/oauth2.gemspec +5 -5
- data/spec/oauth2/access_token_spec.rb +22 -5
- data/spec/oauth2/strategy/web_server_spec.rb +29 -24
- data/spec/spec_helper.rb +2 -3
- metadata +22 -44
- data/Gemfile.lock +0 -42
- data/specs.watchr +0 -61
data/.gemtest
ADDED
File without changes
|
data/.gitignore
CHANGED
data/.rspec
CHANGED
data/Rakefile
CHANGED
@@ -2,25 +2,10 @@ require 'bundler'
|
|
2
2
|
Bundler::GemHelper.install_tasks
|
3
3
|
|
4
4
|
require 'rspec/core/rake_task'
|
5
|
-
|
6
|
-
RSpec::Core::RakeTask.new(:spec) do |t|
|
7
|
-
t.rspec_opts = %w[--color]
|
8
|
-
end
|
9
|
-
|
10
|
-
task :cleanup_rcov_files do
|
11
|
-
rm_rf 'coverage.data'
|
12
|
-
end
|
13
|
-
|
14
|
-
namespace :spec do
|
15
|
-
desc "Run all examples using rcov"
|
16
|
-
RSpec::Core::RakeTask.new :rcov => :cleanup_rcov_files do |t|
|
17
|
-
t.rcov = true
|
18
|
-
t.rcov_opts = %[-Ilib -Ispec --exclude "gems/*,features"]
|
19
|
-
t.rcov_opts << %[--text-report --sort coverage --no-html --aggregate coverage.data]
|
20
|
-
end
|
21
|
-
end
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
22
6
|
|
23
7
|
task :default => :spec
|
8
|
+
task :test => :spec
|
24
9
|
|
25
10
|
require 'rake/rdoctask'
|
26
11
|
Rake::RDocTask.new do |rdoc|
|
data/lib/oauth2/access_token.rb
CHANGED
@@ -10,7 +10,7 @@ module OAuth2
|
|
10
10
|
@expires_in = (expires_in.nil? || expires_in == '') ? nil : expires_in.to_i
|
11
11
|
@expires_at = Time.now + @expires_in if @expires_in
|
12
12
|
@params = params
|
13
|
-
@token_param = '
|
13
|
+
@token_param = 'oauth_token'
|
14
14
|
end
|
15
15
|
|
16
16
|
def [](key)
|
@@ -22,6 +22,10 @@ module OAuth2
|
|
22
22
|
!!@expires_in
|
23
23
|
end
|
24
24
|
|
25
|
+
def expired?
|
26
|
+
expires? && expires_at < Time.now
|
27
|
+
end
|
28
|
+
|
25
29
|
def request(verb, path, params = {}, headers = {})
|
26
30
|
params = params.merge token_param => @token
|
27
31
|
headers = headers.merge 'Authorization' => "OAuth #{@token}"
|
data/lib/oauth2/client.rb
CHANGED
@@ -2,18 +2,6 @@ require 'faraday'
|
|
2
2
|
|
3
3
|
module OAuth2
|
4
4
|
class Client
|
5
|
-
class << self
|
6
|
-
def default_connection_adapter
|
7
|
-
warn '[DEPRECATED] OAuth2::Client#default_connection_adapter is deprecated, use Faraday.default_adapter instead. Will be removed in 0.1.0'
|
8
|
-
Faraday.default_adapter
|
9
|
-
end
|
10
|
-
|
11
|
-
def default_connection_adapter=(adapter)
|
12
|
-
warn '[DEPRECATED] OAuth2::Client#default_connection_adapter is deprecated, use Faraday.default_adapter instead. Will be removed in 0.1.0'
|
13
|
-
Faraday.default_adapter = adapter
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
5
|
attr_accessor :id, :secret, :site, :connection, :options
|
18
6
|
attr_writer :json
|
19
7
|
|
@@ -62,7 +50,7 @@ module OAuth2
|
|
62
50
|
else
|
63
51
|
resp = connection.run_request(verb, url, params, headers)
|
64
52
|
end
|
65
|
-
|
53
|
+
|
66
54
|
case resp.status
|
67
55
|
when 200..299
|
68
56
|
if json?
|
@@ -14,35 +14,35 @@ module OAuth2
|
|
14
14
|
rescue
|
15
15
|
ResponseString.new(response)
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
def self.included(base)
|
19
19
|
base.class_eval do
|
20
20
|
attr_accessor :response
|
21
21
|
end
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
def headers; response.headers end
|
25
25
|
def status; response.status end
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
class ResponseHash < Hash
|
29
29
|
include ResponseObject
|
30
|
-
|
30
|
+
|
31
31
|
def initialize(response, hash)
|
32
32
|
self.response = response
|
33
33
|
hash.keys.each{|k| self[k] = hash[k]}
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
36
|
+
|
37
37
|
class ResponseArray < Array
|
38
38
|
include ResponseObject
|
39
|
-
|
39
|
+
|
40
40
|
def initialize(response, array)
|
41
41
|
self.response = response
|
42
42
|
super(array)
|
43
43
|
end
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
# This special String class is returned from HTTP requests
|
47
47
|
# and contains the original full response along with convenience
|
48
48
|
# methods for accessing the HTTP status code and headers. It
|
@@ -55,4 +55,4 @@ module OAuth2
|
|
55
55
|
self.response = response
|
56
56
|
end
|
57
57
|
end
|
58
|
-
end
|
58
|
+
end
|
@@ -4,7 +4,7 @@ module OAuth2
|
|
4
4
|
module Strategy
|
5
5
|
class WebServer < Base
|
6
6
|
def authorize_params(options = {}) #:nodoc:
|
7
|
-
super(options).merge('
|
7
|
+
super(options).merge('response_type' => 'code')
|
8
8
|
end
|
9
9
|
|
10
10
|
# Retrieve an access token given the specified validation code.
|
@@ -14,16 +14,20 @@ module OAuth2
|
|
14
14
|
def get_access_token(code, options = {})
|
15
15
|
response = @client.request(:post, @client.access_token_url, access_token_params(code, options))
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
if response.is_a? Hash
|
18
|
+
params=response
|
19
|
+
else
|
20
|
+
params = MultiJson.decode(response) rescue nil
|
21
|
+
# the ActiveSupport JSON parser won't cause an exception when
|
22
|
+
# given a formencoded string, so make sure that it was
|
23
|
+
# actually parsed in an Hash. This covers even the case where
|
24
|
+
# it caused an exception since it'll still be nil.
|
25
|
+
params = Rack::Utils.parse_query(response) unless params.is_a? Hash
|
26
|
+
end
|
23
27
|
|
24
28
|
access = params['access_token']
|
25
29
|
refresh = params['refresh_token']
|
26
|
-
expires_in = params['expires_in']
|
30
|
+
expires_in = params['expires_in'] || params['expires'] # params['expires'] is only for facebook
|
27
31
|
OAuth2::AccessToken.new(@client, access, refresh, expires_in, params)
|
28
32
|
end
|
29
33
|
|
@@ -35,7 +39,7 @@ module OAuth2
|
|
35
39
|
|
36
40
|
def access_token_params(code, options = {}) #:nodoc:
|
37
41
|
super(options).merge({
|
38
|
-
'
|
42
|
+
'grant_type' => 'authorization_code',
|
39
43
|
'code' => code
|
40
44
|
})
|
41
45
|
end
|
data/lib/oauth2/version.rb
CHANGED
data/oauth2.gemspec
CHANGED
@@ -4,7 +4,6 @@ require File.expand_path("../lib/oauth2/version", __FILE__)
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "oauth2"
|
6
6
|
s.version = OAuth2::VERSION
|
7
|
-
s.rubyforge_project = 'oauth2'
|
8
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.3.6") if s.respond_to? :required_rubygems_version=
|
9
8
|
s.authors = ["Michael Bleigh"]
|
10
9
|
s.description = %q{A Ruby wrapper for the OAuth 2.0 protocol built with a similar style to the original OAuth gem.}
|
@@ -17,10 +16,11 @@ Gem::Specification.new do |s|
|
|
17
16
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
18
17
|
s.files = `git ls-files`.split("\n")
|
19
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
20
|
-
s.add_runtime_dependency("faraday", "~> 0.
|
19
|
+
s.add_runtime_dependency("faraday", "~> 0.6.0")
|
21
20
|
s.add_runtime_dependency("multi_json", "~> 0.0.4")
|
22
|
-
s.add_development_dependency("json_pure", "~> 1.
|
21
|
+
s.add_development_dependency("json_pure", "~> 1.5")
|
23
22
|
s.add_development_dependency("rake", "~> 0.8")
|
24
|
-
s.add_development_dependency("
|
25
|
-
s.add_development_dependency("rspec", "~> 2.
|
23
|
+
s.add_development_dependency("simplecov", "~> 0.4")
|
24
|
+
s.add_development_dependency("rspec", "~> 2.5")
|
25
|
+
s.add_development_dependency("ZenTest", "~> 4.5")
|
26
26
|
end
|
@@ -5,10 +5,10 @@ describe OAuth2::AccessToken do
|
|
5
5
|
cli = OAuth2::Client.new('abc', 'def', :site => 'https://api.example.com')
|
6
6
|
cli.connection.build do |b|
|
7
7
|
b.adapter :test do |stub|
|
8
|
-
stub.get('/client?
|
9
|
-
stub.post('/client')
|
10
|
-
stub.put('/client')
|
11
|
-
stub.delete('/client')
|
8
|
+
stub.get('/client?oauth_token=monkey') { |env| [200, {}, 'get'] }
|
9
|
+
stub.post('/client') { |env| [200, {}, 'oauth_token=' << env[:body]['oauth_token']] }
|
10
|
+
stub.put('/client') { |env| [200, {}, 'oauth_token=' << env[:body]['oauth_token']] }
|
11
|
+
stub.delete('/client') { |env| [200, {}, 'oauth_token=' << env[:body]['oauth_token']] }
|
12
12
|
end
|
13
13
|
end
|
14
14
|
cli
|
@@ -30,7 +30,7 @@ describe OAuth2::AccessToken do
|
|
30
30
|
|
31
31
|
%w(post put delete).each do |http_method|
|
32
32
|
it "makes #{http_method.upcase} requests with access token" do
|
33
|
-
subject.send(http_method.to_sym, 'client').should == '
|
33
|
+
subject.send(http_method.to_sym, 'client').should == 'oauth_token=monkey'
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
@@ -57,4 +57,21 @@ describe OAuth2::AccessToken do
|
|
57
57
|
subject.expires_at.should == (@now + 600)
|
58
58
|
end
|
59
59
|
end
|
60
|
+
|
61
|
+
describe '#expired?' do
|
62
|
+
it 'should be false if there is no expires_at' do
|
63
|
+
OAuth2::AccessToken.new(client, token).should_not be_expired
|
64
|
+
end
|
65
|
+
|
66
|
+
it 'should be false if expires_at is in the future' do
|
67
|
+
OAuth2::AccessToken.new(client, token, 'abaca', 10800).should_not be_expired
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'should be true if expires_at is in the past' do
|
71
|
+
access = OAuth2::AccessToken.new(client, token, 'abaca', 600)
|
72
|
+
@now = Time.now + 10800
|
73
|
+
Time.stub!(:now).and_return(@now)
|
74
|
+
access.should be_expired
|
75
|
+
end
|
76
|
+
end
|
60
77
|
end
|
@@ -11,6 +11,8 @@ describe OAuth2::Strategy::WebServer do
|
|
11
11
|
[200, {}, 'expires_in=600&access_token=salmon&refresh_token=trout&extra_param=steve']
|
12
12
|
when "json"
|
13
13
|
[200, {}, '{"expires_in":600,"access_token":"salmon","refresh_token":"trout","extra_param":"steve"}']
|
14
|
+
when "from_facebook"
|
15
|
+
[200, {}, 'expires=600&access_token=salmon&refresh_token=trout&extra_param=steve']
|
14
16
|
end
|
15
17
|
end
|
16
18
|
end
|
@@ -25,7 +27,7 @@ describe OAuth2::Strategy::WebServer do
|
|
25
27
|
end
|
26
28
|
|
27
29
|
it 'should include the type' do
|
28
|
-
subject.authorize_url.should be_include('
|
30
|
+
subject.authorize_url.should be_include('response_type=code')
|
29
31
|
end
|
30
32
|
|
31
33
|
it 'should include passed in options' do
|
@@ -34,35 +36,38 @@ describe OAuth2::Strategy::WebServer do
|
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
37
|
-
%w(json formencoded).each do |mode|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
%w(json formencoded from_facebook).each do |mode|
|
40
|
+
[false, true].each do |parse_json|
|
41
|
+
describe "#get_access_token (#{mode}, parse_json=#{parse_json})" do
|
42
|
+
before do
|
43
|
+
@mode = mode
|
44
|
+
client.json=parse_json
|
45
|
+
@access = subject.get_access_token('sushi')
|
46
|
+
end
|
43
47
|
|
44
|
-
|
45
|
-
|
46
|
-
|
48
|
+
it 'returns AccessToken with same Client' do
|
49
|
+
@access.client.should == client
|
50
|
+
end
|
47
51
|
|
48
|
-
|
49
|
-
|
50
|
-
|
52
|
+
it 'returns AccessToken with #token' do
|
53
|
+
@access.token.should == 'salmon'
|
54
|
+
end
|
51
55
|
|
52
|
-
|
53
|
-
|
54
|
-
|
56
|
+
it 'returns AccessToken with #refresh_token' do
|
57
|
+
@access.refresh_token.should == 'trout'
|
58
|
+
end
|
55
59
|
|
56
|
-
|
57
|
-
|
58
|
-
|
60
|
+
it 'returns AccessToken with #expires_in' do
|
61
|
+
@access.expires_in.should == 600
|
62
|
+
end
|
59
63
|
|
60
|
-
|
61
|
-
|
62
|
-
|
64
|
+
it 'returns AccessToken with #expires_at' do
|
65
|
+
@access.expires_at.should be_kind_of(Time)
|
66
|
+
end
|
63
67
|
|
64
|
-
|
65
|
-
|
68
|
+
it 'returns AccessToken with params accessible via []' do
|
69
|
+
@access['extra_param'].should == 'steve'
|
70
|
+
end
|
66
71
|
end
|
67
72
|
end
|
68
73
|
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oauth2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 1
|
8
|
-
- 1
|
9
|
-
version: 0.1.1
|
4
|
+
prerelease:
|
5
|
+
version: 0.2.0
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Michael Bleigh
|
@@ -14,7 +10,7 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date: 2011-01
|
13
|
+
date: 2011-04-01 00:00:00 -07:00
|
18
14
|
default_executable:
|
19
15
|
dependencies:
|
20
16
|
- !ruby/object:Gem::Dependency
|
@@ -25,11 +21,7 @@ dependencies:
|
|
25
21
|
requirements:
|
26
22
|
- - ~>
|
27
23
|
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
- 0
|
30
|
-
- 5
|
31
|
-
- 0
|
32
|
-
version: 0.5.0
|
24
|
+
version: 0.6.0
|
33
25
|
type: :runtime
|
34
26
|
version_requirements: *id001
|
35
27
|
- !ruby/object:Gem::Dependency
|
@@ -40,10 +32,6 @@ dependencies:
|
|
40
32
|
requirements:
|
41
33
|
- - ~>
|
42
34
|
- !ruby/object:Gem::Version
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
- 0
|
46
|
-
- 4
|
47
35
|
version: 0.0.4
|
48
36
|
type: :runtime
|
49
37
|
version_requirements: *id002
|
@@ -55,11 +43,7 @@ dependencies:
|
|
55
43
|
requirements:
|
56
44
|
- - ~>
|
57
45
|
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
- 1
|
60
|
-
- 4
|
61
|
-
- 6
|
62
|
-
version: 1.4.6
|
46
|
+
version: "1.5"
|
63
47
|
type: :development
|
64
48
|
version_requirements: *id003
|
65
49
|
- !ruby/object:Gem::Dependency
|
@@ -70,24 +54,18 @@ dependencies:
|
|
70
54
|
requirements:
|
71
55
|
- - ~>
|
72
56
|
- !ruby/object:Gem::Version
|
73
|
-
segments:
|
74
|
-
- 0
|
75
|
-
- 8
|
76
57
|
version: "0.8"
|
77
58
|
type: :development
|
78
59
|
version_requirements: *id004
|
79
60
|
- !ruby/object:Gem::Dependency
|
80
|
-
name:
|
61
|
+
name: simplecov
|
81
62
|
prerelease: false
|
82
63
|
requirement: &id005 !ruby/object:Gem::Requirement
|
83
64
|
none: false
|
84
65
|
requirements:
|
85
66
|
- - ~>
|
86
67
|
- !ruby/object:Gem::Version
|
87
|
-
|
88
|
-
- 0
|
89
|
-
- 9
|
90
|
-
version: "0.9"
|
68
|
+
version: "0.4"
|
91
69
|
type: :development
|
92
70
|
version_requirements: *id005
|
93
71
|
- !ruby/object:Gem::Dependency
|
@@ -98,13 +76,20 @@ dependencies:
|
|
98
76
|
requirements:
|
99
77
|
- - ~>
|
100
78
|
- !ruby/object:Gem::Version
|
101
|
-
|
102
|
-
- 2
|
103
|
-
- 4
|
104
|
-
- 0
|
105
|
-
version: 2.4.0
|
79
|
+
version: "2.5"
|
106
80
|
type: :development
|
107
81
|
version_requirements: *id006
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: ZenTest
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
86
|
+
none: false
|
87
|
+
requirements:
|
88
|
+
- - ~>
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: "4.5"
|
91
|
+
type: :development
|
92
|
+
version_requirements: *id007
|
108
93
|
description: A Ruby wrapper for the OAuth 2.0 protocol built with a similar style to the original OAuth gem.
|
109
94
|
email: michael@intridea.com
|
110
95
|
executables: []
|
@@ -116,11 +101,11 @@ extra_rdoc_files:
|
|
116
101
|
- README.rdoc
|
117
102
|
files:
|
118
103
|
- .document
|
104
|
+
- .gemtest
|
119
105
|
- .gitignore
|
120
106
|
- .rspec
|
121
107
|
- CHANGELOG.rdoc
|
122
108
|
- Gemfile
|
123
|
-
- Gemfile.lock
|
124
109
|
- LICENSE
|
125
110
|
- README.rdoc
|
126
111
|
- Rakefile
|
@@ -137,7 +122,6 @@ files:
|
|
137
122
|
- spec/oauth2/strategy/base_spec.rb
|
138
123
|
- spec/oauth2/strategy/web_server_spec.rb
|
139
124
|
- spec/spec_helper.rb
|
140
|
-
- specs.watchr
|
141
125
|
has_rdoc: true
|
142
126
|
homepage: http://github.com/intridea/oauth2
|
143
127
|
licenses: []
|
@@ -152,23 +136,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
152
136
|
requirements:
|
153
137
|
- - ">="
|
154
138
|
- !ruby/object:Gem::Version
|
155
|
-
segments:
|
156
|
-
- 0
|
157
139
|
version: "0"
|
158
140
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
141
|
none: false
|
160
142
|
requirements:
|
161
143
|
- - ">="
|
162
144
|
- !ruby/object:Gem::Version
|
163
|
-
segments:
|
164
|
-
- 1
|
165
|
-
- 3
|
166
|
-
- 6
|
167
145
|
version: 1.3.6
|
168
146
|
requirements: []
|
169
147
|
|
170
|
-
rubyforge_project:
|
171
|
-
rubygems_version: 1.
|
148
|
+
rubyforge_project:
|
149
|
+
rubygems_version: 1.6.2
|
172
150
|
signing_key:
|
173
151
|
specification_version: 3
|
174
152
|
summary: A Ruby wrapper for the OAuth 2.0 protocol.
|
data/Gemfile.lock
DELETED
@@ -1,42 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
oauth2 (0.1.1)
|
5
|
-
faraday (~> 0.5.0)
|
6
|
-
multi_json (~> 0.0.4)
|
7
|
-
|
8
|
-
GEM
|
9
|
-
remote: http://rubygems.org/
|
10
|
-
specs:
|
11
|
-
addressable (2.1.2)
|
12
|
-
diff-lcs (1.1.2)
|
13
|
-
faraday (0.5.0)
|
14
|
-
addressable (~> 2.1.1)
|
15
|
-
multipart-post (~> 1.0.1)
|
16
|
-
rack (~> 1.2.1)
|
17
|
-
json_pure (1.4.6)
|
18
|
-
multi_json (0.0.4)
|
19
|
-
multipart-post (1.0.1)
|
20
|
-
rack (1.2.1)
|
21
|
-
rake (0.8.7)
|
22
|
-
rcov (0.9.9)
|
23
|
-
rspec (2.4.0)
|
24
|
-
rspec-core (~> 2.4.0)
|
25
|
-
rspec-expectations (~> 2.4.0)
|
26
|
-
rspec-mocks (~> 2.4.0)
|
27
|
-
rspec-core (2.4.0)
|
28
|
-
rspec-expectations (2.4.0)
|
29
|
-
diff-lcs (~> 1.1.2)
|
30
|
-
rspec-mocks (2.4.0)
|
31
|
-
|
32
|
-
PLATFORMS
|
33
|
-
ruby
|
34
|
-
|
35
|
-
DEPENDENCIES
|
36
|
-
faraday (~> 0.5.0)
|
37
|
-
json_pure (~> 1.4.6)
|
38
|
-
multi_json (~> 0.0.4)
|
39
|
-
oauth2!
|
40
|
-
rake (~> 0.8)
|
41
|
-
rcov (~> 0.9)
|
42
|
-
rspec (~> 2.4.0)
|
data/specs.watchr
DELETED
@@ -1,61 +0,0 @@
|
|
1
|
-
# Run me with:
|
2
|
-
#
|
3
|
-
# $ watchr specs.watchr
|
4
|
-
|
5
|
-
# --------------------------------------------------
|
6
|
-
# Convenience Methods
|
7
|
-
# --------------------------------------------------
|
8
|
-
def all_test_files
|
9
|
-
Dir['spec/**/*_spec.rb']
|
10
|
-
end
|
11
|
-
|
12
|
-
def run_test_matching(thing_to_match)
|
13
|
-
matches = all_test_files.grep(/#{thing_to_match}/i)
|
14
|
-
if matches.empty?
|
15
|
-
puts "Sorry, thanks for playing, but there were no matches for #{thing_to_match}"
|
16
|
-
else
|
17
|
-
run matches.join(' ')
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def run(files_to_run)
|
22
|
-
puts("Running: #{files_to_run}")
|
23
|
-
system("clear;spec -cfs --backtrace #{files_to_run}")
|
24
|
-
no_int_for_you
|
25
|
-
end
|
26
|
-
|
27
|
-
def run_all_tests
|
28
|
-
# system("clear;rake spec")
|
29
|
-
run(all_test_files.join(' '))
|
30
|
-
end
|
31
|
-
|
32
|
-
# --------------------------------------------------
|
33
|
-
# Watchr Rules
|
34
|
-
# --------------------------------------------------
|
35
|
-
watch('^spec/(.*)_spec\.rb') { |m| run_test_matching(m[1]) }
|
36
|
-
watch('^lib/(.*)\.rb') { |m| run_test_matching(m[1]) }
|
37
|
-
watch('^sites/(.*)\.rb') { |m| run_test_matching(m[1]) }
|
38
|
-
watch('^spec/spec_helper\.rb') { run_all_tests }
|
39
|
-
watch('^spec/support/.*\.rb') { run_all_tests }
|
40
|
-
|
41
|
-
# --------------------------------------------------
|
42
|
-
# Signal Handling
|
43
|
-
# --------------------------------------------------
|
44
|
-
|
45
|
-
def no_int_for_you
|
46
|
-
@sent_an_int = nil
|
47
|
-
end
|
48
|
-
|
49
|
-
Signal.trap 'INT' do
|
50
|
-
if @sent_an_int then
|
51
|
-
puts " A second INT? Ok, I get the message. Shutting down now."
|
52
|
-
exit
|
53
|
-
else
|
54
|
-
puts " Did you just send me an INT? Ugh. I'll quit for real if you do it again."
|
55
|
-
@sent_an_int = true
|
56
|
-
Kernel.sleep 1.5
|
57
|
-
run_all_tests
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
# vim:ft=ruby
|