mongo3 0.0.3 → 0.0.4

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 CHANGED
@@ -1,8 +1,16 @@
1
1
  0.0.1 - Initial Drop
2
- not much there yet...
2
+ o not much there yet...
3
+
3
4
  0.0.2 -
4
- Added mongo auth
5
- Added collection/db views
5
+ o Added mongo auth
6
+ o Added collection/db views
7
+
6
8
  0.0.3 -
7
- Added collection crud
8
- Refactored view code
9
+ o Added collection crud
10
+ o Refactored view code
11
+
12
+ 0.0.4 - Winter cleaning!
13
+ o Fixed issue on over extending cookies. Ie mongo3 suffered amnesia. Switching to memcache
14
+ o Using memcache for session store - will need a local memcache server on default port!
15
+ o Added confirm dialog on clear and drop
16
+ o Bug fixes and some refactor
data/README.rdoc CHANGED
@@ -38,6 +38,7 @@
38
38
 
39
39
  * mongo + mongo_ext
40
40
  * agnostic-will_paginate
41
+ * memcache-client
41
42
 
42
43
  == INSTALL:
43
44
 
@@ -65,7 +66,9 @@
65
66
 
66
67
  === Launch It!
67
68
 
68
- Launch it. Fires up sinatra and opens up the console
69
+ Launch it. Fires up sinatra and opens up the console
70
+ NOTE: Assumes memcache server is running on local host with default port!
71
+
69
72
  > mongo3
70
73
 
71
74
  == LICENSE:
data/bin/mongo3 CHANGED
@@ -26,4 +26,4 @@ Thread.new do
26
26
  open( "http://localhost:6666/explore" )
27
27
  end
28
28
 
29
- Sinatra::Application.run! :port => 6666
29
+ Sinatra::Application.run! :port => 6666, :environment => 'production'
data/data/populate CHANGED
@@ -6,8 +6,13 @@ connection = Mongo::Connection.new( 'localhost', 27018 )
6
6
  db = connection.db( 'admin' )
7
7
  db.authenticate( 'admin', 'admin')
8
8
 
9
- db = connection.db( 'fernand' )
10
- cltn = db.create_collection( "blee" )
9
+ db_name = "fernand_mdb"
10
+ cltn_name = "blee"
11
+
12
+
13
+ db = connection.db( db_name )
14
+
15
+ cltn = db.create_collection( cltn_name )
11
16
  cltn.remove
12
17
 
13
18
  10.times do |i|
@@ -16,5 +21,6 @@ puts "Inserting row #{row.inspect}"
16
21
  cltn.insert( row )
17
22
  end
18
23
 
19
- cltn = db["fred"]
20
- puts "Inserted `#{cltn.count} records"
24
+ cltn = db[cltn_name]
25
+ puts ""
26
+ puts "Inserted `#{cltn.count} records in `#{cltn_name}"
@@ -4,12 +4,12 @@ module Collections
4
4
 
5
5
  # ---------------------------------------------------------------------------
6
6
  # Paginate on a collection
7
- get "/collections/:page" do
7
+ get "/collections/:page" do
8
8
  @back_url = "/explore/back"
9
9
  @page = params[:page].to_i || 1
10
10
  @title = title_for( session[:path_names] )
11
11
 
12
- load_cltn( params[:page].to_i )
12
+ load_cltn( params[:page].to_i )
13
13
  erb :'collections/list'
14
14
  end
15
15
 
@@ -55,20 +55,16 @@ module Collections
55
55
 
56
56
  get '/collections/clear/' do
57
57
  path_names = session[:path_names]
58
- options.connection.clear_cltn( path_names )
59
- load_cltn
60
-
61
- flash_it!( :info, "Collection #{path_names.split('|').last} was cleared successfully!" )
62
- erb :'collections/results.js', :layout => false
58
+ options.connection.clear_cltn( path_names )
59
+ flash_it!( :info, "Collection `#{path_names.split('|').last} was cleared successfully!" )
60
+ erb :'collections/all_done.js', :layout => false
63
61
  end
64
62
 
65
63
  get '/collections/drop/' do
66
64
  path_names = session[:path_names]
67
- options.connection.drop_cltn( path_names )
68
- load_cltn
69
-
70
- flash_it!( :info, "Collection #{path_names.split('|').last} was dropped successfully!" )
71
- erb :'collections/results.js', :layout => false
65
+ options.connection.drop_cltn( path_names )
66
+ flash_it!( :info, "Collection `#{path_names.split('|').last} was dropped successfully!" )
67
+ erb :'collections/all_done.js', :layout => false
72
68
  end
