vibes-rubycas-client 2.3.0.alpha6 → 2.3.0.alpha7

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -11,6 +11,8 @@ group :development do
11
11
  gem "bundler", "~> 1.0.0"
12
12
  gem "jeweler", "~> 1.6.2"
13
13
  gem "rcov"
14
+ gem "actionpack", "~> 2.3.11"
14
15
  end
15
16
 
16
17
  gem "activesupport", "~> 2.3.11"
18
+
@@ -1,13 +1,17 @@
1
1
  GEM
2
2
  remote: http://rubygems.org/
3
3
  specs:
4
- activesupport (2.3.12)
4
+ actionpack (2.3.11)
5
+ activesupport (= 2.3.11)
6
+ rack (~> 1.1.0)
7
+ activesupport (2.3.11)
5
8
  git (1.2.5)
6
9
  jeweler (1.6.2)
7
10
  bundler (~> 1.0)
8
11
  git (>= 1.2.5)
9
12
  rake
10
- rake (0.9.2)
13
+ rack (1.1.2)
14
+ rake (0.8.7)
11
15
  rcov (0.9.9)
12
16
  riot (0.12.4)
13
17
  rr
@@ -17,6 +21,7 @@ PLATFORMS
17
21
  ruby
18
22
 
19
23
  DEPENDENCIES
24
+ actionpack (~> 2.3.11)
20
25
  activesupport (~> 2.3.11)
21
26
  bundler (~> 1.0.0)
22
27
  jeweler (~> 1.6.2)
@@ -1,8 +1,8 @@
1
1
  = RubyCAS-Client
2
2
 
3
- Authors:: Matt Campbell and Rahul Joshi, forked from original project by Matt Zukowski <matt AT roughest DOT net>; inspired by code by Ola Bini <ola.bini AT ki DOT se> and Matt Walker <mwalker AT tamu DOT edu>
3
+ Authors:: Matt Campbell, Rich Yarger and Rahul Joshi, forked from original project by Matt Zukowski <matt AT roughest DOT net>; inspired by code by Ola Bini <ola.bini AT ki DOT se> and Matt Walker <mwalker AT tamu DOT edu>
4
4
  Copyright:: Portions contributed by Matt Zukowski are copyright (c) 2009 Urbacon Ltd.
5
- Protions contributed by Matt Campbell and Rahul Joshi are copyright (c) 2011 Vibes Media LLC.
5
+ Portions contributed by Matt Campbell, Rich Yarger and Rahul Joshi are copyright (c) 2011 Vibes Media LLC.
6
6
  Other portions are copyright of their respective authors.
7
7
  License:: MIT License
8
8
  Websites:: http://github.com/vibes/rubycas-client
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.3.0.alpha6
1
+ 2.3.0.alpha7
@@ -98,11 +98,17 @@ module CASClient
98
98
  h = uri.query ? query_to_hash(uri.query) : {}
99
99
  h['service'] = st.service
100
100
  h['ticket'] = st.ticket
101
- h['renew'] = 1 if st.renew
101
+ h['renew'] = "1" if st.renew
102
102
  h['pgtUrl'] = proxy_callback_url if proxy_callback_url
103
103
  uri.query = hash_to_query(h)
104
104
 
105
- st.response = request_cas_response(uri, ValidationResponse)
105
+ response = request_cas_response(uri, ValidationResponse)
106
+ st.user = response.user
107
+ st.extra_attributes = response.extra_attributes
108
+ st.pgt_iou = response.pgt_iou
109
+ st.success = response.is_success?
110
+ st.failure_code = response.failure_code
111
+ st.failure_message = response.failure_message
106
112
 
107
113
  return st
108
114
  end
@@ -183,10 +189,15 @@ module CASClient
183
189
  h['targetService'] = target_service
184
190
  uri.query = hash_to_query(h)
185
191
 
186
- pr = request_cas_response(uri, ProxyResponse)
192
+ response = request_cas_response(uri, ProxyResponse)
187
193
 
