mongo3 0.0.4 → 0.0.5
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/HISTORY +6 -1
- data/README.rdoc +2 -0
- data/Rakefile +0 -1
- data/data/populate +4 -4
- data/lib/controllers/collections.rb +42 -8
- data/lib/controllers/databases.rb +11 -1
- data/lib/controllers/explore.rb +49 -12
- data/lib/helpers/collection_helper.rb +18 -0
- data/lib/helpers/crumb_helper.rb +4 -4
- data/lib/helpers/database_helper.rb +17 -0
- data/lib/helpers/explore_helper.rb +30 -0
- data/lib/helpers/flash_helper.rb +7 -0
- data/lib/helpers/main_helper.rb +12 -30
- data/lib/helpers/paths_helper.rb +40 -0
- data/lib/mongo3.rb +1 -1
- data/lib/mongo3/connection.rb +95 -34
- data/lib/mongo3/node.rb +43 -28
- data/lib/public/images/edit.png +0 -0
- data/lib/public/images/selected_bg.png +0 -0
- data/lib/public/stylesheets/mongo3.css +87 -76
- data/lib/views/collections/_index_form.erb +35 -0
- data/lib/views/collections/_index_rows.erb +54 -0
- data/lib/views/collections/_indexes.erb +3 -0
- data/lib/views/collections/_results.erb +1 -2
- data/lib/views/collections/_rows.erb +26 -22
- data/lib/views/collections/_search_form.erb +2 -3
- data/lib/views/collections/list.erb +18 -6
- data/lib/views/collections/update.js.erb +2 -0
- data/lib/views/collections/update_indexes.js.erb +3 -0
- data/lib/views/databases/_results.erb +30 -26
- data/lib/views/databases/list.erb +7 -3
- data/lib/views/explore/_node_info.erb +131 -0
- data/lib/views/explore/center_js.erb +1 -0
- data/lib/views/explore/explore.erb +11 -80
- data/lib/views/explore/more_data_js.erb +1 -0
- data/lib/views/explore/update.js.erb +5 -0
- data/lib/views/explore/update_crumb_js.erb +2 -1
- data/lib/views/layout.erb +2 -2
- data/lib/views/shared/flash.js.erb +9 -7
- data/spec/landscape.yml +3 -0
- data/spec/mongo3/connection_spec.rb +146 -0
- data/spec/mongo3/node_spec.rb +26 -8
- data/spec/spec_helper.rb +4 -1
- data/tasks/rdoc.rake +2 -2
- metadata +23 -2
data/HISTORY
CHANGED
@@ -13,4 +13,9 @@
|
|
13
13
|
o Fixed issue on over extending cookies. Ie mongo3 suffered amnesia. Switching to memcache
|
14
14
|
o Using memcache for session store - will need a local memcache server on default port!
|
15
15
|
o Added confirm dialog on clear and drop
|
16
|
-
o Bug fixes and some refactor
|
16
|
+
o Bug fixes and some refactor
|
17
|
+
|
18
|
+
0.0.5 - Lots of changes... Yeah!
|
19
|
+
o cleaned up ui
|
20
|
+
o added edit on main context window
|
21
|
+
o added index crud for collection
|
data/README.rdoc
CHANGED
data/Rakefile
CHANGED
data/data/populate
CHANGED
@@ -2,9 +2,9 @@
|
|
2
2
|
require 'rubygems'
|
3
3
|
require 'mongo'
|
4
4
|
|
5
|
-
connection = Mongo::Connection.new( 'localhost',
|
6
|
-
db = connection.db( 'admin' )
|
7
|
-
db.authenticate( 'admin', 'admin')
|
5
|
+
connection = Mongo::Connection.new( 'localhost', 27019 )
|
6
|
+
# db = connection.db( 'admin' )
|
7
|
+
# db.authenticate( 'admin', 'admin')
|
8
8
|
|
9
9
|
db_name = "fernand_mdb"
|
10
10
|
cltn_name = "blee"
|
@@ -15,7 +15,7 @@ db = connection.db( db_name )
|
|
15
15
|
cltn = db.create_collection( cltn_name )
|
16
16
|
cltn.remove
|
17
17
|
|
18
|
-
|
18
|
+
20.times do |i|
|
19
19
|
row = { :name => "fred_#{i}", :last_name => "Blee_#{i}" }
|
20
20
|
puts "Inserting row #{row.inspect}"
|
21
21
|
cltn.insert( row )
|
@@ -2,14 +2,46 @@ require 'json'
|
|
2
2
|
|
3
3
|
module Collections
|
4
4
|
|
5
|
+
# [ ['last_name', -1], ['name', 1] ]
|
6
|
+
# ---------------------------------------------------------------------------
|
7
|
+
post "/collections/create_index/" do
|
8
|
+
json = params[:index].gsub( /'/, "\"" )
|
9
|
+
tokens = json.split( "|" )
|
10
|
+
|
11
|
+
begin
|
12
|
+
raise "You need to enter an index description" if tokens.empty?
|
13
|
+
index = JSON.parse( tokens.shift )
|
14
|
+
constraints = tokens.empty? ? nil : JSON.parse( tokens.first )
|
15
|
+
|
16
|
+
options.connection.create_index( session[:path_names], index, constraints )
|
17
|
+
flash_it!( :info, "Index was created successfully!" )
|
18
|
+
rescue => boom
|
19
|
+
flash_it!( :error, boom )
|
20
|
+
return erb(:'shared/flash.js', :layout => false)
|
21
|
+
end
|
22
|
+
|
23
|
+
@indexes = options.connection.indexes_for( session[:path_names] )
|
24
|
+
|
25
|
+
erb :'collections/update_indexes.js', :layout => false
|
26
|
+
end
|
27
|
+
|
28
|
+
# ---------------------------------------------------------------------------
|
29
|
+
post "/collections/drop_index/" do
|
30
|
+
options.connection.drop_index( session[:path_names], params[:id] )
|
31
|
+
flash_it!( :info, "Index was dropped successfully!" )
|
32
|
+
erb :'shared/flash.js', :layout => false
|
33
|
+
end
|
34
|
+
|
5
35
|
# ---------------------------------------------------------------------------
|
6
36
|
# Paginate on a collection
|
7
37
|
get "/collections/:page" do
|
8
38
|
@back_url = "/explore/back"
|
9
39
|
@page = params[:page].to_i || 1
|
10
|
-
|
40
|
+
|
41
|
+
@indexes = options.connection.indexes_for( session[:path_names] )
|
42
|
+
|
43
|
+
load_cltn( params[:page].to_i )
|
11
44
|
|
12
|
-
load_cltn( params[:page].to_i )
|
13
45
|
erb :'collections/list'
|
14
46
|
end
|
15
47
|
|
@@ -35,14 +67,14 @@ module Collections
|
|
35
67
|
begin
|
36
68
|
@query = JSON.parse( tokens.shift )
|
37
69
|
@sort = tokens.empty? ? [] : JSON.parse( tokens.first )
|
38
|
-
|
70
|
+
session[:query_params] = [@query, @sort]
|
71
|
+
load_cltn
|
72
|
+
rescue => boom
|
39
73
|
flash_it!( :error, boom )
|
40
74
|
return erb(:'shared/flash.js', :layout => false)
|
41
75
|
end
|
42
76
|
end
|
43
|
-
session[:query_params] = [@query, @sort]
|
44
77
|
|
45
|
-
load_cltn
|
46
78
|
erb :'collections/update.js', :layout => false
|
47
79
|
end
|
48
80
|
|
@@ -50,6 +82,9 @@ module Collections
|
|
50
82
|
path_names = session[:path_names]
|
51
83
|
options.connection.delete_row( path_names, params[:id] )
|
52
84
|
load_cltn
|
85
|
+
|
86
|
+
flash_it!( :info, "Row was deleted successfully!" )
|
87
|
+
|
53
88
|
erb :'collections/update.js', :layout => false
|
54
89
|
end
|
55
90
|
|
@@ -70,9 +105,8 @@ module Collections
|
|
70
105
|
# ===========================================================================
|
71
106
|
helpers do
|
72
107
|
def load_cltn( page=1 )
|
73
|
-
query_params
|
74
|
-
|
75
|
-
if query_params.first.empty? and query_params.last.empty?
|
108
|
+
query_params = session[:query_params] || [{},[]]
|
109
|
+
if ( !query_params.first or query_params.first.empty?) and ( !query_params.last or query_params.last.empty? )
|
76
110
|
@query = nil
|
77
111
|
else
|
78
112
|
@query = [query_params.first.to_json, query_params.last.to_json].join( " | " )
|
@@ -6,12 +6,22 @@ module Databases
|
|
6
6
|
path_names = session[:path_names]
|
7
7
|
|
8
8
|
@cltns = options.connection.paginate_db( path_names, page, 10 )
|
9
|
-
@title = title_for( path_names )
|
10
9
|
@back_url = "/explore/back"
|
11
10
|
|
12
11
|
erb :'databases/list'
|
13
12
|
end
|
14
13
|
|
14
|
+
# ---------------------------------------------------------------------------
|
15
|
+
get "/databases/collection/:name/" do
|
16
|
+
cltn_name = params[:name]
|
17
|
+
path_names = session[:path_names]
|
18
|
+
path_ids = session[:path_ids]
|
19
|
+
|
20
|
+
update_paths!( path_ids + "|" + cltn_name, path_names + "|" + cltn_name )
|
21
|
+
|
22
|
+
redirect "/collections/1"
|
23
|
+
end
|
24
|
+
|
15
25
|
# ---------------------------------------------------------------------------
|
16
26
|
get "/databases/drop/" do
|
17
27
|
path_names = session[:path_names]
|
data/lib/controllers/explore.rb
CHANGED
@@ -1,9 +1,27 @@
|
|
1
1
|
module Explore
|
2
2
|
|
3
|
+
# -----------------------------------------------------------------------------
|
4
|
+
get "/explore/database/:db_id/:db_name/drop" do
|
5
|
+
path_ids = session[:path_ids]
|
6
|
+
path_names = session[:path_names]
|
7
|
+
@node_id = params[:db_id]
|
8
|
+
db_name = params[:db_name].gsub( /\(\d+\)/, '' )
|
9
|
+
|
10
|
+
options.connection.drop_database( session[:path_names], db_name )
|
11
|
+
|
12
|
+
flash_it!( :info, "Database `#{db_name} was dropped successfully!" )
|
13
|
+
|
14
|
+
erb :'explore/update.js', :layout => false
|
15
|
+
end
|
16
|
+
|
3
17
|
# -----------------------------------------------------------------------------
|
4
18
|
get '/explore' do
|
19
|
+
@root = options.connection.build_tree
|
20
|
+
@nodes = @root.children
|
21
|
+
|
5
22
|
reset_crumbs!
|
6
|
-
|
23
|
+
reset_paths!
|
24
|
+
|
7
25
|
erb :'explore/explore'
|
8
26
|
end
|
9
27
|
|
@@ -17,13 +35,13 @@ module Explore
|
|
17
35
|
reset_crumbs!
|
18
36
|
path_names = session[:path_names]
|
19
37
|
path_ids = session[:path_ids]
|
20
|
-
|
38
|
+
@node_id = path_ids.split('|').last
|
21
39
|
|
22
|
-
|
40
|
+
crumbs_from_path( path_ids, path_names )
|
23
41
|
|
24
|
-
|
25
|
-
@
|
26
|
-
|
42
|
+
@root = options.connection.build_partial_tree( path_names )
|
43
|
+
@nodes = @root.find( @node_id ).children
|
44
|
+
|
27
45
|
erb :'explore/explore'
|
28
46
|
end
|
29
47
|
|
@@ -48,22 +66,41 @@ module Explore
|
|
48
66
|
|
49
67
|
crumbs_from_path( path_ids, path_names )
|
50
68
|
|
51
|
-
|
69
|
+
root = options.connection.build_sub_tree( parent_id, path_names )
|
70
|
+
@sub_tree = root.to_adjacencies
|
52
71
|
@node_id = @sub_tree.first[:id]
|
72
|
+
@nodes = root.children
|
53
73
|
|
54
74
|
erb :'explore/more_data_js', :layout => false
|
55
75
|
end
|
56
76
|
|
57
77
|
# -----------------------------------------------------------------------------
|
58
|
-
get '/explore/update_crumb/:
|
59
|
-
|
78
|
+
get '/explore/update_crumb/:path_ids/:path_names' do
|
79
|
+
path_ids = params[:path_ids]
|
80
|
+
path_names = params[:path_names]
|
81
|
+
|
82
|
+
crumbs_from_path( path_ids, path_names )
|
83
|
+
update_paths!( path_ids, path_names )
|
84
|
+
|
85
|
+
root = options.connection.build_partial_tree( path_names )
|
86
|
+
node_id = path_ids.split( "|" ).last
|
87
|
+
@nodes = root.find( node_id ).children
|
88
|
+
|
60
89
|
erb :'explore/update_crumb_js', :layout => false
|
61
90
|
end
|
62
91
|
|
63
92
|
# -----------------------------------------------------------------------------
|
64
|
-
get '/explore/center/:
|
65
|
-
|
66
|
-
|
93
|
+
get '/explore/center/:path_ids/:path_names' do
|
94
|
+
path_ids = params[:path_ids]
|
95
|
+
path_names = params[:path_names]
|
96
|
+
@node_id = path_ids.split( "|" ).last
|
97
|
+
|
98
|
+
update_paths!( path_ids, path_names )
|
99
|
+
pop_crumb!( path_names, path_ids )
|
100
|
+
|
101
|
+
root = options.connection.build_partial_tree( path_names )
|
102
|
+
@nodes = root.find( @node_id ).children
|
103
|
+
|
67
104
|
erb :'explore/center_js', :layout => false
|
68
105
|
end
|
69
106
|
|
@@ -14,6 +14,24 @@ module CollectionHelper
|
|
14
14
|
|
15
15
|
helpers do
|
16
16
|
include WillPaginate::ViewHelpers::Base
|
17
|
+
|
18
|
+
# format indexes to key:orientation
|
19
|
+
def format_index( pair )
|
20
|
+
buff = []
|
21
|
+
buff << pair.first
|
22
|
+
buff << orientation( pair.last )
|
23
|
+
buff.join( ":" )
|
17
24
|
end
|
18
25
|
|
26
|
+
# converts orientation to human
|
27
|
+
def orientation( value )
|
28
|
+
return "id" if value.is_a?(Mongo::ObjectID)
|
29
|
+
case( value.to_i )
|
30
|
+
when Mongo::ASCENDING : "asc"
|
31
|
+
when Mongo::DESCENDING : "desc"
|
32
|
+
else "n/a"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
19
37
|
end
|
data/lib/helpers/crumb_helper.rb
CHANGED
@@ -8,14 +8,14 @@ module CrumbHelper
|
|
8
8
|
@crumbs = []
|
9
9
|
count = 0
|
10
10
|
path_name_tokens.each do |crumb|
|
11
|
-
@crumbs << [crumb, "/explore/center/#{path_id_tokens[count]}"]
|
11
|
+
@crumbs << [crumb, "/explore/center/#{path_name_tokens[0..count].join( "|" )}/#{path_id_tokens[0..count].join( "|") }"]
|
12
12
|
count += 1
|
13
13
|
end
|
14
14
|
session[:crumbs] = @crumbs
|
15
15
|
end
|
16
16
|
|
17
|
-
def pop_crumb!(
|
18
|
-
path = "/explore/center/#{
|
17
|
+
def pop_crumb!( path_ids, path_names )
|
18
|
+
path = "/explore/center/#{path_ids}/#{path_names}"
|
19
19
|
level = 0
|
20
20
|
range = nil
|
21
21
|
@crumbs.each do |pair|
|
@@ -30,7 +30,7 @@ module CrumbHelper
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def reset_crumbs!
|
33
|
-
@crumbs = [ ["home", '/explore/center/home'] ]
|
33
|
+
@crumbs = [ ["home", '/explore/center/home/home'] ]
|
34
34
|
session[:crumbs] = @crumbs
|
35
35
|
end
|
36
36
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module DatabaseHelper
|
2
|
+
helpers do
|
3
|
+
|
4
|
+
def db_title
|
5
|
+
paths = session[:path_names].split( "|" )
|
6
|
+
return context_for( paths ), paths.last
|
7
|
+
end
|
8
|
+
|
9
|
+
def context_for( paths )
|
10
|
+
case paths.size
|
11
|
+
when 2 : "zone"
|
12
|
+
when 3 : "database"
|
13
|
+
else "collection"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module ExploreHelper
|
2
|
+
|
3
|
+
helpers do
|
4
|
+
|
5
|
+
# looking at zone path?
|
6
|
+
def zone_path?( path )
|
7
|
+
path.split( "|" ).size == 1
|
8
|
+
end
|
9
|
+
|
10
|
+
# compute legend title
|
11
|
+
def legend_title( path )
|
12
|
+
path.split( "|" ).last
|
13
|
+
end
|
14
|
+
|
15
|
+
def path_type( path )
|
16
|
+
tokens = path.split( "|" )
|
17
|
+
case tokens.length
|
18
|
+
when 1 : "zone"
|
19
|
+
when 2 : "database"
|
20
|
+
else "collection"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# compute legend from given path.
|
25
|
+
def legend_for( path, count )
|
26
|
+
"#{path_type(path)}s(<span id='count'>#{count}</span>)"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
data/lib/helpers/flash_helper.rb
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
module FlashHelper
|
2
2
|
helpers do
|
3
3
|
|
4
|
+
# clear out flash object
|
5
|
+
def clear_it!
|
6
|
+
@flash = session[:flash] || OrderedHash.new
|
7
|
+
@flash.clear
|
8
|
+
end
|
9
|
+
|
10
|
+
# add flash message
|
4
11
|
def flash_it!( type, msg )
|
5
12
|
@flash = session[:flash] || OrderedHash.new
|
6
13
|
@flash[type] = msg
|
data/lib/helpers/main_helper.rb
CHANGED
@@ -1,12 +1,17 @@
|
|
1
1
|
module MainHelper
|
2
2
|
helpers do
|
3
|
-
|
4
|
-
def
|
5
|
-
|
6
|
-
|
7
|
-
session[:path_names] = path_names
|
3
|
+
|
4
|
+
def zone_locator
|
5
|
+
locator = session[:path_names].split( "|" )[1]
|
6
|
+
"<p class=\"ctx\"><span>zone</span>#{locator}</p>"
|
8
7
|
end
|
9
|
-
|
8
|
+
|
9
|
+
def truncate(text, length = 30, truncate_string = "...")
|
10
|
+
return "" if text.nil?
|
11
|
+
l = length - truncate_string.size
|
12
|
+
text.size > length ? (text[0...l] + truncate_string).to_s : text
|
13
|
+
end
|
14
|
+
|
10
15
|
def align_for( value )
|
11
16
|
return "right" if value.is_a?(Fixnum)
|
12
17
|
"left"
|
@@ -17,30 +22,7 @@ puts "UPDAING PATH #{path_ids} -- #{path_names}"
|
|
17
22
|
return value.to_s.gsub(/(\d)(?=\d{3}+(\.\d*)?$)/, '\1,') if value.instance_of?(Fixnum)
|
18
23
|
value
|
19
24
|
end
|
20
|
-
|
21
|
-
def back_paths!
|
22
|
-
path_ids = session[:path_ids]
|
23
|
-
new_path_ids = path_ids.split( "|" )
|
24
|
-
new_path_ids.pop
|
25
|
-
|
26
|
-
path_names = session[:path_names]
|
27
|
-
new_path_names = path_names.split( "|" )
|
28
|
-
new_path_names.pop
|
29
|
-
|
30
|
-
update_paths!( new_path_ids.join( "|" ), new_path_names.join( "|" ) )
|
31
|
-
end
|
32
|
-
|
33
|
-
def title_for( path_names )
|
34
|
-
tokens = path_names.split( "|" )
|
35
|
-
buff = case tokens.length
|
36
|
-
when 2 : "Environment"
|
37
|
-
when 3 : "Database"
|
38
|
-
else "Collection"
|
39
|
-
end
|
40
|
-
|
41
|
-
buff += " <em>#{tokens.last}</em>"
|
42
|
-
end
|
43
|
-
|
25
|
+
|
44
26
|
def display_info( info )
|
45
27
|
return info if info.is_a?( String )
|
46
28
|
if info.is_a?( Hash )
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module PathHelper
|
2
|
+
helpers do
|
3
|
+
|
4
|
+
def reset_paths!
|
5
|
+
session[:path_ids] = "home"
|
6
|
+
session[:path_names] = "home"
|
7
|
+
end
|
8
|
+
|
9
|
+
def update_paths!( path_ids, path_names )
|
10
|
+
session[:path_ids] = path_ids
|
11
|
+
session[:path_names] = path_names
|
12
|
+
end
|
13
|
+
|
14
|
+
# Pop paths 1 level
|
15
|
+
def back_paths!
|
16
|
+
path_ids = session[:path_ids]
|
17
|
+
new_path_ids = path_ids.split( "|" )
|
18
|
+
new_path_ids.pop
|
19
|
+
|
20
|
+
path_names = session[:path_names]
|
21
|
+
new_path_names = path_names.split( "|" )
|
22
|
+
new_path_names.pop
|
23
|
+
|
24
|
+
update_paths!( new_path_ids.join( "|" ), new_path_names.join( "|" ) )
|
25
|
+
end
|
26
|
+
|
27
|
+
# compute title from path
|
28
|
+
def title_for( path_names )
|
29
|
+
tokens = path_names.split( "|" )
|
30
|
+
buff = case tokens.size
|
31
|
+
when 2 : "zone"
|
32
|
+
when 3 : "database"
|
33
|
+
else "collection"
|
34
|
+
end
|
35
|
+
db = tokens.size > 3 ? "<span class=\"ctx\">#{tokens[2]}</span>." : ""
|
36
|
+
"<p class=\"ctx\" style=\"text-align:center;font-size:0.8em\">#{db}#{tokens.last}</p>"
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|