73
69
 
74
70
  # ===========================================================================
@@ -82,10 +78,8 @@ module Collections
82
78
  @query = [query_params.first.to_json, query_params.last.to_json].join( " | " )
83
79
  @query.gsub!( /\"/, "'" )
84
80
  end
85
- puts "QUERY #{@query.inspect}"
86
81
  @page = page
87
82
  path_names = session[:path_names]
88
- path_ids = session[:path_ids]
89
83
 
90
84
  @cltn = options.connection.paginate_cltn( path_names, query_params, @page, 15 )
91
85
  @cols = []
@@ -3,7 +3,6 @@ module Databases
3
3
  # ---------------------------------------------------------------------------
4
4
  get "/databases/:page" do
5
5
  page = params[:page].to_i || 1
6
- path_ids = session[:path_ids]
7
6
  path_names = session[:path_names]
8
7
 
9
8
  @cltns = options.connection.paginate_db( path_names, page, 10 )
@@ -11,6 +10,27 @@ module Databases
11
10
  @back_url = "/explore/back"
12
11
 
13
12
  erb :'databases/list'
14
- end
13
+ end
14
+
15
+ # ---------------------------------------------------------------------------
16
+ get "/databases/drop/" do
17
+ path_names = session[:path_names]
18
+ options.connection.drop_db( path_names )
19
+
20
+ redirect "/explore/back"
21
+ end
22
+
23
+ # ---------------------------------------------------------------------------
24
+ post "/databases/delete/" do
25
+ path = params[:path]
26
+
27
+ options.connection.drop_cltn( path )
28
+
29
+ flash_it!( :info, "Collection #{path.split('|').last} was dropped successfully!" )
30
+
31
+ @cltns = options.connection.paginate_db( session[:path_names], 1, 10 )
32
+
33
+ erb :'databases/results.js', :layout => false
34
+ end
15
35
 
16
36
  end
@@ -12,17 +12,17 @@ module Explore
12
12
  session[:selected_cols] = nil
13
13
  session[:query_params] = nil
14
14
 
15
- back_paths!
16
- path_ids = session[:path_ids]
17
- path_names = session[:path_names]
15
+ back_paths!
18
16
 
19
17
  reset_crumbs!
18
+ path_names = session[:path_names]
19
+ path_ids = session[:path_ids]
20
20
  crumbs_from_path( path_ids, path_names )
21
21
 
22
- @root = options.connection.build_partial_tree( path_ids, path_names )
22
+ @root = options.connection.build_partial_tree( path_names )
23
23
 
24
24
  # need to adjust crumbs in case something got blown...
25
- @center = path_ids.split( "|" ).last
25
+ @center = path_ids.split('|').last
26
26
 
27
27
  erb :'explore/explore'
28
28
  end
@@ -31,26 +31,24 @@ module Explore
31
31
  get '/explore/show/:path_ids/:path_names' do
32
32
  path_ids = params[:path_ids]
33
33
  path_names = params[:path_names]
34
-
35
- @info = options.connection.show( path_names )
34
+
35
+ update_paths!( path_ids, path_names )
36
36
 
37
- session[:path_ids] = path_ids
38
- session[:path_names] = path_names
39
-
37
+ @info = options.connection.show( path_names )
40
38
  partial :'explore/info'
41
39
  end
42
40
 
43
41
  # -----------------------------------------------------------------------------
44
42
  get '/explore/more_data/:path_ids/:path_names/*' do
45
43
  path_ids = params[:path_ids]
44
+ parent_id = path_ids.split("|").last
46
45
  path_names = params[:path_names]
47
46
 
48
- session[:path_ids] = path_ids
49
- session[:path_names] = path_names
47
+ update_paths!( path_ids, path_names )
50
48
 
51
49
  crumbs_from_path( path_ids, path_names )
52
50
 
53
- @sub_tree = options.connection.build_sub_tree( path_ids, path_names )
51
+ @sub_tree = options.connection.build_sub_tree( parent_id, path_names )
54
52
  @node_id = @sub_tree.first[:id]
55
53
 
56
54
  erb :'explore/more_data_js', :layout => false
@@ -31,7 +31,7 @@ module CrumbHelper
31
31
 
32
32
  def reset_crumbs!
33
33
  @crumbs = [ ["home", '/explore/center/home'] ]
34
- session[:crumbs] = @crumbs
34
+ session[:crumbs] = @crumbs
35
35
  end
36
36
 
37
37
  def add_crumb( title, url )
@@ -1,6 +1,12 @@
1
1
  module MainHelper
2
2
  helpers do
3
3
 
4
+ def update_paths!( path_ids, path_names )
5
+ puts "UPDAING PATH #{path_ids} -- #{path_names}"
6
+ session[:path_ids] = path_ids
7
+ session[:path_names] = path_names
8
+ end
9
+
4
10
  def align_for( value )
5
11
  return "right" if value.is_a?(Fixnum)
6
12
  "left"
@@ -12,16 +18,16 @@ module MainHelper
12
18
  value
13
19
  end
14
20
 
15
- def back_paths!
21
+ def back_paths!
16
22
  path_ids = session[:path_ids]
17
- path_names = session[:path_names]
18
23
  new_path_ids = path_ids.split( "|" )
19
24
  new_path_ids.pop
20
- session[:path_ids] = new_path_ids.join( "|" )
21
25
 
26
+ path_names = session[:path_names]
22
27
  new_path_names = path_names.split( "|" )
23
28
  new_path_names.pop
24
- session[:path_names] = new_path_names.join( "|" )
29
+
30
+ update_paths!( new_path_ids.join( "|" ), new_path_names.join( "|" ) )
25
31
  end
26
32
 
27
33
  def title_for( path_names )
data/lib/main.rb CHANGED
@@ -15,7 +15,8 @@ configure do
15
15
  Mongo3.load_all_libs_relative_to(__FILE__, 'helpers' )
16
16
  Mongo3.load_all_libs_relative_to(__FILE__, 'controllers' )
17
17
 
18
- set :sessions , true
18
+ use Rack::Session::Memcache, :namespace => 'mongo3'
19
+
19
20
  set :connection, Mongo3::Connection.new( File.join( ENV['HOME'], %w[.mongo3 landscape.yml] ) )
20
21
  end
21
22
 
@@ -5,6 +5,15 @@ module Mongo3
5
5
  @config_file = config_file
6
6
  end
7
7
 
8
+ def drop_db( path_names )
9
+ path_name_tokens = path_names.split( "|" )
10
+ env = path_name_tokens[1]
11
+ connect_for( env ) do |con|
12
+ db_name = path_name_tokens.pop
13
+ con.drop_database( db_name )
14
+ end
15
+ end
16
+
8
17
  def drop_cltn( path_names )
9
18
  path_name_tokens = path_names.split( "|" )
10
19
  env = path_name_tokens[1]
@@ -56,11 +65,14 @@ module Mongo3
56
65
  con.database_info.sort { |a,b| b[1] <=> a[1] }.each { |e| info[:databases][e[0]] = to_mb( e[1] ) }
57
66
  info[:server] = con.server_info
58
67
  end
68
+ # BOZO !! Need to figure out links strategy!
59
69
  elsif path_name_tokens.size == 3
60
70
  db_name = path_name_tokens.pop
71
+ info[:links] = OrderedHash.new
61
72
  connect_for( env ) do |con|
62
73
  db = con.db( db_name )
63
- info[:edit] = "/databases/1"
74
+ info[:links][:manage] = "/databases/1"
75
+ # info[:links][:drop] = "/databases/drop/"
64
76
  info[:size] = to_mb( con.database_info[db_name] )
65
77
  info[:node] = db.nodes
66
78
  info[:collections] = db.collection_names.size
@@ -68,16 +80,18 @@ module Mongo3
68
80
  info[:last_status] = db.last_status
69
81
  end
70
82
  elsif path_name_tokens.size == 4
83
+ info[:links] = OrderedHash.new
71
84
  cltn_name = path_name_tokens.pop
72
85
  db_name = path_name_tokens.pop
73
86
  connect_for( env ) do |con|
74
87
  db = con.db( db_name )
75
88
  cltn = db[cltn_name]
76
89
  indexes = db.index_information( cltn_name )
77
-
78
- info[:edit] = "/collections/1"
79
- info[:size] = cltn.count
80
- info[:indexes] = format_indexes( indexes ) if indexes and !indexes.empty?
90
+
91
+ info[:links][:manage] = "/collections/1"
92
+ # info[:links][:drop] = "/collections/drop/"
93
+ info[:size] = cltn.count
94
+ info[:indexes] = format_indexes( indexes ) if indexes and !indexes.empty?
81
95
  end
82
96
  end
83
97
  info
@@ -151,8 +165,7 @@ module Mongo3
151
165
  end
152
166
 
153
167
  # Build environment tree
154
- def build_partial_tree( path_ids, path_names )
155
- path_id_tokens = path_ids.split( "|" )
168
+ def build_partial_tree( path_names )
156
169
  path_name_tokens = path_names.split( "|" )
157
170
  bm_env = path_name_tokens[1]
158
171
  bm_cltn = path_name_tokens.pop if path_name_tokens.size == 4
@@ -192,11 +205,9 @@ module Mongo3
192
205
  end
193
206
 
194
207
  # Build an appropriate subtree based on requested item
195
- def build_sub_tree( path_ids, path_names )
196
- path_id_tokens = path_ids.split( "|" )
208
+ def build_sub_tree( parent_id, path_names )
197
209
  path_name_tokens = path_names.split( "|" )
198
210
  env = path_name_tokens[1]
199
- parent_id = path_id_tokens.last
200
211
 
201
212
  if db_request?( path_name_tokens )
202
213
  sub_tree = build_db_tree( parent_id, env )
data/lib/mongo3.rb CHANGED
@@ -2,7 +2,7 @@
2
2
  module Mongo3
3
3
 
4
4
  # :stopdoc:
5
- VERSION = '0.0.3'
5
+ VERSION = '0.0.4'
6
6
  LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
7
7
  PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
8
8
  # :startdoc:
Binary file
@@ -420,3 +420,46 @@ input.no_input {
420
420
  color: #c1c1c1;
421
421
  }
422
422
 
423
+ div#mgmt_actions {
424
+ text-align: right;
425
+ width: 100%;
426
+ }
427
+ div#mgmt_actions span {
428
+ font-size: 1em;
429
+ }
430
+
431
+ button.action {
432
+ background: transparent url(/images/button_act.png) repeat-x center bottom;
433
+ }
434
+ button.clear:hover {
435
+ background-color: #3e41bd;
436
+ }
437
+ button.drop:hover {
438
+ background-color: #bb1947;
439
+ }
440
+
441
+ img.delete {
442
+ cursor: pointer;
443
+ border: 0;
444
+ display:none;
445
+ }
446
+ img.wait {
447
+ width: 16px;
448
+ height: 16px;
449
+ vertical-align: sub;
450
+ display: none;
451
+ }
452
+
453
+ .modal {
454
+ background-color: #212021;
455
+ display: none;
456
+ width: 350px;
457
+ padding: 15px;
458
+ text-align: center;
459
+ border: 2px solid #333;
460
+ opacity: 0.8;
461
+ -moz-border-radius: 6px;
462
+ -webkit-border-radius: 6px;
463
+ -moz-box-shadow: 0 0 20px #92b948;
464
+ -webkit-box-shadow: 0 0 20px #92b948;
465
+ }
@@ -14,8 +14,8 @@
14
14
  <% id = cltn['_id'] %>
