ShyCouch 0.4.2 → 0.5.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/Rakefile CHANGED
@@ -22,6 +22,7 @@ Jeweler::Tasks.new do |gem|
22
22
  gem.email = "danbryan@gmail.com"
23
23
  gem.authors = ["Shy Inc.", "Daniel Bryan", "Cerales"]
24
24
  gem.add_dependency "ShyRubyJS"
25
+ gem.add_dependency "rest-client", ">=1.6.7"
25
26
  gem.add_dependency "sourcify", ">=0"
26
27
  # dependencies defined in Gemfile
27
28
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ShyCouch}
8
- s.version = "0.4.2"
8
+ s.version = "0.5.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = [%q{Shy Inc.}, %q{Daniel Bryan}, %q{Cerales}]
12
- s.date = %q{2011-09-01}
12
+ s.date = %q{2011-09-18}
13
13
  s.description = %q{Ruby API for CouchDB, designed to work with the Camping micro-framework.}
14
14
  s.email = %q{danbryan@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -25,6 +25,7 @@ Gem::Specification.new do |s|
25
25
  "Rakefile",
26
26
  "ShyCouch.gemspec",
27
27
  "VERSION",
28
+ "design_notes.rb",
28
29
  "lib/ShyCouch.rb",
29
30
  "lib/ShyCouch/data.rb",
30
31
  "lib/ShyCouch/fields.rb",
@@ -56,6 +57,7 @@ Gem::Specification.new do |s|
56
57
  s.add_development_dependency(%q<sourcify>, ["~> 0.5.0"])
57
58
  s.add_development_dependency(%q<ShyRubyJS>, [">= 0"])
58
59
  s.add_runtime_dependency(%q<ShyRubyJS>, [">= 0"])
60
+ s.add_runtime_dependency(%q<rest-client>, [">= 1.6.7"])
59
61
  s.add_runtime_dependency(%q<sourcify>, [">= 0"])
60
62
  else
61
63
  s.add_dependency(%q<ShyRubyJS>, [">= 0"])
@@ -65,6 +67,7 @@ Gem::Specification.new do |s|
65
67
  s.add_dependency(%q<sourcify>, ["~> 0.5.0"])
66
68
  s.add_dependency(%q<ShyRubyJS>, [">= 0"])
67
69
  s.add_dependency(%q<ShyRubyJS>, [">= 0"])
70
+ s.add_dependency(%q<rest-client>, [">= 1.6.7"])
68
71
  s.add_dependency(%q<sourcify>, [">= 0"])
69
72
  end
70
73
  else
@@ -75,6 +78,7 @@ Gem::Specification.new do |s|
75
78
  s.add_dependency(%q<sourcify>, ["~> 0.5.0"])
76
79
  s.add_dependency(%q<ShyRubyJS>, [">= 0"])
77
80
  s.add_dependency(%q<ShyRubyJS>, [">= 0"])
81
+ s.add_dependency(%q<rest-client>, [">= 1.6.7"])
78
82
  s.add_dependency(%q<sourcify>, [">= 0"])
79
83
  end
80
84
  end
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.4.2
1
+ 0.5.0
@@ -0,0 +1,39 @@
1
+ # just playing with possible syntax inspired by bluebie's implementation
2
+ settings = {blah blah blah}
3
+ db = ShyCouch.getDB(settings)
4
+
5
+ designs = db.getDesigns #should get a DocumentCollection thing
6
+
7
+ # long method of making a design
8
+
9
+ #defining a view w/ map
10
+ view = ShyCouch::Data::View.new :rocks do
11
+ map do
12
+ emit(doc.id, null) if doc.kind == "rock"
13
+ end
14
+ end
15
+
16
+ #defining a view w/ reduce
17
+ view2 = ShyCouch::Data::View.new :rock_weight_average
18
+ map do
19
+ emit(doc.id, doc.weight) if doc.kind == "rock"
20
+ end
21
+ reduce do
22
+ # return the average
23
+ return sum(values) / values.length
24
+ end
25
+ end
26
+
27
+ #defining a view w/ literal JS instead of parsing
28
+
29
+ view3 = ShyCouch::Data::View.new :complicated
30
+ view3.map = "function(doc) { emit(doc.id, doc.weirdThing); }"
31
+ view3.reduce = "function(key, values, rereduce) { functiondfhs lambda calculs blahalahal; }"
32
+
33
+ newDesign = ShyCouch::Data::Design.new
34
+ # either:
35
+ newDesign << view
36
+ newDesign << view2
37
+ # or:
38
+ newDesign << view,view2
39
+ # or both!
@@ -5,33 +5,29 @@
5
5
 
6
6
  # Add the directory containing this file to the start of the load path if it
7
7
  # isn't there already.
8
+
8
9
  $:.unshift(File.dirname(__FILE__)) unless
9
10
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
10
11
 
11
- require 'net/http'
12
12
  require 'json'
13
13
  require 'resolv'
14
- # require 'shyrubyjs'
15
- require '~/dev/gems/ShyRubyJS/lib/ShyRubyJS'
14
+ require 'rest-client'
15
+ require 'ShyRubyJS'
16
16
  # require everything from the 'ShyCouch' subdirectory
17
- Dir.new(File.dirname(__FILE__)+'/ShyCouch').each { |f| require 'shycouch/' + f.split('.')[0] unless f == '.' or f == '..' }
17
+ # Dir.new(File.dirname(__FILE__)+'/ShyCouch').each { |f| require 'shycouch/' + f.split('.')[0] unless f == '.' or f == '..' }
18
+ require 'ShyCouch/data'
19
+ require 'ShyCouch/fields'
18
20
 
19
21
 
20
22
  module ShyCouch
21
23
  class << self
22
-
23
- def create(settings=nil) #TODO - change this
24
- $couchdb = ShyCouch.getDB(settings)
25
- end
26
-
27
- def getDB(settings=nil)
28
- settings = $couch_settings unless settings
24
+ def getDB(settings)
25
+ # this is a wrapper for create a CouchDatabase object and testing that it can connect
29
26
  database = CouchDatabase.new(settings)
30
27
  puts database.connect unless database.connect["ok"] #TODO - hm
31
28
  database.create unless database.on_server?
32
29
  return database
33
30
  end
34
-
35
31
  end
36
32
  attr_accessor :database
37
33
 
@@ -39,16 +35,16 @@ module ShyCouch
39
35
 
40
36
  class CouchDatabase
41
37
  def initialize(settings)
42
- # args = explode_settings(args) if args.size == 1
38
+ raise StandardError, "invalid settings" if settings == nil
43
39
  init(settings)
44
40
  end
45
41
 
46
42
  attr_accessor :server, :name, :host, :port, :design_documents
47
43
 
48
44
  def connect
49
- @server = CouchServerConnection.new({"host"=>@host, "port"=>@port, "user"=>@user, "password"=>@password})
45
+ @server = CouchServerConnection.new({"host"=>@host, "port"=>@port, "user"=>@user, "password"=>@password, "database" => @name})
50
46
  if @server.responds?
51
- return {"ok"=>true, "message"=>"Successfully connected to the couch database at #{@host}: #{@port}."}
47
+ return {"ok"=>true, "message"=>"Successfully connected to the couch database at #{@host}:#{@port}"}
52
48
  else
53
49
  return {"ok"=>false, "message"=>"Could not connect to the couch database."}
54
50
  end
@@ -77,20 +73,6 @@ module ShyCouch
77
73
  get_document_by_id(doc["id"])
78
74
  }