188
- pt = ProxyTicket.new(pr.proxy_ticket, target_service)
189
- pt.response = pr
194
+ pt = ProxyTicket.new(response.proxy_ticket, target_service)
195
+ pt.user = response.user
196
+ pt.extra_attributes = response.extra_attributes
197
+ pt.pgt_iou = response.pgt_iou
198
+ pt.success = response.is_success?
199
+ pt.failure_code = response.failure_code
200
+ pt.failure_message = response.failure_message
190
201
 
191
202
  return pt
192
203
  end
@@ -23,6 +23,7 @@ module CASClient
23
23
  end
24
24
 
25
25
  last_st = controller.session[:cas_last_valid_ticket]
26
+ last_st_service = controller.session[:cas_last_valid_ticket_service]
26
27
 
27
28
  if single_sign_out(controller)
28
29
  controller.send(:render, :text => "CAS Single-Sign-Out request intercepted.")
@@ -31,17 +32,14 @@ module CASClient
31
32
 
32
33
  st = read_ticket(controller)
33
34
 
34
- is_new_session = true
35
-
36
35
  if st && last_st &&
37
- last_st.ticket == st.ticket &&
38
- last_st.service == st.service
36
+ last_st == st.ticket &&
37
+ last_st_service == st.service
39
38
  # warn() rather than info() because we really shouldn't be re-validating the same ticket.
40
39
  # The only situation where this is acceptable is if the user manually does a refresh and
41
40
  # the same ticket happens to be in the URL.
42
41
  log.warn("Re-using previously validated ticket since the ticket id and service are the same.")
43
- st = last_st
44
- is_new_session = false
42
+ return true
45
43
  elsif last_st &&
46
44
  !config[:authenticate_on_every_request] &&
47
45
  controller.session[client.username_session_key]
@@ -53,43 +51,42 @@ module CASClient
53
51
  # the :authenticate_on_every_request config option to true. However, this is not desirable since
54
52
  # it will almost certainly break POST request, AJAX calls, etc.
55
53
  log.debug "Existing local CAS session detected for #{controller.session[client.username_session_key].inspect}. "+
56
- "Previous ticket #{last_st.ticket.inspect} will be re-used."
57
- st = last_st
58
- is_new_session = false
54
+ "Previous ticket #{last_st.inspect} will be re-used."
55
+ return true
59
56
  end
60
57
 
61
58
  if st
62
59
  client.validate_service_ticket(st) unless st.has_been_validated?
63
- vr = st.response
64
60
 
65
61
  if st.is_valid?
66
- if is_new_session
67
- log.info("Ticket #{st.ticket.inspect} for service #{st.service.inspect} belonging to user #{vr.user.inspect} is VALID.")
68
- controller.session[client.username_session_key] = vr.user.dup
69
- controller.session[client.extra_attributes_session_key] = HashWithIndifferentAccess.new(vr.extra_attributes) if vr.extra_attributes
62
+ #if is_new_session
63
+ log.info("Ticket #{st.ticket.inspect} for service #{st.service.inspect} belonging to user #{st.user.inspect} is VALID.")
64
+ controller.session[client.username_session_key] = st.user.dup
65
+ controller.session[client.extra_attributes_session_key] = HashWithIndifferentAccess.new(st.extra_attributes) if st.extra_attributes
70
66
 
71
- if vr.extra_attributes
72
- log.debug("Extra user attributes provided along with ticket #{st.ticket.inspect}: #{vr.extra_attributes.inspect}.")
67
+ if st.extra_attributes
68
+ log.debug("Extra user attributes provided along with ticket #{st.ticket.inspect}: #{st.extra_attributes.inspect}.")
73
69
  end
74
70
 
75
71
  # RubyCAS-Client 1.x used :casfilteruser as it's username session key,
76
72
  # so we need to set this here to ensure compatibility with configurations
77
73
  # built around the old client.
78
- controller.session[:casfilteruser] = vr.user
74
+ controller.session[:casfilteruser] = st.user
79
75
 
80
76
  if config[:enable_single_sign_out]
