samlown-couchrest 0.37.2 → 1.0.0
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.
- data/README.md +10 -4
- data/Rakefile +1 -1
- data/history.txt +8 -0
- data/lib/couchrest.rb +27 -49
- data/lib/couchrest/{core/database.rb → database.rb} +6 -11
- data/lib/couchrest/{core/design.rb → design.rb} +2 -2
- data/lib/couchrest/{core/document.rb → document.rb} +1 -1
- data/lib/couchrest/helper/attachments.rb +29 -0
- data/lib/couchrest/middlewares/logger.rb +3 -3
- data/lib/couchrest/monkeypatches.rb +1 -71
- data/lib/couchrest/{core/response.rb → response.rb} +0 -0
- data/lib/couchrest/{core/rest_api.rb → rest_api.rb} +9 -6
- data/lib/couchrest/{core/server.rb → server.rb} +0 -0
- data/spec/couchrest/{core/couchrest_spec.rb → couchrest_spec.rb} +16 -3
- data/spec/couchrest/{core/database_spec.rb → database_spec.rb} +2 -2
- data/spec/couchrest/{core/design_spec.rb → design_spec.rb} +2 -2
- data/spec/couchrest/{core/document_spec.rb → document_spec.rb} +1 -1
- data/spec/couchrest/{core/server_spec.rb → server_spec.rb} +2 -2
- data/spec/spec.opts +0 -1
- data/spec/spec_helper.rb +0 -4
- metadata +24 -113
- data/couchrest.gemspec +0 -183
- data/examples/model/example.rb +0 -144
- data/lib/couchrest/core/adapters/restclient.rb +0 -35
- data/lib/couchrest/core/http_abstraction.rb +0 -48
- data/lib/couchrest/core/view.rb +0 -4
- data/lib/couchrest/mixins.rb +0 -4
- data/lib/couchrest/mixins/attachments.rb +0 -31
- data/lib/couchrest/mixins/attribute_protection.rb +0 -74
- data/lib/couchrest/mixins/callbacks.rb +0 -532
- data/lib/couchrest/mixins/class_proxy.rb +0 -124
- data/lib/couchrest/mixins/collection.rb +0 -260
- data/lib/couchrest/mixins/design_doc.rb +0 -103
- data/lib/couchrest/mixins/document_queries.rb +0 -80
- data/lib/couchrest/mixins/extended_attachments.rb +0 -70
- data/lib/couchrest/mixins/extended_document_mixins.rb +0 -9
- data/lib/couchrest/mixins/properties.rb +0 -154
- data/lib/couchrest/mixins/validation.rb +0 -246
- data/lib/couchrest/mixins/views.rb +0 -173
- data/lib/couchrest/more/casted_array.rb +0 -25
- data/lib/couchrest/more/casted_model.rb +0 -58
- data/lib/couchrest/more/extended_document.rb +0 -310
- data/lib/couchrest/more/property.rb +0 -50
- data/lib/couchrest/more/typecast.rb +0 -175
- data/lib/couchrest/support/blank.rb +0 -42
- data/lib/couchrest/support/rails.rb +0 -42
- data/lib/couchrest/validation/auto_validate.rb +0 -157
- data/lib/couchrest/validation/contextual_validators.rb +0 -78
- data/lib/couchrest/validation/validation_errors.rb +0 -125
- data/lib/couchrest/validation/validators/absent_field_validator.rb +0 -74
- data/lib/couchrest/validation/validators/confirmation_validator.rb +0 -107
- data/lib/couchrest/validation/validators/format_validator.rb +0 -122
- data/lib/couchrest/validation/validators/formats/email.rb +0 -66
- data/lib/couchrest/validation/validators/formats/url.rb +0 -43
- data/lib/couchrest/validation/validators/generic_validator.rb +0 -120
- data/lib/couchrest/validation/validators/length_validator.rb +0 -139
- data/lib/couchrest/validation/validators/method_validator.rb +0 -89
- data/lib/couchrest/validation/validators/numeric_validator.rb +0 -109
- data/lib/couchrest/validation/validators/required_field_validator.rb +0 -114
- data/spec/couchrest/more/attribute_protection_spec.rb +0 -150
- data/spec/couchrest/more/casted_extended_doc_spec.rb +0 -79
- data/spec/couchrest/more/casted_model_spec.rb +0 -406
- data/spec/couchrest/more/extended_doc_attachment_spec.rb +0 -135
- data/spec/couchrest/more/extended_doc_inherited_spec.rb +0 -40
- data/spec/couchrest/more/extended_doc_spec.rb +0 -808
- data/spec/couchrest/more/extended_doc_subclass_spec.rb +0 -98
- data/spec/couchrest/more/extended_doc_view_spec.rb +0 -462
- data/spec/couchrest/more/property_spec.rb +0 -628
- data/spec/fixtures/more/article.rb +0 -35
- data/spec/fixtures/more/card.rb +0 -22
- data/spec/fixtures/more/cat.rb +0 -20
- data/spec/fixtures/more/course.rb +0 -22
- data/spec/fixtures/more/event.rb +0 -8
- data/spec/fixtures/more/invoice.rb +0 -17
- data/spec/fixtures/more/person.rb +0 -9
- data/spec/fixtures/more/question.rb +0 -6
- data/spec/fixtures/more/service.rb +0 -12
- data/spec/fixtures/more/user.rb +0 -22
data/README.md
CHANGED
@@ -14,12 +14,17 @@ Note: CouchRest only support CouchDB 0.9.0 or newer.
|
|
14
14
|
|
15
15
|
$ sudo gem install couchrest
|
16
16
|
|
17
|
-
|
17
|
+
## Relax, it's RESTful
|
18
18
|
|
19
19
|
CouchRest rests on top of a HTTP abstraction layer using by default Heroku’s excellent REST Client Ruby HTTP wrapper.
|
20
|
-
Other adapters can be added to support more http libraries.
|
21
20
|
|
22
|
-
|
21
|
+
## Extended Document
|
22
|
+
|
23
|
+
As of May 2010 support for the popular CouchRest::ExtendedDocument mixin has been moved to its own gem: couchrest_extended_document.
|
24
|
+
|
25
|
+
Most people will probably want to use this library (or one of the alternatives) to make it slightly easier to access your documents.
|
26
|
+
|
27
|
+
## Running the Specs
|
23
28
|
|
24
29
|
The most complete documentation is the spec/ directory. To validate your
|
25
30
|
CouchRest install, from the project root directory run `rake`, or `autotest`
|
@@ -38,7 +43,8 @@ Please post bugs, suggestions and patches to the bug tracker at [http://github.c
|
|
38
43
|
Follow us on Twitter: [http://twitter.com/couchrest](http://twitter.com/couchrest)
|
39
44
|
|
40
45
|
Also, check [http://twitter.com/#search?q=%23couchrest](http://twitter.com/#search?q=%23couchrest)
|
41
|
-
|
46
|
+
|
47
|
+
|
42
48
|
## Ruby on Rails
|
43
49
|
|
44
50
|
CouchRest is compatible with rails and can even be used a Rails plugin.
|
data/Rakefile
CHANGED
@@ -25,7 +25,7 @@ begin
|
|
25
25
|
gemspec.files = %w( LICENSE README.md Rakefile THANKS.md history.txt couchrest.gemspec) + Dir["{examples,lib,spec,utils}/**/*"] - Dir["spec/tmp"]
|
26
26
|
gemspec.has_rdoc = true
|
27
27
|
gemspec.add_dependency("rest-client", ">= 0.5")
|
28
|
-
gemspec.add_dependency("
|
28
|
+
# gemspec.add_dependency("couchrest_extended_document", ">= 1.0.0")
|
29
29
|
gemspec.version = CouchRest::VERSION
|
30
30
|
gemspec.date = "2008-11-22"
|
31
31
|
gemspec.require_path = "lib"
|
data/history.txt
CHANGED
@@ -4,6 +4,14 @@
|
|
4
4
|
|
5
5
|
* Minor enhancements
|
6
6
|
|
7
|
+
== 1.0.0
|
8
|
+
|
9
|
+
* Major enhancements
|
10
|
+
* Moved ExtendedDocument and friends into own library, couchrest_extended_document. (Sam Lown)
|
11
|
+
* Removed HttpAbstraction component for direct interface with RestClient. (Sam Lown)
|
12
|
+
* Changed version to more conventional format starting from 1.0.0 to avoid ambiguity issues with order. (Sam Lown)
|
13
|
+
|
14
|
+
|
7
15
|
== 0.37
|
8
16
|
|
9
17
|
* Minor enhancements
|
data/lib/couchrest.rb
CHANGED
@@ -25,31 +25,23 @@ $:.unshift File.dirname(__FILE__) unless
|
|
25
25
|
$:.include?(File.expand_path(File.dirname(__FILE__)))
|
26
26
|
|
27
27
|
require 'couchrest/monkeypatches'
|
28
|
+
require 'couchrest/rest_api'
|
28
29
|
|
29
30
|
# = CouchDB, close to the metal
|
30
31
|
module CouchRest
|
31
|
-
VERSION = '0.
|
32
|
+
VERSION = '1.0.0' unless self.const_defined?("VERSION")
|
32
33
|
|
33
|
-
autoload :Server, 'couchrest/
|
34
|
-
autoload :Database, 'couchrest/
|
35
|
-
autoload :Response, 'couchrest/
|
36
|
-
autoload :Document, 'couchrest/
|
37
|
-
autoload :Design, 'couchrest/
|
38
|
-
autoload :
|
39
|
-
autoload :Model, 'couchrest/core/model'
|
34
|
+
autoload :Server, 'couchrest/server'
|
35
|
+
autoload :Database, 'couchrest/database'
|
36
|
+
autoload :Response, 'couchrest/response'
|
37
|
+
autoload :Document, 'couchrest/document'
|
38
|
+
autoload :Design, 'couchrest/design'
|
39
|
+
autoload :Model, 'couchrest/model'
|
40
40
|
autoload :Pager, 'couchrest/helper/pager'
|
41
|
-
autoload :FileManager, 'couchrest/helper/file_manager'
|
42
41
|
autoload :Streamer, 'couchrest/helper/streamer'
|
42
|
+
autoload :Attachments, 'couchrest/helper/attachments'
|
43
43
|
autoload :Upgrade, 'couchrest/helper/upgrade'
|
44
|
-
|
45
|
-
autoload :ExtendedDocument, 'couchrest/more/extended_document'
|
46
|
-
autoload :CastedModel, 'couchrest/more/casted_model'
|
47
|
-
|
48
|
-
require File.join(File.dirname(__FILE__), 'couchrest', 'core', 'rest_api')
|
49
|
-
require File.join(File.dirname(__FILE__), 'couchrest', 'core', 'http_abstraction')
|
50
|
-
require File.join(File.dirname(__FILE__), 'couchrest', 'mixins')
|
51
|
-
require File.join(File.dirname(__FILE__), 'couchrest', 'support', 'rails') if defined?(Rails)
|
52
|
-
|
44
|
+
|
53
45
|
# we extend CouchRest with the RestAPI module which gives us acess to
|
54
46
|
# the get, post, put, delete and copy
|
55
47
|
CouchRest.extend(::RestAPI)
|
@@ -59,35 +51,6 @@ module CouchRest
|
|
59
51
|
# some helpers for tasks like instantiating a new Database or Server instance.
|
60
52
|
class << self
|
61
53
|
|
62
|
-
# extracted from Extlib
|
63
|
-
#
|
64
|
-
# Constantize tries to find a declared constant with the name specified
|
65
|
-
# in the string. It raises a NameError when the name is not in CamelCase
|
66
|
-
# or is not initialized.
|
67
|
-
#
|
68
|
-
# @example
|
69
|
-
# "Module".constantize #=> Module
|
70
|
-
# "Class".constantize #=> Class
|
71
|
-
def constantize(camel_cased_word)
|
72
|
-
unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ camel_cased_word
|
73
|
-
raise NameError, "#{camel_cased_word.inspect} is not a valid constant name!"
|
74
|
-
end
|
75
|
-
|
76
|
-
Object.module_eval("::#{$1}", __FILE__, __LINE__)
|
77
|
-
end
|
78
|
-
|
79
|
-
# extracted from Extlib
|
80
|
-
#
|
81
|
-
# Capitalizes the first word and turns underscores into spaces and strips _id.
|
82
|
-
# Like titleize, this is meant for creating pretty output.
|
83
|
-
#
|
84
|
-
# @example
|
85
|
-
# "employee_salary" #=> "Employee salary"
|
86
|
-
# "author_id" #=> "Author"
|
87
|
-
def humanize(lower_case_and_underscored_word)
|
88
|
-
lower_case_and_underscored_word.to_s.gsub(/_id$/, "").gsub(/_/, " ").capitalize
|
89
|
-
end
|
90
|
-
|
91
54
|
# todo, make this parse the url and instantiate a Server or Database instance
|
92
55
|
# depending on the specificity.
|
93
56
|
def new(*opts)
|
@@ -130,9 +93,9 @@ module CouchRest
|
|
130
93
|
|
131
94
|
# set proxy to use
|
132
95
|
def proxy url
|
133
|
-
|
96
|
+
RestClient.proxy = url
|
134
97
|
end
|
135
|
-
|
98
|
+
|
136
99
|
# ensure that a database exists
|
137
100
|
# creates it if it isn't already there
|
138
101
|
# returns it after it's been created
|
@@ -160,3 +123,18 @@ module CouchRest
|
|
160
123
|
end
|
161
124
|
end # class << self
|
162
125
|
end
|
126
|
+
|
127
|
+
# For the sake of backwards compatability, generate a dummy ExtendedDocument class
|
128
|
+
# which should be replaced by real library: couchrest_extended_document.
|
129
|
+
#
|
130
|
+
# Added 2010-05-10 by Sam Lown. Please remove at some point in the future.
|
131
|
+
#
|
132
|
+
class CouchRest::ExtendedDocument < CouchRest::Document
|
133
|
+
|
134
|
+
def self.inherited(subclass)
|
135
|
+
raise "ExtendedDocument is no longer included in CouchRest base driver, see couchrest_extended_document gem"
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
|
140
|
+
|
@@ -65,7 +65,7 @@ module CouchRest
|
|
65
65
|
keys = params.delete(:keys)
|
66
66
|
funcs = funcs.merge({:keys => keys}) if keys
|
67
67
|
url = CouchRest.paramify_url "#{@root}/_temp_view", params
|
68
|
-
JSON.parse(
|
68
|
+
JSON.parse(RestClient.post(url, funcs.to_json, {"Content-Type" => 'application/json'}))
|
69
69
|
end
|
70
70
|
|
71
71
|
# backwards compatibility is a plus
|
@@ -108,14 +108,14 @@ module CouchRest
|
|
108
108
|
# GET an attachment directly from CouchDB
|
109
109
|
def fetch_attachment(doc, name)
|
110
110
|
uri = url_for_attachment(doc, name)
|
111
|
-
|
111
|
+
RestClient.get uri
|
112
112
|
end
|
113
113
|
|
114
114
|
# PUT an attachment directly to CouchDB
|
115
115
|
def put_attachment(doc, name, file, options = {})
|
116
116
|
docid = escape_docid(doc['_id'])
|
117
117
|
uri = url_for_attachment(doc, name)
|
118
|
-
JSON.parse(
|
118
|
+
JSON.parse(RestClient.put(uri, file, options))
|
119
119
|
end
|
120
120
|
|
121
121
|
# DELETE an attachment directly from CouchDB
|
@@ -123,13 +123,13 @@ module CouchRest
|
|
123
123
|
uri = url_for_attachment(doc, name)
|
124
124
|
# this needs a rev
|
125
125
|
begin
|
126
|
-
JSON.parse(
|
126
|
+
JSON.parse(RestClient.delete(uri))
|
127
127
|
rescue Exception => error
|
128
128
|
if force
|
129
129
|
# get over a 409
|
130
130
|
doc = get(doc['_id'])
|
131
131
|
uri = url_for_attachment(doc, name)
|
132
|
-
JSON.parse(
|
132
|
+
JSON.parse(RestClient.delete(uri))
|
133
133
|
else
|
134
134
|
error
|
135
135
|
end
|
@@ -174,7 +174,7 @@ module CouchRest
|
|
174
174
|
uri = "#{@root}/#{slug}"
|
175
175
|
uri << "?batch=ok" if batch
|
176
176
|
CouchRest.put uri, doc
|
177
|
-
rescue
|
177
|
+
rescue RestClient::ResourceNotFound
|
178
178
|
p "resource not found when saving even tho an id was passed"
|
179
179
|
slug = doc['_id'] = @server.next_uuid
|
180
180
|
CouchRest.put "#{@root}/#{slug}", doc
|
@@ -316,7 +316,6 @@ module CouchRest
|
|
316
316
|
# DELETE the database itself. This is not undoable and could be rather
|
317
317
|
# catastrophic. Use with care!
|
318
318
|
def delete!
|
319
|
-
clear_extended_doc_fresh_cache
|
320
319
|
CouchRest.delete @root
|
321
320
|
end
|
322
321
|
|
@@ -334,10 +333,6 @@ module CouchRest
|
|
334
333
|
payload[:continuous] = continuous
|
335
334
|
CouchRest.post "#{@host}/_replicate", payload
|
336
335
|
end
|
337
|
-
|
338
|
-
def clear_extended_doc_fresh_cache
|
339
|
-
::CouchRest::ExtendedDocument.subclasses.each{|klass| klass.design_doc_fresh = false if klass.respond_to?(:design_doc_fresh=) }
|
340
|
-
end
|
341
336
|
|
342
337
|
def uri_for_attachment(doc, name)
|
343
338
|
if doc.is_a?(String)
|
@@ -67,7 +67,7 @@ JAVASCRIPT
|
|
67
67
|
def has_view?(view)
|
68
68
|
view = view.to_s
|
69
69
|
self['views'][view] &&
|
70
|
-
(self['views'][view]["couchrest-defaults"]||{})
|
70
|
+
(self['views'][view]["couchrest-defaults"] || {})
|
71
71
|
end
|
72
72
|
|
73
73
|
def fetch_view view_name, opts, &block
|
@@ -76,4 +76,4 @@ JAVASCRIPT
|
|
76
76
|
|
77
77
|
end
|
78
78
|
|
79
|
-
end
|
79
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module CouchRest
|
2
|
+
module Attachments
|
3
|
+
|
4
|
+
# saves an attachment directly to couchdb
|
5
|
+
def put_attachment(name, file, options={})
|
6
|
+
raise ArgumentError, "doc must be saved" unless self.rev
|
7
|
+
raise ArgumentError, "doc.database required to put_attachment" unless database
|
8
|
+
result = database.put_attachment(self, name, file, options)
|
9
|
+
self['_rev'] = result['rev']
|
10
|
+
result['ok']
|
11
|
+
end
|
12
|
+
|
13
|
+
# returns an attachment's data
|
14
|
+
def fetch_attachment(name)
|
15
|
+
raise ArgumentError, "doc must be saved" unless self.rev
|
16
|
+
raise ArgumentError, "doc.database required to put_attachment" unless database
|
17
|
+
database.fetch_attachment(self, name)
|
18
|
+
end
|
19
|
+
|
20
|
+
# deletes an attachment directly from couchdb
|
21
|
+
def delete_attachment(name, force=false)
|
22
|
+
raise ArgumentError, "doc.database required to delete_attachment" unless database
|
23
|
+
result = database.delete_attachment(self, name, force)
|
24
|
+
self['_rev'] = result['rev']
|
25
|
+
result['ok']
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
29
|
+
end
|
@@ -53,8 +53,8 @@ module CouchRest
|
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
56
|
-
# inject our logger into
|
57
|
-
module
|
56
|
+
# inject our logger into key RestClient methods
|
57
|
+
module RestClient
|
58
58
|
|
59
59
|
def self.get(uri, headers=nil)
|
60
60
|
start_query = Time.now
|
@@ -260,4 +260,4 @@ end
|
|
260
260
|
# end
|
261
261
|
#
|
262
262
|
# end
|
263
|
-
# end
|
263
|
+
# end
|
@@ -1,5 +1,4 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), 'support', 'class')
|
2
|
-
require File.join(File.dirname(__FILE__), 'support', 'blank')
|
3
2
|
require 'timeout'
|
4
3
|
|
5
4
|
# This file must be loaded after the JSON gem and any other library that beats up the Time class.
|
@@ -15,16 +14,6 @@ class Time
|
|
15
14
|
%("#{u.strftime("%Y/%m/%d %H:%M:%S +0000")}")
|
16
15
|
end
|
17
16
|
|
18
|
-
# Decodes the JSON time format to a UTC time.
|
19
|
-
# Based on Time.parse from ActiveSupport. ActiveSupport's version
|
20
|
-
# is more complete, returning a time in your current timezone,
|
21
|
-
# rather than keeping the time in UTC. YMMV.
|
22
|
-
# def self.parse string, fallback=nil
|
23
|
-
# d = DateTime.parse(string).new_offset
|
24
|
-
# self.utc(d.year, d.month, d.day, d.hour, d.min, d.sec)
|
25
|
-
# rescue
|
26
|
-
# fallback
|
27
|
-
# end
|
28
17
|
end
|
29
18
|
|
30
19
|
# Monkey patch for faster net/http io
|
@@ -51,63 +40,4 @@ if RUBY_VERSION.to_f < 1.9
|
|
51
40
|
end
|
52
41
|
end
|
53
42
|
|
54
|
-
|
55
|
-
# # def self.copy(url, headers={})
|
56
|
-
# # Request.execute(:method => :copy,
|
57
|
-
# # :url => url,
|
58
|
-
# # :headers => headers)
|
59
|
-
# # end
|
60
|
-
#
|
61
|
-
# # class Request
|
62
|
-
# #
|
63
|
-
# # def establish_connection(uri)
|
64
|
-
# # Thread.current[:connection].finish if (Thread.current[:connection] && Thread.current[:connection].started?)
|
65
|
-
# # p net_http_class
|
66
|
-
# # net = net_http_class.new(uri.host, uri.port)
|
67
|
-
# # net.use_ssl = uri.is_a?(URI::HTTPS)
|
68
|
-
# # net.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
69
|
-
# # Thread.current[:connection] = net
|
70
|
-
# # Thread.current[:connection].start
|
71
|
-
# # Thread.current[:connection]
|
72
|
-
# # end
|
73
|
-
# #
|
74
|
-
# # def transmit(uri, req, payload)
|
75
|
-
# # setup_credentials(req)
|
76
|
-
# #
|
77
|
-
# # Thread.current[:host] ||= uri.host
|
78
|
-
# # Thread.current[:port] ||= uri.port
|
79
|
-
# #
|
80
|
-
# # if (Thread.current[:connection].nil? || (Thread.current[:host] != uri.host))
|
81
|
-
# # p "establishing a connection"
|
82
|
-
# # establish_connection(uri)
|
83
|
-
# # end
|
84
|
-
# #
|
85
|
-
# # display_log request_log
|
86
|
-
# # http = Thread.current[:connection]
|
87
|
-
# # http.read_timeout = @timeout if @timeout
|
88
|
-
# #
|
89
|
-
# # begin
|
90
|
-
# # res = http.request(req, payload)
|
91
|
-
# # rescue
|
92
|
-
# # p "Net::HTTP connection failed, reconnecting"
|
93
|
-
# # establish_connection(uri)
|
94
|
-
# # http = Thread.current[:connection]
|
95
|
-
# # require 'ruby-debug'
|
96
|
-
# # req.body_stream = nil
|
97
|
-
# #
|
98
|
-
# # res = http.request(req, payload)
|
99
|
-
# # display_log response_log(res)
|
100
|
-
# # result res
|
101
|
-
# # else
|
102
|
-
# # display_log response_log(res)
|
103
|
-
# # process_result res
|
104
|
-
# # end
|
105
|
-
# #
|
106
|
-
# # rescue EOFError
|
107
|
-
# # raise RestClient::ServerBrokeConnection
|
108
|
-
# # rescue Timeout::Error
|
109
|
-
# # raise RestClient::RequestTimeout
|
110
|
-
# # end
|
111
|
-
# # end
|
112
|
-
#
|
113
|
-
# end
|
43
|
+
|
File without changes
|
@@ -3,7 +3,7 @@ module RestAPI
|
|
3
3
|
def put(uri, doc = nil)
|
4
4
|
payload = doc.to_json if doc
|
5
5
|
begin
|
6
|
-
JSON.parse(
|
6
|
+
JSON.parse(RestClient.put(uri, payload))
|
7
7
|
rescue Exception => e
|
8
8
|
if $DEBUG
|
9
9
|
raise "Error while sending a PUT request #{uri}\npayload: #{payload.inspect}\n#{e}"
|
@@ -15,7 +15,7 @@ module RestAPI
|
|
15
15
|
|
16
16
|
def get(uri)
|
17
17
|
begin
|
18
|
-
JSON.parse(
|
18
|
+
JSON.parse(RestClient.get(uri), :max_nesting => false)
|
19
19
|
rescue => e
|
20
20
|
if $DEBUG
|
21
21
|
raise "Error while sending a GET request #{uri}\n: #{e}"
|
@@ -28,7 +28,7 @@ module RestAPI
|
|
28
28
|
def post(uri, doc = nil)
|
29
29
|
payload = doc.to_json if doc
|
30
30
|
begin
|
31
|
-
JSON.parse(
|
31
|
+
JSON.parse(RestClient.post(uri, payload))
|
32
32
|
rescue Exception => e
|
33
33
|
if $DEBUG
|
34
34
|
raise "Error while sending a POST request #{uri}\npayload: #{payload.inspect}\n#{e}"
|
@@ -39,11 +39,14 @@ module RestAPI
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def delete(uri)
|
42
|
-
JSON.parse(
|
42
|
+
JSON.parse(RestClient.delete(uri))
|
43
43
|
end
|
44
44
|
|
45
45
|
def copy(uri, destination)
|
46
|
-
JSON.parse(
|
46
|
+
JSON.parse(RestClient::Request.execute( :method => :copy,
|
47
|
+
:url => uri,
|
48
|
+
:headers => {'Destination' => destination}
|
49
|
+
).to_s)
|
47
50
|
end
|
48
51
|
|
49
|
-
end
|
52
|
+
end
|
File without changes
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.expand_path("
|
1
|
+
require File.expand_path("../../spec_helper", __FILE__)
|
2
2
|
|
3
3
|
describe CouchRest do
|
4
4
|
|
@@ -174,11 +174,24 @@ describe CouchRest do
|
|
174
174
|
describe "using a proxy for RestClient connections" do
|
175
175
|
it "should set proxy url for RestClient" do
|
176
176
|
CouchRest.proxy 'http://localhost:8888/'
|
177
|
-
proxy_uri = URI.parse(
|
177
|
+
proxy_uri = URI.parse(RestClient.proxy)
|
178
178
|
proxy_uri.host.should eql( 'localhost' )
|
179
179
|
proxy_uri.port.should eql( 8888 )
|
180
180
|
CouchRest.proxy nil
|
181
181
|
end
|
182
182
|
end
|
183
183
|
|
184
|
-
|
184
|
+
|
185
|
+
describe "Including old ExtendedDocument library" do
|
186
|
+
|
187
|
+
it "should raise an exception" do
|
188
|
+
lambda do
|
189
|
+
class TestDoc < CouchRest::ExtendedDocument
|
190
|
+
attr_reader :fail
|
191
|
+
end
|
192
|
+
end.should raise_error(RuntimeError)
|
193
|
+
end
|
194
|
+
|
195
|
+
end
|
196
|
+
|
197
|
+
end
|