79
75
  end
80
- def all_docs_with(attribute, value=nil)
81
- #TODO - change this to build a couch map query, cache it in couch then call it
82
- # maybe?!?!
83
- docs = []
84
- all_docs.each do |doc|
85
- if value
86
- docs << doc if doc[attribute] == value
87
- else
88
- docs << doc if doc[attribute]
89
- end
90
- end
91
- return docs
92
- rescue NameError
93
- end
94
76
  def uri
95
77
  return "http://#{host}/#{port}/#{name}"
96
78
  end
@@ -140,11 +122,12 @@ module ShyCouch
140
122
  @port = args["port"]
141
123
  @user = args["user"]
142
124
  @password = args["password"]
125
+ @db_name = args["database"]
143
126
  @options = options
144
127
  end
145
128
 
146
129
  def responds?
147
- if get('/')['couchdb'] == "Welcome"
130
+ if req(:get, "/")['couchdb'] == "Welcome"
148
131
  true
149
132
  else
150
133
  false
@@ -154,111 +137,110 @@ module ShyCouch
154
137
  end
155
138
 
156
139
  def has_database?(db_name)
157
- get("/#{db_name}/")
140
+ req(:get, "/#{db_name}/")
158
141
  true
159
- rescue RuntimeError => error
142
+ rescue RestClient::ResourceNotFound
160
143
  false
