couchrest 1.2.1 → 2.0.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,34 +2,5 @@ require File.expand_path("../../spec_helper", __FILE__)
2
2
 
3
3
  describe CouchRest::Server do
4
4
 
5
- describe "available databases" do
6
- before(:each) do
7
- @couch = CouchRest::Server.new COUCHHOST
8
- end
9
-
10
- after(:each) do
11
- @couch.available_databases.each do |ref, db|
12
- db.delete!
13
- end
14
- end
15
-
16
- it "should let you add more databases" do
17
- @couch.available_databases.should be_empty
18
- @couch.define_available_database(:default, "cr-server-test-db")
19
- @couch.available_databases.keys.should include(:default)
20
- end
21
-
22
- it "should verify that a database is available" do
23
- @couch.define_available_database(:default, "cr-server-test-db")
24
- @couch.available_database?(:default).should be_true
25
- @couch.available_database?("cr-server-test-db").should be_true
26
- @couch.available_database?(:matt).should be_false
27
- end
28
-
29
- it "should let you set a default database" do
30
- @couch.default_database = 'cr-server-test-default-db'
31
- @couch.available_database?(:default).should be_true
32
- end
33
- end
34
5
 
35
6
  end
@@ -1,6 +1,7 @@
1
1
  require "bundler/setup"
2
2
  require "rubygems"
3
3
  require "rspec"
4
+ require "webmock/rspec"
4
5
 
5
6
  require File.join(File.dirname(__FILE__), '..','lib','couchrest')
6
7
  # check the following file to see how to use the spec'd features.
@@ -13,17 +14,21 @@ unless defined?(FIXTURE_PATH)
13
14
  TESTDB = 'couchrest-test'
14
15
  REPLICATIONDB = 'couchrest-test-replication'
15
16
  TEST_SERVER = CouchRest.new COUCHHOST
16
- TEST_SERVER.default_database = TESTDB
17
17
  DB = TEST_SERVER.database(TESTDB)
18
18
  end
19
19
 
20
+ # Allows us to hack Specific request responses
21
+ WebMock.disable_net_connect!(:allow_localhost => true)
22
+
20
23
  def reset_test_db!
21
24
  DB.recreate! rescue nil
22
25
  DB
23
26
  end
24
27
 
25
28
  RSpec.configure do |config|
26
- config.before(:all) { reset_test_db! }
29
+ config.before(:all) do
30
+ reset_test_db!
31
+ end
27
32
 
28
33
  config.after(:all) do
29
34
  cr = TEST_SERVER
@@ -34,13 +39,13 @@ RSpec.configure do |config|
34
39
  end
35
40
  end
36
41
 
42
+ # Check if lucene server is running on port 5985 (not 5984)
37
43
  def couchdb_lucene_available?
38
- lucene_path = "http://localhost:5985/"
39
- url = URI.parse(lucene_path)
44
+ url = URI "http://localhost:5985/"
40
45
  req = Net::HTTP::Get.new(url.path)
41
- res = Net::HTTP.new(url.host, url.port).start { |http| http.request(req) }
46
+ Net::HTTP.new(url.host, url.port).start { |http| http.request(req) }
42
47
  true
43
- rescue Exception => e
48
+ rescue Exception
44
49
  false
45
50
  end
46
51
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: couchrest
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 2.0.0.beta1
5
5
  platform: ruby
6
6
  authors:
7
7
  - J. Chris Anderson
@@ -12,22 +12,22 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2015-06-25 00:00:00.000000000 Z
15
+ date: 2015-07-09 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
- name: rest-client
18
+ name: httpclient
19
19
  requirement: !ruby/object:Gem::Requirement
20
20
  requirements:
21
21
  - - "~>"
22
22
  - !ruby/object:Gem::Version
23
- version: 1.8.0
23
+ version: 2.6.0
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
28
  - - "~>"
29
29
  - !ruby/object:Gem::Version
30
- version: 1.8.0
30
+ version: 2.6.0
31
31
  - !ruby/object:Gem::Dependency
32
32
  name: mime-types
33
33
  requirement: !ruby/object:Gem::Requirement