15
15
  <tr id="<%=id%>" valign="top">
16
16
  <td id="<%=id%>">
17
- <img class="delete" id="<%=id%>" src="/images/delete.png" style="cursor:pointer;border:0;display:none" title="delete this record"/>
18
- <img id="wait_<%=id%>" src="/images/loading.gif" style="width:16px;height:16px;vertical-align:sub;display:none"></img>
17
+ <img class="delete" id="<%=id%>" src="/images/delete.png" title="delete this record"/>
18
+ <img class="wait" id="wait_<%=id%>" src="/images/loading.gif"></img>
19
19
  </td>
20
20
  <% @selected_cols.each do |k| %>
21
21
  <td><%= format_number(cltn[k]) %></td>
@@ -30,24 +30,26 @@
30
30
  </div>
31
31
 
32
32
  <script>
33
- $("table#cltn tr" ).hover(
34
- function() {
35
- $(this).addClass( 'highlight' );
36
- $("td#" + $(this).attr('id') + " img.delete" ).show();
37
- },
38
- function() {
39
- $(this).removeClass( 'highlight' );
40
- $("td#" + $(this).attr('id') + " img.delete" ).hide();
41
- });
42
- $( "img.delete" ).click( function() {
43
- var id = $(this).attr('id');
44
- $.ajax({
45
- data: {id: id},
46
- dataType: 'script',
47
- type: 'post',
48
- url: '/collections/delete/',
49
- beforeSend: function() { $('img#_wait_' + id ).show(); },
50
- complete: function() { $('img#_wait_' + id ).hide(); }
51
- });
33
+ $( function() {
34
+ $("table#cltn tr" ).hover(
35
+ function() {
36
+ $(this).addClass( 'highlight' );
37
+ $("td#" + $(this).attr('id') + " img.delete" ).show();
38
+ },
39
+ function() {
40
+ $(this).removeClass( 'highlight' );
41
+ $("td#" + $(this).attr('id') + " img.delete" ).hide();
42
+ });
43
+ $( "img.delete" ).click( function() {
44
+ var id = $(this).attr('id');
45
+ $.ajax({
46
+ data: {id: id},
47
+ dataType: 'script',
48
+ type: 'post',
49
+ url: '/collections/delete/',
50
+ beforeSend: function() { $('img#_wait_' + id ).show(); },
51
+ complete: function() { $('img#_wait_' + id ).hide(); }
52
+ });
53
+ });
52
54
  });
53
55
  </script>
@@ -1,3 +1,5 @@
1
+ <script src="/javascripts/jquery.example.js" type="text/javascript"></script>
2
+
1
3
  <form id="search" onsubmit="search_submit();return false;" action="/collections/search/" method="post" style="text-align:center;margin:10px">
2
4
  <fieldset>
3
5
  <input id="search" type="text" name="search" class="search" value="<%=@query%>"/>
@@ -0,0 +1,2 @@
1
+ <%= erb :'shared/flash.js', :layout => false %>
2
+ $('div#results').html( "<div class=\"no_items\">All done here! Click the `back link to continue.</span>" );
@@ -1,52 +1,53 @@
1
- <style>
2
- div#actions {
3
- text-align: right;
4
- width: 100%;
5
- }
6
- div#actions span {
7
- font-size: 1em;
8
- }
9
- button.action {
10
- background: transparent url(/images/button_act.png) repeat-x center bottom;
11
- }
12
- button.clear:hover {
13
- background-color: #3e41bd;
14
- }
15
- button.drop:hover {
16
- background-color: #bb1947;
17
- }
18
- </style>
19
-
20
1
  <div class="cltn">