161
144
  end
162
-
163
- #defining the get and delete methods
164
- ['get', 'delete'].each do |name|
165
- define_method name do |uri|
166
- response = request(Net::HTTP.const_get(name.capitalize).new(uri)).body
167
- JSON.parse(response)
168
- end
169
- end
170
-
171
- def get_database_info(db_name)
172
- get("/#{db+name}/")
173
- end
174
-
175
- def pull_all_design_docs(db_name)
176
- pull_all_doc_ids(db_name).map { get_document_by_id(db_name, id) if id[0,7] == "_design" }
145
+
146
+ # def get_database_info(db_name)
147
+ # get("/#{db+name}/")
148
+ # end
149
+
150
+ def req(kind, uri, data = nil)
151
+ raise TypeError unless [:get,:delete,:put,:post].include?(kind) # only support these 4 request methods currently
152
+ res = (@user and @password ? couch_req_with_auth(kind, uri, data) : couch_req_without_auth(kind, uri, data))
153
+ JSON.parse(res)
154
+ end
155
+ def req_host
156
+ "http://#{(@user + ':' + @password + '@') if @user and @password}#{@host}:#{@port}"
177
157
  end
158
+ def couch_req_with_auth(kind, uri = nil, data = nil)
159
+ uri ? uri = req_host + uri : uri = req_host
160
+ if kind == :get or kind == :delete
161
+ RestClient.method(kind).call(uri, :content_type => :json, :user => @user, :password => @password)
162
+ else
163
+ RestClient.method(kind).call(uri, data, :content_type => :json)#, :user => @user, :password => @password)
164
+ end
165
+ end
166
+ def couch_req_without_auth(kind, uri, data = nil)
167
+ uri ? uri = req_host + uri : uri = req_host
168
+ if kind == :get or kind == :delete
169
+ RestClient.method(kind).call(uri, :content_type => :json, :user => @user, :password => @password)
170
+ else
171
+ RestClient.method(kind).call(uri, data,:content_type => :json, :user => @user, :password => @password)
172
+ end
173
+
174
+ end
175
+
176
+ # this should be done w/ couch key stuff?
177
+ # def pull_all_design_docs(db_name)
178
+ # pull_all_doc_ids(db_name).map { get_document_by_id(db_name, id) if id[0,7] == "_design" }
179
+ # end
178
180
 
181
+ #TODO - this is screwed
179
182
  def pull_all_doc_ids(db_name)
180
- get("/#{db_name}/_all_docs")["rows"].map { |doc| doc["id"] }
183
+ req(:get,"/#{db_name}/_all_docs")["rows"].map { |doc| doc["id"] }
181
184
  end
182
185
 
183
186
  def all_docs_from_database(db_name)
184
- pull_all_doc_ids(db_name).map { |id| Data::CouchDocument.new(get("/#{db_name}/#{id}")) }
187
+ pull_all_doc_ids(db_name).map { |id| Data::CouchDocument.new(req(:get,"/#{db_name}/#{id}")) }
185
188
  end
186
189
 
187
190
  def get_document_by_id(db_name, id)
188
- document = Data::CouchDocument.new(get("/#{db_name}/#{id}"))
191
+ document = Data::CouchDocument.new(req(:get,"/#{db_name}/#{id}"))
189
192
  end
190
193
  def pull_document(db_name, document)
191
- document = Data::CouchDocument.new(get("/#{db_name}/#{document._id}"))
194
+ document = Data::CouchDocument.new(req(:get,"/#{db_name}/#{document._id}"))
192
195
  end