81
- @@client.ticket_store.store_service_session_lookup(st, controller)
77
+ client.ticket_store.store_service_session_lookup(st, controller)
82
78
  end
83
- end
79
+ #end
84
80
 
85
81
  # Store the ticket in the session to avoid re-validating the same service
86
82
  # ticket with the CAS server.
87
- controller.session[:cas_last_valid_ticket] = st
83
+ controller.session[:cas_last_valid_ticket] = st.ticket
84
+ controller.session[:cas_last_valid_ticket_service] = st.service
88
85
 
89
- if vr.pgt_iou
90
- unless controller.session[:cas_pgt] && controller.session[:cas_pgt].ticket && controller.session[:cas_pgt].iou == vr.pgt_iou
86
+ if st.pgt_iou
87
+ unless controller.session[:cas_pgt] && controller.session[:cas_pgt].ticket && controller.session[:cas_pgt].iou == st.pgt_iou
91
88
  log.info("Receipt has a proxy-granting ticket IOU. Attempting to retrieve the proxy-granting ticket...")
92
- pgt = client.retrieve_proxy_granting_ticket(vr.pgt_iou)
89
+ pgt = client.retrieve_proxy_granting_ticket(st.pgt_iou)
93
90
 
94
91
  if pgt
95
92
  log.debug("Got PGT #{pgt.ticket.inspect} for PGT IOU #{pgt.iou.inspect}. This will be stored in the session.")
@@ -97,18 +94,16 @@ module CASClient
97
94
  # For backwards compatibility with RubyCAS-Client 1.x configurations...
98
95
  controller.session[:casfilterpgt] = pgt
99
96
  else
100
- log.error("Failed to retrieve a PGT for PGT IOU #{vr.pgt_iou}!")
97
+ log.error("Failed to retrieve a PGT for PGT IOU #{st.pgt_iou}!")
101
98
  end
102
99
  else
103
- log.info("PGT is present in session and PGT IOU #{vr.pgt_iou} matches the saved PGT IOU. Not retrieving new PGT.")
100
+ log.info("PGT is present in session and PGT IOU #{st.pgt_iou} matches the saved PGT IOU. Not retrieving new PGT.")
104
101
  end
105
-
106
102
  end
107
-
108
103
  return true
109
104
  else
110
- log.warn("Ticket #{st.ticket.inspect} failed validation -- #{vr.failure_code}: #{vr.failure_message}")
111
- unauthorized!(controller, vr)
105
+ log.warn("Ticket #{st.ticket.inspect} failed validation -- #{st.failure_code}: #{st.failure_message}")
106
+ unauthorized!(controller, st)
112
107
  return false
113
108
  end
114
109
  else # no service ticket was present in the request
@@ -2,7 +2,7 @@ module CASClient
2
2
  # Represents a CAS service ticket.
3
3
  class ServiceTicket
4
4
  attr_reader :ticket, :service, :renew
5
- attr_accessor :response
5
+ attr_accessor :user, :extra_attributes, :pgt_iou, :success, :failure_code, :failure_message
6
6
 
7
7
  def initialize(ticket, service, renew = false)
8
8
  @ticket = ticket
@@ -11,11 +11,11 @@ module CASClient
11
11
  end
12
12
 
13
13
  def is_valid?
14
- response.is_success?
14
+ success
15
15
  end
16
16
 
17
17
  def has_been_validated?
18
- not response.nil?
18
+ not user.nil?
19
19
  end
20
20
  end
21
21
 
@@ -3,5 +3,8 @@ require 'bundler/setup'
3
3
  require 'casclient'
4
4
  require 'riot'
5
5
  require 'riot/rr'
6
+ require 'action_pack'
7
+
8
+ RAILS_ROOT = "#{File.dirname(__FILE__)}/.." unless defined?(RAILS_ROOT)
6
9
 
7
10
  Riot.reporter = Riot::VerboseStoryReporter
@@ -1,32 +1,184 @@
1
1
  require 'teststrap'
2
2
  require 'casclient/frameworks/rails/filter'
3
+ require 'action_controller'
3
4
 
