leanback 0.2.8 → 0.3.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.
@@ -1,3 +1,15 @@
1
+ =Leanback 0.3.0
2
+ Nvember 20,2011
3
+ * Added CouchDB Security features: working with admin and non-admin users, authentication, adding security objects to databases. See documentation for details.
4
+
5
+ November 9,2011:-
6
+ * Added support for couchDB configuration API. It's now possible to change/modify/delete any couchDB configuration settings with Leanback. README will soon be updated with details.
7
+
8
+
9
+ November 3, 2011:-
10
+ * Changed all the syntax for working with documents (creating, editing, updating and deleting documents now use a new syntax) See README for the change. Document::Module has been removed, it's methods are now part of Couchdb::Module.
11
+
12
+
1
13
  =Leanback 0.2.7
2
14
  August 4, 2011:-
3
15
  * Added ability to Query a permanent view and create it on the fly from a json file, if it doesn't already exist and then return the values
data/Gemfile CHANGED
@@ -13,4 +13,5 @@ group :development do
13
13
  gem "bundler", "~> 1.0.0"
14
14
  gem "jeweler", "~> 1.5.2"
15
15
  gem "rcov", ">= 0"
16
+ gem "rspec"
16
17
  end
@@ -2,6 +2,7 @@ GEM
2
2
  remote: http://rubygems.org/
3
3
  remote: http://gemcutter.org/
4
4
  specs:
5
+ diff-lcs (1.1.2)
5
6
  git (1.2.5)
6
7
  jeweler (1.5.2)
7
8
  bundler (~> 1.0.0)
@@ -12,6 +13,14 @@ GEM
12
13
  rcov (0.9.9)
13
14
  rest-client (1.6.1)
14
15
  mime-types (>= 1.16)
16
+ rspec (2.6.0)
17
+ rspec-core (~> 2.6.0)
18
+ rspec-expectations (~> 2.6.0)
19
+ rspec-mocks (~> 2.6.0)
20
+ rspec-core (2.6.4)
21
+ rspec-expectations (2.6.0)
22
+ diff-lcs (~> 1.1.2)
23
+ rspec-mocks (2.6.0)
15
24
  shoulda (2.11.3)
16
25
  yajl-ruby (0.8.2)
17
26
 
@@ -23,5 +32,6 @@ DEPENDENCIES
23
32
  jeweler (~> 1.5.2)
24
33
  rcov
25
34
  rest-client
35
+ rspec
26
36
  shoulda
27
37
  yajl-ruby