193
196
 
194
197
  def delete_document(db_name, id)
195
198
  delete("/#{db_name}/#{id}")
199
+ RestClient.delete ""
196
200
  end
197
201
 
198
202
  # Haven't decided whether PUT/POST should take a CouchDocument or a JSON string.
199
- def put( uri, json = nil )
200
- #TODO - make this private
201
- req = Net::HTTP::Put.new(uri)
202
- req["content-type"] = "application/json"
203
- req.body = json unless json == nil
204
- JSON.parse(request(req).body)
205
- end
206
-
207
- def post(uri, json = nil)
208
- # couch uses POST for new documents and gives them an ID
209
- req = Net::HTTP::Post.new(uri)
210
- req["content-type"] = "application/json"
211
- req.body = json unless json == nil
212
- JSON.parse(request(req).body)
213
- #TODO - return success more meaningfully maybe?
214
- end
215
-
216
203
 
217
-
218
204
  def push_document(db_name, document)
219
205
  raise TypeError unless document.kind_of?(Data::CouchDocument)
220
206
  raise JSON::GeneratorError unless document.valid?
221
207
  if document["_rev"]
222
- put("/#{db_name}/#{document._id}?rev=#{document._rev}/", document.to_json)
208
+ req(:put, "/#{db_name}/#{document._id}?rev=#{document._rev}/", document.to_json)
223
209
  else
224
- post("/#{db_name}/", document.to_json)
210
+ req(:post, "/#{db_name}/", document.to_json)
225
211
  end
226
212
  end
227
213
 
228
214
  def create_db(db_name)
229
- put("/#{db_name}/")
215
+ req(:put, "/#{db_name}/")
230
216
  end
231
217
  def delete_db(db_name)
232
- delete("/#{db_name}/")
233
- end
234
-
235
- def UUID
236
- get('/_uuids/')['uuids'][0]
218
+ req(:delete,"/#{db_name}/")
237
219
  end
238
220
 
239
221
  private
240
222
 
241
- def handle_failure(req, res)
242
- raise RuntimeError.new("#{res.code}:#{res.message}\nMETHOD:#{req.method}\nURI:#{req.path}\n#{res.body}")
243
- end
244
-
245
- def handle_error(e)
246
- raise RuntimeError.new("#{e.inspect}\n Maybe be due to illegal rev or id change")
247
- end
248
-
249
- def request(req)
250
- res = Net::HTTP.start(@host, @port) { |http|
251
- req.basic_auth(@user, @password) if @user and @password
252
- http.request(req)
253
- }
254
- unless res.kind_of?(Net::HTTPSuccess)
255
- handle_failure(req, res)
256
- end
257
- res
258
- rescue Errno::ECONNRESET => e
259
- handle_error(e)
260
- end
223
+ # def handle_failure(req, res)
224
+ # raise RuntimeError.new("#{res.code}:#{res.message}\nMETHOD:#{req.method}\nURI:#{req.path}\n#{res.body}")
225
+ # end
226
+ #
227
+ # def handle_error(e)
228
+ # raise RuntimeError.new("#{e.inspect}\n Maybe be due to illegal rev or id change")
229
+ # end
230
+
231
+ # def request(req)
232
+ # res = Net::HTTP.start(@host, @port) { |http|
233
+ # req.basic_auth(@user, @password) if @user and @password
234
+ # http.request(req)
235
+ # }
236
+ # unless res.kind_of?(Net::HTTPSuccess)
237
+ # handle_failure(req, res)
238
+ # end
239
+ # res
240
+ # rescue Errno::ECONNRESET => e
241
+ # handle_error(e)
242
+ # end
261
243
  end
262
244
 
263
245
  end
264
- end
246
+ end
@@ -6,7 +6,7 @@ module ShyCouch
6
6
  class << self
7
7
  # allows instance.class.requirements to be called
8
8
  end
9
- @@needs, @@suggests = [], []
9
+ @@needs, @@suggests, @@views = [], [], []
10
10
 
11
11
  def initialize(hash={})
12
12
  # Assumes that the "kind" is the class name unless explicitly stated otherwise