21
2
  <div class="title"><%=@title%></div>
22
3
  <a class="back" href="<%=@back_url%>">&laquo;&nbsp;back</a>
23
4
 
24
- <div id="actions">
5
+ <div id="mgmt_actions">
25
6
  <img id="action_load" src="/images/loading.gif" style="width:25px;height:25px;vertical-align:sub;display:none"></img>
26
- <button class="action clear" title="Delete all records from collection">clear</button>
27
- <button class="action drop" title="Drop the entire collection">drop</button>
7
+ <button class="action clear" rel="#confirm_clear" title="Delete all records from collection">clear</button>
8
+ <button class="action drop" rel="#confirm_drop" title="Drop the entire collection">drop</button>
28
9
  </div>
29
10
  <div id="results">
30
11
  <%= partial :'collections/results' %>
31
12
  </div>
32
13
  <div>
33
14
 
34
-
15
+ <div class="modal" id="confirm_clear">
16
+ <p>Clearing out the whole collection. Are you sure?</p>
17
+ <p style="margin:10px">
18
+ <button class="close yes" id="clear"> Yes </button>
19
+ <button class="close"> No </button>
20
+ </p>
21
+ </div>
22
+
23
+ <div class="modal" id="confirm_drop">
24
+ <p>Dropping the whole collection. Are you sure?</p>
25
+ <p style="margin:10px">
26
+ <button class="close yes" id="drop"> Yes </button>
27
+ <button class="close"> No </button>
28
+ </p>
29
+ </div>
30
+
35
31
  <script>