4
5
  context CASClient::Frameworks::Rails::Filter do
5
- helper(:controller_with_session) do |session|
6
+
7
+ helper(:controller_with_session) do |session, request|
6
8
  controller = Object.new
7
9
  stub(controller).session {session}
10
+ stub(controller).request {request}
11
+ stub(controller).url_for {"bogusurl"}
12
+ stub(controller).params {{:ticket => "bogusticket", :renew => false}}
8
13
  controller
9
14
  end
15
+
10
16
  setup do
11
17
  CASClient::Frameworks::Rails::Filter.configure(
12
18
  :cas_base_url => 'http://test.local/',
13
19
  :logger => stub!
14
20
  )
15
21
  end
16
- context "that has fake called with a username" do
22
+
23
+ context "fake user without attributes" do
17
24
  setup { CASClient::Frameworks::Rails::Filter.fake('tester@test.com') }
18
25
  should 'set the session user on #filter' do
19
26
  setup { Hash.new }
20
- CASClient::Frameworks::Rails::Filter.filter(controller_with_session(topic))
27
+ CASClient::Frameworks::Rails::Filter.filter(controller_with_session(topic,nil))
21
28
  topic
22
29
  end.equals :cas_user => 'tester@test.com', :casfilteruser => 'tester@test.com'
30
+ teardown { CASClient::Frameworks::Rails::Filter.fake(nil,nil) }
23
31
  end
24
- context "that has fake called with a username and attributes" do
32
+
33
+ context "fake user with attributes" do
25
34
  setup { CASClient::Frameworks::Rails::Filter.fake('tester@test.com', {:test => 'stuff', :this => 'that'}) }
26
35
  should 'set the session user and attributes on #filter' do
27
36
  setup { Hash.new }
28
- CASClient::Frameworks::Rails::Filter.filter(controller_with_session(topic))
37
+ CASClient::Frameworks::Rails::Filter.filter(controller_with_session(topic,nil))
29
38
  topic
30
39
  end.equals :cas_user => 'tester@test.com', :casfilteruser => 'tester@test.com', :cas_extra_attributes => {:test => 'stuff', :this => 'that' }