@@ -14,7 +14,7 @@ module ShyCouch
14
14
  hash["kind"] = self.class.to_s.split("::").last unless hash["kind"]
15
15
  merge!(hash)
16
16
  raise TypeError unless valid?
17
- # super(hash)
17
+ set_up_views
18
18
  end
19
19
 
20
20
  def self.all
@@ -56,8 +56,7 @@ module ShyCouch
56
56
  return self.class.requirements
57
57
  end
58
58
 
59
- def pull(database=nil)
60
- database ||= $couchdb
59
+ def pull(database)
61
60
  new_doc = database.pull_document(self)
62
61
  if new_doc
63
62
  self.clear
@@ -65,8 +64,7 @@ module ShyCouch
65
64
  end
66
65
  end
67
66
 
68
- def push(database = nil)
69
- database ||= $couchdb
67
+ def push(database)
70
68
  res = database.push_document(self)
71
69
  self["_id"] = res["id"] unless self["_id"]
72
70
  self["_rev"] = res["rev"]
@@ -143,12 +141,30 @@ module ShyCouch
143
141
  def initialize(name, views=[])
144
142
  merge! "_id" => "_design/#{name.to_s}"
145
143
  @parser = ShyRubyJS::ShySexpParser.new
146
- h = {"views" => {}}
147
- views.each do |view|
144
+ @views = views
145
+ merge_views
146
+ end
147
+
148
+ def add_view(view)
149
+ raise TypeError unless view.kind_of?(ShyCouch::Data::View)
150
+ @views << view
151
+ merge_views
152
+ end
153
+
154
+ def view(view_name, &block)
155
+ add_view(ShyCouch::Data::View.new(view_name, &block))
156
+ end
157
+
158
+ private
159
+
160
+ def merge_views
161
+ h = { "views" => {}}
162
+ @views.each do |view|
148
163
  h["views"][view.name] = view.functions
149
164
  end
150
165
  merge! h
151
166
  end
167
+
152
168
  end
153
169
 
154
170
  end
@@ -22,12 +22,12 @@ require_relative 'test_couchdb_api'
22
22
  # test ShyCouch::Fields
23
23
  # some of the tests in here are disabled cos they involve attempting to resolve a bad domain name
24
24
  require_relative 'test_fields'
25
-
26
- # test ShyCouch::Data::CouchDocument
25
+ #
26
+ # # test ShyCouch::Data::CouchDocument
27
27
  require_relative 'test_couch_document'
28
-
28
+ #
29
29
  require_relative 'test_couchdb_factory'
30
-
30
+ #
31
31
  require_relative 'test_design_documents'
32
-
32
+ #
33
33
  require_relative 'test_views'
@@ -1,12 +1,12 @@
1
1
  require 'test/unit'
2
2
  require_relative '../lib/ShyCouch.rb'
3
3
 
4
- class CouchDocumentTests# < Test::Unit::TestCase
4
+ class CouchDocumentTests
5
5
 
6
6
  class TestDocumentCreation < Test::Unit::TestCase
7
7
  def setup
8
8
  valid_settings = $settings
9
- @couchdb = ShyCouch.create(valid_settings)
9
+ @couchdb = ShyCouch.getDB(valid_settings)
10
10
  end
11
11
  def teardown
12
12
  @couchdb.delete_database
@@ -53,7 +53,7 @@ class CouchDocumentTests# < Test::Unit::TestCase
53
53
  # assumes success of the stuff in TestDocumentPulling
54
54
  def setup
55
55
  valid_settings = $settings
56
- $couchdb = ShyCouch.create(valid_settings)
56
+ $couchdb = ShyCouch.getDB(valid_settings)
57
57
 
58
58
 
59
59
  @valid_documents = [
@@ -69,7 +69,7 @@ class CouchDocumentTests# < Test::Unit::TestCase
69
69
  ShyCouch::Data::CouchDocument.new("whatever"=>"yep"),
70
70
  ShyCouch::Data::CouchDocument.new("is_a_document"=>true, "number_of_docs_this_is"=>1)
71
71
  ].each { |doc|
72
- doc.push
72
+ doc.push($couchdb)
73
73
  }