36
32
  $( function() {
37
- $( 'button.action' ).click( function() {
38
- var r = confirm( "Are you sure?" );
39
- if( r == false )
40
- return false;
33
+ $('button.action' ).overlay( {
34
+ expose: {
35
+ color: '#212021',
36
+ loadSpeed: 200,
37
+ opacity: 0.9
38
+ },
39
+ closeOnClick: false
40
+ });
41
41
 
42
+ $( 'button.yes' ).click( function() {
42
43
  $.ajax({
43
44
  dataType: 'script',
44
45
  type: 'get',
45
- url: '/collections/' + $(this).html() + "/",
46
+ url: '/collections/' + $(this).attr('id') + "/",
46
47
  beforeSend: function() { $('img#action_load').show(); },
47
48
  complete: function() { $('img#action_load').hide(); }
48
- });
49
- })
49
+ });
50
+ });
50
51
  });
51
52
  </script>
52
53
 
@@ -0,0 +1,57 @@
1
+ <div id="summary">
2
+ <%= page_entries_info @cltns, :entry_name => 'item' %>
3
+ </div>
4
+
5
+ <table id="cltn" class="cltn" border="0" cellpadding="10" cellspacing="20">
6
+ <thead>
7
+ <th width="2%">&nbsp;</th>
8
+ <% cols = @cltns.first.keys %>
9
+ <% cols.each do |col| %>
10
+ <th align="<%=align_for( @cltns.first[col] )%>"><%=col%></th>
11
+ <% end %>
12
+ </thead>
13
+ <tbody>
14
+ <% count = 0; @cltns.each do |cltn| %>
15
+ <% path = "#{session[:path_names]}|#{cltn[:name]}"%>
16
+ <tr id="<%=count%>" valign="top">
17
+ <td id="<%=count%>">
18
+ <img class="delete" id="<%=path%>" rel="<%=count%>" src="/images/delete.png" title="drop this collection"/>
19
+ <img class="wait" id="wait_<%=count%>" src="/images/loading.gif"></img>
20
+ </td>
21
+ <% cltn.each_pair do |k, v| %>
22
+ <td align="<%=align_for( v )%>"><%= format_number(v) %></td>
23
+ <% end %>
24
+ </tr>
25
+ <% count+=1;end %>
26
+ </tbody>
27
+ </table>
28
+
29
+ <div id="links">
30
+ <%= will_paginate @cltns, :params => { :url => "/databases" } %>
31
+ </div>
32
+
33
+ <script>
34
+ $( function() {
35
+ $("table#cltn tr" ).hover(
36
+ function() {
37
+ $(this).addClass( 'highlight' );
38
+ $("td#" + $(this).attr('id') + " img.delete" ).show();
39
+ },
40
+ function() {
41
+ $(this).removeClass( 'highlight' );
42
+ $("td#" + $(this).attr('id') + " img.delete" ).hide();
43
+ });
44
+ $( "img.delete" ).click( function() {
45
+ var id = $(this).attr('id');
46
+ var count = $(this).attr('rel')
47
+ $.ajax({
48
+ data: {path: id},
49
+ dataType: 'script',
50
+ type: 'post',
51
+ url: '/databases/delete/',
52
+ beforeSend: function() { $('img#_wait_' + count ).show(); },
53
+ complete: function() { $('img#_wait_' + count ).hide(); }
54
+ });
55
+ });
56
+ });
57
+ </script>
@@ -2,29 +2,7 @@
2
2
  <div class="title"><%=@title%></div>
