couchup 0.0.12 → 0.0.13
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/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
|
|