40
+ teardown { CASClient::Frameworks::Rails::Filter.fake(nil,nil) }
41
+ end
42
+
43
+ context "new service ticket successfully" do
44
+ should("return successfully from filter") do
45
+ setup { Hash.new }
46
+ mock_request = ActionController::Request.new({})
47
+ mock(mock_request).post? {true}
48
+
49
+ pgt = CASClient::ProxyGrantingTicket.new(
50
+ "PGT-1308586001r9573FAD5A8C62E134A4AA93273F226BD3F0C3A983DCCCD176",
51
+ "PGTIOU-1308586001r29DC1F852C95930FE6694C1EFC64232A3359798893BC0B")
52
+
53
+ raw_text = "<cas:serviceResponse xmlns:cas=\"http://www.yale.edu/tp/cas\">
54
+ <cas:authenticationSuccess>
55
+ <cas:user>rich.yarger@vibes.com</cas:user>
56
+ <cas:proxyGrantingTicket>PGTIOU-1308586001r29DC1F852C95930FE6694C1EFC64232A3359798893BC0B</cas:proxyGrantingTicket>
57
+ </cas:authenticationSuccess>
58
+ </cas:serviceResponse>"
59
+ response = CASClient::ValidationResponse.new(raw_text)
60
+
61
+ any_instance_of(CASClient::Client, :request_cas_response => response)
62
+ any_instance_of(CASClient::Client, :retrieve_proxy_granting_ticket => pgt)
63
+
64
+ controller = controller_with_session(topic,mock_request)
65
+ CASClient::Frameworks::Rails::Filter.filter(controller)
66
+ end.equals(true)
67
+ end
68
+
69
+ context "new service ticket with invalid service ticket" do
70
+ should("return failure from filter") do
71
+ setup { Hash.new }
72
+ mock_request = ActionController::Request.new({})
73
+ mock(mock_request).post? {true}
74
+
75
+ raw_text = "<cas:serviceResponse xmlns:cas=\"http://www.yale.edu/tp/cas\">
76
+ <cas:authenticationFailure>Some Error Text</cas:authenticationFailure>
77
+ </cas:serviceResponse>"
78
+ response = CASClient::ValidationResponse.new(raw_text)
79
+
80
+ any_instance_of(CASClient::Client, :request_cas_response => response)
81
+ stub(CASClient::Frameworks::Rails::Filter).unauthorized!{"bogusresponse"}
82
+
83
+ controller = controller_with_session(topic,mock_request)
84
+ CASClient::Frameworks::Rails::Filter.filter(controller)
85
+ end.equals(false)
86
+ end
87
+
88
+ context "no new service ticket but with last service ticket" do
89
+ should("return failure from filter") do
90
+ setup { Hash.new }
91
+ mock_request = ActionController::Request.new({})
92
+ mock(mock_request).post? {true}
93
+
94
+ stub(CASClient::Frameworks::Rails::Filter).unauthorized!{"bogusresponse"}
95
+
96
+ controller = controller_with_session(topic,mock_request)
97
+ stub(controller).params {{}}
98
+ CASClient::Frameworks::Rails::Filter.filter(controller)
99
+ end.equals(false)
100
+ end
101
+
102
+ context "no new service ticket sent through gateway, gatewaying off" do
103
+ should("return failure from filter") do
104
+ setup { Hash.new }
105
+ mock_request = ActionController::Request.new({})
106
+ mock(mock_request).post? {true}
107
+
108
+ stub(CASClient::Frameworks::Rails::Filter).unauthorized!{"bogusresponse"}
109
+
110
+ CASClient::Frameworks::Rails::Filter.config[:use_gatewaying] = false
111
+ controller = controller_with_session(topic,mock_request)
112
+ controller.session[:cas_sent_to_gateway] = true
113
+ stub(controller).params {{}}
114
+ CASClient::Frameworks::Rails::Filter.filter(controller)
115
+ end.equals(false)
116
+ end
117
+
118
+ context "no new service ticket sent through gateway, gatewaying on" do
119
+ should("return failure from filter") do
120
+ setup { Hash.new }
121
+ mock_request = ActionController::Request.new({})
122
+ mock(mock_request).post? {true}
123
+
124
+ CASClient::Frameworks::Rails::Filter.config[:use_gatewaying] = true
125
+ controller = controller_with_session(topic,mock_request)
126
+ controller.session[:cas_sent_to_gateway] = true
127
+ stub(controller).params {{}}
128
+ CASClient::Frameworks::Rails::Filter.filter(controller)
129
+ end.equals(true)
130
+ end
131
+
132
+ context "new service ticket with no PGT" do
133
+ should("return failure from filter") do
134
+ setup { Hash.new }
135
+ mock_request = ActionController::Request.new({})
136
+ mock(mock_request).post? {true}
137
+
138
+ raw_text = "<cas:serviceResponse xmlns:cas=\"http://www.yale.edu/tp/cas\">
139
+ <cas:authenticationSuccess>
140
+ <cas:user>rich.yarger@vibes.com</cas:user>
141
+ <cas:proxyGrantingTicket>PGTIOU-1308586001r29DC1F852C95930FE6694C1EFC64232A3359798893BC0B</cas:proxyGrantingTicket>
142
+ </cas:authenticationSuccess>
143
+ </cas:serviceResponse>"
144
+ response = CASClient::ValidationResponse.new(raw_text)
145
+
146
+ any_instance_of(CASClient::Client, :request_cas_response => response)
147
+ any_instance_of(CASClient::Client, :retrieve_proxy_granting_ticket => lambda{raise CASClient::CASException})
148
+
149
+ controller = controller_with_session(topic,mock_request)
150
+ CASClient::Frameworks::Rails::Filter.filter(controller)
151
+ end.raises(CASClient::CASException)
152
+ end
153
+
154
+ context "new service ticket, but cannot connect to CASServer" do
155
+ should("return failure from filter") do
156
+ setup { Hash.new }
157
+ mock_request = ActionController::Request.new({})
158
+ mock(mock_request).post? {true}
159
+
160
+ any_instance_of(CASClient::Client, :request_cas_response => lambda{raise "Some exception"})
161
+
162
+ controller = controller_with_session(topic,mock_request)
163
+ CASClient::Frameworks::Rails::Filter.filter(controller)
164
+ end.raises(RuntimeError)
165
+ end
166
+
167
+ context "reuse service ticket successfully" do
168
+ should("return successfully from filter") do
169
+ setup { Hash.new }
170
+ mock_request = ActionController::Request.new({})
171
+ mock(mock_request).post? {true}
172
+
173
+ mock_client = CASClient::Client.new()
174
+ mock(mock_client).request_cas_response().never
175
+ mock(mock_client).retrieve_proxy_granting_ticket().never
176
+ CASClient::Frameworks::Rails::Filter.send(:class_variable_set, :@@client, mock_client)
177
+
178
+ topic[:cas_last_valid_ticket] = 'bogusticket'
179
+ topic[:cas_last_valid_ticket_service] = 'bogusurl'
180
+ controller = controller_with_session(topic,mock_request)
181
+ CASClient::Frameworks::Rails::Filter.filter(controller)
182
+ end.equals(true)
31
183
  end
