cotweet-fakeweb 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.autotest +5 -0
- data/.gitignore +7 -0
- data/CHANGELOG +215 -0
- data/LICENSE.txt +19 -0
- data/README.rdoc +189 -0
- data/Rakefile +67 -0
- data/fakeweb.gemspec +126 -0
- data/lib/fake_web.rb +215 -0
- data/lib/fake_web/ext/net_http.rb +72 -0
- data/lib/fake_web/registry.rb +127 -0
- data/lib/fake_web/responder.rb +122 -0
- data/lib/fake_web/response.rb +10 -0
- data/lib/fake_web/stub_socket.rb +15 -0
- data/lib/fake_web/utility.rb +90 -0
- data/lib/fakeweb.rb +2 -0
- data/test/fixtures/google_response_from_curl +12 -0
- data/test/fixtures/google_response_with_transfer_encoding +17 -0
- data/test/fixtures/google_response_without_transfer_encoding +11 -0
- data/test/fixtures/test_example.txt +1 -0
- data/test/fixtures/test_txt_file +3 -0
- data/test/test_allow_net_connect.rb +168 -0
- data/test/test_deprecations.rb +54 -0
- data/test/test_fake_authentication.rb +92 -0
- data/test/test_fake_web.rb +590 -0
- data/test/test_fake_web_open_uri.rb +58 -0
- data/test/test_helper.rb +90 -0
- data/test/test_last_request.rb +29 -0
- data/test/test_missing_open_uri.rb +25 -0
- data/test/test_missing_pathname.rb +37 -0
- data/test/test_other_net_http_libraries.rb +36 -0
- data/test/test_precedence.rb +79 -0
- data/test/test_query_string.rb +45 -0
- data/test/test_regexes.rb +157 -0
- data/test/test_response_headers.rb +79 -0
- data/test/test_trailing_slashes.rb +53 -0
- data/test/test_utility.rb +83 -0
- data/test/vendor/right_http_connection-1.2.4/History.txt +59 -0
- data/test/vendor/right_http_connection-1.2.4/Manifest.txt +7 -0
- data/test/vendor/right_http_connection-1.2.4/README.txt +54 -0
- data/test/vendor/right_http_connection-1.2.4/Rakefile +103 -0
- data/test/vendor/right_http_connection-1.2.4/lib/net_fix.rb +160 -0
- data/test/vendor/right_http_connection-1.2.4/lib/right_http_connection.rb +435 -0
- data/test/vendor/right_http_connection-1.2.4/setup.rb +1585 -0
- data/test/vendor/samuel-0.2.1/.document +5 -0
- data/test/vendor/samuel-0.2.1/.gitignore +5 -0
- data/test/vendor/samuel-0.2.1/LICENSE +20 -0
- data/test/vendor/samuel-0.2.1/README.rdoc +70 -0
- data/test/vendor/samuel-0.2.1/Rakefile +62 -0
- data/test/vendor/samuel-0.2.1/VERSION +1 -0
- data/test/vendor/samuel-0.2.1/lib/samuel.rb +52 -0
- data/test/vendor/samuel-0.2.1/lib/samuel/net_http.rb +10 -0
- data/test/vendor/samuel-0.2.1/lib/samuel/request.rb +96 -0
- data/test/vendor/samuel-0.2.1/samuel.gemspec +69 -0
- data/test/vendor/samuel-0.2.1/test/request_test.rb +193 -0
- data/test/vendor/samuel-0.2.1/test/samuel_test.rb +42 -0
- data/test/vendor/samuel-0.2.1/test/test_helper.rb +66 -0
- data/test/vendor/samuel-0.2.1/test/thread_test.rb +32 -0
- metadata +167 -0
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestResponseHeaders < Test::Unit::TestCase
|
4
|
+
def test_content_type_when_registering_with_string_and_content_type_header_as_symbol_option
|
5
|
+
FakeWeb.register_uri(:get, "http://example.com/users.json", :body => '[{"username": "chrisk"}]', :content_type => "application/json")
|
6
|
+
response = Net::HTTP.start("example.com") { |query| query.get("/users.json") }
|
7
|
+
assert_equal '[{"username": "chrisk"}]', response.body
|
8
|
+
assert_equal "application/json", response['Content-Type']
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_content_type_when_registering_with_string_and_content_type_header_as_string_option
|
12
|
+
FakeWeb.register_uri(:get, "http://example.com/users.json", :body => '[{"username": "chrisk"}]', 'Content-Type' => "application/json")
|
13
|
+
response = Net::HTTP.start("example.com") { |query| query.get("/users.json") }
|
14
|
+
assert_equal "application/json", response['Content-Type']
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_content_type_when_registering_with_string_only
|
18
|
+
FakeWeb.register_uri(:get, "http://example.com/users.json", :body => '[{"username": "chrisk"}]')
|
19
|
+
response = Net::HTTP.start("example.com") { |query| query.get("/users.json") }
|
20
|
+
assert_equal '[{"username": "chrisk"}]', response.body
|
21
|
+
assert_nil response['Content-Type']
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_cookies_when_registering_with_file_and_set_cookie_header
|
25
|
+
FakeWeb.register_uri(:get, "http://example.com/", :body => fixture_path("test_example.txt"),
|
26
|
+
:set_cookie => "user_id=1; example=yes")
|
27
|
+
response = Net::HTTP.start("example.com") { |query| query.get("/") }
|
28
|
+
assert_equal "test example content", response.body
|
29
|
+
assert_equal "user_id=1; example=yes", response['Set-Cookie']
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_multiple_set_cookie_headers
|
33
|
+
FakeWeb.register_uri(:get, "http://example.com", :set_cookie => ["user_id=1", "example=yes"])
|
34
|
+
response = Net::HTTP.start("example.com") { |query| query.get("/") }
|
35
|
+
assert_equal ["user_id=1", "example=yes"], response.get_fields('Set-Cookie')
|
36
|
+
assert_equal "user_id=1, example=yes", response['Set-Cookie']
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_registering_with_baked_response_ignores_header_options
|
40
|
+
fake_response = Net::HTTPOK.new('1.1', '200', 'OK')
|
41
|
+
fake_response["Server"] = "Apache/1.3.27 (Unix)"
|
42
|
+
FakeWeb.register_uri(:get, "http://example.com/", :response => fake_response,
|
43
|
+
:server => "FakeWeb/1.2.3 (Ruby)")
|
44
|
+
response = Net::HTTP.start("example.com") { |query| query.get("/") }
|
45
|
+
assert_equal "200", response.code
|
46
|
+
assert_equal "OK", response.message
|
47
|
+
assert_equal "Apache/1.3.27 (Unix)", response["Server"]
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_headers_are_rotated_when_registering_with_response_rotation
|
51
|
+
FakeWeb.register_uri(:get, "http://example.com",
|
52
|
+
[{:body => 'test1', :expires => "Thu, 14 Jun 2009 16:00:00 GMT",
|
53
|
+
:content_type => "text/plain"},
|
54
|
+
{:body => 'test2', :expires => "Thu, 14 Jun 2009 16:00:01 GMT"}])
|
55
|
+
|
56
|
+
first_response = second_response = nil
|
57
|
+
Net::HTTP.start("example.com") do |query|
|
58
|
+
first_response = query.get("/")
|
59
|
+
second_response = query.get("/")
|
60
|
+
end
|
61
|
+
assert_equal 'test1', first_response.body
|
62
|
+
assert_equal "Thu, 14 Jun 2009 16:00:00 GMT", first_response['Expires']
|
63
|
+
assert_equal "text/plain", first_response['Content-Type']
|
64
|
+
assert_equal 'test2', second_response.body
|
65
|
+
assert_equal "Thu, 14 Jun 2009 16:00:01 GMT", second_response['Expires']
|
66
|
+
assert_nil second_response['Content-Type']
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_registering_with_status_option_and_response_headers
|
70
|
+
FakeWeb.register_uri(:get, "http://example.com", :status => ["301", "Moved Permanently"],
|
71
|
+
:location => "http://www.example.com")
|
72
|
+
|
73
|
+
response = Net::HTTP.start("example.com") { |query| query.get("/") }
|
74
|
+
assert_equal "301", response.code
|
75
|
+
assert_equal "Moved Permanently", response.message
|
76
|
+
assert_equal "http://www.example.com", response["Location"]
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestFakeWebTrailingSlashes < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_registering_root_without_slash_and_ask_predicate_method_with_slash
|
6
|
+
FakeWeb.register_uri(:get, "http://www.example.com", :body => "root")
|
7
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com/")
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_registering_root_without_slash_and_request
|
11
|
+
FakeWeb.register_uri(:get, "http://www.example.com", :body => "root")
|
12
|
+
response = Net::HTTP.start("www.example.com") { |query| query.get('/') }
|
13
|
+
assert_equal "root", response.body
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_registering_root_with_slash_and_ask_predicate_method_without_slash
|
17
|
+
FakeWeb.register_uri(:get, "http://www.example.com/", :body => "root")
|
18
|
+
assert FakeWeb.registered_uri?(:get, "http://www.example.com")
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_registering_root_with_slash_and_request
|
22
|
+
FakeWeb.register_uri(:get, "http://www.example.com/", :body => "root")
|
23
|
+
response = Net::HTTP.start("www.example.com") { |query| query.get('/') }
|
24
|
+
assert_equal "root", response.body
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_registering_path_without_slash_and_ask_predicate_method_with_slash
|
28
|
+
FakeWeb.register_uri(:get, "http://www.example.com/users", :body => "User list")
|
29
|
+
assert !FakeWeb.registered_uri?(:get, "http://www.example.com/users/")
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_registering_path_without_slash_and_request_with_slash
|
33
|
+
FakeWeb.allow_net_connect = false
|
34
|
+
FakeWeb.register_uri(:get, "http://www.example.com/users", :body => "User list")
|
35
|
+
assert_raise FakeWeb::NetConnectNotAllowedError do
|
36
|
+
response = Net::HTTP.start("www.example.com") { |query| query.get('/users/') }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_registering_path_with_slash_and_ask_predicate_method_without_slash
|
41
|
+
FakeWeb.register_uri(:get, "http://www.example.com/users/", :body => "User list")
|
42
|
+
assert !FakeWeb.registered_uri?(:get, "http://www.example.com/users")
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_registering_path_with_slash_and_request_without_slash
|
46
|
+
FakeWeb.allow_net_connect = false
|
47
|
+
FakeWeb.register_uri(:get, "http://www.example.com/users/", :body => "User list")
|
48
|
+
assert_raise FakeWeb::NetConnectNotAllowedError do
|
49
|
+
response = Net::HTTP.start("www.example.com") { |query| query.get('/users') }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestUtility < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_decode_userinfo_from_header_handles_basic_auth
|
6
|
+
authorization_header = "Basic dXNlcm5hbWU6c2VjcmV0"
|
7
|
+
userinfo = FakeWeb::Utility.decode_userinfo_from_header(authorization_header)
|
8
|
+
assert_equal "username:secret", userinfo
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_encode_unsafe_chars_in_userinfo_does_not_encode_userinfo_safe_punctuation
|
12
|
+
userinfo = "user;&=+$,:secret"
|
13
|
+
assert_equal userinfo, FakeWeb::Utility.encode_unsafe_chars_in_userinfo(userinfo)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_encode_unsafe_chars_in_userinfo_does_not_encode_rfc_3986_unreserved_characters
|
17
|
+
userinfo = "-_.!~*'()abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789:secret"
|
18
|
+
assert_equal userinfo, FakeWeb::Utility.encode_unsafe_chars_in_userinfo(userinfo)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_encode_unsafe_chars_in_userinfo_does_encode_other_characters
|
22
|
+
userinfo, safe_userinfo = 'us#rn@me:sec//ret?"', 'us%23rn%40me:sec%2F%2Fret%3F%22'
|
23
|
+
assert_equal safe_userinfo, FakeWeb::Utility.encode_unsafe_chars_in_userinfo(userinfo)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_strip_default_port_from_uri_strips_80_from_http_with_path
|
27
|
+
uri = "http://example.com:80/foo/bar"
|
28
|
+
stripped_uri = FakeWeb::Utility.strip_default_port_from_uri(uri)
|
29
|
+
assert_equal "http://example.com/foo/bar", stripped_uri
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_strip_default_port_from_uri_strips_80_from_http_without_path
|
33
|
+
uri = "http://example.com:80"
|
34
|
+
stripped_uri = FakeWeb::Utility.strip_default_port_from_uri(uri)
|
35
|
+
assert_equal "http://example.com", stripped_uri
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_strip_default_port_from_uri_strips_443_from_https_without_path
|
39
|
+
uri = "https://example.com:443"
|
40
|
+
stripped_uri = FakeWeb::Utility.strip_default_port_from_uri(uri)
|
41
|
+
assert_equal "https://example.com", stripped_uri
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_strip_default_port_from_uri_strips_443_from_https
|
45
|
+
uri = "https://example.com:443/foo/bar"
|
46
|
+
stripped_uri = FakeWeb::Utility.strip_default_port_from_uri(uri)
|
47
|
+
assert_equal "https://example.com/foo/bar", stripped_uri
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_strip_default_port_from_uri_does_not_strip_8080_from_http
|
51
|
+
uri = "http://example.com:8080/foo/bar"
|
52
|
+
assert_equal uri, FakeWeb::Utility.strip_default_port_from_uri(uri)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_strip_default_port_from_uri_does_not_strip_443_from_http
|
56
|
+
uri = "http://example.com:443/foo/bar"
|
57
|
+
assert_equal uri, FakeWeb::Utility.strip_default_port_from_uri(uri)
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_strip_default_port_from_uri_does_not_strip_80_from_query_string
|
61
|
+
uri = "http://example.com/?a=:80&b=c"
|
62
|
+
assert_equal uri, FakeWeb::Utility.strip_default_port_from_uri(uri)
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_strip_default_port_from_uri_does_not_modify_strings_that_do_not_start_with_http_or_https
|
66
|
+
uri = "httpz://example.com:80/"
|
67
|
+
assert_equal uri, FakeWeb::Utility.strip_default_port_from_uri(uri)
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_request_uri_as_string
|
71
|
+
http = Net::HTTP.new("www.example.com", 80)
|
72
|
+
request = Net::HTTP::Get.new("/index.html")
|
73
|
+
expected = "http://www.example.com:80/index.html"
|
74
|
+
assert_equal expected, FakeWeb::Utility.request_uri_as_string(http, request)
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_uri_escape_delegates_to_uri_parser_when_available
|
78
|
+
parsing_object = URI.const_defined?(:Parser) ? URI::Parser.any_instance : URI
|
79
|
+
parsing_object.expects(:escape).with("string", /unsafe/).returns("escaped")
|
80
|
+
assert_equal "escaped", FakeWeb::Utility.uri_escape("string", /unsafe/)
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
== 0.0.1 2007-05-15
|
2
|
+
* 1 major enhancement:
|
3
|
+
* Initial release
|
4
|
+
|
5
|
+
== 0.1.2 2007-06-27
|
6
|
+
|
7
|
+
* No major changes.
|
8
|
+
|
9
|
+
== 0.1.3 2007-07-09
|
10
|
+
|
11
|
+
* No change.
|
12
|
+
|
13
|
+
== 0.1.4 2007-08-10
|
14
|
+
|
15
|
+
* r1442, todd, 2007-08-07 15:45:24
|
16
|
+
* # 373, Add support in right_http_connection for bailing out to a block while
|
17
|
+
reading the HTTP response (to support GET streaming...)
|
18
|
+
|
19
|
+
* r1411, todd, 2007-08-03 15:14:45
|
20
|
+
* # 373, Stream uploads (PUTs) if the source is a file, stream, or anything
|
21
|
+
read()-able
|
22
|
+
|
23
|
+
== 1.1.0 2007-08-15
|
24
|
+
Initial public release
|
25
|
+
|
26
|
+
== 1.2.0 2007-10-05
|
27
|
+
|
28
|
+
* r1867, konstantin, 2007-10-05 06:19:45
|
29
|
+
* # 220, (re)open connection to server if none exists or connection params
|
30
|
+
have changed
|
31
|
+
|
32
|
+
== 1.2.1
|
33
|
+
|
34
|
+
* r2648, konstantin, 01-24-08 11:12:00
|
35
|
+
* net_fix.rb moved from right_aws gem to fix the problem with uploading the streamable
|
36
|
+
objects to S3
|
37
|
+
|
38
|
+
* r2764, konstantin, 02-08-08 00:05:00 +03:00
|
39
|
+
* "RightAws: incompatible Net::HTTP monkey-patch" exception is raised if our net_fix
|
40
|
+
patch was overriden (by attachment_fu for example, to avoid this load attachment_fu
|
41
|
+
before loading the right_http_connection gem).
|
42
|
+
|
43
|
+
== 1.2.2
|
44
|
+
|
45
|
+
* r3524, konstantin, 2008-04-17 11:35:42 +0400
|
46
|
+
* Fixed a problem with incorrect error handling (connection retries always failed).
|
47
|
+
|
48
|
+
== 1.2.3
|
49
|
+
|
50
|
+
- Added support for setting retry & timeout parameters in the constructor
|
51
|
+
- Improve handling of data streams during upload: if there is a failure and a retry, reset
|
52
|
+
the seek pointer for the subsequent re-request
|
53
|
+
|
54
|
+
== 1.2.4
|
55
|
+
|
56
|
+
* r4984, konstantin, 2008-08-11 14:49:18 +0400
|
57
|
+
* fixed a bug: <NoMethodError: You have a nil object when you didn't expect it!
|
58
|
+
The error occurred while evaluating nil.body_stream>
|
59
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
RightScale::HttpConnection
|
2
|
+
by RightScale, Inc.
|
3
|
+
www.RightScale.com
|
4
|
+
|
5
|
+
== DESCRIPTION:
|
6
|
+
|
7
|
+
Rightscale::HttpConnection is a robust HTTP/S library. It implements a retry
|
8
|
+
algorithm for low-level network errors.
|
9
|
+
|
10
|
+
== FEATURES:
|
11
|
+
|
12
|
+
- provides put/get streaming
|
13
|
+
- does configurable retries on connect and read timeouts, DNS failures, etc.
|
14
|
+
- HTTPS certificate checking
|
15
|
+
|
16
|
+
== SYNOPSIS:
|
17
|
+
|
18
|
+
|
19
|
+
== REQUIREMENTS:
|
20
|
+
|
21
|
+
- 2/11/08: If you use RightScale::HttpConnection in conjunction with attachment_fu, the
|
22
|
+
HttpConnection gem must be included (using the require statement) AFTER
|
23
|
+
attachment_fu.
|
24
|
+
This is due to a conflict between the HttpConnection gem and another
|
25
|
+
gem required by attachment_fu.
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
== INSTALL:
|
30
|
+
|
31
|
+
sudo gem install right_http_connection
|
32
|
+
|
33
|
+
== LICENSE:
|
34
|
+
|
35
|
+
Copyright (c) 2007-2008 RightScale, Inc.
|
36
|
+
|
37
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
38
|
+
a copy of this software and associated documentation files (the
|
39
|
+
'Software'), to deal in the Software without restriction, including
|
40
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
41
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
42
|
+
permit persons to whom the Software is furnished to do so, subject to
|
43
|
+
the following conditions:
|
44
|
+
|
45
|
+
The above copyright notice and this permission notice shall be
|
46
|
+
included in all copies or substantial portions of the Software.
|
47
|
+
|
48
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
49
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
50
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
51
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
52
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
53
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
54
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/testtask'
|
5
|
+
require 'rake/packagetask'
|
6
|
+
require 'rake/gempackagetask'
|
7
|
+
require 'rake/rdoctask'
|
8
|
+
require 'rake/contrib/rubyforgepublisher'
|
9
|
+
require 'fileutils'
|
10
|
+
require 'hoe'
|
11
|
+
include FileUtils
|
12
|
+
require File.join(File.dirname(__FILE__), 'lib', 'right_http_connection')
|
13
|
+
|
14
|
+
AUTHOR = 'RightScale' # can also be an array of Authors
|
15
|
+
EMAIL = "rubygems@rightscale.com"
|
16
|
+
DESCRIPTION = "RightScale's robust HTTP/S connection module"
|
17
|
+
GEM_NAME = 'right_http_connection' # what ppl will type to install your gem
|
18
|
+
RUBYFORGE_PROJECT = 'rightscale' # The unix name for your project
|
19
|
+
HOMEPATH = "http://#{RUBYFORGE_PROJECT}.rubyforge.org"
|
20
|
+
DOWNLOAD_PATH = "http://rubyforge.org/projects/#{RUBYFORGE_PROJECT}"
|
21
|
+
|
22
|
+
NAME = "right_http_connection"
|
23
|
+
REV = nil # UNCOMMENT IF REQUIRED: File.read(".svn/entries")[/committed-rev="(d+)"/, 1] rescue nil
|
24
|
+
VERS = RightHttpConnection::VERSION::STRING + (REV ? ".#{REV}" : "")
|
25
|
+
CLEAN.include ['**/.*.sw?', '*.gem', '.config', '**/.DS_Store']
|
26
|
+
RDOC_OPTS = ['--quiet', '--title', 'right_http_connection documentation',
|
27
|
+
"--opname", "index.html",
|
28
|
+
"--line-numbers",
|
29
|
+
"--main", "README",
|
30
|
+
"--inline-source"]
|
31
|
+
|
32
|
+
# Suppress Hoe's self-inclusion as a dependency for our Gem. This also keeps
|
33
|
+
# Rake & rubyforge out of the dependency list. Users must manually install
|
34
|
+
# these gems to run tests, etc.
|
35
|
+
# TRB 2/19/09: also do this for the extra_dev_deps array present in newer hoes.
|
36
|
+
# Older versions of RubyGems will try to install developer-dependencies as
|
37
|
+
# required runtime dependencies....
|
38
|
+
class Hoe
|
39
|
+
def extra_deps
|
40
|
+
@extra_deps.reject do |x|
|
41
|
+
Array(x).first == 'hoe'
|
42
|
+
end
|
43
|
+
end
|
44
|
+
def extra_dev_deps
|
45
|
+
@extra_dev_deps.reject do |x|
|
46
|
+
Array(x).first == 'hoe'
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# Generate all the Rake tasks
|
52
|
+
# Run 'rake -T' to see list of generated tasks (from gem root directory)
|
53
|
+
hoe = Hoe.new(GEM_NAME, VERS) do |p|
|
54
|
+
p.author = AUTHOR
|
55
|
+
p.description = DESCRIPTION
|
56
|
+
p.email = EMAIL
|
57
|
+
p.summary = DESCRIPTION
|
58
|
+
p.url = HOMEPATH
|
59
|
+
p.rubyforge_name = RUBYFORGE_PROJECT if RUBYFORGE_PROJECT
|
60
|
+
p.test_globs = ["test/**/test_*.rb"]
|
61
|
+
p.clean_globs = CLEAN #An array of file patterns to delete on clean.
|
62
|
+
p.remote_rdoc_dir = "right_http_gem_doc"
|
63
|
+
|
64
|
+
# == Optional
|
65
|
+
p.changes = p.paragraphs_of("History.txt", 0..1).join("\n\n")
|
66
|
+
#p.extra_deps = [] # An array of rubygem dependencies [name, version], e.g. [ ['active_support', '>= 1.3.1'] ]
|
67
|
+
#p.spec_extras = {} # A hash of extra values to set in the gemspec.
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
desc 'Generate website files'
|
72
|
+
task :website_generate do
|
73
|
+
Dir['website/**/*.txt'].each do |txt|
|
74
|
+
sh %{ ruby scripts/txt2html #{txt} > #{txt.gsub(/txt$/,'html')} }
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
desc 'Upload website files to rubyforge'
|
79
|
+
task :website_upload do
|
80
|
+
config = YAML.load(File.read(File.expand_path("~/.rubyforge/user-config.yml")))
|
81
|
+
host = "#{config["username"]}@rubyforge.org"
|
82
|
+
remote_dir = "/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/"
|
83
|
+
# remote_dir = "/var/www/gforge-projects/#{RUBYFORGE_PROJECT}/#{GEM_NAME}"
|
84
|
+
local_dir = 'website'
|
85
|
+
sh %{rsync -av #{local_dir}/ #{host}:#{remote_dir}}
|
86
|
+
end
|
87
|
+
|
88
|
+
desc 'Generate and upload website files'
|
89
|
+
task :website => [:website_generate, :website_upload]
|
90
|
+
|
91
|
+
desc 'Release the website and new gem version'
|
92
|
+
task :deploy => [:check_version, :website, :release]
|
93
|
+
|
94
|
+
task :check_version do
|
95
|
+
unless ENV['VERSION']
|
96
|
+
puts 'Must pass a VERSION=x.y.z release version'
|
97
|
+
exit
|
98
|
+
end
|
99
|
+
unless ENV['VERSION'] == VERS
|
100
|
+
puts "Please update your version.rb to match the release version, currently #{VERS}"
|
101
|
+
exit
|
102
|
+
end
|
103
|
+
end
|