leanback 0.1.7 → 0.1.8
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.rdoc +46 -3
- data/VERSION +1 -1
- data/leanback.gemspec +3 -2
- data/lib/leanback.rb +51 -8
- data/test/my_views.json +11 -0
- data/test/test_leanback.rb +38 -29
- metadata +5 -4
data/README.rdoc
CHANGED
@@ -55,9 +55,9 @@ Lets edit that document to change the email address, phone number, and add a gen
|
|
55
55
|
Document.edit doc
|
56
56
|
# => {"ok"=>true, "id"=>"Linda", "rev"=>"2-e813a0e902e3ac114400ff3959a2adde"}
|
57
57
|
|
58
|
-
Retrieve the document
|
58
|
+
Retrieve/view the document
|
59
59
|
doc = {:database => 'contacts', :doc_id => 'Linda'}
|
60
|
-
Couchdb.
|
60
|
+
Couchdb.view doc
|
61
61
|
#=> {"_id"=>"Linda", "_rev"=>"2-e813a0e902e3ac114400ff3959a2adde", "firstname"=>"Linda",
|
62
62
|
"lastname"=>"smith", "email"=>"linda@mail.com", "gender"=>"female", "phone"=>"718-245-5611"}
|
63
63
|
|
@@ -77,6 +77,48 @@ Retrieve all documents in a database
|
|
77
77
|
puts d["phone"]
|
78
78
|
end
|
79
79
|
|
80
|
+
===Query a permanent view
|
81
|
+
view = { :database => "contacts", :design_doc => 'my_views', :view => 'get_female_contacts'}
|
82
|
+
Couchdb.find view
|
83
|
+
# => [{"_id"=>"Mary", "_rev"=>"5-bfcd67fd17dbb6a875af8f6dc497b15f", "firstname"=>"Mary", "lastname"=>"smith",
|
84
|
+
"phone"=>"212-234-1234", "email"=>"mary@mail.com", "gender"=>"female"},
|
85
|
+
{"_id"=>"Nancy", "_rev"=>"1-d15a83d2a23b495c19df2595b636ecc8", "firstname"=>"Nancy", "lastname"=>"Lee",
|
86
|
+
"phone"=>"347-808-3734", "email"=>"nancy@mail.com", "gender"=>"female"}]
|
87
|
+
|
88
|
+
This is similar to sending a
|
89
|
+
GET http://127.0.0.1:5984/[database]/_design/[design_doc]/_view/[view_name]
|
90
|
+
For the above example
|
91
|
+
GET http://127.0.0.1:5984/contacts/_design/my_views/_view/get_female_contacts
|
92
|
+
Leanback parses the native JSON results to return only the data values.
|
93
|
+
|
94
|
+
===Create a design document with permanent views:
|
95
|
+
First define the views in a JSON file
|
96
|
+
//my_views.json
|
97
|
+
{
|
98
|
+
"language" : "javascript",
|
99
|
+
"views" :{
|
100
|
+
"get_email" : {
|
101
|
+
"map" : "function(doc){
|
102
|
+
if(doc.lastname && doc.email)
|
103
|
+
emit(doc.id,{Firstname: doc.firstname, Lastname: doc.lastname, Email: doc.email});
|
104
|
+
}"
|
105
|
+
}
|
106
|
+
}
|
107
|
+
}
|
108
|
+
|
109
|
+
Now create the design document and add the json file
|
110
|
+
doc = { :database => 'contacts', :design_doc => 'more_views', :json_doc => '/path/to/my_views.json' }
|
111
|
+
hash = Couchdb.create_design doc
|
112
|
+
# => {"ok"=>true, "id"=>"_design/more_views", "rev"=>"1-d67ae97ff03a98f68ddc300bf9ae5048"}
|
113
|
+
|
114
|
+
To query the view
|
115
|
+
view = { :database => "contacts", :design_doc => 'more_views', :view => 'get_email'}
|
116
|
+
Couchdb.find view
|
117
|
+
# => [{"Firstname"=>"Nancy", "Lastname"=>"Lee", "Email"=>"nancy@mail.com"},
|
118
|
+
{"Firstname"=>"john", "Lastname"=>"smith", "Email"=>"john@mail.com"}]
|
119
|
+
|
120
|
+
|
121
|
+
===Error handling
|
80
122
|
Attempting to create a database that already exists
|
81
123
|
Couchdb.create 'contacts'
|
82
124
|
# => {"error"=>"file_exists", "reason"=>"The database could not be created, the file already exists."}
|
@@ -85,12 +127,13 @@ Attempting to delete a database that no longer exists
|
|
85
127
|
Couchdb.delete 'more_books'
|
86
128
|
# => {"error"=>"not_found", "reason"=>"missing"}
|
87
129
|
|
88
|
-
Most methods return a hash value unless otherwise specified. When a database transaction goes through successfully most methods will return a hash
|
130
|
+
Most methods return a hash value unless otherwise specified. When a database transaction goes through successfully most methods will return a hash {"ok" => true ...} and when something goes wrong it returns a hash {"error" => ...}
|
89
131
|
|
90
132
|
You can always check this value
|
91
133
|
hash = Couchdb.delete 'schools'
|
92
134
|
puts hash.inspect
|
93
135
|
|
136
|
+
===Bind Address
|
94
137
|
Leanback uses the default Couchdb bind address http://127.0.0.1:5984. To use a different bind address;
|
95
138
|
Couchdb.address = '192.168.2.16'
|
96
139
|
Couchdb.port = '6000'
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.8
|
data/leanback.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{leanback}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Obi Akubue"]
|
12
|
-
s.date = %q{2011-
|
12
|
+
s.date = %q{2011-07-04}
|
13
13
|
s.description = %q{lightweight Ruby interface to CouchDB}
|
14
14
|
s.email = %q{obioraakubue@yahoo.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
"leanback.gemspec",
|
28
28
|
"lib/leanback.rb",
|
29
29
|
"test/helper.rb",
|
30
|
+
"test/my_views.json",
|
30
31
|
"test/test_leanback.rb"
|
31
32
|
]
|
32
33
|
s.homepage = %q{http://github.com/obi-a/leanback}
|
data/lib/leanback.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rest_client'
|
2
2
|
require 'yajl'
|
3
|
+
require 'erb'
|
3
4
|
|
4
5
|
module Document
|
5
6
|
|
@@ -94,21 +95,64 @@ module Couchdb
|
|
94
95
|
end
|
95
96
|
end
|
96
97
|
|
97
|
-
##
|
98
|
-
def self.
|
98
|
+
##view a document
|
99
|
+
def self.view(doc)
|
99
100
|
set_address
|
100
101
|
db_name = doc[:database]
|
101
102
|
doc_id = doc[:doc_id]
|
102
103
|
begin
|
103
104
|
response = RestClient.get 'http://' + @address + ':' + @port + '/' + db_name + '/' + doc_id
|
104
105
|
hash = Yajl::Parser.parse(response.to_str)
|
105
|
-
#puts hash.inspect
|
106
106
|
rescue => e
|
107
107
|
hash = Yajl::Parser.parse(e.response.to_s)
|
108
|
-
#puts hash.inspect
|
109
108
|
end
|
110
109
|
end
|
111
110
|
|
111
|
+
#query a permanent view
|
112
|
+
def self.find(doc)
|
113
|
+
set_address
|
114
|
+
db_name = doc[:database]
|
115
|
+
design_doc_name = doc[:design_doc]
|
116
|
+
view_name = doc[:view]
|
117
|
+
begin
|
118
|
+
response = RestClient.get 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name + '/_view/' + view_name
|
119
|
+
hash = Yajl::Parser.parse(response.to_str)
|
120
|
+
rows = hash["rows"]
|
121
|
+
count = 0
|
122
|
+
rows.each do |row|
|
123
|
+
rows[count] = row["value"]
|
124
|
+
count += 1
|
125
|
+
end
|
126
|
+
return rows
|
127
|
+
rescue => e
|
128
|
+
hash = Yajl::Parser.parse(e.response.to_s)
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
#create a design document with views
|
133
|
+
def self.create_design(doc)
|
134
|
+
set_address
|
135
|
+
db_name = doc[:database]
|
136
|
+
design_doc_name = doc[:design_doc]
|
137
|
+
json_doc_name = doc[:json_doc]
|
138
|
+
|
139
|
+
begin
|
140
|
+
#bind json doc to string
|
141
|
+
message_template = ERB.new File.new(json_doc_name).read
|
142
|
+
str = message_template.result(binding)
|
143
|
+
rescue => e
|
144
|
+
raise e
|
145
|
+
end
|
146
|
+
|
147
|
+
begin
|
148
|
+
|
149
|
+
response = RestClient.put 'http://' + @address + ':' + @port + '/' + db_name + '/_design/' + design_doc_name, str, {:content_type => :json, :accept => :json}
|
150
|
+
hash = Yajl::Parser.parse(response.to_str)
|
151
|
+
rescue => e
|
152
|
+
hash = Yajl::Parser.parse(e.response.to_s)
|
153
|
+
end
|
154
|
+
end
|
155
|
+
|
112
156
|
#return a list of all docs in the database
|
113
157
|
def self.docs_from(database_name)
|
114
158
|
set_address
|
@@ -116,13 +160,12 @@ def self.docs_from(database_name)
|
|
116
160
|
response = RestClient.get 'http://' + @address + ':' + @port + '/' + URI.escape(database_name) + '/_all_docs?include_docs=true', {:content_type => :json}
|
117
161
|
hash = Yajl::Parser.parse(response.to_str)
|
118
162
|
rows = hash["rows"]
|
119
|
-
only_rows = []
|
120
163
|
count = 0
|
121
164
|
rows.each do |row|
|
122
|
-
|
123
|
-
count
|
165
|
+
rows[count] = row["doc"]
|
166
|
+
count += 1
|
124
167
|
end
|
125
|
-
return
|
168
|
+
return rows
|
126
169
|
rescue => e
|
127
170
|
hash = Yajl::Parser.parse(e.response.to_s)
|
128
171
|
end
|
data/test/my_views.json
ADDED
data/test/test_leanback.rb
CHANGED
@@ -9,72 +9,81 @@ class TestLeanback < Test::Unit::TestCase
|
|
9
9
|
|
10
10
|
|
11
11
|
should "create a database if it doesn't already exist" do
|
12
|
-
|
13
|
-
puts hash.inspect
|
12
|
+
hash = Couchdb.create 'staff'
|
13
|
+
#puts hash.inspect
|
14
14
|
end
|
15
15
|
|
16
16
|
should "create a database if it doesn't already exist" do
|
17
17
|
hash = Couchdb.create 'contacts'
|
18
|
-
puts hash.inspect
|
18
|
+
#puts hash.inspect
|
19
19
|
end
|
20
20
|
|
21
|
-
#should "return error message illegal database name" do
|
22
|
-
# hash = Couchdb.create 'more books'
|
23
|
-
# puts hash.inspect
|
24
|
-
# end
|
25
21
|
|
26
|
-
should "
|
22
|
+
should "view document doc" do
|
27
23
|
|
28
|
-
doc = {:database => 'monitors', :doc_id => '
|
29
|
-
hash = Couchdb.
|
30
|
-
puts hash.inspect
|
24
|
+
doc = {:database => 'monitors', :doc_id => '3-d71c8ee21d6753896f2d08f57a985e94'}
|
25
|
+
hash = Couchdb.view doc
|
26
|
+
#puts hash.inspect
|
27
|
+
end
|
28
|
+
|
29
|
+
should "Query a permanent view" do
|
30
|
+
view = { :database => "contacts", :design_doc => 'more_views', :view => 'get_email'}
|
31
|
+
puts 'viewing design doc...'
|
32
|
+
hash = Couchdb.find view
|
33
|
+
puts hash.inspect
|
34
|
+
end
|
35
|
+
|
36
|
+
should "Create a design doc/permanent view" do
|
37
|
+
doc = { :database => 'contacts', :design_doc => 'more_views', :json_doc => '/home/obi/bin/leanback/test/my_views.json' }
|
38
|
+
hash = Couchdb.create_design doc
|
39
|
+
#puts hash.inspect
|
31
40
|
end
|
32
41
|
|
33
42
|
should "return a display a list of all databases" do
|
34
43
|
databases = Couchdb.all
|
35
|
-
|
36
|
-
puts db_name
|
44
|
+
databases.each do |db_name|
|
45
|
+
#puts db_name
|
37
46
|
end
|
38
47
|
end
|
39
48
|
|
40
49
|
should "delete a database" do
|
41
50
|
hash = Couchdb.delete 'staff'
|
42
|
-
puts hash.inspect
|
51
|
+
#puts hash.inspect
|
43
52
|
end
|
44
53
|
|
45
54
|
should "create a document" do
|
46
|
-
data = {:firstname => '
|
47
|
-
doc = {:database => 'contacts', :doc_id => '
|
55
|
+
data = {:firstname => 'Nancy', :lastname =>'Lee', :phone => '347-808-3734',:email =>'nancy@mail.com',:gender => 'female'}
|
56
|
+
doc = {:database => 'contacts', :doc_id => 'Nancy', :data => data}
|
48
57
|
hash = Document.create doc
|
49
|
-
puts hash.inspect
|
58
|
+
#puts hash.inspect
|
50
59
|
end
|
51
60
|
|
52
61
|
should "edit a document" do
|
53
62
|
data = {:firstname => 'john', :lastname =>'smith', :email => 'john@mail.com',:gender=>'male', :_rev=>'2-e813a0e902e3ac114400ff3959a2adde'}
|
54
63
|
doc = {:database => 'contacts', :doc_id => 'john', :data => data}
|
55
64
|
hash = Document.edit doc
|
56
|
-
puts hash.inspect
|
65
|
+
#puts hash.inspect
|
57
66
|
end
|
58
67
|
|
59
68
|
should "delete a document" do
|
60
69
|
doc = {:database => 'contacts', :doc_id => 'john', :rev => '3-be02e80490f8e9e610d9a9e33d752316'}
|
61
70
|
hash = Document.delete doc
|
62
|
-
puts hash.inspect
|
71
|
+
#puts hash.inspect
|
63
72
|
end
|
64
73
|
|
65
74
|
should "display all documents in the database" do
|
66
75
|
docs = Couchdb.docs_from 'monitors'
|
67
|
-
|
76
|
+
puts 'docs = Couchdb.docs_from monitors'
|
68
77
|
docs.each do |d|
|
69
|
-
|
70
|
-
puts d["_id"]
|
71
|
-
puts d["every"]
|
72
|
-
puts d["monitor"]
|
73
|
-
puts d["url"]
|
74
|
-
puts d["test"]
|
75
|
-
puts d["contact"]
|
76
|
-
puts d["via"]
|
77
|
-
puts d["notify_interval"]
|
78
|
+
# puts "_rev: " + d["_rev"]
|
79
|
+
#puts "_id: " + d["_id"]
|
80
|
+
#puts "every: " + d["every"]
|
81
|
+
#puts "monitor: " + d["monitor"]
|
82
|
+
#puts "url: " + d["url"]
|
83
|
+
#puts "test: " + d["test"]
|
84
|
+
#puts "contact: " + d["contact"]
|
85
|
+
#puts "via: " + d["via"]
|
86
|
+
#puts "notify_interval: " + d["notify_interval"]
|
78
87
|
end
|
79
88
|
end
|
80
89
|
|
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
|
+
- 8
|
9
|
+
version: 0.1.8
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Obi Akubue
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-
|
17
|
+
date: 2011-07-04 00:00:00 -04:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -119,6 +119,7 @@ files:
|
|
119
119
|
- leanback.gemspec
|
120
120
|
- lib/leanback.rb
|
121
121
|
- test/helper.rb
|
122
|
+
- test/my_views.json
|
122
123
|
- test/test_leanback.rb
|
123
124
|
has_rdoc: true
|
124
125
|
homepage: http://github.com/obi-a/leanback
|
@@ -134,7 +135,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
134
135
|
requirements:
|
135
136
|
- - ">="
|
136
137
|
- !ruby/object:Gem::Version
|
137
|
-
hash:
|
138
|
+
hash: 116332943
|
138
139
|
segments:
|
139
140
|
- 0
|
140
141
|
version: "0"
|