couch-client 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +2 -0
- data/Manifest +0 -1
- data/couch-client.gemspec +3 -3
- data/lib/couch-client.rb +1 -1
- data/lib/couch-client/attachment.rb +9 -1
- data/lib/couch-client/hookup.rb +16 -2
- data/spec/attachment_spec.rb +10 -0
- metadata +4 -4
data/CHANGELOG
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
v0.1.2. Attachment now typecasts fields for stub values.
|
2
|
+
|
1
3
|
v0.1.1. Fixing Manifest contents and adding Rails information to README.
|
2
4
|
|
3
5
|
v0.1.0. Adding rake tasks to sync and manage database functions and design documents. Also added support for list and show functions; as well as fulltext administration.
|
data/Manifest
CHANGED
data/couch-client.gemspec
CHANGED
@@ -2,15 +2,15 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{couch-client}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Robert Sosinski"]
|
9
|
-
s.date = %q{2010-11-
|
9
|
+
s.date = %q{2010-11-16}
|
10
10
|
s.description = %q{A Ruby interface for CouchDB}
|
11
11
|
s.email = %q{email@robertsosinski.com}
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG", "LICENSE", "README.markdown", "TODO", "lib/couch-client.rb", "lib/couch-client/attachment.rb", "lib/couch-client/attachment_list.rb", "lib/couch-client/collection.rb", "lib/couch-client/connection.rb", "lib/couch-client/connection_handler.rb", "lib/couch-client/consistent_hash.rb", "lib/couch-client/database.rb", "lib/couch-client/design.rb", "lib/couch-client/document.rb", "lib/couch-client/hookup.rb", "lib/couch-client/rake_task.rb", "lib/couch-client/row.rb"]
|
13
|
-
s.files = ["CHANGELOG", "LICENSE", "Manifest", "README.markdown", "Rakefile", "TODO", "
|
13
|
+
s.files = ["CHANGELOG", "LICENSE", "Manifest", "README.markdown", "Rakefile", "TODO", "lib/couch-client.rb", "lib/couch-client/attachment.rb", "lib/couch-client/attachment_list.rb", "lib/couch-client/collection.rb", "lib/couch-client/connection.rb", "lib/couch-client/connection_handler.rb", "lib/couch-client/consistent_hash.rb", "lib/couch-client/database.rb", "lib/couch-client/design.rb", "lib/couch-client/document.rb", "lib/couch-client/hookup.rb", "lib/couch-client/rake_task.rb", "lib/couch-client/row.rb", "spec/attachment_list_spec.rb", "spec/attachment_spec.rb", "spec/collection_spec.rb", "spec/conection_handler_spec.rb", "spec/connection_spec.rb", "spec/consistent_hash_spec.rb", "spec/couch-client_spec.rb", "spec/database_spec.rb", "spec/design_spec.rb", "spec/designs/create/people/fulltext/by_name/index.js", "spec/designs/create/people/validate_on_update.js", "spec/designs/create/people/views/all/map.js", "spec/designs/create/people/views/sum/map.js", "spec/designs/create/people/views/sum/reduce.js", "spec/designs/update/people/fulltext/by_name/index.js", "spec/designs/update/people/validate_on_update.js", "spec/designs/update/people/views/sum/map.js", "spec/designs/update/people/views/sum/reduce.js", "spec/document_spec.rb", "spec/files/image.png", "spec/files/plain.txt", "spec/hookup_spec.rb", "spec/rake_task_spec.rb", "spec/row_spec.rb", "spec/spec_helper.rb", "couch-client.gemspec"]
|
14
14
|
s.homepage = %q{http://github.com/robertsosinski/couch-client}
|
15
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Couch-client", "--main", "README.markdown"]
|
16
16
|
s.require_paths = ["lib"]
|
data/lib/couch-client.rb
CHANGED
@@ -9,8 +9,16 @@ module CouchClient
|
|
9
9
|
# Attachment is constructed with the id of the document it is attached to,
|
10
10
|
# the filename, file stub and connection object.
|
11
11
|
def initialize(id, name, stub, connection)
|
12
|
+
# Ensure that `revpos` and `length` fields are numbers, not strings, or couchdb will thow an error.
|
13
|
+
["revpos", "length"].each do |field|
|
14
|
+
stub[field] &&= stub[field].to_i
|
15
|
+
end
|
16
|
+
|
17
|
+
# Ensure that `stub` is a boolean, not a string, or couchdb will throw an error
|
18
|
+
stub["stub"] &&= true
|
19
|
+
|
12
20
|
self.merge!(stub)
|
13
|
-
|
21
|
+
|
14
22
|
@id = id
|
15
23
|
@name = name
|
16
24
|
@connection = connection
|
data/lib/couch-client/hookup.rb
CHANGED
@@ -4,6 +4,7 @@ require 'json'
|
|
4
4
|
module CouchClient
|
5
5
|
class InvalidHTTPVerb < Exception; end
|
6
6
|
class InvalidJSONData < Exception; end
|
7
|
+
class ConnectionFailed < Exception; end
|
7
8
|
|
8
9
|
# Hookup is the basic HTTP interface that connects CouchClient to CouchDB.
|
9
10
|
# Hookup can use any HTTP library if the conventions listed below are followed.
|
@@ -70,15 +71,28 @@ module CouchClient
|
|
70
71
|
easy.userpwd = handler.password
|
71
72
|
end
|
72
73
|
|
74
|
+
# Setup error class with message
|
75
|
+
connection_error = lambda do
|
76
|
+
raise ConnectionFailed.new("could not connect to the database server at '#{handler.uri}'")
|
77
|
+
end
|
78
|
+
|
73
79
|
easy = case verb
|
74
80
|
when :head, :get, :delete
|
75
81
|
# head, get and delete http methods only take a uri string and options block
|
76
|
-
|
82
|
+
begin
|
83
|
+
Curl::Easy.send("http_#{verb}", handler.uri(path, query), &options)
|
84
|
+
rescue Curl::Err::ConnectionFailedError
|
85
|
+
connection_error.call
|
86
|
+
end
|
77
87
|
when :post, :put
|
78
88
|
# post and put http methods take a uri string, data string and options block
|
79
89
|
# also convert the hash into json if the content_type of the request is json
|
80
90
|
data = data.to_json if content_type == "application/json"
|
81
|
-
|
91
|
+
begin
|
92
|
+
Curl::Easy.send("http_#{verb}", handler.uri(path, query), data, &options)
|
93
|
+
rescue Curl::Err::ConnectionFailedError
|
94
|
+
connection_error.call
|
95
|
+
end
|
82
96
|
else
|
83
97
|
raise InvalidHTTPVerb.new("only `head`, `get`, `post`, `put` and `delete` are supported")
|
84
98
|
end
|
data/spec/attachment_spec.rb
CHANGED
@@ -42,6 +42,16 @@ describe CouchClient::Attachment do
|
|
42
42
|
@couch.database.delete!
|
43
43
|
end
|
44
44
|
|
45
|
+
describe '#initialize' do
|
46
|
+
it 'should typecast fields to the currect type' do
|
47
|
+
attachment = CouchClient::Attachment.new("123abc", "text.txt", {"content_type" => "text/plain", "revpos" => "3", "length" => "123", "stub" => "true"}, true)
|
48
|
+
attachment["content_type"].should eql("text/plain")
|
49
|
+
attachment["revpos"].should eql(3)
|
50
|
+
attachment["length"].should eql(123)
|
51
|
+
attachment["stub"].should be_true
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
45
55
|
describe '#uri' do
|
46
56
|
it 'should yield the uri for the attachment' do
|
47
57
|
@attachment_plain.uri.should eql([@couch.hookup.handler.uri, @alice.id, "plain.txt"].join("/"))
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 2
|
9
|
+
version: 0.1.2
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Robert Sosinski
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-11-
|
17
|
+
date: 2010-11-16 00:00:00 -05:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -108,7 +108,6 @@ files:
|
|
108
108
|
- README.markdown
|
109
109
|
- Rakefile
|
110
110
|
- TODO
|
111
|
-
- couch-client.gemspec
|
112
111
|
- lib/couch-client.rb
|
113
112
|
- lib/couch-client/attachment.rb
|
114
113
|
- lib/couch-client/attachment_list.rb
|
@@ -147,6 +146,7 @@ files:
|
|
147
146
|
- spec/rake_task_spec.rb
|
148
147
|
- spec/row_spec.rb
|
149
148
|
- spec/spec_helper.rb
|
149
|
+
- couch-client.gemspec
|
150
150
|
has_rdoc: true
|
151
151
|
homepage: http://github.com/robertsosinski/couch-client
|
152
152
|
licenses: []
|