@@ -49,9 +49,6 @@ dependencies:
49
49
  - - "~>"
50
50
  - !ruby/object:Gem::Version
51
51
  version: '1.7'
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.0'
55
52
  type: :runtime
56
53
  prerelease: false
57
54
  version_requirements: !ruby/object:Gem::Requirement
@@ -59,9 +56,6 @@ dependencies:
59
56
  - - "~>"
60
57
  - !ruby/object:Gem::Version
61
58
  version: '1.7'
62
- - - "~>"
63
- - !ruby/object:Gem::Version
64
- version: '1.0'
65
59
  - !ruby/object:Gem::Dependency
66
60
  name: json
67
61
  requirement: !ruby/object:Gem::Requirement
@@ -82,14 +76,14 @@ dependencies:
82
76
  requirements:
83
77
  - - "~>"
84
78
  - !ruby/object:Gem::Version
85
- version: 2.6.0
79
+ version: 2.14.1
86
80
  type: :development
87
81
  prerelease: false
88
82
  version_requirements: !ruby/object:Gem::Requirement
89
83
  requirements:
90
84
  - - "~>"
91
85
  - !ruby/object:Gem::Version
92
- version: 2.6.0
86
+ version: 2.14.1
93
87
  - !ruby/object:Gem::Dependency
94
88
  name: rake
95
89
  requirement: !ruby/object:Gem::Requirement
@@ -104,6 +98,20 @@ dependencies:
104
98
  - - ">="
105
99
  - !ruby/object:Gem::Version
106
100
  version: '0'
101
+ - !ruby/object:Gem::Dependency
102
+ name: webmock
103
+ requirement: !ruby/object:Gem::Requirement
104
+ requirements:
105
+ - - ">="
106
+ - !ruby/object:Gem::Version
107
+ version: '0'
108
+ type: :development
109
+ prerelease: false
110
+ version_requirements: !ruby/object:Gem::Requirement
111
+ requirements:
112
+ - - ">="
113
+ - !ruby/object:Gem::Version
114
+ version: '0'
107
115
  description: CouchRest provides a simple interface on top of CouchDB's RESTful HTTP
108
116
  API, as well as including some utility scripts for managing views and attachments.
109
117
  email: jchris@apache.org
@@ -115,6 +123,7 @@ extra_rdoc_files:
115
123
  - THANKS.md
116
124
  files:
117
125
  - ".gitignore"
126
+ - ".rspec"
118
127
  - ".travis.yml"
119
128
  - Gemfile
120
129
  - LICENSE
@@ -139,25 +148,28 @@ files:
139
148
  - lib/couchrest/attributes.rb
140
149
  - lib/couchrest/commands/generate.rb
141
150
  - lib/couchrest/commands/push.rb
151
+ - lib/couchrest/connection.rb
142
152
  - lib/couchrest/database.rb
143
153
  - lib/couchrest/design.rb
144
154
  - lib/couchrest/document.rb
155
+ - lib/couchrest/exceptions.rb
145
156
  - lib/couchrest/helper/attachments.rb
146
157
  - lib/couchrest/helper/pager.rb
147
- - lib/couchrest/helper/streamer.rb
158
+ - lib/couchrest/helper/stream_row_parser.rb
148
159
  - lib/couchrest/helper/upgrade.rb
149
160
  - lib/couchrest/middlewares/logger.rb
150
- - lib/couchrest/monkeypatches.rb
151
161
  - lib/couchrest/rest_api.rb
152
162
  - lib/couchrest/server.rb
153
163
  - lib/couchrest/support/inheritable_attributes.rb
154
164
  - spec/.gitignore
165
+ - spec/couchrest/connection_spec.rb
155
166
  - spec/couchrest/couchrest_spec.rb
156
167
  - spec/couchrest/database_spec.rb
157
168
  - spec/couchrest/design_spec.rb
158
169
  - spec/couchrest/document_spec.rb
170
+ - spec/couchrest/exceptions_spec.rb
159
171
  - spec/couchrest/helpers/pager_spec.rb