@@ -0,0 +1,39 @@
1
+ ###Leanback
2
+
3
+ Simple Ruby Interface to CouchDB.
4
+
5
+ This project is still under development. Not complete by any means. I made this Gem to use in my projects. I will expose more CouchDB features soon.
6
+
7
+ ##Goals
8
+ * To create a simple Ruby Interface to CouchDB
9
+ * Expose the features of CouchDB to the Ruby Lang.,
10
+ * Use a minimalist Ruby DSL to access CouchDB
11
+ * provide a very easy way to persist and retrieve data
12
+
13
+ ##Usage
14
+
15
+
16
+ * [Leanback](http://www.whisperservers.com/leanback/leanback/)
17
+
18
+ + [Installation](http://www.whisperservers.com/leanback/leanback/installation/)
19
+
20
+ + [Basic CouchDB Operations](http://www.whisperservers.com/leanback/basic-couchdb-operations/)
21
+
22
+ + Working with [CouchDB Views](http://www.whisperservers.com/leanback/design-documents-and-permanent-views/)
23
+
24
+ + [Error Handling](http://www.whisperservers.com/ragios/ragios-saint-ruby/status-reports/)
25
+
26
+ + [CouchDB Configuration](http://www.whisperservers.com/leanback/couchdb-configuration/)
27
+
28
+ + [CouchDB Security](http://www.whisperservers.com/leanback/couchdb-security/)
29
+
30
+ + [CouchDB Bind_Address & Port](http://www.whisperservers.com/leanback/setting-the-bind_address-port/)
31
+
32
+ ##License
33
+ MIT License.
34
+
35
+ ##Copyright
36
+
37
+ Copyright (c) 2011 Obi Akubue.
38
+
39
+
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.8
1
+ 0.3.0
@@ -5,16 +5,16 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{leanback}
8
- s.version = "0.2.8"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Obi Akubue"]
12
- s.date = %q{2011-09-14}
11
+ s.authors = [%q{Obi Akubue}]
12
+ s.date = %q{2011-11-21}
13
13
  s.description = %q{lightweight Ruby interface to CouchDB}
14
14
  s.email = %q{obioraakubue@yahoo.com}
15
15
  s.extra_rdoc_files = [
16
16
  "LICENSE.txt",
17
- "README.rdoc"
17
+ "README.md"
18
18
  ]
19
19
  s.files = [
20
20
  ".document",
@@ -22,27 +22,36 @@ Gem::Specification.new do |s|
22
22
  "Gemfile",
23
23
  "Gemfile.lock",
24
24
  "LICENSE.txt",
25
- "README.rdoc",
25
+ "README.md",
26
26
  "Rakefile",
27
27
  "VERSION",
28
28
  "leanback.gemspec",
29
29
  "lib/leanback.rb",
30
+ "spec/admin_party/database_spec.rb",
31
+ "spec/no_admin_party/database_spec.rb",
32
+ "spec/no_admin_party/non_admin_user_spec.rb",
33
+ "spec/spec_base.rb",
30
34
  "test/helper.rb",
35
+ "test/main.rb",
31
36
  "test/my_views.json",
32
37
  "test/test_leanback.rb"
33
38
  ]
34
39
  s.homepage = %q{http://github.com/obi-a/leanback}
35
- s.licenses = ["MIT"]
36
- s.require_paths = ["lib"]
37
- s.rubygems_version = %q{1.3.7}
40
+ s.licenses = [%q{MIT}]
41
+ s.require_paths = [%q{lib}]
42
+ s.rubygems_version = %q{1.8.5}
38
43
  s.summary = %q{lightweight Ruby interface to CouchDB}
39
44
  s.test_files = [
45
+ "spec/admin_party/database_spec.rb",
46
+ "spec/no_admin_party/database_spec.rb",
47
+ "spec/no_admin_party/non_admin_user_spec.rb",
48
+ "spec/spec_base.rb",
40
49
  "test/helper.rb",
50
+ "test/main.rb",
41
51
  "test/test_leanback.rb"
42
52
  ]
43
53
 
44
54
  if s.respond_to? :specification_version then
45
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
46
55
  s.specification_version = 3
47
56
 
48
57
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
@@ -52,6 +61,7 @@ Gem::Specification.new do |s|
52
61
  s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
53
62
  s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
54
63
  s.add_development_dependency(%q<rcov>, [">= 0"])
64
+ s.add_development_dependency(%q<rspec>, [">= 0"])
55
65
  else
56
66
  s.add_dependency(%q<rest-client>, [">= 0"])
57
67
  s.add_dependency(%q<yajl-ruby>, [">= 0"])
@@ -59,6 +69,7 @@ Gem::Specification.new do |s|
59
69
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
60
70
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
61
71
  s.add_dependency(%q<rcov>, [">= 0"])
72
+ s.add_dependency(%q<rspec>, [">= 0"])
62
73
  end
63
74
  else
64
75
  s.add_dependency(%q<rest-client>, [">= 0"])
@@ -67,6 +78,7 @@ Gem::Specification.new do |s|
67
78
  s.add_dependency(%q<bundler>, ["~> 1.0.0"])
68
79
  s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
69
80
  s.add_dependency(%q<rcov>, [">= 0"])
81
+ s.add_dependency(%q<rspec>, [">= 0"])
70
82
  end
71
83
  end
72
84
 
@@ -9,18 +9,129 @@ class CouchdbException < RuntimeError
9
9
  end
10
10
  end
11
11
 
12
+ module Couchdb
13
+
14
+ #add a new user
15
+ def self.add_user(user, auth_session="")
16
+ o = [('a'..'z'),('A'..'Z')].map{|i| i.to_a}.flatten;
17
+ salt = (0..50).map{ o[rand(o.length)] }.join;
18
+ new_user = {:username => user[:username], :password => user[:password], :roles => user[:roles], :salt => salt}
19
+ create_user(new_user,auth_session)
20
+ end
12
21
 
13
- module Document
22
+ #create a new user
23
+ def self.create_user(user,auth_session= "")
24
+ password_sha = Digest::SHA1.hexdigest(user[:password] + user[:salt])
14
25
 
15
- #create a document
16
- def self.create( doc)
26
+ user_hash = { :type => "user",
27
+ :name => user[:username],
28
+ :password_sha => password_sha,
29
+ :salt => user[:salt],
30
+ :roles => user[:roles]
31
+ }
32
+
33
+ str = Yajl::Encoder.encode(user_hash)
34
+ set_address
35
+ begin
36
+ response = RestClient.put 'http://' + @address + ':' + @port + '/_users/org.couchdb.user:' + URI.escape(user[:username]), str,{:cookies => {"AuthSession" => auth_session}}
37
+ hash = Yajl::Parser.parse(response.to_str)
38
+ rescue => e
39
+ hash = Yajl::Parser.parse(e.response.to_s)
40
+ raise CouchdbException.new(hash), "CouchDB: Error - " + hash.values[0] + ". Reason - " + hash.values[1]
41
+ end
42
+
43
+ end
44
+
45
+ #add security object
46
+ def self.set_security(db_name, data,auth_session="")
47
+ security_data = Yajl::Encoder.encode(data)
48
+ set_address
49
+ begin
50
+ response = RestClient.put 'http://' + @address + ':' + @port + '/' + URI.escape(db_name) + '/_security/',security_data, {:cookies => {"AuthSession" => auth_session}}
51
+ hash = Yajl::Parser.parse(response.to_str)
52
+ rescue => e
53
+ hash = Yajl::Parser.parse(e.response.to_s)
54
+ raise CouchdbException.new(hash), "CouchDB: Error - " + hash.values[0] + ". Reason - " + hash.values[1]
55
+ end
56
+ end
57
+ #get security object
58
+ def self.get_security(db_name, auth_session="")
59
+ set_address
60
+ begin
61
+ response = RestClient.get 'http://' + @address + ':' + @port + '/' + URI.escape(db_name) + '/_security/', {:cookies => {"AuthSession" => auth_session}}
62
+ hash = Yajl::Parser.parse(response.to_str)
63
+ rescue => e
64
+ hash = Yajl::Parser.parse(e.response.to_s)
65
+ raise CouchdbException.new(hash), "CouchDB: Error - " + hash.values[0] + ". Reason - " + hash.values[1]
66
+ end
67
+ end
68
+
69
+
70
+ #login to couchdb
71
+ def self.login(username, password)
72
+ set_address
73
+ data = 'name=' + username + '&password=' + password
74
+ begin
75
+ response = RestClient.post 'http://' + @address + ':' + @port + '/_session/', data, {:content_type => 'application/x-www-form-urlencoded'}
76
+ response.cookies
77
+ rescue => e
78
+ hash = Yajl::Parser.parse(e.response.to_s)
79
+ raise CouchdbException.new(hash), "CouchDB: Error - " + hash.values[0] + ". Reason - " + hash.values[1]
80
+ end
81
+ end
82
+
83
+ #couchdb configuration api
84
+ def self.set_config(data,auth_session = "")
85
+ section = data[:section]
86
+ key = data[:key]
87
+ value = data[:value]
88
+ json_data = Yajl::Encoder.encode(value)
89
+ set_address
90
+ begin
91
+ response = RestClient.put 'http://' + @address + ':' + @port + '/_config/' + URI.escape(section) + '/' + URI.escape(key),json_data, {:cookies => {"AuthSession" => auth_session}}
92
+ hash = Yajl::Parser.parse(response.to_str)
93
+ rescue => e
94
+ hash = Yajl::Parser.parse(e.response.to_s)
95
+ raise CouchdbException.new(hash), "CouchDB: Error - " + hash.values[0] + ". Reason - " + hash.values[1]
96
+ end
97
+ end
98
+
99
+ def self.delete_config(data,auth_session = "")
100
+ section = data[:section]
101
+ key = data[:key]
102
+ set_address
103
+ begin
104
+ response = RestClient.delete 'http://' + @address + ':' + @port + '/_config/' + URI.escape(section) + '/' + URI.escape(key), {:cookies => {"AuthSession" => auth_session}}
105
+ hash = Yajl::Parser.parse(response.to_str)
106
+ rescue => e
107
+ hash = Yajl::Parser.parse(e.response.to_s)
108
+ raise CouchdbException.new(hash), "CouchDB: Error - " + hash.values[0] + ". Reason - " + hash.values[1]
109
+ end
110
+ end
111
+
112
+
113
+ def self.get_config(data,auth_session = "")
114
+ section = data[:section]
115
+ key = data[:key]
116
+ set_address
117
+ begin
118
+ response = RestClient.get 'http://' + @address + ':' + @port + '/_config/' + URI.escape(section) + '/' + URI.escape(key), {:cookies => {"AuthSession" => auth_session}}
119
+ hash = Yajl::Parser.parse(response.to_str)
120
+ rescue => e
121
+ hash = Yajl::Parser.parse(e.response.to_s)
122
+ raise CouchdbException.new(hash), "CouchDB: Error - " + hash.values[0] + ". Reason - " + hash.values[1]
123
+ end
124
+ end
125
+
126
+ #create a document
127
+ def self.create_doc( doc,auth_session = "")
17
128
  db_name = doc[:database]
18
129
  doc_id = doc[:doc_id]
19
130
  data = doc[:data]
20
131
  json_data = Yajl::Encoder.encode(data)
21
132
  set_address
22
133
  begin
23
- response = RestClient.put 'http://' + @address + ':' + @port + '/' + URI.escape(db_name) + '/' + URI.escape(doc_id),json_data, {:content_type => :json, :accept => :json}
134
+ response = RestClient.put 'http://' + @address + ':' + @port + '/' + URI.escape(db_name) + '/' + URI.escape(doc_id),json_data, {:cookies => {"AuthSession" => auth_session}}
24
135
  hash = Yajl::Parser.parse(response.to_str)
25
136
  rescue => e
26
137
  hash = Yajl::Parser.parse(e.response.to_s)
@@ -29,14 +140,14 @@ module Document
29
140
  end
30
141
 
31
142
  #edit a document
32
- def self.edit(doc)
143
+ def self.edit_doc(doc,auth_session = "")
33
144
  db_name = doc[:database]
34
145
  doc_id = doc[:doc_id]
35
146
  data = doc[:data]
36
147
  json_data = Yajl::Encoder.encode(data)
37
148
  set_address
38
149
  begin
39
- response = RestClient.put 'http://' + @address + ':' + @port + '/' + URI.escape(db_name) + '/' + URI.escape(doc_id), json_data, {:content_type => :json, :accept => :json}
150
+ response = RestClient.put 'http://' + @address + ':' + @port + '/' + URI.escape(db_name) + '/' + URI.escape(doc_id), json_data, {:cookies => {"AuthSession" => auth_session}}
40
151
  hash = Yajl::Parser.parse(response.to_str)
41
152
  rescue => e
42
153
  hash = Yajl::Parser.parse(e.response.to_s)
@@ -45,36 +156,36 @@ module Document
45
156
  end
46
157
 
47
158
  #update a doc
48
- def self.update (doc)
159
+ def self.update_doc(doc,auth_session = "")
49
160
  db_name = doc[:database]
50
161
  doc_id = doc[:doc_id]
51
162
  data = doc[:data]
52
163
  doc = {:database => db_name, :doc_id => doc_id}
53
- options = Couchdb.view doc
164
+ options = Couchdb.view doc,auth_session
54
165
  options = options.merge(data)
55
166
  doc = {:database => db_name, :doc_id => doc_id, :data => options}
56
- edit doc
167
+ edit_doc doc,auth_session
57
168
  end
58
169
 
59
170
  #delete document
60
- def self.delete(doc)
171
+ def self.delete_doc(doc,auth_session = "")
61
172
  db_name = doc[:database]
62
173
  doc_id = doc[:doc_id]
63
174
  doc = {:database => db_name, :doc_id => doc_id}
64
- hash = Couchdb.view doc
175
+ hash = Couchdb.view doc,auth_session
65
176
  doc = {:database => db_name, :doc_id => doc_id, :rev => hash["_rev"]}
66
- delete_rev doc
177
+ delete_rev(doc,auth_session)
67
178
  end
68
179
 
69
180
 
70
181
  #delete a doc by rev#
71
- def self.delete_rev(doc)
182
+ def self.delete_rev(doc,auth_session = "")
72
183
  db_name = doc[:database]
73
184
  doc_id = doc[:doc_id]
74
185
  rev = doc[:rev]
75
186
  set_address
76
187
  begin
77
- response = RestClient.delete 'http://' + @address + ':' + @port + '/' + URI.escape(db_name) + '/' + URI.escape(doc_id) + '?rev=' + rev, {:content_type => :json}
188
+ response = RestClient.delete 'http://' + @address + ':' + @port + '/' + URI.escape(db_name) + '/' + URI.escape(doc_id) + '?rev=' + rev, {:cookies => {"AuthSession" => auth_session}}
78
189
  hash = Yajl::Parser.parse(response.to_str)
79
190
  rescue => e
80
191
  hash = Yajl::Parser.parse(e.response.to_s)
@@ -82,24 +193,12 @@ module Document
82
193
  end
83
194
  end
84
195
 
85
- class << self
86
- attr_accessor :address
87
- attr_accessor :port
88
- def set_address
89
- if @address == nil && port == nil
90
- @address = '127.0.0.1'
91
- @port = '5984'
92
- end
93
- end
94
- end
95
- end
96
196
 
97
- module Couchdb
98
197
  #create a database if one with the same name doesn't already exist
99
- def self.create(database_name)
198
+ def self.create(database_name,auth_session = "")
100
199
  set_address
101
200
  begin
102
- response = RestClient.put 'http://' + @address + ':' + @port + '/' + URI.escape(database_name), {:content_type => :json}
201
+ response = RestClient.put 'http://' + @address + ':' + @port + '/' + URI.escape(database_name), {:content_type => :json},{:cookies => {"AuthSession" => auth_session}}
103
202
  hash = Yajl::Parser.parse(response.to_str)
104
203
  rescue => e
105
204
  hash = Yajl::Parser.parse(e.response.to_s)
@@ -108,10 +207,10 @@ module Couchdb
108
207
  end
109
208
 
110
209
  #delete a database
111
- def self.delete(database_name)
210
+ def self.delete(database_name,auth_session = "")
112
211
  set_address
113
212
  begin
114
- response = RestClient.delete 'http://' + @address + ':' + @port + '/' + URI.escape(database_name), {:content_type => :json}
213
+ response = RestClient.delete 'http://' + @address + ':' + @port + '/' + URI.escape(database_name), {:cookies => {"AuthSession" => auth_session}}
115
214
  hash = Yajl::Parser.parse(response.to_str)
116
215
  rescue => e
117
216
  hash = Yajl::Parser.parse(e.response.to_s)
@@ -120,10 +219,10 @@ module Couchdb
120
219
  end
121
220
 
122
221
  #return a list of all databases
123
- def self.all
222
+ def self.all(auth_session = "")
124
223
  set_address
125
224
  begin
126
- response = RestClient.get 'http://' + @address + ':' + @port + '/_all_dbs', {:content_type => :json}
225
+ response = RestClient.get 'http://' + @address + ':' + @port + '/_all_dbs', {:cookies => {"AuthSession" => auth_session}}
127
226
  hash = Yajl::Parser.parse(response.to_str)
128
227
  rescue => e
129
228
  raise e
@@ -131,12 +230,12 @@ module Couchdb
131
230
  end
132
231
 
133
232
  ##view a document
134
- def self.view(doc)
233
+ def self.view(doc,auth_session = "")
135
234
  set_address
136
235
  db_name = doc[:database]
137
236
  doc_id = doc[:doc_id]
138
237
  begin
139
- response = RestClient.get 'http://' + @address + ':' + @port + '/' + db_name + '/' + doc_id
238
+ response = RestClient.get 'http://' + @address + ':' + @port + '/' + db_name + '/' + doc_id,{:cookies => {"AuthSession" => auth_session}}
140
239
  hash = Yajl::Parser.parse(response.to_str)
141
240
  rescue => e
142
241
  hash = Yajl::Parser.parse(e.response.to_s)
@@ -145,16 +244,16 @@ def self.view(doc)
145
244
  end
146
245
 
147
246
  #query a permanent view
148
- def self.find(doc,key=nil)
247
+ def self.find(doc,auth_session = "",key=nil)
149
248
  set_address
150
249
  db_name = doc[:database]
151
250
  design_doc_name = doc[:design_doc]
152
251
  view_name = doc[:view]
153
252
  begin
154
253
  if key == nil
155
- response = RestClient.get 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name + '/_view/' + view_name
254
+ response = RestClient.get 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name + '/_view/' + view_name,{:cookies => {"AuthSession" => auth_session}}
156
255
  else
157
- response = RestClient.get 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name + '/_view/' + view_name + URI.escape('?key="' + key + '"')
256
+ response = RestClient.get 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name + '/_view/' + view_name + URI.escape('?key="' + key + '"'),{:cookies => {"AuthSession" => auth_session}}
158
257
  end
159
258
  hash = Yajl::Parser.parse(response.to_str)
160
259
  rows = hash["rows"]
@@ -172,7 +271,7 @@ def self.find(doc,key=nil)
172
271
  end
173
272
 
174
273
  #create a design document with views
175
- def self.create_design(doc)
274
+ def self.create_design(doc,auth_session = "")
176
275
  set_address
177
276
  db_name = doc[:database]
178
277
  design_doc_name = doc[:design_doc]
@@ -188,7 +287,7 @@ def self.create_design(doc)
188
287
 
189
288
  begin
190
289
 
191
- response = RestClient.put 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name, str, {:content_type => :json, :accept => :json}
290
+ response = RestClient.put 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name, str, {:cookies => {"AuthSession" => auth_session}}
192
291
  hash = Yajl::Parser.parse(response.to_str)
193
292
  rescue => e
194
293
  hash = Yajl::Parser.parse(e.response.to_s)
@@ -197,7 +296,7 @@ def self.create_design(doc)
197
296
  end
198
297
 
199
298
  #Query view, create view on fly if it dosen't already exist
200
- def self.find_on_fly(doc, key = nil)
299
+ def self.find_on_fly(doc,auth_session = "",key = nil)
201
300
  db_name = doc[:database]
202
301
  design_doc = doc[:design_doc]
203
302
  view = doc[:view]
@@ -205,17 +304,17 @@ def self.find_on_fly(doc, key = nil)
205
304
 
206
305
  begin
207
306
  if( key == nil)
208
- docs = find(:database => db_name, :design_doc => design_doc, :view => view)
307
+ docs = find({:database => db_name, :design_doc => design_doc, :view => view},auth_session)
209
308
  else
210
- docs = find({:database => db_name, :design_doc => design_doc, :view => view},key)
309
+ docs = find({:database => db_name, :design_doc => design_doc, :view => view},auth_session,key)
211
310
  end
212
311
  rescue CouchdbException => e
213
312
  document = { :database => db_name, :design_doc => design_doc, :json_doc => json_doc}
214
- create_design document
313
+ create_design document,auth_session
215
314
  if( key == nil)
216
- docs = find(:database => db_name, :design_doc => design_doc, :view => view)
315
+ docs = find({:database => db_name, :design_doc => design_doc, :view => view},auth_session)
217
316
  else
218
- docs = find({:database => db_name, :design_doc => design_doc, :view => view},key)
317
+ docs = find({:database => db_name, :design_doc => design_doc, :view => view},auth_session,key)
219
318
  end
220
319
  end
221
320
  return docs
@@ -224,7 +323,7 @@ def self.find_on_fly(doc, key = nil)
224
323
 
225
324
  #add a finder method to the database
226
325
  #this creates a find by key method
227
- def self.add_finder(options)
326
+ def self.add_finder(options,auth_session = "")
228
327
  set_address
229
328
  db_name = options[:database]
230
329
  key = options[:key]
@@ -243,7 +342,7 @@ def self.add_finder(options)
243
342
  }'
244
343
 
245
344
  begin
246
- response = RestClient.put 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name, view, {:content_type => :json, :accept => :json}
345
+ response = RestClient.put 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name, view, {:cookies => {"AuthSession" => auth_session}}
247
346
  rescue => e
248
347
  hash = Yajl::Parser.parse(e.response.to_s)
249
348
  raise CouchdbException.new(hash), "CouchDB: Error - " + hash.values[0] + ". Reason - " + hash.values[1]
@@ -251,7 +350,7 @@ def self.add_finder(options)
251
350
  end
252
351
 
253
352
  #find by key
254
- def self.find_by(options)
353
+ def self.find_by(options,auth_session = "")
255
354
  set_address
256
355
  db_name = options[:database]
257
356
  index = options.keys[1].to_s
@@ -261,21 +360,21 @@ def self.find_by(options)
261
360
 
262
361
  begin
263
362
  view = { :database => db_name, :design_doc => design_doc_name, :view => view_name}
264
- docs = find view,search_term
363
+ docs = find view,auth_session,search_term
265
364
  rescue CouchdbException => e
266
365
  #add a finder/index if one doesn't already exist in the database
267
366
  #then find_by_key
268
- add_finder(:database => db_name, :key => index)
269
- docs = find view,search_term
367
+ add_finder({:database => db_name, :key => index},auth_session)
368
+ docs = find view,auth_session,search_term
270
369
  end
271
370
  return docs
272
371
  end
273
372
 
274
373
  #return a list of all docs in the database
275
- def self.docs_from(database_name)
374
+ def self.docs_from(database_name,auth_session = "")
276
375
  set_address
277
376
  begin
278
- response = RestClient.get 'http://' + @address + ':' + @port + '/' + URI.escape(database_name) + '/_all_docs?include_docs=true', {:content_type => :json}
377
+ response = RestClient.get 'http://' + @address + ':' + @port + '/' + URI.escape(database_name) + '/_all_docs?include_docs=true',{:cookies => {"AuthSession" => auth_session}}
279
378
  hash = Yajl::Parser.parse(response.to_str)
280
379
  rows = hash["rows"]
281
380
  count = 0
@@ -294,9 +393,12 @@ end
294
393
  class << self
295
394
  attr_accessor :address
296
395
  attr_accessor :port
396
+
297
397
  def set_address()
298
- if @address == nil && port == nil
398
+ if @address == nil
299
399
  @address = '127.0.0.1'
400
+ end
401
+ if @port == nil
300
402
  @port = '5984'
301
403
  end
302
404
  end