diff --git a/.travis.yml b/.travis.yml index 79ff08ea..9282a793 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,6 +4,7 @@ gemfile: - gemfiles/rails30.gemfile - gemfiles/rails31.gemfile - gemfiles/rails32.gemfile + - gemfiles/rails4.gemfile rvm: - 1.8.7 - 1.9.2 @@ -28,5 +29,13 @@ matrix: gemfile: gemfiles/rails23.gemfile - rvm: rbx-19mode gemfile: gemfiles/rails23.gemfile + - rvm: 1.8.7 + gemfile: gemfiles/rails4.gemfile + - rvm: 1.9.2 + gemfile: gemfiles/rails4.gemfile + - rvm: jruby-18mode + gemfile: gemfiles/rails4.gemfile + - rvm: rbx-18mode + gemfile: gemfiles/rails4.gemfile allow_failures: - rvm: jruby-head diff --git a/Appraisals b/Appraisals index 5c4fae9f..8f9ec33b 100644 --- a/Appraisals +++ b/Appraisals @@ -14,4 +14,9 @@ appraise "rails32" do gem "rails", "~> 3.2.8" end +appraise "rails4" do + gem "rails", "~> 4.0.0" + gem "activerecord-session_store", "~> 0.0.1", :require => false +end + # vim: filetype=ruby diff --git a/gemfiles/rails4.gemfile b/gemfiles/rails4.gemfile new file mode 100644 index 00000000..27ff7619 --- /dev/null +++ b/gemfiles/rails4.gemfile @@ -0,0 +1,8 @@ +# This file was generated by Appraisal + +source "http://rubygems.org" + +gem "rails", "~> 4.0.0" +gem "activerecord-session_store", "~> 0.0.1", :require=>false + +gemspec :path=>"../" \ No newline at end of file diff --git a/lib/casclient/client.rb b/lib/casclient/client.rb index fc6fc917..6be7079f 100644 --- a/lib/casclient/client.rb +++ b/lib/casclient/client.rb @@ -112,12 +112,13 @@ def proxy_url @proxy_url || (cas_base_url + "/proxy") end - def validate_service_ticket(st) + def validate_service_ticket(st,consume=true) uri = URI.parse(validate_url) h = uri.query ? query_to_hash(uri.query) : {} h['service'] = st.service h['ticket'] = st.ticket - h['renew'] = "1" if st.renew + h['renew'] = '1' if st.renew + h['consume'] = consume.to_s h['pgtUrl'] = proxy_callback_url if proxy_callback_url uri.query = hash_to_query(h) diff --git a/lib/casclient/tickets.rb b/lib/casclient/tickets.rb index 7921093c..1ecd2f01 100644 --- a/lib/casclient/tickets.rb +++ b/lib/casclient/tickets.rb @@ -3,36 +3,36 @@ module CASClient class ServiceTicket attr_reader :ticket, :service, :renew attr_accessor :user, :extra_attributes, :pgt_iou, :success, :failure_code, :failure_message - + def initialize(ticket, service, renew = false) @ticket = ticket @service = service @renew = renew end - + def is_valid? success end - + def has_been_validated? not user.nil? end end - + # Represents a CAS proxy ticket. class ProxyTicket < ServiceTicket end - + class ProxyGrantingTicket attr_reader :ticket, :iou - + def initialize(ticket, iou) @ticket = ticket @iou = iou end - + def to_s ticket end end -end \ No newline at end of file +end diff --git a/lib/casclient/tickets/storage/active_record_ticket_store.rb b/lib/casclient/tickets/storage/active_record_ticket_store.rb index ec74bc6f..ca9266e0 100644 --- a/lib/casclient/tickets/storage/active_record_ticket_store.rb +++ b/lib/casclient/tickets/storage/active_record_ticket_store.rb @@ -1,3 +1,23 @@ +# rails4 specific +if Gem.loaded_specs["activesupport"].version.to_s =~ /^4/ + require 'active_record' + require 'active_record/session_store' + + # wrapper around ActionDispatch::Session::ActiveRecordStore + # as ActiveRecord::SessionStore.session_class doesn't exist in rails4 + module ActiveRecord + module SessionStore + def self.session_class + ActionDispatch::Session::ActiveRecordStore.session_class + end + + def self.session_class=(klass) + ActionDispatch::Session::ActiveRecordStore.session_class = klass + end + end + end +end + module CASClient module Tickets module Storage diff --git a/rubycas-client.gemspec b/rubycas-client.gemspec index aa664837..633f825e 100644 --- a/rubycas-client.gemspec +++ b/rubycas-client.gemspec @@ -24,7 +24,7 @@ Gem::Specification.new do |gem| gem.add_dependency("activesupport") gem.add_development_dependency("rake") - gem.add_development_dependency("database_cleaner", "~> 0.9.1") + gem.add_development_dependency("database_cleaner", "~> 1.0.1") gem.add_development_dependency("json") gem.add_development_dependency("rspec") gem.add_development_dependency("appraisal")