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

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/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: []