74
74
  @invalid_documents = nil # make sure user can't set rev maybe? or is that legal?
75
75
  end
@@ -80,30 +80,30 @@ class CouchDocumentTests# < Test::Unit::TestCase
80
80
  end
81
81
 
82
82
  def test_keys_as_attr_accessors
83
- # tests that if there is a "phone" key on "doc" object you can do doc.phone
84
- @valid_documents.each { |doc|
85
- doc.keys.each { |key|
86
- assert_respond_to(doc, key)
87
- }
88
- }
89
- end
90
-
83
+ # tests that if there is a "phone" key on "doc" object you can do doc.phone
84
+ @valid_documents.each { |doc|
85
+ doc.keys.each { |key|
86
+ assert_respond_to(doc, key)
87
+ }
88
+ }
89
+ end
90
+
91
91
  def test_push_new_documents
92
- @valid_documents.each { |doc|
93
- # put the document on the server, grab the server's response
94
- res = doc.push
95
- # check that the server included "ok"=>true in its response
96
- assert(res["ok"])
97
- # check that the doc now has an id and a rev
98
- assert(doc["_id"])
99
- assert(doc["_rev"])
100
- # get the new doc
101
- newDoc = $couchdb.pull_document(doc)
102
- # test equality of all the attributes aside from id and rev on the new document
103
- doc.attr_keys.each { |k|
104
- assert_equal(doc["k"], newDoc["k"])
105
- }
106
- }
92
+ @valid_documents.each { |doc|
93
+ # put the document on the server, grab the server's response
94
+ res = doc.push($couchdb)
95
+ # check that the server included "ok"=>true in its response
96
+ assert(res["ok"])
97
+ # check that the doc now has an id and a rev
98
+ assert(doc["_id"])
99
+ assert(doc["_rev"])
100
+ # get the new doc
101
+ newDoc = $couchdb.pull_document(doc)
102
+ # test equality of all the attributes aside from id and rev on the new document
103
+ doc.attr_keys.each { |k|
104
+ assert_equal(doc["k"], newDoc["k"])
105
+ }
106
+ }
107
107
  end
108
108
 
109
109
  def test_change_existing_documents
@@ -116,7 +116,7 @@ class CouchDocumentTests# < Test::Unit::TestCase
116
116
  doc.buttonCount = 5
117
117
  doc.friends = ["alan", "alex", "all me other mates"]
118
118
 
119
- res = doc.push
119
+ res = doc.push($couchdb)
120
120
  assert(res["ok"])
121
121
 
122
122
  # pull it from the database again
@@ -132,8 +132,8 @@ class CouchDocumentTests# < Test::Unit::TestCase
132
132
  def test_illegal_change_to_rev
133
133
  @existing_valid_documents.each { |doc|
134
134
  doc._rev = "hurr"
135
- assert_raise RuntimeError do
136
- res = doc.push
135
+ assert_raise RestClient::BadRequest do
136
+ res = doc.push($couchdb)
137
137
  end
138
138
  }
139
139
  end
@@ -4,7 +4,7 @@ require_relative '../lib/ShyCouch.rb'
4
4
  class TestCouchDBAPI < Test::Unit::TestCase
5
5
  def setup
6
6
  valid_settings = $settings
7
- $database = ShyCouch.create(valid_settings)
7
+ $database = ShyCouch.getDB(valid_settings)
8
8
  end
9
9
 
10
10
  def teardown
@@ -10,6 +10,6 @@ class TestCouchDBFactory < Test::Unit::TestCase
10
10
  end
11
11
 
12
12
  def test_create_database
13
- assert_kind_of(ShyCouch::CouchDatabase, ShyCouch.create(@valid_settings))
13
+ assert_kind_of(ShyCouch::CouchDatabase, ShyCouch.getDB(@valid_settings))
14
14
  end
15
15
  end
@@ -40,9 +40,7 @@ class DesignDocumentTests
40
40
  design = setup_design_document
41
41
  @couchdb.add_design_documents_and_push(design)
42
42
  add_some_documents
43
- puts design.views["count_recipes"]
44
- require 'irb'
45
- IRB.start
43
+ # puts design.views["count_recipes"]
46
44
  end