3
3
  <a class="back" href="<%=@back_url%>">&laquo;&nbsp;back</a>
4
4
 
5
- <div id="summary">
6
- <%= page_entries_info @cltns, :entry_name => 'item' %>
5
+ <div id="results">
6
+ <%= partial :'databases/results'%>
7
7
  </div>
8
-
9
- <table class="cltn" border="0" cellpadding="10" cellspacing="20">
10
- <thead>
11
- <% cols = @cltns.first.keys %>
12
- <% cols.each do |col| %>
13
- <th align="<%=align_for( @cltns.first[col] )%>"><%=col%></th>
14
- <% end %>
15
- </thead>
16
- <tbody>
17
- <% @cltns.each do |cltn| %>
18
- <tr valign="top">
19
- <% cltn.each_pair do |k, v| %>
20
- <td align="<%=align_for( v )%>"><%= format_number(v) %></td>
21
- <% end %>
22
- </tr>
23
- <% end %>
24
- </tbody>
25
- </table>
26
-
27
- <div id="links">
28
- <%= will_paginate @cltns, :params => { :url => "/databases" } %>
29
- </div>
30
- <div>
8
+ <div>
@@ -0,0 +1,2 @@
1
+ <%= erb :'shared/flash.js', :layout => false %>
2
+ $('div#results').html( "<%=escape_javascript(partial(:'databases/results'))%>" );
@@ -1,13 +1,15 @@
1
1
  <h1 style="text-align:center">Details for <em><%=@info.delete( :title ) %></em></h1>
2
2
 
3
- <% if @info.has_key? :edit %>
3
+ <% if @info.has_key? :links %>
4
4
  <div style="text-align:right;">