160
- - spec/couchrest/helpers/streamer_spec.rb
172
+ - spec/couchrest/helpers/stream_row_parser_spec.rb
161
173
  - spec/couchrest/rest_api_spec.rb
162
174
  - spec/couchrest/server_spec.rb
163
175
  - spec/fixtures/attachments/README
@@ -198,12 +210,14 @@ signing_key:
198
210
  specification_version: 4
199
211
  summary: Lean and RESTful interface to CouchDB.
200
212
  test_files:
213
+ - spec/couchrest/connection_spec.rb
201
214
  - spec/couchrest/couchrest_spec.rb
202
215
  - spec/couchrest/database_spec.rb
203
216
  - spec/couchrest/design_spec.rb
204
217
  - spec/couchrest/document_spec.rb
218
+ - spec/couchrest/exceptions_spec.rb
205
219
  - spec/couchrest/helpers/pager_spec.rb
206
- - spec/couchrest/helpers/streamer_spec.rb
220
+ - spec/couchrest/helpers/stream_row_parser_spec.rb
207
221
  - spec/couchrest/rest_api_spec.rb
208
222
  - spec/couchrest/server_spec.rb
209
223
  - spec/fixtures/attachments/README
@@ -1,63 +0,0 @@
1
- module CouchRest
2
- class Streamer
3
-
4
- attr_accessor :default_curl_opts
5
-
6
- def initialize
7
- self.default_curl_opts = "--silent --no-buffer --tcp-nodelay -H \"Content-Type: application/json\""
8
- end
9
-
10
- def view(*args)
11
- raise "CouchRest::Streamer#view is deprecated. Please use Database#view with block."
12
- end
13
-
14
- def get(url, &block)
15
- open_pipe("curl #{default_curl_opts} \"#{url}\"", &block)
16
- end
17
-
18
- def post(url, params = {}, &block)
19
- open_pipe("curl #{default_curl_opts} -d \"#{escape_quotes(MultiJson.encode(params))}\" \"#{url}\"", &block)
20
- end
21
-
22
- protected
23
-
24
- def escape_quotes(data)
25
- data.gsub(/"/, '\"')
26
- end
27
-
28
- def open_pipe(cmd, &block)
29
- first = nil
30
- prev = nil
31
- IO.popen(cmd) do |f|
32
- while line = f.gets
33
- row = parse_line(line)
34
- if row.nil?
35
- first ||= line # save the header for later if we can't parse it.
36
- else
37
- block.call row
38
- end
39
- prev = line
40
- end
41
- end
42
-
43
- raise RestClient::ServerBrokeConnection if $? && $?.exitstatus != 0
44
-
45
- parse_first(first, prev)
46
- end
47
-
48
- def parse_line line
49
- return nil unless line
50
- if /(\{.*\}),?/.match(line.chomp)
51
- MultiJson.decode($1)
52
- end
53
- end
54
-
55
- def parse_first first, last
56
- return nil unless first
57
- header = MultiJson.decode(last ? first + last : first)
58
- header.delete("rows")
59
- header
60
- end
61
-
62
- end
63
- end
@@ -1,25 +0,0 @@
1
- # Monkey patch for faster net/http io
2
- if RUBY_VERSION.to_f < 1.9
3
- require 'timeout'
4
-
5
- class Net::BufferedIO #:nodoc:
6
- alias :old_rbuf_fill :rbuf_fill
7
- def rbuf_fill
8
- if @io.respond_to?(:read_nonblock)
9
- begin
10
- @rbuf << @io.read_nonblock(65536)
11
- rescue Errno::EWOULDBLOCK
12
- if IO.select([@io], nil, nil, @read_timeout)
13
- retry
14
- else
15
- raise Timeout::Error, "IO timeout"
16
- end
17
- end
18
- else
19
- timeout(@read_timeout) do
20
- @rbuf << @io.sysread(65536)
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,134 +0,0 @@
1
- require File.expand_path("../../../spec_helper", __FILE__)
2
-
3
- describe CouchRest::Streamer do
4
- before(:all) do
5
- @cr = CouchRest.new(COUCHHOST)
6
- @db = @cr.database(TESTDB)
7
- @db.delete! rescue nil
8
- @db = @cr.create_db(TESTDB) rescue nil
9
- @streamer = CouchRest::Streamer.new()
10
- @docs = (1..1000).collect{|i| {:integer => i, :string => i.to_s}}
11
- @db.bulk_save(@docs)
12
- @db.save_doc({
13
- "_id" => "_design/first",
14
- :views => {
15
- :test => {
16
- :map => "function(doc){for(var w in doc){ if(!w.match(/^_/))emit(w,doc[w])}}"
17
- }
18
- }
19
- })
20
- end
21
-
22
- it "should raise error on #view as deprecated" do
23
- lambda { @streamer.view }.should raise_error(/deprecated/)
24
- end
25
-
26
- it "should GET each row in a view" do
27
- count = 0
28
- header = @streamer.get("#{@db.root}/_all_docs") do |row|
29
- count += 1
30
- end
31
- count.should == 1001
32
- header.should == {"total_rows" => 1001, "offset" => 0}
33
- end
34
-
35
- it "should GET each row in a view with params" do
36
- count = 0
37
- header = @streamer.get("#{@db.root}/_all_docs?include_docs=true&limit=5") do |row|
38
- count += 1
39
- end
40
- count.should == 5
41
- header.should == {"total_rows" => 1001, "offset" => 0}
42
- end
43
-
44
- it "should GET no rows in a view with limit=0" do
45
- count = 0
46
- header = @streamer.get("#{@db.root}/_all_docs?include_docs=true&limit=0") do |row|
47
- count += 1
48
- end
49
- count.should == 0
50
- header.should == {"total_rows" => 1001, "offset" => 0}
51
- end
52
-
53
- it "should raise an exception if it receives malformed data" do
54
- IO.stub(:popen) do |cmd, block|
55
- class F
56
- def initialize
57
- @lines = [
58
- '{"total_rows": 123, "offset": "0", "rows": [',
59
- '{"foo": 1},',
60
- '{"foo": 2},',
61
- ]
62
- end
63
-
64
- def gets
65
- @lines.shift
66
- end
67
- end
68
-
69
- f = F.new
70
- block.call f
71
-
72
- IO.unstub(:popen)
73
- IO.popen 'true' do; end
74
- end
75
-
76
- count = 0
77
- expect do
78
- @streamer.get("#{@db.root}/_all_docs?include_docs=true&limit=0") do |row|
79
- count += 1
80
- end
81
- end.should raise_error(MultiJson::DecodeError)
82
- end
83
-
84
- it "should raise an exception if the couch connection fails" do
85
- IO.stub(:popen) do |cmd, block|
86
- class F
87
- def initialize
88
- @lines = [
89
- '{"total_rows": 123, "offset": "0", "rows": [',
90
- '{"foo": 1},',
91
- '{"foo": 2},',
92
- ]
93
- end
94
-
95
- def gets
96
- @lines.shift
97
- end
98
- end
99
-
100
- block.call F.new
101
-
102
- IO.unstub(:popen)
103
- IO.popen 'false' do; end
104
- end
105
-
106
- count = 0
107
-
108
- expect do
109
- @streamer.get("#{@db.root}/_all_docs?include_docs=true&limit=0") do |row|
110
- count += 1
111
- end
112
- end.should raise_error(RestClient::ServerBrokeConnection)
113
-
114
- count.should == 2
115
- end
116
-
117
- it "should POST for each row in a view" do
118
- # First grab a pair of IDs
119
- ids = []
120
- @streamer.get("#{@db.root}/_design/first/_view/test?limit=2") do |row|
121
- ids << row['id']
122
- end
123
- count = 0
124
- @streamer.post("#{@db.root}/_all_docs?include_docs=true", :keys => ids) do |row|
125
- count += 1
126
- end
127
- count.should == 2
128
- end
129
-
130
- it "should escape quotes" do
131
- @streamer.send(:escape_quotes, "keys: [\"sams's test\"]").should eql("keys: [\\\"sams's test\\\"]")
132
- end
133
-
134
- end