pezra-resourceful 0.5.4

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.
@@ -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
+