5
- <a href='<%=@info.delete(:edit)%>'>manage</a>
5
+ <% @info.delete(:links).each_pair do |name, url| %>
6
+ <a href='<%=url%>'><%=name%></a>
7
+ <% end %>
6
8
  </div>
7
9
  <% end %>
8
10
 
9
- <table border="0" cellpadding="10" cellspacing="20" style="width:100%;border-collapse:collapse;;font-size:0.7em;text-align:left">
10
- <thead style="font-weight:bold;font-size:1em;border-bottom:1px #c1c1c1 solid;color:#c1c1c1">
11
+ <table class="cltn" border="0" cellpadding="10" cellspacing="20">
12
+ <thead>
11
13
  <th width="20%">Name</th>
12
14
  <th width="80%">Value</th>
13
15
  </thead>
data/lib/views/layout.erb CHANGED
@@ -9,9 +9,8 @@
9
9
  <script src="/javascripts/jquery_min.js" type="text/javascript"></script>
10
10
  <script src="/javascripts/jquery_ui_min.js" type="text/javascript"></script>
11
11
  <script src="/javascripts/jquery.tools.min.js" type="text/javascript"></script>
12
- <script src="/javascripts/application.js" type="text/javascript"></script>
12
+ <script src="/javascripts/application.js" type="text/javascript"></script>
13
13
  <script src="/javascripts/jit.min.js" type="text/javascript"></script>
14
- <script src="/javascripts/jquery.example.js" type="text/javascript"></script>
15
14
  </head>
16
15
 
17
16
  <body id="body">
@@ -5,4 +5,4 @@ $('div.flash').show();
5
5
  <% else %>
6
6
  $('div.flash').attr( 'class', 'flash flash_info' );
7
7
  <% end %>
8
- $('div.flash').fadeOut( 5000 );
8
+ $('div.flash').fadeOut( 3000 );
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongo3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fernand Galiana
@@ -63,10 +63,13 @@ extra_rdoc_files:
63
63
  - lib/views/collections/_results.erb
64
64
  - lib/views/collections/_rows.erb
65
65
  - lib/views/collections/_search_form.erb
66
+ - lib/views/collections/all_done.js.erb
66
67
  - lib/views/collections/list.erb
67
68
  - lib/views/collections/results.js.erb
68
69
  - lib/views/collections/update.js.erb
70
+ - lib/views/databases/_results.erb
69
71
  - lib/views/databases/list.erb
72
+ - lib/views/databases/results.js.erb
70
73
  - lib/views/explore/_crumbs.erb
71
74
  - lib/views/explore/_dump_array.erb
72
75
  - lib/views/explore/_dump_hash.erb
@@ -151,6 +154,7 @@ files:
151
154
  - lib/public/images/tooltip/white_arrow.png
152
155
  - lib/public/images/tooltip/white_arrow_big.png
153
156
  - lib/public/images/tooltip/white_big.png
157
+ - lib/public/javascripts/.DS_Store
154
158
  - lib/public/javascripts/Jit-1.1.3.zip
155
159
  - lib/public/javascripts/Jit/Examples/Hypertree/example1.html
156
160
  - lib/public/javascripts/Jit/Examples/Hypertree/example1.js
@@ -196,7 +200,6 @@ files:
196
200
  - lib/public/javascripts/Jit/jit.js
197
201
  - lib/public/javascripts/application.js
198
202
  - lib/public/javascripts/jit.min.js
199
- - lib/public/javascripts/jquery.confirm.js
200
203
  - lib/public/javascripts/jquery.example.js
201
204
  - lib/public/javascripts/jquery.tools.min.js
202
205
  - lib/public/javascripts/jquery_min.js
@@ -207,10 +210,13 @@ files:
207
210
  - lib/views/collections/_results.erb
208
211
  - lib/views/collections/_rows.erb
209
212
  - lib/views/collections/_search_form.erb
213
+ - lib/views/collections/all_done.js.erb
210
214
  - lib/views/collections/list.erb
211
215
  - lib/views/collections/results.js.erb
212
216
  - lib/views/collections/update.js.erb
217
+ - lib/views/databases/_results.erb
213
218
  - lib/views/databases/list.erb
219
+ - lib/views/databases/results.js.erb
214
220
  - lib/views/explore/_crumbs.erb
215
221
  - lib/views/explore/_dump_array.erb
216
222
  - lib/views/explore/_dump_hash.erb