47
45
 
48
46
  def setup_views
@@ -23,31 +23,31 @@ class CouchViewTests < Test::Unit::TestCase
23
23
 
24
24
  end
25
25
 
26
- def test_define_map_view
27
- view :five_star_butts do
28
- map do
29
- # def function(doc)
30
- emit(doc) if doc.kind == "butt" and doc.star_rating == 5
31
- # end
32
- end
33
- end
34
- expected_js = JS_MAP_FUNCTION_HEADER + %{if( doc.kind == 'butt' && doc.star_rating == 5 ) {\n emit(doc)\n}} + JS_FUNCTION_FOOTER
35
- assert_equal(expected_js, @couch_views[0].map)
36
- end
37
-
38
- def test_define_map_and_reduce_view
39
- view :beggar_count do
40
- map do
41
- emit(doc) if doc.kind == "beggar"
42
- end
43
- reduce do
44
- return sum(values)
45
- end
46
- end
47
- expected_map = JS_MAP_FUNCTION_HEADER + %{if( doc.kind == 'beggar' ) {\n emit(doc)\n}} + JS_FUNCTION_FOOTER
48
- expected_reduce = JS_REDUCE_FUNCTION_HEADER + %{return sum(values);} + JS_FUNCTION_FOOTER
49
- assert_equal(expected_map, @couch_views[0].map)
50
- assert_equal(expected_reduce, @couch_views[0].reduce)
51
- end
26
+ # def test_define_map_view
27
+ # view :five_star_butts do
28
+ # map do
29
+ # # def function(doc)
30
+ # emit(doc) if doc.kind == "butt" and doc.star_rating == 5
31
+ # # end
32
+ # end
33
+ # end
34
+ # expected_js = JS_MAP_FUNCTION_HEADER + %{if( doc.kind == 'butt' && doc.star_rating == 5 ) {\n emit(doc)\n}} + JS_FUNCTION_FOOTER
35
+ # assert_equal(expected_js, @couch_views[0].map)
36
+ # end
37
+ #
38
+ # def test_define_map_and_reduce_view
39
+ # view :beggar_count do
40
+ # map do
41
+ # emit(doc) if doc.kind == "beggar"
42
+ # end
43
+ # reduce do
44
+ # return sum(values)
45
+ # end
46
+ # end
47
+ # expected_map = JS_MAP_FUNCTION_HEADER + %{if( doc.kind == 'beggar' ) {\n emit(doc)\n}} + JS_FUNCTION_FOOTER
48
+ # expected_reduce = JS_REDUCE_FUNCTION_HEADER + %{return sum(values);} + JS_FUNCTION_FOOTER
49
+ # assert_equal(expected_map, @couch_views[0].map)
50
+ # assert_equal(expected_reduce, @couch_views[0].reduce)
51
+ # end
52
52
 
53
53
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ShyCouch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.2
4
+ version: 0.5.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -11,11 +11,11 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2011-09-01 00:00:00.000000000Z
14
+ date: 2011-09-18 00:00:00.000000000Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: ShyRubyJS
18
- requirement: &70241067513520 !ruby/object:Gem::Requirement
18
+ requirement: &70144500883400 !ruby/object:Gem::Requirement
19
19
  none: false
20
20
  requirements:
21
21
  - - ! '>='
@@ -23,10 +23,10 @@ dependencies:
23
23
  version: '0'
24
24
  type: :runtime
25
25
  prerelease: false
26
- version_requirements: *70241067513520
26
+ version_requirements: *70144500883400
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
- requirement: &70241067513040 !ruby/object:Gem::Requirement
29
+ requirement: &70144500899300 !ruby/object:Gem::Requirement
30
30
  none: false
31
31
  requirements:
32
32
  - - ~>
@@ -34,10 +34,10 @@ dependencies:
34
34
  version: 1.0.0
35
35
  type: :development
36
36
  prerelease: false
37
- version_requirements: *70241067513040
37
+ version_requirements: *70144500899300
38
38
  - !ruby/object:Gem::Dependency
39
39
  name: jeweler
