couchup 0.0.12 → 0.0.13
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/Readme.markdown +26 -0
- data/TODO +4 -2
- data/bin/couchup +1 -1
- data/couchup.gemspec +5 -4
- data/lib/couchup.rb +16 -3
- data/lib/couchup/commands/connect.rb +2 -2
- data/lib/couchup/commands/get.rb +3 -1
- data/lib/couchup/commands/help.rb +1 -1
- data/lib/couchup/commands/map.rb +2 -1
- data/lib/couchup/commands/show.rb +2 -2
- data/lib/couchup/commands/use.rb +2 -2
- data/lib/couchup/commands/view.rb +3 -3
- data/lib/couchup/couchup.rb +14 -6
- data/lib/couchup/mapreduce.rb +12 -4
- data/lib/couchup/version.rb +1 -1
- data/lib/couchup/view.rb +2 -2
- metadata +24 -13
data/Gemfile
CHANGED
data/Readme.markdown
CHANGED
@@ -63,6 +63,18 @@ To use a specific database switch with.
|
|
63
63
|
Most Couchup commands need you to be on a specific database.
|
64
64
|
|
65
65
|
|
66
|
+
Shortcuts
|
67
|
+
----------
|
68
|
+
|
69
|
+
last_result or __ are short hands to the last result returned by couch operations. These are typically json document( or array of documents)
|
70
|
+
Most commands that are in the form of <operation> <:view|| :database || :doc> have short hands like <operation>_<view> or <operation>_database
|
71
|
+
|
72
|
+
eg. *create_database :foo* is same as *create :database, :foo*
|
73
|
+
|
74
|
+
or *create_view 'Rider/test'* is the same as *create :view, 'Rider/test'*
|
75
|
+
|
76
|
+
|
77
|
+
|
66
78
|
# Getting documents
|
67
79
|
--------------------
|
68
80
|
|
@@ -120,6 +132,20 @@ Will pop a textmate/emacs/vi window with some templates. If the view exists it w
|
|
120
132
|
|
121
133
|
To cancel creation of the view, just empty the contents of the file and save.
|
122
134
|
|
135
|
+
# Modifying Documents
|
136
|
+
-----------------------
|
137
|
+
|
138
|
+
We use the last_result that is described in the Basics section, and leverage ruby to do the save.
|
139
|
+
|
140
|
+
get("<id>")
|
141
|
+
last_result[:number] = 100
|
142
|
+
last_result.save
|
143
|
+
|
144
|
+
|
145
|
+
You could do this with the view results as well.
|
146
|
+
|
147
|
+
|
148
|
+
|
123
149
|
|
124
150
|
|
125
151
|
|
data/TODO
CHANGED
data/bin/couchup
CHANGED
@@ -41,7 +41,7 @@ port = options[:port] || "5984"
|
|
41
41
|
Couchup::Commands::Connect.new.run(host, port)
|
42
42
|
Couchup::Commands::Use.new.run(options[:db]) unless options[:db].nil?
|
43
43
|
Couchup.debug = true if options[:bug]
|
44
|
-
|
44
|
+
ap "Type help to view the list of things you can do. And Yeah Relax."
|
45
45
|
|
46
46
|
ARGV.clear
|
47
47
|
|
data/couchup.gemspec
CHANGED
@@ -8,16 +8,16 @@ Gem::Specification.new do |s|
|
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ["V Sreekanth"]
|
10
10
|
s.email = ["sreeix@gmail.com"]
|
11
|
-
s.homepage = ""
|
12
|
-
s.summary = %q{Command line
|
13
|
-
s.description = %q{Command line
|
11
|
+
s.homepage = "http://blog.activesphere.com/introducing-couchup-an-interactive-couchdb-co"
|
12
|
+
s.summary = %q{Command line interface to a couchdb deployment.}
|
13
|
+
s.description = %q{Command line interface to a couchdb deployment.}
|
14
14
|
|
15
15
|
s.rubyforge_project = "couchup"
|
16
16
|
|
17
17
|
s.files = `git ls-files`.split("\n")
|
18
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
-
s.default_executable = "
|
20
|
+
s.default_executable = "couchup"
|
21
21
|
|
22
22
|
s.require_paths = ["lib"]
|
23
23
|
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
27
27
|
s.add_dependency('json')
|
28
28
|
s.add_dependency('mime-types')
|
29
29
|
s.add_dependency('rest-client')
|
30
|
+
s.add_dependency('awesome_print')
|
30
31
|
|
31
32
|
s.add_development_dependency('rspec', '1.3.0')
|
32
33
|
s.add_development_dependency('rake')
|
data/lib/couchup.rb
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
# require 'yajl-ruby'
|
2
2
|
require 'couchrest'
|
3
|
+
begin
|
4
|
+
require 'ap'
|
5
|
+
rescue LoadError
|
6
|
+
puts "'gem install awesome_print' for nicer formatting"
|
7
|
+
alias ap puts
|
8
|
+
end
|
9
|
+
|
3
10
|
require File.expand_path '../couchup/couchup', __FILE__
|
4
11
|
Dir[File.expand_path('../couchup/commands/*.rb',__FILE__)].each { |file| require file}
|
5
12
|
Dir[File.expand_path('../couchup/extensions/*.rb',__FILE__)].each { |file| require file}
|
@@ -8,13 +15,19 @@ Dir[File.expand_path('../couchup/*.rb',__FILE__)].each { |file| require file}
|
|
8
15
|
|
9
16
|
Couchup::Commands.constants.each do |c|
|
10
17
|
instance_eval "
|
18
|
+
def last_result
|
19
|
+
Couchup::Couchup.last_result
|
20
|
+
end
|
21
|
+
alias __ last_result
|
11
22
|
def #{c.underscore}(*args)
|
12
23
|
begin
|
13
24
|
instance = Couchup::Commands.const_get(:#{c}).new
|
14
|
-
instance.run(*args)
|
25
|
+
Couchup::Couchup.last_result = instance.run(*args)
|
26
|
+
nil
|
15
27
|
rescue
|
16
|
-
puts $!.
|
17
|
-
|
28
|
+
puts $!.class
|
29
|
+
ap $!.inspect
|
30
|
+
ap $!.backtrace if Couchup::Couchup.debug?
|
18
31
|
end
|
19
32
|
end"
|
20
33
|
end
|
@@ -5,9 +5,9 @@ module Couchup
|
|
5
5
|
Couchup.host = host
|
6
6
|
Couchup.port = port
|
7
7
|
if(Couchup.ready?)
|
8
|
-
|
8
|
+
ap "Connected to #{Couchup.host}:#{Couchup.port}"
|
9
9
|
else
|
10
|
-
|
10
|
+
ap "Could not connect to #{Couchup.host}:#{Couchup.port}"
|
11
11
|
end
|
12
12
|
end
|
13
13
|
def self.describe
|
data/lib/couchup/commands/get.rb
CHANGED
data/lib/couchup/commands/map.rb
CHANGED
@@ -4,9 +4,9 @@ module Couchup
|
|
4
4
|
def run(*param)
|
5
5
|
option = param.first.to_s
|
6
6
|
if(option.blank? || option == 'databases' )
|
7
|
-
|
7
|
+
ap Couchup.databases
|
8
8
|
else
|
9
|
-
|
9
|
+
ap Couchup.views(param.second)
|
10
10
|
end
|
11
11
|
end
|
12
12
|
|
data/lib/couchup/commands/use.rb
CHANGED
data/lib/couchup/couchup.rb
CHANGED
@@ -2,6 +2,7 @@ module Couchup
|
|
2
2
|
class Couchup
|
3
3
|
class << self
|
4
4
|
attr_accessor :port, :host
|
5
|
+
attr_accessor :last_result
|
5
6
|
def server
|
6
7
|
@server ||= CouchRest::Server.new("http://#{host}:#{port}")
|
7
8
|
end
|
@@ -18,15 +19,20 @@ module Couchup
|
|
18
19
|
params = design.nil? ? {:startkey => '_design', :endkey => '_design0'} : {:key => "_design\\#{design}"}
|
19
20
|
designs = database.documents(params.merge(:include_docs => true))["rows"]
|
20
21
|
designs.collect do |d|
|
21
|
-
d["doc"]["views"].keys.collect
|
22
|
+
d["doc"]["views"].keys.collect do |view|
|
23
|
+
map = !d["doc"]["views"][view]["map"].blank?
|
24
|
+
reduce = !d["doc"]["views"][view]["reduce"].blank?
|
25
|
+
{"#{d['key'].gsub('_design/','')}/#{view}" => {:reduce => reduce, :map => map}}
|
26
|
+
end
|
22
27
|
end.flatten
|
23
28
|
end
|
29
|
+
|
24
30
|
def delete_doc(id)
|
25
31
|
doc = database.get(id)
|
26
32
|
database.delete_doc(doc)
|
27
33
|
end
|
28
34
|
def delete_all_docs(view_name)
|
29
|
-
all_docs = view_name.nil? ? all
|
35
|
+
all_docs = view_name.nil? ? all : MapReduce.map(view_name)
|
30
36
|
all_docs.collect{|d| d["doc"]}.each do |doc|
|
31
37
|
database.delete_doc(doc) unless (doc["_id"] =~ /^_design/)
|
32
38
|
end
|
@@ -35,10 +41,11 @@ module Couchup
|
|
35
41
|
def ready?
|
36
42
|
uuid = nil
|
37
43
|
begin
|
38
|
-
|
44
|
+
ap (info = server.info)
|
39
45
|
rescue
|
40
|
-
|
41
|
-
|
46
|
+
ap $!.inspect
|
47
|
+
ap $!.backtrace if debug?
|
48
|
+
|
42
49
|
end
|
43
50
|
!info.nil?
|
44
51
|
end
|
@@ -48,8 +55,9 @@ module Couchup
|
|
48
55
|
end
|
49
56
|
|
50
57
|
def all(options={})
|
51
|
-
@db.documents(options)
|
58
|
+
@db.documents(options.merge(:include_docs => true))["rows"]
|
52
59
|
end
|
60
|
+
|
53
61
|
def debug=(value)
|
54
62
|
@debug = value
|
55
63
|
end
|
data/lib/couchup/mapreduce.rb
CHANGED
@@ -3,10 +3,19 @@ module Couchup
|
|
3
3
|
def self.map(*params)
|
4
4
|
#FIXME. should probably get view meta data to do one view call. but this is also doing 2 calls.
|
5
5
|
begin
|
6
|
-
view({}, *params)
|
6
|
+
response = view({:include_docs => true}, *params)
|
7
7
|
rescue RestClient::BadRequest
|
8
|
-
view({:reduce => false}, *params)
|
8
|
+
response = view({:reduce => false, :include_docs => true}, *params)
|
9
9
|
end
|
10
|
+
|
11
|
+
docs = response["rows"].collect do |r|
|
12
|
+
r["doc"].instance_eval "def save
|
13
|
+
::Couchup::Couchup.database.save_doc(self)
|
14
|
+
end
|
15
|
+
"
|
16
|
+
r["doc"]
|
17
|
+
end
|
18
|
+
|
10
19
|
end
|
11
20
|
|
12
21
|
def self.reduce(*params)
|
@@ -16,7 +25,7 @@ module Couchup
|
|
16
25
|
private
|
17
26
|
def self.view(options, *params)
|
18
27
|
name = params.shift
|
19
|
-
view_params =
|
28
|
+
view_params = options
|
20
29
|
if params.size == 1
|
21
30
|
val = params.first
|
22
31
|
if val.is_a? Array
|
@@ -28,7 +37,6 @@ module Couchup
|
|
28
37
|
end
|
29
38
|
end
|
30
39
|
response = Couchup.database.view(name, view_params)
|
31
|
-
rows = response["rows"]
|
32
40
|
end
|
33
41
|
end
|
34
42
|
end
|
data/lib/couchup/version.rb
CHANGED
data/lib/couchup/view.rb
CHANGED
@@ -8,7 +8,7 @@ module Couchup
|
|
8
8
|
begin
|
9
9
|
@doc = Couchup.database.get("_design/#{@design}")
|
10
10
|
rescue
|
11
|
-
|
11
|
+
ap "Design #{@design} not found creating a new one"
|
12
12
|
@doc = {"_id" => "_design/#{@design}", :language => 'javascript', :views => {}}
|
13
13
|
save
|
14
14
|
@doc = Couchup.database.get("_design/#{@design}")
|
@@ -63,7 +63,7 @@ module Couchup
|
|
63
63
|
map, reduce = parse(file_contents)
|
64
64
|
v.map = map
|
65
65
|
v.reduce = reduce unless reduce.blank?
|
66
|
-
|
66
|
+
ap v
|
67
67
|
v.save
|
68
68
|
end
|
69
69
|
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: couchup
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.13
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- V Sreekanth
|
@@ -10,8 +10,8 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-
|
14
|
-
default_executable:
|
13
|
+
date: 2011-03-01 00:00:00 +05:30
|
14
|
+
default_executable: couchup
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: couchrest
|
@@ -69,39 +69,50 @@ dependencies:
|
|
69
69
|
type: :runtime
|
70
70
|
version_requirements: *id005
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
72
|
+
name: awesome_print
|
73
73
|
prerelease: false
|
74
74
|
requirement: &id006 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: "0"
|
80
|
+
type: :runtime
|
81
|
+
version_requirements: *id006
|
82
|
+
- !ruby/object:Gem::Dependency
|
83
|
+
name: rspec
|
84
|
+
prerelease: false
|
85
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
75
86
|
none: false
|
76
87
|
requirements:
|
77
88
|
- - "="
|
78
89
|
- !ruby/object:Gem::Version
|
79
90
|
version: 1.3.0
|
80
91
|
type: :development
|
81
|
-
version_requirements: *
|
92
|
+
version_requirements: *id007
|
82
93
|
- !ruby/object:Gem::Dependency
|
83
94
|
name: rake
|
84
95
|
prerelease: false
|
85
|
-
requirement: &
|
96
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
86
97
|
none: false
|
87
98
|
requirements:
|
88
99
|
- - ">="
|
89
100
|
- !ruby/object:Gem::Version
|
90
101
|
version: "0"
|
91
102
|
type: :development
|
92
|
-
version_requirements: *
|
103
|
+
version_requirements: *id008
|
93
104
|
- !ruby/object:Gem::Dependency
|
94
105
|
name: bundler
|
95
106
|
prerelease: false
|
96
|
-
requirement: &
|
107
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
97
108
|
none: false
|
98
109
|
requirements:
|
99
110
|
- - ">="
|
100
111
|
- !ruby/object:Gem::Version
|
101
112
|
version: "0"
|
102
113
|
type: :development
|
103
|
-
version_requirements: *
|
104
|
-
description: Command line
|
114
|
+
version_requirements: *id009
|
115
|
+
description: Command line interface to a couchdb deployment.
|
105
116
|
email:
|
106
117
|
- sreeix@gmail.com
|
107
118
|
executables:
|
@@ -142,7 +153,7 @@ files:
|
|
142
153
|
- lib/couchup/version.rb
|
143
154
|
- lib/couchup/view.rb
|
144
155
|
has_rdoc: true
|
145
|
-
homepage:
|
156
|
+
homepage: http://blog.activesphere.com/introducing-couchup-an-interactive-couchdb-co
|
146
157
|
licenses: []
|
147
158
|
|
148
159
|
post_install_message:
|
@@ -165,9 +176,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
176
|
requirements: []
|
166
177
|
|
167
178
|
rubyforge_project: couchup
|
168
|
-
rubygems_version: 1.5.
|
179
|
+
rubygems_version: 1.5.3
|
169
180
|
signing_key:
|
170
181
|
specification_version: 3
|
171
|
-
summary: Command line
|
182
|
+
summary: Command line interface to a couchdb deployment.
|
172
183
|
test_files: []
|
173
184
|
|