pezra-resourceful 0.5.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,79 @@
1
+ require File.dirname(__FILE__) + "/../spec_helper"
2
+ require 'tempfile'
3
+ require "resourceful/multipart_form_data.rb"
4
+
5
+ describe Resourceful::MultipartFormData do
6
+
7
+ before do
8
+ @form_data = Resourceful::MultipartFormData.new
9
+ end
10
+
11
+ it "should know its content-type" do
12
+ @form_data.content_type.should match(/^multipart\/form-data/i)
13
+ end
14
+
15
+ it "should know its boundary string" do
16
+ @form_data.content_type.should match(/; boundary=[0-9A-Za-z]{10,}/i)
17
+ end
18
+
19
+
20
+ describe "with simple parameters" do
21
+
22
+ it "should all simple parameters to be added" do
23
+ @form_data.add(:foo, "testing")
24
+ end
25
+
26
+ it "should render a multipart form-data document when #read is called" do
27
+ @form_data.add('foo', 'bar')
28
+ @form_data.add('baz', 'this')
29
+
30
+ boundary = /boundary=(\w+)/.match(@form_data.content_type)[1]
31
+ @form_data.read.should eql(<<MPFD[0..-2])
32
+ \r
33
+ --#{boundary}\r
34
+ Content-Disposition: form-data; name="foo"\r
35
+ \r
36
+ bar\r
37
+ --#{boundary}\r
38
+ Content-Disposition: form-data; name="baz"\r
39
+ \r
40
+ this\r
41
+ --#{boundary}--
42
+ MPFD
43
+
44
+ end
45
+
46
+ describe "with file parameter" do
47
+ it "should add file parameters to be added" do
48
+ Tempfile.open('resourceful-post-file-tests') do |file_to_upload|
49
+ file_to_upload << "This is a test"
50
+ file_to_upload.flush
51
+
52
+ @form_data.add_file(:foo, file_to_upload.path)
53
+ end
54
+ end
55
+
56
+ it "should render a multipart form-data document when #read is called" do
57
+ Tempfile.open('resourceful-post-file-tests') do |file_to_upload|
58
+ file_to_upload << "This is a test"
59
+ file_to_upload.flush
60
+
61
+ @form_data.add_file(:foo, file_to_upload.path)
62
+
63
+ boundary = /boundary=(\w+)/.match(@form_data.content_type)[1]
64
+ @form_data.read.should eql(<<MPFD[0..-2])
65
+ \r
66
+ --#{boundary}\r
67
+ Content-Disposition: form-data; name="foo"; filename="#{File.basename(file_to_upload.path)}"\r
68
+ Content-Type: application/octet-stream\r
69
+ \r
70
+ This is a test\r
71
+ --#{boundary}--
72
+ MPFD
73
+
74
+ end
75
+
76
+ end
77
+ end
78
+ end
79
+ end
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + "/../spec_helper"
2
+
3
+ module Resourceful
4
+ describe Resource do
5
+ before do
6
+ @http_adapter = stub(:http_adapter)
7
+ http = Resourceful::HttpAccessor.new(:http_adapter => @http_adapter)
8
+ @resource = http.resource('http://foo.example')
9
+ end
10
+
11
+ describe "POSTing" do
12
+ it "should use bodies content type as the request content-type if it is known" do
13
+ @http_adapter.should_receive(:make_request).with(anything, anything, anything, hash_including('Content-Type' => 'application/x-special-type')).and_return([200, {}, ""])
14
+ body = stub(:body, :content_type => 'application/x-special-type', :read => "hello there")
15
+ @resource.post(body)
16
+ end
17
+ end
18
+
19
+ end
20
+ end
@@ -0,0 +1,74 @@
1
+
2
+ require 'sinatra'
3
+
4
+ def any(path, opts={}, &blk)
5
+ %w[head get post put delete].each do |verb|
6
+ send verb, path, opts, &blk
7
+ end
8
+ end
9
+
10
+ def set_request_params_as_response_header!
11
+ params.each { |k,v| response[k] = v }
12
+ end
13
+
14
+ def set_request_header_in_body!
15
+ response['Content-Type'] ||= "application/yaml"
16
+ headers = request.env.reject { |k,v| !v.is_a?(String) }
17
+ headers.to_yaml
18
+ end
19
+
20
+ get '/' do
21
+ "Hello, world!"
22
+ end
23
+
24
+ post '/' do
25
+ request.body
26
+ end
27
+
28
+ put '/' do
29
+ request.body
30
+ end
31
+
32
+ delete '/' do
33
+ "Deleted"
34
+ end
35
+
36
+ # Responds with the method used for the request
37
+ any '/method' do
38
+ request.env['REQUEST_METHOD']
39
+ end
40
+
41
+ # Responds with the response code in the url
42
+ any '/code/:code' do
43
+ status params[:code]
44
+ set_request_params_as_response_header!
45
+ set_request_header_in_body!
46
+ end
47
+
48
+ # Sets the response header from the query string, and
49
+ # dumps the request header into the body as yaml for inspection
50
+ any '/header' do
51
+ set_request_params_as_response_header!
52
+ set_request_header_in_body!
53
+ end
54
+
55
+ # Takes a modified=httpdate as a query param, and a If-Modified-Since header,
56
+ # and responds 304 if they're the same
57
+ get '/cached' do
58
+ set_request_params_as_response_header!
59
+ set_request_header_in_body!
60
+
61
+ response['Last-Modified'] = params[:modified]
62
+
63
+ modtime = params[:modified]
64
+ imstime = request.env['HTTP_IF_MODIFIED_SINCE']
65
+
66
+ if modtime && imstime && modtime == imstime
67
+ status 304
68
+ end
69
+ end
70
+
71
+ Sinatra::Default.set(
72
+ :port => 42682
73
+ )
74
+
@@ -0,0 +1,98 @@
1
+
2
+ require 'rubygems'
3
+ require 'sinatra'
4
+ require 'sinatra/test/rspec'
5
+
6
+ require File.dirname(__FILE__) + '/spec_helper'
7
+
8
+ describe "GET /" do
9
+ it 'should render "Hello, world!"' do
10
+ get '/'
11
+ @response.should be_ok
12
+ @response.body.should == "Hello, world!"
13
+ end
14
+ end
15
+
16
+ describe "POST /" do
17
+ it 'should be 201 with no body' do
18
+ post '/'
19
+ @response.should be_ok
20
+ @response.body.should == ""
21
+ end
22
+
23
+ it 'should return the request body as the response body' do
24
+ body = "Some text"
25
+ post '/', body
26
+ @response.should be_ok
27
+ @response.body.should == body
28
+ end
29
+ end
30
+
31
+ describe "PUT /" do
32
+ it 'should be 200 with no body' do
33
+ put '/'
34
+ @response.should be_ok
35
+ @response.body.should == ""
36
+ end
37
+
38
+ it 'should return the request body as the response body' do
39
+ body = "Some text"
40
+ put '/', body
41
+ @response.should be_ok
42
+ @response.body.should == body
43
+ end
44
+ end
45
+
46
+ describe "DELETE /" do
47
+ it 'should render "Deleted"' do
48
+ delete '/'
49
+ @response.should be_ok
50
+ @response.body.should == "Deleted"
51
+ end
52
+ end
53
+
54
+ describe "/method" do
55
+ it 'should respond with the method used to make the request' do
56
+ %w[get post put delete].each do |verb|
57
+ send verb, '/method'
58
+ @response.body.should == verb.upcase
59
+ end
60
+ end
61
+ end
62
+
63
+ describe "/code/nnn" do
64
+ it 'should respond with the code provided in the url' do
65
+ # Just try a handful
66
+ [200, 201, 301, 302, 304, 403, 404, 500].each do |code|
67
+ get "/code/#{code}"
68
+ @response.status.should == code
69
+ end
70
+ end
71
+ end
72
+
73
+ describe "/header" do
74
+ it 'should set response headers from the query string' do
75
+ get "/header", "X-Foo" => "Bar"
76
+ @response['X-Foo'].should == "Bar"
77
+ end
78
+
79
+ it 'should dump the request headers into the body as yaml' do
80
+ get '/header', {}, "X-Foo" => "Bar"
81
+ body = YAML.load(@response.body)
82
+ body['X-Foo'].should == "Bar"
83
+ end
84
+ end
85
+
86
+ describe "/cache" do
87
+ it 'should be normal 200 if the modified query param and the ims header dont match' do
88
+ now = Time.now
89
+ get '/cached', {"modified" => now.httpdate}, {"HTTP_IF_MODIFIED_SINCE" => (now - 3600).httpdate}
90
+ @response.should be_ok
91
+ end
92
+
93
+ it 'should be 304 if the modified query param and the ims header are the same' do
94
+ now = Time.now
95
+ get '/cached', {"modified" => now.httpdate}, {"HTTP_IF_MODIFIED_SINCE" => now.httpdate}
96
+ @response.status.should == 304
97
+ end
98
+ end
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format progress
3
+
@@ -0,0 +1,29 @@
1
+ require 'rubygems'
2
+ require 'spec'
3
+ require 'pp'
4
+
5
+ $LOAD_PATH << File.join(File.dirname(__FILE__), "..", "lib")
6
+ require 'resourceful'
7
+
8
+ $LOAD_PATH << File.dirname(__FILE__) # ./spec
9
+
10
+ # Spawn the server in another process
11
+
12
+ @server = Thread.new do
13
+
14
+ require 'simple_sinatra_server'
15
+ Sinatra::Default.set(
16
+ :run => true,
17
+ :logging => false
18
+ )
19
+
20
+ end
21
+
22
+ # Kill the server process when rspec finishes
23
+ at_exit { @server.exit }
24
+
25
+
26
+ # Give the app a change to initialize
27
+ $stderr.puts "Waiting for thin to initialize..."
28
+ sleep 0.2
29
+
metadata ADDED
@@ -0,0 +1,167 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pezra-resourceful
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.5.4
5
+ platform: ruby
6
+ authors:
7
+ - Paul Sadauskas
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-08-07 00:00:00 -07:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: addressable
17
+ type: :runtime
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.1.0
24
+ version:
25
+ - !ruby/object:Gem::Dependency
26
+ name: httpauth
27
+ type: :runtime
28
+ version_requirement:
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: "0"
34
+ version:
35
+ - !ruby/object:Gem::Dependency
36
+ name: thin
37
+ type: :development
38
+ version_requirement:
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: "0"
44
+ version:
45
+ - !ruby/object:Gem::Dependency
46
+ name: yard
47
+ type: :development
48
+ version_requirement:
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: "0"
54
+ version:
55
+ - !ruby/object:Gem::Dependency
56
+ name: sinatra
57
+ type: :development
58
+ version_requirement:
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: "0"
64
+ version:
65
+ - !ruby/object:Gem::Dependency
66
+ name: rspec
67
+ type: :development
68
+ version_requirement:
69
+ version_requirements: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: "0"
74
+ version:
75
+ description: An HTTP library for Ruby that takes advantage of everything HTTP has to offer.
76
+ email: psadauskas@gmail.com
77
+ executables: []
78
+
79
+ extensions: []
80
+
81
+ extra_rdoc_files:
82
+ - lib/resourceful/authentication_manager.rb
83
+ - lib/resourceful/cache_manager.rb
84
+ - lib/resourceful/exceptions.rb
85
+ - lib/resourceful/header.rb
86
+ - lib/resourceful/http_accessor.rb
87
+ - lib/resourceful/memcache_cache_manager.rb
88
+ - lib/resourceful/multipart_form_data.rb
89
+ - lib/resourceful/net_http_adapter.rb
90
+ - lib/resourceful/options_interpretation.rb
91
+ - lib/resourceful/request.rb
92
+ - lib/resourceful/resource.rb
93
+ - lib/resourceful/response.rb
94
+ - lib/resourceful/stubbed_resource_proxy.rb
95
+ - lib/resourceful/util.rb
96
+ - lib/resourceful.rb
97
+ - README.markdown
98
+ files:
99
+ - lib/resourceful/authentication_manager.rb
100
+ - lib/resourceful/cache_manager.rb
101
+ - lib/resourceful/exceptions.rb
102
+ - lib/resourceful/header.rb
103
+ - lib/resourceful/http_accessor.rb
104
+ - lib/resourceful/memcache_cache_manager.rb
105
+ - lib/resourceful/multipart_form_data.rb
106
+ - lib/resourceful/net_http_adapter.rb
107
+ - lib/resourceful/options_interpretation.rb
108
+ - lib/resourceful/request.rb
109
+ - lib/resourceful/resource.rb
110
+ - lib/resourceful/response.rb
111
+ - lib/resourceful/stubbed_resource_proxy.rb
112
+ - lib/resourceful/util.rb
113
+ - lib/resourceful.rb
114
+ - Manifest
115
+ - MIT-LICENSE
116
+ - Rakefile
117
+ - README.markdown
118
+ - resourceful.gemspec
119
+ - spec/acceptance/authorization_spec.rb
120
+ - spec/acceptance/caching_spec.rb
121
+ - spec/acceptance/header_spec.rb
122
+ - spec/acceptance/redirecting_spec.rb
123
+ - spec/acceptance/resource_spec.rb
124
+ - spec/acceptance_shared_specs.rb
125
+ - spec/caching_spec.rb
126
+ - spec/old_acceptance_specs.rb
127
+ - spec/resourceful/multipart_form_data_spec.rb
128
+ - spec/resourceful/resource_spec.rb
129
+ - spec/simple_sinatra_server.rb
130
+ - spec/simple_sinatra_server_spec.rb
131
+ - spec/spec.opts
132
+ - spec/spec_helper.rb
133
+ has_rdoc: true
134
+ homepage: http://github.com/paul/resourceful
135
+ licenses:
136
+ post_install_message:
137
+ rdoc_options:
138
+ - --line-numbers
139
+ - --inline-source
140
+ - --title
141
+ - Resourceful
142
+ - --main
143
+ - README.markdown
144
+ require_paths:
145
+ - lib
146
+ - ext
147
+ required_ruby_version: !ruby/object:Gem::Requirement
148
+ requirements:
149
+ - - ">="
150
+ - !ruby/object:Gem::Version
151
+ version: "0"
152
+ version:
153
+ required_rubygems_version: !ruby/object:Gem::Requirement
154
+ requirements:
155
+ - - ">="
156
+ - !ruby/object:Gem::Version
157
+ version: "1.2"
158
+ version:
159
+ requirements: []
160
+
161
+ rubyforge_project: resourceful
162
+ rubygems_version: 1.3.5
163
+ signing_key:
164
+ specification_version: 2
165
+ summary: An HTTP library for Ruby that takes advantage of everything HTTP has to offer.
166
+ test_files: []
167
+