@@ -1,132 +0,0 @@
1
- /**
2
- * Confirm plugin 1.2
3
- *
4
- * Copyright (c) 2007 Nadia Alramli (http://nadiana.com/)
5
- * Dual licensed under the MIT (MIT-LICENSE.txt)
6
- * and GPL (GPL-LICENSE.txt) licenses.
7
- */
8
-
9
- /**
10
- * For more docs and examples visit:
11
- * http://nadiana.com/jquery-confirm-plugin
12
- * For comments, suggestions or bug reporting,
13
- * email me at: http://nadiana.com/contact/
14
- */
15
-
16
- jQuery.fn.confirm = function(options) {
17
- options = jQuery.extend({
18
- msg: 'Are you sure?',
19
- stopAfter: 'never',
20
- wrapper: '<span></span>',
21
- eventType: 'click',
22
- dialogShow: 'show',
23
- dialogSpeed: '',
24
- timeout: 0
25
- }, options);
26
- options.stopAfter = options.stopAfter.toLowerCase();
27
- if (!options.stopAfter in ['never', 'once', 'ok', 'cancel']) {
28
- options.stopAfter = 'never';
29
- }
30
- options.buttons = jQuery.extend({
31
- ok: 'Yes',
32
- cancel: 'No',
33
- wrapper:'<a href="#"></a>',
34
- separator: '/'
35
- }, options.buttons);
36
-
37
- // Shortcut to eventType.
38
- var type = options.eventType;
39
-
40
- return this.each(function() {
41
- var target = this;
42
- var $target = jQuery(target);
43
- var timer;
44
- var saveHandlers = function() {
45
- var events = jQuery.data(target, 'events');
46
- if (!events) {
47
- // There are no handlers to save.
48
- return;
49
- }
50
- target._handlers = new Array();
51
- for (var i in events[type]) {
52
- target._handlers.push(events[type][i]);
53
- }
54
- }
55
-
56
- // Create ok button, and bind in to a click handler.
57
- var $ok = jQuery(options.buttons.wrapper)
58
- .append(options.buttons.ok)
59
- .click(function() {
60
- // Check if timeout is set.
61
- if (options.timeout != 0) {
62
- clearTimeout(timer);
63
- }
64
- $target.unbind(type, handler);
65
- $target.show();
66
- $dialog.hide();
67
- // Rebind the saved handlers.
68
- if (target._handlers != undefined) {
69
- jQuery.each(target._handlers, function() {
70
- $target.click(this);
71
- });
72
- }
73
- // Trigger click event.
74
- $target.click();
75
- if (options.stopAfter != 'ok' && options.stopAfter != 'once') {
76
- $target.unbind(type);
77
- // Rebind the confirmation handler.
78
- $target.one(type, handler);
79
- }
80
- return false;
81
- })
82
-
83
- var $cancel = jQuery(options.buttons.wrapper).append(options.buttons.cancel).click(function() {
84
- // Check if timeout is set.
85
- if (options.timeout != 0) {
86
- clearTimeout(timer);
87
- }
88
- if (options.stopAfter != 'cancel' && options.stopAfter != 'once') {
89
- $target.one(type, handler);
90
- }
91
- $target.show();
92
- $dialog.hide();
93
- return false;
94
- });
95
-
96
- if (options.buttons.cls) {
97
- $ok.addClass(options.buttons.cls);
98
- $cancel.addClass(options.buttons.cls);
99
- }
100
-
101
- var $dialog = jQuery(options.wrapper)
102
- .append(options.msg)
103
- .append($ok)
104
- .append(options.buttons.separator)
105
- .append($cancel);
106
-
107
- var handler = function() {
108
- jQuery(this).hide();
109
-
110
- // Do this check because of a jQuery bug
111
- if (options.dialogShow != 'show') {
112
- $dialog.hide();
113
- }
114
-
115
- $dialog.insertBefore(this);
116
- // Display the dialog.
117
- $dialog[options.dialogShow](options.dialogSpeed);
118
- if (options.timeout != 0) {
119
- // Set timeout
120
- clearTimeout(timer);
121
- timer = setTimeout(function() {$cancel.click(); $target.one(type, handler);}, options.timeout);
122
- }
123
- return false;
124
- };
125
-
126
- saveHandlers();
127
- $target.unbind(type);
128
- target._confirm = handler
129
- target._confirmEvent = type;
130
- $target.one(type, handler);
131
- });
132
- }