mongo3 0.0.9 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.bnignore +3 -0
- data/.bnsignore +16 -0
- data/.gitignore +1 -0
- data/HISTORY +11 -1
- data/README.rdoc +2 -0
- data/bin/mongo3 +7 -6
- data/config/mongo3.yml +33 -0
- data/data/populate +37 -0
- data/lib/controllers/collections.rb +2 -10
- data/lib/controllers/databases.rb +12 -1
- data/lib/controllers/explore.rb +20 -6
- data/lib/helpers/collection_helper.rb +34 -2
- data/lib/helpers/explore_helper.rb +0 -5
- data/lib/helpers/main_helper.rb +5 -0
- data/lib/helpers/paths_helper.rb +15 -0
- data/lib/mongo3/connection.rb +39 -24
- data/lib/mongo3/user.rb +10 -4
- data/lib/mongo3/zone.rb +24 -8
- data/lib/mongo3.rb +4 -7
- data/lib/public/.DS_Store +0 -0
- data/lib/public/images/favicon.png +0 -0
- data/lib/public/images/information.png +0 -0
- data/lib/public/images/tree/Thumbs.db +0 -0
- data/lib/public/images/tree/array.png +0 -0
- data/lib/public/images/tree/arrow_refresh.png +0 -0
- data/lib/public/images/tree/collapsable-last.gif +0 -0
- data/lib/public/images/tree/collapsable.gif +0 -0
- data/lib/public/images/tree/collection.png +0 -0
- data/lib/public/images/tree/cross.png +0 -0
- data/lib/public/images/tree/disk.png +0 -0
- data/lib/public/images/tree/expandable-last.gif +0 -0
- data/lib/public/images/tree/expandable-last.png +0 -0
- data/lib/public/images/tree/expandable.gif +0 -0
- data/lib/public/images/tree/expandable.png +0 -0
- data/lib/public/images/tree/folder_add.png +0 -0
- data/lib/public/images/tree/folder_delete.png +0 -0
- data/lib/public/images/tree/folder_edit.png +0 -0
- data/lib/public/images/tree/icons.png +0 -0
- data/lib/public/images/tree/leaf-last.gif +0 -0
- data/lib/public/images/tree/leaf-last.png +0 -0
- data/lib/public/images/tree/leaf.gif +0 -0
- data/lib/public/images/tree/leaf.png +0 -0
- data/lib/public/images/tree/line_bg.gif +0 -0
- data/lib/public/images/tree/line_bg_over.gif +0 -0
- data/lib/public/images/tree/line_bg_over_last.gif +0 -0
- data/lib/public/images/tree/minus.gif +0 -0
- data/lib/public/images/tree/page_add.png +0 -0
- data/lib/public/images/tree/page_delete.png +0 -0
- data/lib/public/images/tree/page_edit.png +0 -0
- data/lib/public/images/tree/plus.gif +0 -0
- data/lib/public/images/tree/root.gif +0 -0
- data/lib/public/images/tree/spacer.gif +0 -0
- data/lib/public/images/tree/spinner.gif +0 -0
- data/lib/public/images/tree/tree_line.gif +0 -0
- data/lib/public/javascripts/.DS_Store +0 -0
- data/lib/public/javascripts/jquery.simple.tree.js +451 -0
- data/lib/public/javascripts/jquery.tiptip.min.js +6 -0
- data/lib/public/javascripts/jquery.tree.min.js +1 -0
- data/lib/public/javascripts/jstree/jquery.tree.js +2058 -0
- data/lib/public/javascripts/themes/mongo3/bg.jpg +0 -0
- data/lib/public/javascripts/themes/mongo3/dot_for_ie.gif +0 -0
- data/lib/public/javascripts/themes/mongo3/icons.png +0 -0
- data/lib/public/javascripts/themes/mongo3/style.css +39 -0
- data/lib/public/javascripts/themes/mongo3/throbber.gif +0 -0
- data/lib/public/stylesheets/mongo3.css +201 -65
- data/lib/views/collections/_fields_form.erb +1 -1
- data/lib/views/collections/_index_form.erb +1 -1
- data/lib/views/collections/_index_rows.erb +40 -15
- data/lib/views/collections/_nodes.erb +0 -0
- data/lib/views/collections/_results.erb +4 -4
- data/lib/views/collections/{_rows.erb → _rows_table.erb} +11 -9
- data/lib/views/collections/_rows_tree.erb +81 -0
- data/lib/views/collections/_search_form.erb +1 -1
- data/lib/views/collections/blee.erb +20 -0
- data/lib/views/collections/list.erb +1 -1
- data/lib/views/collections/update.js.erb +1 -1
- data/lib/views/databases/_results.erb +9 -7
- data/lib/views/explore/_node_info.erb +21 -4
- data/lib/views/explore/explore.erb +11 -1
- data/lib/views/explore/load_collection.js.erb +1 -0
- data/lib/views/explore/load_database.js.erb +1 -0
- data/lib/views/layout.erb +13 -7
- data/lib/views/users/_results.erb +2 -2
- data/spec/configs/crap.yml +20 -0
- data/spec/configs/hosed.yml +4 -0
- data/spec/configs/landscape.yml +9 -0
- data/spec/mongo3/connection_spec.rb +105 -12
- data/spec/mongo3/node_spec.rb +38 -0
- data/spec/mongo3/user_spec.rb +72 -0
- data/spec/mongo3/zone_spec.rb +69 -0
- data/spec/mongo3_spec.rb +20 -0
- data/spec/spec_helper.rb +13 -0
- data/tasks/setup.rb +1 -1
- metadata +71 -6
- data/spec/landscape.yml +0 -3
data/.bnignore
ADDED
data/.bnsignore
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# The list of files that should be ignored by Mr Bones.
|
2
|
+
# Lines that start with '#' are comments.
|
3
|
+
#
|
4
|
+
# A .gitignore file can be used instead by setting it as the ignore
|
5
|
+
# file in your Rakefile:
|
6
|
+
#
|
7
|
+
# PROJ.ignore_file = '.gitignore'
|
8
|
+
#
|
9
|
+
# For a project with a C extension, the following would be a good set of
|
10
|
+
# exclude patterns (uncomment them if you want to use them):
|
11
|
+
# *.[oa]
|
12
|
+
# *~
|
13
|
+
announcement.txt
|
14
|
+
coverage
|
15
|
+
doc
|
16
|
+
pkg
|
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
*.psd
|
data/HISTORY
CHANGED
@@ -26,4 +26,14 @@
|
|
26
26
|
o Added user administration - should be able to crub users on zone now
|
27
27
|
o Added mongo based session store using mongo_rack. (Per Kyle's suggestion! ). This is now the default session store.
|
28
28
|
You can alternatively still use memcache ( see README for instructions )
|
29
|
-
o Bug fixes and some cleanup
|
29
|
+
o Bug fixes and some cleanup
|
30
|
+
|
31
|
+
0.0.8 - Bug fixes and clean up
|
32
|
+
|
33
|
+
0.0.9 - Bug fixes and clean up
|
34
|
+
|
35
|
+
0.1.0 - Big improvements!
|
36
|
+
o Added better support for docs and embedded docs.
|
37
|
+
o Change navigation to make it easier to drilldown ( Tx Tyler !).
|
38
|
+
o More tests
|
39
|
+
o Improved browser support for saf and chrome - sorry don't do windoze ;-(
|
data/README.rdoc
CHANGED
@@ -34,8 +34,10 @@
|
|
34
34
|
* CRUD on dbs, collections, indexes [done]
|
35
35
|
* Administer users [done]
|
36
36
|
* Collection rename
|
37
|
+
* Database creation
|
37
38
|
* Manage logs
|
38
39
|
* Support for shards and replication
|
40
|
+
* Add support for drilling down array and embedded documents [done]
|
39
41
|
|
40
42
|
== DEPENDENCIES
|
41
43
|
|
data/bin/mongo3
CHANGED
@@ -33,20 +33,21 @@ Main {
|
|
33
33
|
puts "\n"*2
|
34
34
|
puts ">>> Opening console..."
|
35
35
|
puts "\n"*2
|
36
|
-
open( "http://localhost
|
36
|
+
open( "http://localhost:#{default_port}/explore" )
|
37
37
|
end
|
38
38
|
|
39
39
|
# Clearing args for franky!
|
40
40
|
ARGV.clear
|
41
41
|
require 'sinatra'
|
42
42
|
require File.join(File.dirname(__FILE__), %w[.. lib app.rb])
|
43
|
-
Sinatra::Application.run! :port =>
|
43
|
+
Sinatra::Application.run! :port => default_port, :environment => 'production'
|
44
44
|
end
|
45
45
|
|
46
|
+
# default port
|
47
|
+
def default_port() 6663; end
|
48
|
+
|
46
49
|
# sleepy time...
|
47
|
-
def sleep_time
|
48
|
-
3
|
49
|
-
end
|
50
|
+
def sleep_time() 3; end
|
50
51
|
|
51
52
|
# open console...
|
52
53
|
def open(path)
|
@@ -73,4 +74,4 @@ Main {
|
|
73
74
|
end
|
74
75
|
opts
|
75
76
|
end
|
76
|
-
}
|
77
|
+
}
|
data/config/mongo3.yml
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
development:
|
2
|
+
host: localhost
|
3
|
+
port: 27017
|
4
|
+
|
5
|
+
beta:
|
6
|
+
host: dev8
|
7
|
+
port: 27018
|
8
|
+
user: "blee"
|
9
|
+
password: "fred"
|
10
|
+
|
11
|
+
# production:
|
12
|
+
# :host: dev8
|
13
|
+
# :port: 27018
|
14
|
+
# :user: "blee"
|
15
|
+
# :password: "fred"
|
16
|
+
#
|
17
|
+
# serv1:
|
18
|
+
# :host: dev8
|
19
|
+
# :port: 27018
|
20
|
+
# :user: "blee"
|
21
|
+
# :password: "fred"
|
22
|
+
#
|
23
|
+
# serv2:
|
24
|
+
# :host: dev8
|
25
|
+
# :port: 27018
|
26
|
+
# :user: "blee"
|
27
|
+
# :password: "fred"
|
28
|
+
#
|
29
|
+
# serv3:
|
30
|
+
# :host: dev8
|
31
|
+
# :port: 27018
|
32
|
+
# :user: "blee"
|
33
|
+
# :password: "fred"
|
data/data/populate
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
require 'mongo'
|
4
|
+
|
5
|
+
connection = Mongo::Connection.new( 'localhost', 27017 )
|
6
|
+
|
7
|
+
db_name = "fernand_mdb"
|
8
|
+
cltn_names = %w[blee bobo]
|
9
|
+
|
10
|
+
|
11
|
+
db = connection.db( db_name )
|
12
|
+
|
13
|
+
cltn_names.each do |cltn_name|
|
14
|
+
cltn = db.create_collection( cltn_name )
|
15
|
+
cltn.remove
|
16
|
+
|
17
|
+
20.times do |i|
|
18
|
+
row = {
|
19
|
+
:name => "#{cltn_name}_#{i}",
|
20
|
+
:last_name => "#{db_name}.#{cltn_name}_#{i}",
|
21
|
+
:array => 10.times.to_a,
|
22
|
+
:hash => {
|
23
|
+
:blee => 5.times.to_a,
|
24
|
+
:duh => "Hello",
|
25
|
+
:hash => {
|
26
|
+
:duh => 10
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
puts "Inserting row #{row.inspect}"
|
31
|
+
cltn.insert( row )
|
32
|
+
end
|
33
|
+
|
34
|
+
cltn = db[cltn_name]
|
35
|
+
puts ""
|
36
|
+
puts "Inserted `#{cltn.count} records in `#{cltn_name}"
|
37
|
+
end
|
@@ -3,6 +3,7 @@ require 'json'
|
|
3
3
|
module Collections
|
4
4
|
|
5
5
|
# ---------------------------------------------------------------------------
|
6
|
+
# BOZO - Move to indexes ctrl
|
6
7
|
post "/collections/create_index/" do
|
7
8
|
json = params[:index].gsub( /'/, "\"" )
|
8
9
|
tokens = json.split( "|" )
|
@@ -34,7 +35,7 @@ module Collections
|
|
34
35
|
# ---------------------------------------------------------------------------
|
35
36
|
# Paginate on a collection
|
36
37
|
get "/collections/:page" do
|
37
|
-
@back_url = "/
|
38
|
+
@back_url = "/databases/1"
|
38
39
|
@page = params[:page].to_i || 1
|
39
40
|
|
40
41
|
@indexes = options.connection.indexes_for( session[:path_names] )
|
@@ -46,9 +47,6 @@ module Collections
|
|
46
47
|
|
47
48
|
# ---------------------------------------------------------------------------
|
48
49
|
post "/collections/refresh/:page/" do
|
49
|
-
selected_cols = params[:cols].keys.sort
|
50
|
-
session[:selected_cols] = selected_cols
|
51
|
-
|
52
50
|
load_cltn( params[:page].to_i )
|
53
51
|
|
54
52
|
erb :'collections/update.js', :layout => false
|
@@ -119,12 +117,6 @@ module Collections
|
|
119
117
|
path_names = session[:path_names]
|
120
118
|
|
121
119
|
@cltn = options.connection.paginate_cltn( path_names, query_params, @page, 15 )
|
122
|
-
@cols = []
|
123
|
-
@selected_cols = []
|
124
|
-
unless @cltn.empty?
|
125
|
-
@cols = @cltn.first.keys.sort
|
126
|
-
@selected_cols = session[:selected_cols] || @cols[0...5]
|
127
|
-
end
|
128
120
|
end
|
129
121
|
end
|
130
122
|
end
|
@@ -4,7 +4,18 @@ module Databases
|
|
4
4
|
get "/databases/:page" do
|
5
5
|
page = params[:page].to_i || 1
|
6
6
|
path_names = session[:path_names]
|
7
|
-
|
7
|
+
tokens = path_names.split( "|" )
|
8
|
+
|
9
|
+
# Could be we have a cltn path. if so adjust for it
|
10
|
+
if tokens.size > 3
|
11
|
+
tokens.pop
|
12
|
+
session[:path_names] = tokens.join( "|")
|
13
|
+
path_names = session[:path_names]
|
14
|
+
path_ids = session[:path_ids].split( "|" )
|
15
|
+
path_ids.pop
|
16
|
+
session[:path_ids] = path_ids.join( "|" )
|
17
|
+
end
|
18
|
+
|
8
19
|
@cltns = options.connection.paginate_db( path_names, page, 10 )
|
9
20
|
@back_url = "/explore/back"
|
10
21
|
|
data/lib/controllers/explore.rb
CHANGED
@@ -7,7 +7,7 @@ module Explore
|
|
7
7
|
@node_id = params[:db_id]
|
8
8
|
db_name = params[:db_name].gsub( /\(\d+\)/, '' )
|
9
9
|
|
10
|
-
options.connection.
|
10
|
+
options.connection.drop_db( "#{session[:path_names]}|#{db_name}" )
|
11
11
|
|
12
12
|
flash_it!( :info, "Database `#{db_name} was dropped successfully!" )
|
13
13
|
|
@@ -16,6 +16,9 @@ module Explore
|
|
16
16
|
|
17
17
|
# -----------------------------------------------------------------------------
|
18
18
|
get '/explore' do
|
19
|
+
session[:selected_cols] = nil
|
20
|
+
session[:query_params] = nil
|
21
|
+
|
19
22
|
root = options.connection.build_tree
|
20
23
|
@root = root.to_adjacencies
|
21
24
|
@nodes = root.children
|
@@ -25,10 +28,6 @@ module Explore
|
|
25
28
|
|
26
29
|
erb :'explore/explore'
|
27
30
|
end
|
28
|
-
|
29
|
-
get "/fred/:duh" do
|
30
|
-
"Hello World #{params[:duh]}"
|
31
|
-
end
|
32
31
|
|
33
32
|
# -----------------------------------------------------------------------------
|
34
33
|
get '/explore/back' do
|
@@ -51,7 +50,7 @@ module Explore
|
|
51
50
|
end
|
52
51
|
|
53
52
|
# -----------------------------------------------------------------------------
|
54
|
-
get '/explore/
|
53
|
+
get '/explore/info/:path_ids/:path_names' do
|
55
54
|
path_ids = params[:path_ids]
|
56
55
|
path_names = params[:path_names]
|
57
56
|
|
@@ -79,6 +78,21 @@ module Explore
|
|
79
78
|
erb :'explore/more_data_js', :layout => false
|
80
79
|
end
|
81
80
|
|
81
|
+
# ---------------------------------------------------------------------------
|
82
|
+
get "/explore/show/:path_ids/:path_names" do
|
83
|
+
path_ids = params[:path_ids]
|
84
|
+
path_names = params[:path_names]
|
85
|
+
|
86
|
+
# crumbs_from_path( path_ids, path_names )
|
87
|
+
update_paths!( path_ids, path_names )
|
88
|
+
|
89
|
+
if cltn_path?( path_ids )
|
90
|
+
erb :'explore/load_collection.js', :layout => false
|
91
|
+
else
|
92
|
+
erb :'explore/load_database.js', :layout => false
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
82
96
|
# -----------------------------------------------------------------------------
|
83
97
|
get '/explore/update_crumb/:path_ids/:path_names' do
|
84
98
|
path_ids = params[:path_ids]
|
@@ -15,6 +15,38 @@ module CollectionHelper
|
|
15
15
|
helpers do
|
16
16
|
include WillPaginate::ViewHelpers::Base
|
17
17
|
|
18
|
+
def format_nodes( item, col )
|
19
|
+
buff = []
|
20
|
+
_format_nodes( buff, item, col )
|
21
|
+
buff.join( "\n" )
|
22
|
+
end
|
23
|
+
|
24
|
+
def _format_nodes( buff, item, col=nil )
|
25
|
+
if item.is_a?( Array )
|
26
|
+
buff << "<li><ins style=\"background-position:-48px -16px\"></ins><span>#{col} <span class=\"meta\" style=\"color:#c1c1c1\">(#{item.size})</span></span>"
|
27
|
+
return buff if item.empty?
|
28
|
+
buff << "<ul>"
|
29
|
+
count = 0
|
30
|
+
item.each do |element|
|
31
|
+
_format_nodes( buff, element )
|
32
|
+
count += 1
|
33
|
+
end
|
34
|
+
buff << "</ul>"
|
35
|
+
buff << "</li>"
|
36
|
+
elsif item.is_a?( Hash )
|
37
|
+
buff << "<li><ins style=\"background-position:-48px -16px\"></ins><span>#{col} (#{item.size})</span>"
|
38
|
+
return buff if item.empty?
|
39
|
+
buff << "<ul>"
|
40
|
+
item.each_pair do |key,val|
|
41
|
+
_format_nodes( buff, val, key )
|
42
|
+
end
|
43
|
+
buff << "</ul>"
|
44
|
+
buff << "</li>"
|
45
|
+
else
|
46
|
+
buff << "<li><ins></ins><span title=\"#{item.to_s}\">#{truncate(item.to_s,90)} <span class=\"meta\" style=\"color:#c1c1c1\">#{col ? "[#{col} - #{item.class}]" : "[#{item.class}]"}</span></span></li>"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
18
50
|
# Attempts to format an attribute to some human readable format
|
19
51
|
def format_value( value )
|
20
52
|
if value.is_a?( Fixnum)
|
@@ -22,9 +54,9 @@ module CollectionHelper
|
|
22
54
|
elsif value.is_a?(Hash)
|
23
55
|
buff = []
|
24
56
|
value.each_pair { |k,v| buff << "#{k}:#{format_value(v)}"}
|
25
|
-
buff.join( "," )
|
57
|
+
buff.join( ", " )
|
26
58
|
elsif value.is_a?(Array)
|
27
|
-
value.join(",")
|
59
|
+
(value.empty? ? "[]" : value.join(", "))
|
28
60
|
else
|
29
61
|
value
|
30
62
|
end
|
data/lib/helpers/main_helper.rb
CHANGED
@@ -61,6 +61,11 @@ module MainHelper
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def partial( page, options={} )
|
64
|
+
if object = options.delete(:object)
|
65
|
+
template = page.to_s.split("/").last
|
66
|
+
options.merge!( :locals => { template.to_sym => object } )
|
67
|
+
end
|
68
|
+
|
64
69
|
if page.to_s.index( /\// )
|
65
70
|
page = page.to_s.gsub( /\//, '/_' )
|
66
71
|
else
|
data/lib/helpers/paths_helper.rb
CHANGED
@@ -1,6 +1,21 @@
|
|
1
1
|
module PathHelper
|
2
2
|
helpers do
|
3
3
|
|
4
|
+
# looking at zone path?
|
5
|
+
def zone_path?( path )
|
6
|
+
path.split( "|" ).size == 1
|
7
|
+
end
|
8
|
+
|
9
|
+
# looking at db path?
|
10
|
+
def db_path?( path )
|
11
|
+
path.split( "|" ).size == 3
|
12
|
+
end
|
13
|
+
|
14
|
+
# looking at cltn path?
|
15
|
+
def cltn_path?( path )
|
16
|
+
path.split( "|" ).size == 4
|
17
|
+
end
|
18
|
+
|
4
19
|
def reset_paths!
|
5
20
|
session[:path_ids] = "home"
|
6
21
|
session[:path_names] = "home"
|
data/lib/mongo3/connection.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
|
3
3
|
# BOZO !! Time to refact no?
|
4
|
+
# TODO !! Arg check and errors
|
5
|
+
# TODO !! Add logging
|
4
6
|
module Mongo3
|
5
7
|
class Connection
|
6
8
|
|
@@ -8,15 +10,7 @@ module Mongo3
|
|
8
10
|
@config_file = config_file
|
9
11
|
end
|
10
12
|
|
11
|
-
# drop a
|
12
|
-
def drop_database( path_names, db_name )
|
13
|
-
path_name_tokens = path_names.split( "|" )
|
14
|
-
zone = path_name_tokens[1]
|
15
|
-
connect_for( zone ) do |con|
|
16
|
-
con.drop_database( db_name )
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
13
|
+
# drop a db using a db path
|
20
14
|
def drop_db( path_names )
|
21
15
|
path_name_tokens = path_names.split( "|" )
|
22
16
|
zone = path_name_tokens[1]
|
@@ -42,12 +36,12 @@ module Mongo3
|
|
42
36
|
|
43
37
|
def drop_index( path_names, index )
|
44
38
|
path_name_tokens = path_names.split( "|" )
|
45
|
-
zone = path_name_tokens[1]
|
39
|
+
zone = path_name_tokens[1]
|
46
40
|
connect_for( zone ) do |con|
|
47
41
|
cltn_name = path_name_tokens.pop
|
48
42
|
db_name = path_name_tokens.pop
|
49
43
|
db = con.db( db_name )
|
50
|
-
cltn = db[cltn_name]
|
44
|
+
cltn = db[cltn_name]
|
51
45
|
cltn.drop_index( index )
|
52
46
|
end
|
53
47
|
end
|
@@ -84,7 +78,7 @@ module Mongo3
|
|
84
78
|
db_name = path_name_tokens.pop
|
85
79
|
db = con.db( db_name )
|
86
80
|
cltn = db[cltn_name]
|
87
|
-
cltn.remove
|
81
|
+
cltn.remove( {} )
|
88
82
|
end
|
89
83
|
end
|
90
84
|
|
@@ -96,7 +90,7 @@ module Mongo3
|
|
96
90
|
db_name = path_name_tokens.pop
|
97
91
|
db = con.db( db_name )
|
98
92
|
cltn = db[cltn_name]
|
99
|
-
cltn.remove( {:_id => Mongo::ObjectID.from_string(id) } )
|
93
|
+
res = cltn.remove( {:_id => Mongo::ObjectID.from_string(id) } )
|
100
94
|
end
|
101
95
|
end
|
102
96
|
|
@@ -150,7 +144,7 @@ module Mongo3
|
|
150
144
|
end
|
151
145
|
|
152
146
|
def paginate_db( path_names, page=1, per_page=10 )
|
153
|
-
path_name_tokens = path_names.split( "|" )
|
147
|
+
path_name_tokens = path_names.split( "|" )
|
154
148
|
zone = path_name_tokens[1]
|
155
149
|
list = nil
|
156
150
|
connect_for( zone ) do |con|
|
@@ -189,7 +183,15 @@ module Mongo3
|
|
189
183
|
list = WillPaginate::Collection.create( page, per_page, count ) do |pager|
|
190
184
|
offset = (page-1)*per_page
|
191
185
|
sort = query_params.last.empty? ? [ ['_id', Mongo::DESCENDING] ] : query_params.last
|
192
|
-
|
186
|
+
query = query_params.first
|
187
|
+
|
188
|
+
# Scan for regexes...
|
189
|
+
query.each_pair do |k,v|
|
190
|
+
if v.is_a?( String ) and v.index( /^\// )
|
191
|
+
query[k] = Regexp.new( v.gsub( "/", '' ) )
|
192
|
+
end
|
193
|
+
end
|
194
|
+
results = cltn.find( query,
|
193
195
|
:sort => sort,
|
194
196
|
:skip => offset,
|
195
197
|
:limit => per_page ).to_a
|
@@ -398,14 +400,23 @@ module Mongo3
|
|
398
400
|
# Connects to mongo given an zone
|
399
401
|
def connect_for( zone, &block )
|
400
402
|
info = landscape[zone]
|
401
|
-
|
402
|
-
|
403
|
+
raise "Unable to find zone info in config file for zone `#{zone}" unless info
|
404
|
+
raise "Check your config. Unable to find `host information" unless info['host']
|
405
|
+
raise "Check your config. Unable to find `port information" unless info['port']
|
406
|
+
|
407
|
+
begin
|
408
|
+
con = Mongo::Connection.new( info['host'], info['port'], { :slave_ok => true } )
|
403
409
|
|
404
|
-
|
405
|
-
|
410
|
+
if info['user'] and info['password']
|
411
|
+
con.db( 'admin' ).authenticate( info['user'], info['password'] )
|
412
|
+
end
|
413
|
+
yield con
|
414
|
+
con.close()
|
415
|
+
rescue => boom
|
416
|
+
# puts boom
|
417
|
+
# puts boom.backtrace.each {|l| puts l }
|
418
|
+
raise "MongoDB connection failed for `#{info['host'].inspect}:#{info['port'].inspect}"
|
406
419
|
end
|
407
|
-
yield con
|
408
|
-
con.close()
|
409
420
|
end
|
410
421
|
|
411
422
|
# db request occurs within dist 2
|
@@ -461,10 +472,14 @@ module Mongo3
|
|
461
472
|
# Initialize the mongo installation landscape
|
462
473
|
def config
|
463
474
|
unless @config
|
464
|
-
|
475
|
+
begin
|
476
|
+
@config = YAML.load_file( @config_file )
|
477
|
+
rescue => boom
|
478
|
+
@config = nil
|
479
|
+
raise "Unable to grok yaml landscape file. #{boom}"
|
480
|
+
end
|
465
481
|
end
|
466
482
|
@config
|
467
|
-
end
|
468
|
-
|
483
|
+
end
|
469
484
|
end
|
470
485
|
end
|
data/lib/mongo3/user.rb
CHANGED
@@ -8,19 +8,25 @@ module Mongo3
|
|
8
8
|
# add a new user
|
9
9
|
def add( path, user_name, password )
|
10
10
|
connect_for( path ) do |con|
|
11
|
-
|
12
|
-
user_cltn = admin_db[Mongo::DB::SYSTEM_USER_COLLECTION]
|
11
|
+
user_cltn = users( con )
|
13
12
|
|
14
13
|
row = { :user => user_name }
|
15
14
|
user = user_cltn.find_one( row )
|
16
15
|
raise "User #{user_name} already exists!" if user
|
17
16
|
|
18
|
-
row[:pwd] =
|
19
|
-
user_cltn.save( row )
|
17
|
+
row[:pwd] = user_cltn.db.send( :hash_password, user_name, password )
|
18
|
+
return user_cltn.save( row )
|
20
19
|
end
|
21
20
|
end
|
22
21
|
|
22
|
+
def clear!( path )
|
23
|
+
connect_for( path ) do |con|
|
24
|
+
res = users( con ).remove( {} )
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
23
28
|
def rename( zone, old_name, new_name )
|
29
|
+
raise "NYI"
|
24
30
|
end
|
25
31
|
|
26
32
|
def delete( path, id )
|
data/lib/mongo3/zone.rb
CHANGED
@@ -15,20 +15,31 @@ module Mongo3
|
|
15
15
|
end
|
16
16
|
|
17
17
|
# Connects to mongo given an zone
|
18
|
+
# BOZO !! Shit is dupped in connection. Fix it !!
|
18
19
|
def connect_for( path, &block )
|
19
|
-
zone = zone_for_path( path )
|
20
|
+
zone = zone_for_path( path )
|
20
21
|
info = config[zone]
|
21
|
-
|
22
|
-
|
22
|
+
raise "Unable to find zone info in config file for zone `#{zone}" unless info
|
23
|
+
raise "Check your config. Unable to find `host information" unless info['host']
|
24
|
+
raise "Check your config. Unable to find `port information" unless info['port']
|
25
|
+
|
26
|
+
con = nil
|
27
|
+
begin
|
28
|
+
con = Mongo::Connection.new( info['host'], info['port'], { :slave_ok => true } )
|
23
29
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
30
|
+
if info['user'] and info['password']
|
31
|
+
con.db( 'admin' ).authenticate( info['user'], info['password'] )
|
32
|
+
end
|
33
|
+
rescue => boom
|
34
|
+
raise "MongoDB connection failed for `#{info['host']}:#{info['post']}"
|
35
|
+
end
|
36
|
+
|
37
|
+
yield con
|
28
38
|
con.close()
|
29
39
|
end
|
30
40
|
|
31
41
|
# find zone matching the host and port combination
|
42
|
+
# BOZO !! Dupped in connection. Fix it !!
|
32
43
|
def zone_for( host, port )
|
33
44
|
config.each_pair do |zone, info|
|
34
45
|
return zone if info['host'] == host and info['port'] == port.to_i
|
@@ -39,7 +50,12 @@ module Mongo3
|
|
39
50
|
# Initialize the mongo installation landscape
|
40
51
|
def config
|
41
52
|
unless @config
|
42
|
-
|
53
|
+
begin
|
54
|
+
@config = YAML.load_file( @config_file )
|
55
|
+
rescue => boom
|
56
|
+
@config = nil
|
57
|
+
raise "Unable to grok yaml landscape file. #{boom}"
|
58
|
+
end
|
43
59
|
end
|
44
60
|
@config
|
45
61
|
end
|
data/lib/mongo3.rb
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
module Mongo3
|
2
2
|
|
3
3
|
# :stopdoc:
|
4
|
-
VERSION = '0.0
|
4
|
+
VERSION = '0.1.0' unless defined? Mongo3::VERSION
|
5
5
|
LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR unless defined? Mongo3::LIBPATH
|
6
|
-
PATH
|
6
|
+
PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR unless defined? Mongo3::PATH
|
7
7
|
# :startdoc:
|
8
8
|
|
9
9
|
# Returns the version string for the library.
|
@@ -48,9 +48,6 @@ module Mongo3
|
|
48
48
|
|
49
49
|
Dir.glob(search_me).sort.each {|rb| load rb}
|
50
50
|
end
|
51
|
+
end
|
51
52
|
|
52
|
-
|
53
|
-
|
54
|
-
Mongo3.require_all_libs_relative_to(__FILE__)
|
55
|
-
|
56
|
-
# EOF
|
53
|
+
Mongo3.require_all_libs_relative_to(__FILE__)
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|