32
184
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{vibes-rubycas-client}
8
- s.version = "2.3.0.alpha6"
8
+ s.version = "2.3.0.alpha7"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Matt Campbell", "Rahul Joshi", "Matt Zukowski", "Matt Walker"]
12
- s.date = %q{2011-06-15}
12
+ s.date = %q{2011-06-22}
13
13
  s.description = %q{We've taken the rubycas-client and added some enterprisey features and improved compatibility with JASIG's CAS server}
14
14
  s.extra_rdoc_files = [
15
15
  "LICENSE.txt",
@@ -81,6 +81,7 @@ Gem::Specification.new do |s|
81
81
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
82
82
  s.add_development_dependency(%q<jeweler>, ["~> 1.6.2"])
83
83
  s.add_development_dependency(%q<rcov>, [">= 0"])
84
+ s.add_development_dependency(%q<actionpack>, ["~> 2.3.11"])
84
85
  else
85
86
  s.add_dependency(%q<activesupport>, ["~> 2.3.11"])
86
87
  s.add_dependency(%q<riot>, [">= 0"])
@@ -88,6 +89,7 @@ Gem::Specification.new do |s|
88
89
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
89
90
  s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
90
91
  s.add_dependency(%q<rcov>, [">= 0"])
92
+ s.add_dependency(%q<actionpack>, ["~> 2.3.11"])
91
93
  end
92
94
  else
93
95
  s.add_dependency(%q<activesupport>, ["~> 2.3.11"])
@@ -96,6 +98,7 @@ Gem::Specification.new do |s|
96
98
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
97
99
  s.add_dependency(%q<jeweler>, ["~> 1.6.2"])
98
100
  s.add_dependency(%q<rcov>, [">= 0"])
101
+ s.add_dependency(%q<actionpack>, ["~> 2.3.11"])
99
102
  end
100
103
  end
101
104
 
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vibes-rubycas-client
3
3
  version: !ruby/object:Gem::Version
4
- hash: -3702664416
4
+ hash: -3702664414
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 2
8
8
  - 3
9
9
  - 0
10
10
  - alpha
11
- - 6
12
- version: 2.3.0.alpha6
11
+ - 7
12
+ version: 2.3.0.alpha7
13
13
  platform: ruby
14
14
  authors:
15
15
  - Matt Campbell
@@ -20,12 +20,12 @@ autorequire:
20
20
  bindir: bin
21
21
  cert_chain: []
22
22
 
23
- date: 2011-06-15 00:00:00 -05:00
23
+ date: 2011-06-22 00:00:00 -05:00
24
24
  default_executable:
25
25
  dependencies:
26
26
  - !ruby/object:Gem::Dependency
27
- type: :runtime
28
- requirement: &id001 !ruby/object:Gem::Requirement
27
+ prerelease: false
28
+ version_requirements: &id001 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -36,12 +36,12 @@ dependencies:
36
36
  - 3
37
37
  - 11
38
38
  version: 2.3.11
39
+ requirement: *id001
39
40
  name: activesupport
40
- version_requirements: *id001
41
- prerelease: false
41
+ type: :runtime
42
42
  - !ruby/object:Gem::Dependency
43
- type: :development
44
- requirement: &id002 !ruby/object:Gem::Requirement
43
+ prerelease: false
44
+ version_requirements: &id002 !ruby/object:Gem::Requirement
45
45
  none: false
46
46
  requirements:
47
47
  - - ">="
@@ -50,12 +50,12 @@ dependencies:
50
50
  segments:
51
51
  - 0
52
52
  version: "0"
53
+ requirement: *id002
53
54
  name: riot
54
- version_requirements: *id002
55
- prerelease: false
56
- - !ruby/object:Gem::Dependency
57
55
  type: :development
58
- requirement: &id003 !ruby/object:Gem::Requirement
56
+ - !ruby/object:Gem::Dependency
57
+ prerelease: false
58
+ version_requirements: &id003 !ruby/object:Gem::Requirement
59
59
  none: false
60
60
  requirements:
61
61
  - - ">="
@@ -64,12 +64,12 @@ dependencies:
64
64
  segments:
65
65
  - 0
66
66
  version: "0"
67
+ requirement: *id003
67
68
  name: rr
68
- version_requirements: *id003
69
- prerelease: false
70
- - !ruby/object:Gem::Dependency
71
69
  type: :development
72
- requirement: &id004 !ruby/object:Gem::Requirement
70
+ - !ruby/object:Gem::Dependency
71
+ prerelease: false
72
+ version_requirements: &id004 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ~>
@@ -80,12 +80,12 @@ dependencies:
80
80
  - 0
81
81
  - 0
82
82
  version: 1.0.0
83
+ requirement: *id004
83
84
  name: bundler
84
- version_requirements: *id004
85
- prerelease: false
86
- - !ruby/object:Gem::Dependency
87
85
  type: :development
88
- requirement: &id005 !ruby/object:Gem::Requirement
86
+ - !ruby/object:Gem::Dependency
87
+ prerelease: false
88
+ version_requirements: &id005 !ruby/object:Gem::Requirement
89
89
  none: false
90
90
  requirements:
91
91
  - - ~>
@@ -96,12 +96,12 @@ dependencies:
96
96
  - 6
97
97
  - 2
98
98
  version: 1.6.2
99
+ requirement: *id005
99
100
  name: jeweler
100
- version_requirements: *id005
101
- prerelease: false
102
- - !ruby/object:Gem::Dependency
103
101
  type: :development
104
- requirement: &id006 !ruby/object:Gem::Requirement
102
+ - !ruby/object:Gem::Dependency
103
+ prerelease: false
104
+ version_requirements: &id006 !ruby/object:Gem::Requirement
105
105
  none: false
106
106
  requirements:
107
107
  - - ">="
@@ -110,9 +110,25 @@ dependencies:
110
110
  segments:
111
111
  - 0
112
112
  version: "0"
113
+ requirement: *id006
113
114
  name: rcov
114
- version_requirements: *id006
115
+ type: :development
116
+ - !ruby/object:Gem::Dependency
115
117
  prerelease: false
118
+ version_requirements: &id007 !ruby/object:Gem::Requirement
119
+ none: false
120
+ requirements:
121
+ - - ~>
122
+ - !ruby/object:Gem::Version
123
+ hash: 21
124
+ segments:
125
+ - 2
126
+ - 3
127
+ - 11
128
+ version: 2.3.11
129
+ requirement: *id007
130
+ name: actionpack
131
+ type: :development
116
132
  description: We've taken the rubycas-client and added some enterprisey features and improved compatibility with JASIG's CAS server
117
133
  email:
118
134
  executables: []