40
- requirement: &70241067512560 !ruby/object:Gem::Requirement
40
+ requirement: &70144500898820 !ruby/object:Gem::Requirement
41
41
  none: false
42
42
  requirements:
43
43
  - - ~>
@@ -45,10 +45,10 @@ dependencies:
45
45
  version: 1.6.4
46
46
  type: :development
47
47
  prerelease: false
48
- version_requirements: *70241067512560
48
+ version_requirements: *70144500898820
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: rcov
51
- requirement: &70241067512080 !ruby/object:Gem::Requirement
51
+ requirement: &70144500898340 !ruby/object:Gem::Requirement
52
52
  none: false
53
53
  requirements:
54
54
  - - ! '>='
@@ -56,10 +56,10 @@ dependencies:
56
56
  version: '0'
57
57
  type: :development
58
58
  prerelease: false
59
- version_requirements: *70241067512080
59
+ version_requirements: *70144500898340
60
60
  - !ruby/object:Gem::Dependency
61
61
  name: sourcify
62
- requirement: &70241067511600 !ruby/object:Gem::Requirement
62
+ requirement: &70144500897860 !ruby/object:Gem::Requirement
63
63
  none: false
64
64
  requirements:
65
65
  - - ~>
@@ -67,10 +67,10 @@ dependencies:
67
67
  version: 0.5.0
68
68
  type: :development
69
69
  prerelease: false
70
- version_requirements: *70241067511600
70
+ version_requirements: *70144500897860
71
71
  - !ruby/object:Gem::Dependency
72
72
  name: ShyRubyJS
73
- requirement: &70241067511120 !ruby/object:Gem::Requirement
73
+ requirement: &70144500897380 !ruby/object:Gem::Requirement
74
74
  none: false
75
75
  requirements:
76
76
  - - ! '>='
@@ -78,10 +78,10 @@ dependencies:
78
78
  version: '0'
79
79
  type: :development
80
80
  prerelease: false
81
- version_requirements: *70241067511120
81
+ version_requirements: *70144500897380
82
82
  - !ruby/object:Gem::Dependency
83
83
  name: ShyRubyJS
84
- requirement: &70241067510640 !ruby/object:Gem::Requirement
84
+ requirement: &70144500896900 !ruby/object:Gem::Requirement
85
85
  none: false
86
86
  requirements:
87
87
  - - ! '>='
@@ -89,10 +89,21 @@ dependencies:
89
89
  version: '0'
90
90
  type: :runtime
91
91
  prerelease: false
92
- version_requirements: *70241067510640
92
+ version_requirements: *70144500896900
93
+ - !ruby/object:Gem::Dependency
94
+ name: rest-client
95
+ requirement: &70144500896420 !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: 1.6.7
101
+ type: :runtime
102
+ prerelease: false
103
+ version_requirements: *70144500896420
93
104
  - !ruby/object:Gem::Dependency
94
105
  name: sourcify
95
- requirement: &70241067510160 !ruby/object:Gem::Requirement
106
+ requirement: &70144500895940 !ruby/object:Gem::Requirement
96
107
  none: false
97
108
  requirements:
98
109
  - - ! '>='
@@ -100,7 +111,7 @@ dependencies:
100
111
  version: '0'
101
112
  type: :runtime
102
113
  prerelease: false
103
- version_requirements: *70241067510160
114
+ version_requirements: *70144500895940
104
115
  description: Ruby API for CouchDB, designed to work with the Camping micro-framework.
105
116
  email: danbryan@gmail.com
106
117
  executables: []
@@ -117,6 +128,7 @@ files:
117
128
  - Rakefile
118
129
  - ShyCouch.gemspec
119
130
  - VERSION
131
+ - design_notes.rb
120
132
  - lib/ShyCouch.rb
121
133
  - lib/ShyCouch/data.rb
122
134
  - lib/ShyCouch/fields.rb
@@ -145,7 +157,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
145
157
  version: '0'
146
158
  segments:
147
159
  - 0
148
- hash: 4020979240365981983
160
+ hash: 2267181098830076376
149
161
  required_rubygems_version: !ruby/object:Gem::Requirement
150
162
  none: false
151
163
  requirements: