patron 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -126,31 +126,6 @@ Spec::Rake::SpecTask.new('spec:rcov') do |t|
126
126
  t.rcov_opts << '--exclude /Library/Ruby/Gems'
127
127
  end
128
128
 
129
- # Rubyforge tasks
130
- begin
131
- require 'rake/contrib/sshpublisher'
132
- namespace :rubyforge do
133
-
134
- desc "Release gem and RDoc documentation to RubyForge"
135
- task :release => ["rubyforge:release:gem", "rubyforge:release:docs"]
136
-
137
- namespace :release do
138
- desc "Publish RDoc to RubyForge."
139
- task :docs => [:rdoc] do
140
- config = YAML.load(
141
- File.read(File.expand_path('~/.rubyforge/user-config.yml'))
142
- )
143
-
144
- host = "#{config['username']}@rubyforge.org"
145
- remote_dir = "/var/www/gforge-projects/patron/"
146
- local_dir = 'doc'
147
-
148
- Rake::SshDirPublisher.new(host, remote_dir, local_dir).upload
149
- end
150
- end
151
- end
152
- rescue LoadError
153
- puts "Rake SshDirPublisher is unavailable or your rubyforge environment is not configured."
154
- end
129
+ Jeweler::RubyforgeTasks.new
155
130
 
156
131
  task :default => :spec
@@ -380,6 +380,17 @@ VALUE session_handle_request(VALUE self, VALUE request) {
380
380
  return rb_ensure(&perform_request, self, &cleanup, self);
381
381
  }
382
382
 
383
+ VALUE enable_cookie_session(VALUE self, VALUE file) {
384
+ struct curl_state *state;
385
+ Data_Get_Struct(self, struct curl_state, state);
386
+ CURL* curl = state->handle;
387
+ char *file_path = RSTRING_PTR(file);
388
+ if (file_path != "")
389
+ curl_easy_setopt(curl, CURLOPT_COOKIEJAR, file_path);
390
+ curl_easy_setopt(curl, CURLOPT_COOKIEFILE, file_path);
391
+ return Qnil;
392
+ }
393
+
383
394
  //------------------------------------------------------------------------------
384
395
  // Extension initialization
385
396
  //
@@ -411,6 +422,7 @@ void Init_session_ext() {
411
422
  rb_define_method(cSession, "escape", session_escape, 1);
412
423
  rb_define_method(cSession, "unescape", session_unescape, 1);
413
424
  rb_define_method(cSession, "handle_request", session_handle_request, 1);
425
+ rb_define_method(cSession, "enable_cookie_session", enable_cookie_session, 1);
414
426
 
415
427
  rb_define_const(cRequest, "AuthBasic", CURLAUTH_BASIC);
416
428
  rb_define_const(cRequest, "AuthDigest", CURLAUTH_DIGEST);
@@ -68,7 +68,7 @@ module Patron
68
68
 
69
69
  def upload_data=(data)
70
70
  @upload_data = case data
71
- when Hash:
71
+ when Hash
72
72
  hash_to_string(data)
73
73
  else
74
74
  data
@@ -60,7 +60,7 @@ module Patron
60
60
  # @see Patron::Request#auth_type
61
61
  attr_accessor :auth_type
62
62
 
63
- private :ext_initialize, :handle_request
63
+ private :ext_initialize, :handle_request, :enable_cookie_session
64
64
 
65
65
  # Create a new Session object.
66
66
  def initialize
@@ -72,6 +72,23 @@ module Patron
72
72
  @auth_type = :basic
73
73
  end
74
74
 
75
+ # Makes this session handle cookies and store them in in +file+.
76
+ # If file is nil they will be stored in memory. Otherwise the +file+
77
+ # must be readable and writable. Calling multiple times will add more files.
78
+ def handle_cookies(file = nil)
79
+ if file
80
+ path = Pathname(file).expand_path
81
+ unless File.exists?(file) and File.writable?(path.dirname)
82
+ raise ArgumentError, "Can't create file #{path} (permission error)"
83
+ end
84
+ unless File.readable?(file) or File.writable?(path)
85
+ raise ArgumentError, "Cant read or write file #{path} (permission error)"
86
+ end
87
+ end
88
+ enable_cookie_session(path.to_s)
89
+ self
90
+ end
91
+
75
92
  ###################################################################
76
93
  ### Standard HTTP methods
77
94
  ###
@@ -177,6 +177,21 @@ describe Patron::Session do
177
177
  body.header['authorization'].should == [encode_authz("foo", "bar")]
178
178
  end
179
179
 
180
+ it "should handle cookies if set" do
181
+ @session.handle_cookies
182
+ response = @session.get("/setcookie").body
183
+ YAML::load(response).header['cookie'].first.should == "session_id=foo123"
184
+ end
185
+
186
+ it "should not handle cookies by default" do
187
+ response = @session.get("/setcookie").body
188
+ YAML::load(response).header.should_not include('cookie')
189
+ end
190
+
191
+ it "should raise exception if cookie store is not writable or readable" do
192
+ lambda { @session.handle_cookies("/trash/clash/foo") }.should raise_error(ArgumentError)
193
+ end
194
+
180
195
  def encode_authz(user, passwd)
181
196
  "Basic " + Base64.encode64("#{user}:#{passwd}").strip
182
197
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: patron
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Phillip Toland
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-08-10 00:00:00 -05:00
12
+ date: 2009-08-13 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies: []
15
15