rubycas-client 2.3.8 → 2.3.9.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/.simplecov +7 -0
- data/.travis.yml +2 -0
- data/Gemfile +18 -5
- data/Gemfile.lock +46 -13
- data/Guardfile +11 -0
- data/History.txt +22 -0
- data/README.rdoc +2 -2
- data/Rakefile +0 -12
- data/VERSION +1 -1
- data/lib/casclient.rb +1 -1
- data/lib/casclient/client.rb +75 -70
- data/lib/casclient/frameworks/rails/cas_proxy_callback_controller.rb +6 -2
- data/lib/casclient/frameworks/rails/filter.rb +4 -1
- data/lib/casclient/responses.rb +64 -57
- data/lib/casclient/tickets/storage.rb +29 -20
- data/lib/casclient/tickets/storage/active_record_ticket_store.rb +11 -6
- data/rubycas-client.gemspec +50 -17
- data/spec/.gitignore +1 -0
- data/spec/casclient/client_spec.rb +93 -0
- data/spec/casclient/frameworks/rails/filter_spec.rb +27 -36
- data/spec/casclient/tickets/storage/active_record_ticket_store_spec.rb +6 -0
- data/spec/casclient/tickets/storage_spec.rb +44 -0
- data/spec/casclient/validation_response_spec.rb +97 -3
- data/spec/database.yml +7 -0
- data/spec/spec_helper.rb +31 -8
- data/spec/support/action_controller_helpers.rb +30 -0
- data/spec/support/active_record_helpers.rb +48 -0
- data/spec/support/local_hash_ticket_store.rb +48 -0
- data/spec/support/local_hash_ticket_store_spec.rb +5 -0
- data/spec/support/shared_examples_for_ticket_stores.rb +137 -0
- metadata +119 -30
data/spec/database.yml
ADDED
data/spec/spec_helper.rb
CHANGED
@@ -1,16 +1,39 @@
|
|
1
1
|
require 'bundler'
|
2
|
-
|
3
|
-
|
2
|
+
Bundler.setup(:default, :development)
|
3
|
+
require 'simplecov' unless ENV['TRAVIS']
|
4
4
|
Bundler.require
|
5
5
|
|
6
|
+
require 'rubycas-client'
|
7
|
+
|
8
|
+
SPEC_TMP_DIR="spec/tmp"
|
9
|
+
|
10
|
+
Dir["./spec/support/**/*.rb"].each do |f|
|
11
|
+
require f.gsub('.rb','') unless f.end_with? '_spec.rb'
|
12
|
+
end
|
13
|
+
|
14
|
+
require 'database_cleaner'
|
15
|
+
|
6
16
|
RSpec.configure do |config|
|
7
|
-
#config.include Rack::Test::Methods
|
8
|
-
#config.include Webrat::Methods
|
9
|
-
#config.include Webrat::Matchers
|
10
|
-
#config.include TestHelpers
|
11
|
-
#config.include Helpers
|
12
17
|
config.mock_with :rspec
|
13
18
|
config.mock_framework = :rspec
|
19
|
+
config.include ActionControllerHelpers
|
20
|
+
|
21
|
+
config.before(:suite) do
|
22
|
+
ActiveRecordHelpers.setup_active_record
|
23
|
+
DatabaseCleaner.strategy = :transaction
|
24
|
+
DatabaseCleaner.clean_with(:truncation)
|
25
|
+
end
|
26
|
+
|
27
|
+
config.after(:suite) do
|
28
|
+
ActiveRecordHelpers.teardown_active_record
|
29
|
+
end
|
30
|
+
|
31
|
+
config.before(:each) do
|
32
|
+
DatabaseCleaner.start
|
33
|
+
end
|
34
|
+
|
35
|
+
config.after(:each) do
|
36
|
+
DatabaseCleaner.clean
|
37
|
+
end
|
14
38
|
end
|
15
39
|
|
16
|
-
require 'rubycas-client'
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'action_pack'
|
2
|
+
|
3
|
+
module ActionControllerHelpers
|
4
|
+
|
5
|
+
def mock_controller_with_session(request = nil, session={})
|
6
|
+
|
7
|
+
query_parameters = {:ticket => "bogusticket", :renew => false}
|
8
|
+
parameters = query_parameters.dup
|
9
|
+
|
10
|
+
#TODO this really need to be replaced with a "real" rails controller
|
11
|
+
request ||= mock_post_request
|
12
|
+
request.stub(:query_parameters) {query_parameters}
|
13
|
+
request.stub(:path_parameters) {{}}
|
14
|
+
controller = double("Controller")
|
15
|
+
controller.stub(:session) {session}
|
16
|
+
controller.stub(:request) {request}
|
17
|
+
controller.stub(:url_for) {"bogusurl"}
|
18
|
+
controller.stub(:query_parameters) {query_parameters}
|
19
|
+
controller.stub(:path_parameters) {{}}
|
20
|
+
controller.stub(:parameters) {parameters}
|
21
|
+
controller.stub(:params) {parameters}
|
22
|
+
controller
|
23
|
+
end
|
24
|
+
|
25
|
+
def mock_post_request
|
26
|
+
mock_request = ActionController::Request.new({})
|
27
|
+
mock_request.stub(:post?) {true}
|
28
|
+
mock_request
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
module ActiveRecordHelpers
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def setup_active_record
|
7
|
+
config_file = File.open("spec/database.yml")
|
8
|
+
db_config = HashWithIndifferentAccess.new(YAML.load(config_file))
|
9
|
+
ActiveRecord::Base.establish_connection(db_config[(RUBY_PLATFORM == "java") ? :testjruby : :test])
|
10
|
+
ActiveRecord::Migration.verbose = false
|
11
|
+
RubyCasTables.migrate(:up)
|
12
|
+
end
|
13
|
+
|
14
|
+
def teardown_active_record
|
15
|
+
ActiveRecord::Migration.verbose = false
|
16
|
+
RubyCasTables.migrate(:down)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class RubyCasTables < ActiveRecord::Migration
|
21
|
+
def self.up
|
22
|
+
#default rails sessions table
|
23
|
+
create_table :sessions do |t|
|
24
|
+
t.string :session_id, :null => false
|
25
|
+
t.text :data
|
26
|
+
t.timestamps
|
27
|
+
end
|
28
|
+
add_index :sessions, :session_id
|
29
|
+
add_index :sessions, :updated_at
|
30
|
+
|
31
|
+
#column added to sessions table by rubycas-client
|
32
|
+
add_column :sessions, :service_ticket, :string
|
33
|
+
add_index :sessions, :service_ticket
|
34
|
+
|
35
|
+
# pgtious table
|
36
|
+
create_table :cas_pgtious do |t|
|
37
|
+
t.string :pgt_iou, :null => false
|
38
|
+
t.string :pgt_id, :null => false
|
39
|
+
t.timestamps
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.down
|
44
|
+
drop_table :sessions
|
45
|
+
drop_table :cas_pgtious
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
require 'casclient/tickets/storage'
|
2
|
+
|
3
|
+
class LocalHashTicketStore < CASClient::Tickets::Storage::AbstractTicketStore
|
4
|
+
|
5
|
+
attr_accessor :st_hash
|
6
|
+
attr_accessor :pgt_hash
|
7
|
+
|
8
|
+
def store_service_session_lookup(st, controller)
|
9
|
+
raise CASClient::CASException, "No service_ticket specified." if st.nil?
|
10
|
+
raise CASClient::CASException, "No controller specified." if controller.nil?
|
11
|
+
session_id = session_id_from_controller(controller)
|
12
|
+
st = st.ticket if st.kind_of? CASClient::ServiceTicket
|
13
|
+
st_hash[st] = session_id
|
14
|
+
end
|
15
|
+
|
16
|
+
def read_service_session_lookup(st)
|
17
|
+
raise CASClient::CASException, "No service_ticket specified." if st.nil?
|
18
|
+
st = st.ticket if st.kind_of? CASClient::ServiceTicket
|
19
|
+
st_hash[st]
|
20
|
+
end
|
21
|
+
|
22
|
+
def cleanup_service_session_lookup(st)
|
23
|
+
raise CASClient::CASException, "No service_ticket specified." if st.nil?
|
24
|
+
st = st.ticket if st.kind_of? CASClient::ServiceTicket
|
25
|
+
st_hash.delete(st)
|
26
|
+
end
|
27
|
+
|
28
|
+
def save_pgt_iou(pgt_iou, pgt)
|
29
|
+
raise CASClient::CASException.new("Invalid pgt_iou") if pgt_iou.nil?
|
30
|
+
raise CASClient::CASException.new("Invalid pgt") if pgt.nil?
|
31
|
+
pgt_hash[pgt_iou] = pgt
|
32
|
+
end
|
33
|
+
|
34
|
+
def retrieve_pgt(pgt_iou)
|
35
|
+
pgt = pgt_hash.delete(pgt_iou)
|
36
|
+
raise CASClient::CASException.new("Invalid pgt_iou") if pgt.nil?
|
37
|
+
pgt
|
38
|
+
end
|
39
|
+
|
40
|
+
def pgt_hash
|
41
|
+
@pgt_hash ||= {}
|
42
|
+
end
|
43
|
+
|
44
|
+
def st_hash
|
45
|
+
@pgt_hash ||= {}
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
shared_examples "a ticket store interacting with sessions" do
|
2
|
+
describe "#store_service_session_lookup" do
|
3
|
+
it "should raise CASException if the Service Ticket is nil" do
|
4
|
+
expect { subject.store_service_session_lookup(nil, "controller") }.to raise_exception(CASClient::CASException, /No service_ticket specified/)
|
5
|
+
end
|
6
|
+
it "should raise CASException if the controller is nil" do
|
7
|
+
expect { subject.store_service_session_lookup("service_ticket", nil) }.to raise_exception(CASClient::CASException, /No controller specified/)
|
8
|
+
end
|
9
|
+
it "should store the ticket without any errors" do
|
10
|
+
expect { subject.store_service_session_lookup(service_ticket, mock_controller_with_session(nil, session)) }.to_not raise_exception
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe "#get_session_for_service_ticket" do
|
15
|
+
context "the service ticket is nil" do
|
16
|
+
it "should raise CASException" do
|
17
|
+
expect { subject.get_session_for_service_ticket(nil) }.to raise_exception(CASClient::CASException, /No service_ticket specified/)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
context "the service ticket is associated with a session" do
|
21
|
+
before do
|
22
|
+
subject.store_service_session_lookup(service_ticket, mock_controller_with_session(nil, session))
|
23
|
+
session.save!
|
24
|
+
end
|
25
|
+
it "should return the session_id and session for the given service ticket" do
|
26
|
+
result_session_id, result_session = subject.get_session_for_service_ticket(service_ticket)
|
27
|
+
result_session_id.should == session.session_id
|
28
|
+
result_session.session_id.should == session.session_id
|
29
|
+
result_session.data.should == session.data
|
30
|
+
end
|
31
|
+
end
|
32
|
+
context "the service ticket is not associated with a session" do
|
33
|
+
it "should return nils if there is no session for the given service ticket" do
|
34
|
+
subject.get_session_for_service_ticket(service_ticket).should == [nil, nil]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "#process_single_sign_out" do
|
40
|
+
context "the service ticket is nil" do
|
41
|
+
it "should raise CASException" do
|
42
|
+
expect { subject.process_single_sign_out(nil) }.to raise_exception(CASClient::CASException, /No service_ticket specified/)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
context "the service ticket is associated with a session" do
|
46
|
+
before do
|
47
|
+
subject.store_service_session_lookup(service_ticket, mock_controller_with_session(nil, session))
|
48
|
+
session.save!
|
49
|
+
subject.process_single_sign_out(service_ticket)
|
50
|
+
end
|
51
|
+
context "the session" do
|
52
|
+
it "should be destroyed" do
|
53
|
+
ActiveRecord::SessionStore.session_class.find_by_session_id(session.session_id).should be_nil
|
54
|
+
end
|
55
|
+
end
|
56
|
+
it "should destroy session for the given service ticket" do
|
57
|
+
subject.process_single_sign_out(service_ticket)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
context "the service ticket is not associated with a session" do
|
61
|
+
it "should run without error if there is no session for the given service ticket" do
|
62
|
+
expect { subject.process_single_sign_out(service_ticket) }.to_not raise_error
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "#cleanup_service_session_lookup" do
|
68
|
+
context "the service ticket is nil" do
|
69
|
+
it "should raise CASException" do
|
70
|
+
expect { subject.cleanup_service_session_lookup(nil) }.to raise_exception(CASClient::CASException, /No service_ticket specified/)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
it "should run without error" do
|
74
|
+
expect { subject.cleanup_service_session_lookup(service_ticket) }.to_not raise_exception
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
shared_examples "a ticket store" do
|
80
|
+
let(:ticket_store) { described_class.new }
|
81
|
+
let(:service_url) { "https://www.example.com/cas" }
|
82
|
+
let(:session) do
|
83
|
+
ActiveRecord::SessionStore::Session.create!(:session_id => "session#{rand(1000)}", :data => {})
|
84
|
+
end
|
85
|
+
subject { ticket_store }
|
86
|
+
|
87
|
+
context "when dealing with sessions, Service Tickets, and Single Sign Out" do
|
88
|
+
context "and the service ticket is a String" do
|
89
|
+
it_behaves_like "a ticket store interacting with sessions" do
|
90
|
+
let(:service_ticket) { "ST-ABC#{rand(1000)}" }
|
91
|
+
end
|
92
|
+
end
|
93
|
+
context "and the service ticket is a ServiceTicket" do
|
94
|
+
it_behaves_like "a ticket store interacting with sessions" do
|
95
|
+
let(:service_ticket) { CASClient::ServiceTicket.new("ST-ABC#{rand(1000)}", service_url) }
|
96
|
+
end
|
97
|
+
end
|
98
|
+
context "and the service ticket is a ProxyTicket" do
|
99
|
+
it_behaves_like "a ticket store interacting with sessions" do
|
100
|
+
let(:service_ticket) { CASClient::ProxyTicket.new("ST-ABC#{rand(1000)}", service_url) }
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context "when dealing with Proxy Granting Tickets and their IOUs" do
|
106
|
+
let(:pgt) { "my_pgt_#{rand(1000)}" }
|
107
|
+
let(:pgt_iou) { "my_pgt_iou_#{rand(1000)}" }
|
108
|
+
|
109
|
+
describe "#save_pgt_iou" do
|
110
|
+
it "should raise CASClient::CASException if the pgt_iou is nil" do
|
111
|
+
expect { subject.save_pgt_iou(nil, pgt) }.to raise_exception(CASClient::CASException, /Invalid pgt_iou/)
|
112
|
+
end
|
113
|
+
it "should raise CASClient::CASException if the pgt is nil" do
|
114
|
+
expect { subject.save_pgt_iou(pgt_iou, nil) }.to raise_exception(CASClient::CASException, /Invalid pgt/)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
describe "#retrieve_pgt" do
|
119
|
+
before do
|
120
|
+
subject.save_pgt_iou(pgt_iou, pgt)
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should return the stored pgt" do
|
124
|
+
subject.retrieve_pgt(pgt_iou).should == pgt
|
125
|
+
end
|
126
|
+
|
127
|
+
it "should raise CASClient::CASException if the pgt_iou isn't in the store" do
|
128
|
+
expect { subject.retrieve_pgt("not_my"+pgt_iou) }.to raise_exception(CASClient::CASException, /Invalid pgt_iou/)
|
129
|
+
end
|
130
|
+
|
131
|
+
it "should not return the stored pgt a second time" do
|
132
|
+
subject.retrieve_pgt(pgt_iou).should == pgt
|
133
|
+
expect { subject.retrieve_pgt(pgt_iou) }.to raise_exception(CASClient::CASException, /Invalid pgt_iou/)
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubycas-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.3.
|
5
|
-
prerelease:
|
4
|
+
version: 2.3.9.rc1
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Matt Zukowski
|
@@ -11,11 +11,11 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2012-03-24 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
18
|
-
requirement: &
|
18
|
+
requirement: &70109785006580 !ruby/object:Gem::Requirement
|
19
19
|
none: false
|
20
20
|
requirements:
|
21
21
|
- - ! '>='
|
@@ -23,32 +23,32 @@ dependencies:
|
|
23
23
|
version: '0'
|
24
24
|
type: :runtime
|
25
25
|
prerelease: false
|
26
|
-
version_requirements: *
|
26
|
+
version_requirements: *70109785006580
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: json
|
29
|
-
requirement: &
|
29
|
+
requirement: &70109785005920 !ruby/object:Gem::Requirement
|
30
30
|
none: false
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ! '>='
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
34
|
+
version: '0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
|
-
version_requirements: *
|
37
|
+
version_requirements: *70109785005920
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: rspec
|
40
|
-
requirement: &
|
40
|
+
requirement: &70109785005200 !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
45
|
+
version: '0'
|
46
46
|
type: :development
|
47
47
|
prerelease: false
|
48
|
-
version_requirements: *
|
48
|
+
version_requirements: *70109785005200
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
50
|
name: bundler
|
51
|
-
requirement: &
|
51
|
+
requirement: &70109785004560 !ruby/object:Gem::Requirement
|
52
52
|
none: false
|
53
53
|
requirements:
|
54
54
|
- - ! '>='
|
@@ -56,21 +56,32 @@ dependencies:
|
|
56
56
|
version: '1.0'
|
57
57
|
type: :development
|
58
58
|
prerelease: false
|
59
|
-
version_requirements: *
|
59
|
+
version_requirements: *70109785004560
|
60
60
|
- !ruby/object:Gem::Dependency
|
61
61
|
name: jeweler
|
62
|
-
requirement: &
|
62
|
+
requirement: &70109785003840 !ruby/object:Gem::Requirement
|
63
63
|
none: false
|
64
64
|
requirements:
|
65
|
-
- -
|
65
|
+
- - ! '>='
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
67
|
+
version: '0'
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
|
-
version_requirements: *
|
70
|
+
version_requirements: *70109785003840
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
72
|
name: actionpack
|
73
|
-
requirement: &
|
73
|
+
requirement: &70109785002580 !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
type: :development
|
80
|
+
prerelease: false
|
81
|
+
version_requirements: *70109785002580
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: activerecord
|
84
|
+
requirement: &70109785001820 !ruby/object:Gem::Requirement
|
74
85
|
none: false
|
75
86
|
requirements:
|
76
87
|
- - ! '>='
|
@@ -78,10 +89,76 @@ dependencies:
|
|
78
89
|
version: '0'
|
79
90
|
type: :development
|
80
91
|
prerelease: false
|
81
|
-
version_requirements: *
|
92
|
+
version_requirements: *70109785001820
|
82
93
|
- !ruby/object:Gem::Dependency
|
83
94
|
name: rake
|
84
|
-
requirement: &
|
95
|
+
requirement: &70109785001120 !ruby/object:Gem::Requirement
|
96
|
+
none: false
|
97
|
+
requirements:
|
98
|
+
- - ! '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
type: :development
|
102
|
+
prerelease: false
|
103
|
+
version_requirements: *70109785001120
|
104
|
+
- !ruby/object:Gem::Dependency
|
105
|
+
name: simplecov
|
106
|
+
requirement: &70109785000440 !ruby/object:Gem::Requirement
|
107
|
+
none: false
|
108
|
+
requirements:
|
109
|
+
- - ! '>='
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
type: :development
|
113
|
+
prerelease: false
|
114
|
+
version_requirements: *70109785000440
|
115
|
+
- !ruby/object:Gem::Dependency
|
116
|
+
name: guard
|
117
|
+
requirement: &70109784999740 !ruby/object:Gem::Requirement
|
118
|
+
none: false
|
119
|
+
requirements:
|
120
|
+
- - ! '>='
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
123
|
+
type: :development
|
124
|
+
prerelease: false
|
125
|
+
version_requirements: *70109784999740
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: guard-rspec
|
128
|
+
requirement: &70109784998920 !ruby/object:Gem::Requirement
|
129
|
+
none: false
|
130
|
+
requirements:
|
131
|
+
- - ! '>='
|
132
|
+
- !ruby/object:Gem::Version
|
133
|
+
version: '0'
|
134
|
+
type: :development
|
135
|
+
prerelease: false
|
136
|
+
version_requirements: *70109784998920
|
137
|
+
- !ruby/object:Gem::Dependency
|
138
|
+
name: database_cleaner
|
139
|
+
requirement: &70109784995060 !ruby/object:Gem::Requirement
|
140
|
+
none: false
|
141
|
+
requirements:
|
142
|
+
- - ! '>='
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '0'
|
145
|
+
type: :development
|
146
|
+
prerelease: false
|
147
|
+
version_requirements: *70109784995060
|
148
|
+
- !ruby/object:Gem::Dependency
|
149
|
+
name: sqlite3
|
150
|
+
requirement: &70109784992260 !ruby/object:Gem::Requirement
|
151
|
+
none: false
|
152
|
+
requirements:
|
153
|
+
- - ! '>='
|
154
|
+
- !ruby/object:Gem::Version
|
155
|
+
version: '0'
|
156
|
+
type: :development
|
157
|
+
prerelease: false
|
158
|
+
version_requirements: *70109784992260
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: jruby-openssl
|
161
|
+
requirement: &70109784990620 !ruby/object:Gem::Requirement
|
85
162
|
none: false
|
86
163
|
requirements:
|
87
164
|
- - ! '>='
|
@@ -89,10 +166,10 @@ dependencies:
|
|
89
166
|
version: '0'
|
90
167
|
type: :development
|
91
168
|
prerelease: false
|
92
|
-
version_requirements: *
|
169
|
+
version_requirements: *70109784990620
|
93
170
|
- !ruby/object:Gem::Dependency
|
94
|
-
name:
|
95
|
-
requirement: &
|
171
|
+
name: activerecord-jdbcsqlite3-adapter
|
172
|
+
requirement: &70109784753060 !ruby/object:Gem::Requirement
|
96
173
|
none: false
|
97
174
|
requirements:
|
98
175
|
- - ! '>='
|
@@ -100,7 +177,7 @@ dependencies:
|
|
100
177
|
version: '0'
|
101
178
|
type: :development
|
102
179
|
prerelease: false
|
103
|
-
version_requirements: *
|
180
|
+
version_requirements: *70109784753060
|
104
181
|
description:
|
105
182
|
email:
|
106
183
|
executables: []
|
@@ -110,10 +187,12 @@ extra_rdoc_files:
|
|
110
187
|
- README.rdoc
|
111
188
|
files:
|
112
189
|
- .rspec
|
190
|
+
- .simplecov
|
113
191
|
- .travis.yml
|
114
192
|
- CHANGELOG.txt
|
115
193
|
- Gemfile
|
116
194
|
- Gemfile.lock
|
195
|
+
- Guardfile
|
117
196
|
- History.txt
|
118
197
|
- LICENSE.txt
|
119
198
|
- README.rdoc
|
@@ -157,9 +236,19 @@ files:
|
|
157
236
|
- rails_generators/active_record_ticket_store/templates/README
|
158
237
|
- rails_generators/active_record_ticket_store/templates/migration.rb
|
159
238
|
- rubycas-client.gemspec
|
239
|
+
- spec/.gitignore
|
240
|
+
- spec/casclient/client_spec.rb
|
160
241
|
- spec/casclient/frameworks/rails/filter_spec.rb
|
242
|
+
- spec/casclient/tickets/storage/active_record_ticket_store_spec.rb
|
243
|
+
- spec/casclient/tickets/storage_spec.rb
|
161
244
|
- spec/casclient/validation_response_spec.rb
|
245
|
+
- spec/database.yml
|
162
246
|
- spec/spec_helper.rb
|
247
|
+
- spec/support/action_controller_helpers.rb
|
248
|
+
- spec/support/active_record_helpers.rb
|
249
|
+
- spec/support/local_hash_ticket_store.rb
|
250
|
+
- spec/support/local_hash_ticket_store_spec.rb
|
251
|
+
- spec/support/shared_examples_for_ticket_stores.rb
|
163
252
|
homepage: http://github.com/rubycas/rubycas-client
|
164
253
|
licenses:
|
165
254
|
- MIT
|
@@ -177,16 +266,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
177
266
|
version: '0'
|
178
267
|
segments:
|
179
268
|
- 0
|
180
|
-
hash: -
|
269
|
+
hash: -1272570906276872327
|
181
270
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
182
271
|
none: false
|
183
272
|
requirements:
|
184
|
-
- - ! '
|
273
|
+
- - ! '>'
|
185
274
|
- !ruby/object:Gem::Version
|
186
|
-
version:
|
275
|
+
version: 1.3.1
|
187
276
|
requirements: []
|
188
277
|
rubyforge_project:
|
189
|
-
rubygems_version: 1.8.
|
278
|
+
rubygems_version: 1.8.11
|
190
279
|
signing_key:
|
191
280
|
specification_version: 3
|
192
281
|
summary: Client library for the Central Authentication Service (CAS) protocol.
|