mongo_browser 0.2.0.rc2 → 0.2.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/.gitignore +3 -1
- data/.rspec +1 -1
- data/.travis.yml +6 -1
- data/CHANGELOG.md +15 -0
- data/{grunt.js → Gruntfile.js} +10 -8
- data/Procfile +1 -0
- data/README.md +44 -2
- data/Rakefile +1 -12
- data/app/assets/images/ajax-loader.gif +0 -0
- data/app/assets/javascripts/app/controllers/{breadcrumbs.js.coffee → breadcrumbs_controller.js.coffee} +4 -7
- data/app/assets/javascripts/app/controllers/collections/index_controller.js.coffee +38 -0
- data/app/assets/javascripts/app/controllers/collections/stats_controller.js.coffee +17 -0
- data/app/assets/javascripts/app/controllers/{databases.js.coffee → databases/index_controller.js.coffee} +11 -15
- data/app/assets/javascripts/app/controllers/databases/stats_controller.js.coffee +15 -0
- data/app/assets/javascripts/app/controllers/documents/index_controller.js.coffee +54 -0
- data/app/assets/javascripts/app/controllers/documents/show_controller.js.coffee +38 -0
- data/app/assets/javascripts/app/controllers/main_controller.js.coffee +15 -0
- data/app/assets/javascripts/app/controllers/servers/show_controller.js.coffee +17 -0
- data/app/assets/javascripts/app/directives.js.coffee +23 -0
- data/app/assets/javascripts/app/filters.js.coffee +14 -1
- data/app/assets/javascripts/app/modules/alerts.js.coffee +58 -0
- data/app/assets/javascripts/app/modules/pager.js.coffee +2 -2
- data/app/assets/javascripts/app/modules/spinner.js.coffee +29 -0
- data/app/assets/javascripts/app/modules/table_filter.js.coffee +4 -4
- data/app/assets/javascripts/app/resources.js.coffee +14 -8
- data/app/assets/javascripts/app/services.js.coffee +11 -33
- data/app/assets/javascripts/application.js.coffee +62 -34
- data/app/assets/javascripts/application.test.js.coffee +5 -0
- data/app/assets/javascripts/compiled_templates.js.coffee +1 -0
- data/app/assets/javascripts/vendor.js.coffee +0 -1
- data/app/assets/stylesheets/application.css.scss +36 -18
- data/{public/index.html → app/views/index.erb} +8 -8
- data/bin/mongo_browser +2 -13
- data/config.ru +3 -1
- data/lib/mongo_browser.rb +1 -0
- data/lib/mongo_browser/api.rb +11 -0
- data/lib/mongo_browser/api/collections.rb +34 -0
- data/lib/mongo_browser/api/databases.rb +32 -0
- data/lib/mongo_browser/api/documents.rb +37 -0
- data/lib/mongo_browser/api/mongo.rb +41 -0
- data/lib/mongo_browser/application.rb +8 -174
- data/lib/mongo_browser/application/development.rb +32 -0
- data/lib/mongo_browser/cli.rb +48 -0
- data/lib/mongo_browser/entities.rb +43 -0
- data/lib/mongo_browser/models/collection.rb +7 -12
- data/lib/mongo_browser/models/document.rb +5 -1
- data/lib/mongo_browser/models/pager.rb +22 -9
- data/lib/mongo_browser/version.rb +1 -1
- data/mongo_browser.gemspec +22 -15
- data/package.json +30 -0
- data/public/ng/templates/alerts.html +6 -0
- data/public/ng/templates/collections/index.html +39 -0
- data/public/ng/templates/collections/stats.html +18 -0
- data/public/ng/templates/databases/index.html +35 -0
- data/public/ng/templates/databases/stats.html +18 -0
- data/public/ng/templates/documents/index.html +40 -0
- data/public/ng/templates/documents/show.html +17 -0
- data/{app/assets → public/ng}/templates/pager.html +0 -0
- data/{app/assets/templates/server_info.html → public/ng/templates/server/show.html} +1 -1
- data/{app/assets → public/ng}/templates/table_filter.html +0 -0
- data/script/ci_all +5 -1
- data/script/ci_e2e +5 -2
- data/script/ci_javascripts +1 -1
- data/script/ci_rspec +1 -1
- data/spec/javascripts/app/controllers/{breadcrumbs_spec.js.coffee → breadcrumbs_controller_spec.js.coffee} +1 -1
- data/spec/javascripts/app/controllers/collections/index_controller_spec.js.coffee +95 -0
- data/spec/javascripts/app/controllers/collections/stats_controller_spec.js.coffee +34 -0
- data/spec/javascripts/app/controllers/databases/index_controller_spec.js.coffee +93 -0
- data/spec/javascripts/app/controllers/databases/stats_controller_spec.js.coffee +30 -0
- data/spec/javascripts/app/controllers/documents/index_controller_spec.js.coffee +108 -0
- data/spec/javascripts/app/controllers/documents/show_controller_spec.js.coffee +94 -0
- data/spec/javascripts/app/controllers/{main_spec.js.coffee → main_controller_spec.js.coffee} +2 -2
- data/spec/javascripts/app/controllers/{server_info_spec.js.coffee → server/show_controller_spec.js.coffee} +5 -6
- data/spec/javascripts/app/directives_spec.js.coffee +108 -24
- data/spec/javascripts/app/filters_spec.js.coffee +31 -5
- data/spec/javascripts/app/modules/alerts_spec.js.coffee +138 -0
- data/spec/javascripts/app/modules/dialogs_spec.js.coffee +1 -2
- data/spec/javascripts/app/modules/pager_spec.js.coffee +0 -1
- data/spec/javascripts/app/modules/spinner_spec.js.coffee +65 -0
- data/spec/javascripts/app/modules/table_filter_spec.js.coffee +9 -9
- data/spec/javascripts/app/resources_spec.js.coffee +99 -0
- data/spec/javascripts/app/services_spec.js.coffee +31 -71
- data/spec/javascripts/config/{testacular-e2e.conf.js → karma-e2e.conf.js} +1 -1
- data/spec/javascripts/config/{testacular.conf.js → karma.conf.js} +2 -3
- data/spec/javascripts/e2e/collection_stats_scenario.js.coffee +12 -0
- data/spec/javascripts/e2e/collections_scenario.js.coffee +59 -20
- data/spec/javascripts/e2e/database_stats_scenario.js.coffee +11 -0
- data/spec/javascripts/e2e/databases_scenario.js.coffee +37 -36
- data/spec/javascripts/e2e/document_show_scenario.js.coffee +31 -0
- data/spec/javascripts/e2e/documents_pagination_scenario.js.coffee +33 -0
- data/spec/javascripts/e2e/documents_scenario.js.coffee +43 -4
- data/spec/javascripts/e2e/server_info_scenario.js.coffee +8 -2
- data/spec/javascripts/helpers/mocks.js.coffee +2 -0
- data/spec/javascripts/helpers_e2e/dsl.js.coffee +20 -0
- data/spec/javascripts/lib/angular-mocks.js +64 -16
- data/spec/javascripts/lib/angular-scenario.js +724 -561
- data/spec/javascripts/runner.html +5 -5
- data/spec/lib/api/collections_spec.rb +62 -0
- data/spec/lib/api/databases_spec.rb +58 -0
- data/spec/lib/api/documents_spec.rb +135 -0
- data/spec/lib/api/mongo_spec.rb +27 -0
- data/spec/lib/cli_spec.rb +19 -0
- data/spec/lib/entities_spec.rb +39 -0
- data/spec/lib/models/collection_spec.rb +16 -10
- data/spec/lib/models/database_spec.rb +4 -4
- data/spec/lib/models/document_spec.rb +5 -5
- data/spec/lib/models/pager_spec.rb +20 -11
- data/spec/spec_helper.rb +7 -15
- data/spec/support/api_example_group.rb +45 -0
- data/spec/support/fixtures.rb +10 -6
- data/spec/support/matchers/expose.rb +18 -0
- data/vendor/assets/javascripts/angular/angular-bootstrap.js +1 -1
- data/vendor/assets/javascripts/angular/angular-resource.js +78 -56
- data/vendor/assets/javascripts/angular/angular-sanitize.js +3 -1
- data/vendor/assets/javascripts/angular/angular.js +720 -404
- metadata +323 -183
- data/app/assets/javascripts/app.js.coffee +0 -8
- data/app/assets/javascripts/app/controllers.js.coffee +0 -2
- data/app/assets/javascripts/app/controllers/alerts.js.coffee +0 -12
- data/app/assets/javascripts/app/controllers/collections.js.coffee +0 -40
- data/app/assets/javascripts/app/controllers/documents.js.coffee +0 -49
- data/app/assets/javascripts/app/controllers/main.js.coffee +0 -10
- data/app/assets/javascripts/app/controllers/server_info.js.coffee +0 -14
- data/app/assets/javascripts/templates.js.coffee +0 -1
- data/app/assets/javascripts/templates/.gitkeep +0 -0
- data/app/assets/templates/collections.html +0 -53
- data/app/assets/templates/databases.html +0 -32
- data/app/assets/templates/documents.html +0 -45
- data/config-e2e.ru +0 -20
- data/spec/features/collections_list_spec.rb +0 -64
- data/spec/features/documents_list_spec.rb +0 -139
- data/spec/features/server_info_spec.rb +0 -23
- data/spec/javascripts/app/controllers/alerts_spec.js.coffee +0 -36
- data/spec/javascripts/app/controllers/collections_spec.js.coffee +0 -78
- data/spec/javascripts/app/controllers/databases_spec.js.coffee +0 -55
- data/spec/javascripts/app/controllers/documents_spec.js.coffee +0 -62
- data/spec/javascripts/helpers_e2e/app_element.js.coffee +0 -6
- data/spec/support/feature_example_group.rb +0 -53
- data/spec/support/matchers/have_flash_message.rb +0 -16
- data/spec/support/mongod.rb +0 -91
- data/spec/support/mongodb.conf +0 -47
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
<title>Mongo Browser</title>
|
|
5
5
|
<link href="/assets/application.css" rel="stylesheet" media="screen">
|
|
6
6
|
</head>
|
|
7
|
-
<body ng-controller="main">
|
|
7
|
+
<body ng-controller="main" ng-cloak>
|
|
8
8
|
<div class="navbar navbar navbar-fixed-top">
|
|
9
9
|
<div class="navbar-inner">
|
|
10
10
|
<div class="container">
|
|
11
|
-
<a class="brand" href="/">
|
|
11
|
+
<a class="brand" href="/">Mongo Browser</a>
|
|
12
12
|
<div class="nav-collapse collapse">
|
|
13
13
|
<ul ng-controller="breadcrumbs" class="nav breadcrumbs">
|
|
14
14
|
<li ng-show="showDatabase()">
|
|
@@ -23,18 +23,15 @@
|
|
|
23
23
|
<ul class="nav pull-right">
|
|
24
24
|
<li><a href="/server_info">Server Info</a></li>
|
|
25
25
|
<li><a>v. {{appVersion}}</a></li>
|
|
26
|
+
<li ng-show="showEnvironment()"><a>env {{environment}}</a></li>
|
|
27
|
+
<spinner></spinner>
|
|
26
28
|
</ul>
|
|
27
29
|
</div>
|
|
28
30
|
</div>
|
|
29
31
|
</div>
|
|
30
32
|
</div>
|
|
31
33
|
|
|
32
|
-
<
|
|
33
|
-
<div ng-repeat="message in alertMessages" class="alert alert-{{message.type}}">
|
|
34
|
-
<button ng-click="disposeAlert(message.id)" type="button" class="close">×</button>
|
|
35
|
-
<strong>{{message.type}}</strong> <span>{{message.text}}</span>
|
|
36
|
-
</div>
|
|
37
|
-
</aside>
|
|
34
|
+
<alerts></alerts>
|
|
38
35
|
|
|
39
36
|
<section class="container fluid">
|
|
40
37
|
<section ng-view></section>
|
|
@@ -43,5 +40,8 @@
|
|
|
43
40
|
<!--<link type="text/css" rel="stylesheet" href="//fonts.googleapis.com/css?family=Rokkitt:400,700|Source+Code+Pro">-->
|
|
44
41
|
<script src="/assets/vendor.js"></script>
|
|
45
42
|
<script src="/assets/application.js"></script>
|
|
43
|
+
<% if settings.test? %>
|
|
44
|
+
<script src="/assets/application.test.js"></script>
|
|
45
|
+
<% end %>
|
|
46
46
|
</body>
|
|
47
47
|
</html>
|
data/bin/mongo_browser
CHANGED
|
@@ -1,16 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
-
require "
|
|
4
|
-
require "mongo_browser"
|
|
3
|
+
require "mongo_browser/cli"
|
|
5
4
|
|
|
6
|
-
|
|
7
|
-
opts.on("--mongodb-port PORT", "Specify mongodb port") do |port|
|
|
8
|
-
runner.logger.info "Using mongodb port #{port}"
|
|
9
|
-
MongoBrowser.mongodb_port = port.to_i
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
opts.on("--mongodb-host HOST", "Specify mongodb host") do |host|
|
|
13
|
-
runner.logger.info "Using mongodb host #{host}"
|
|
14
|
-
MongoBrowser.mongodb_host = host.to_i
|
|
15
|
-
end
|
|
16
|
-
end
|
|
5
|
+
MongoBrowser::CLI.start(ARGV)
|
data/config.ru
CHANGED
data/lib/mongo_browser.rb
CHANGED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
require "grape"
|
|
2
|
+
require "grape-entity"
|
|
3
|
+
|
|
4
|
+
require "mongo_browser/entities"
|
|
5
|
+
require "mongo_browser/api/documents"
|
|
6
|
+
require "mongo_browser/api/collections"
|
|
7
|
+
require "mongo_browser/api/databases"
|
|
8
|
+
require "mongo_browser/api/mongo"
|
|
9
|
+
|
|
10
|
+
module MongoBrowser::API
|
|
11
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module MongoBrowser::API
|
|
2
|
+
class Collections < Grape::API
|
|
3
|
+
|
|
4
|
+
desc "Get a list of all collections for the given database"
|
|
5
|
+
get do
|
|
6
|
+
database = server.database(params[:db_name])
|
|
7
|
+
collections = database.collections
|
|
8
|
+
present collections, with: MongoBrowser::Entities::Collection
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
params do
|
|
12
|
+
requires :collection_name, type: String, desc: "Collection name"
|
|
13
|
+
end
|
|
14
|
+
segment "/:collection_name" do
|
|
15
|
+
desc "Get stats for a collection with the given name"
|
|
16
|
+
get "/stats" do
|
|
17
|
+
collection = server.database(params[:db_name]).collection(params[:collection_name])
|
|
18
|
+
collection.stats
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
desc "Drop a collection with the given name"
|
|
22
|
+
delete do
|
|
23
|
+
collection = server.database(params[:db_name]).collection(params[:collection_name])
|
|
24
|
+
collection.drop!
|
|
25
|
+
{ success: true }
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
resources :documents do
|
|
29
|
+
mount MongoBrowser::API::Documents
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module MongoBrowser::API
|
|
2
|
+
class Databases < Grape::API
|
|
3
|
+
|
|
4
|
+
desc "Get a list of all databases for the current server"
|
|
5
|
+
get do
|
|
6
|
+
present server.databases, with: MongoBrowser::Entities::Database
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
params do
|
|
10
|
+
requires :db_name, type: String, desc: "Database name"
|
|
11
|
+
end
|
|
12
|
+
segment "/:db_name" do
|
|
13
|
+
desc "Deletes a database with the given name"
|
|
14
|
+
delete do
|
|
15
|
+
database = server.database(params[:db_name])
|
|
16
|
+
database.drop!
|
|
17
|
+
{ success: true }
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
desc "Get stats for the given database"
|
|
21
|
+
get "/stats" do
|
|
22
|
+
database = server.database(params[:db_name])
|
|
23
|
+
database.stats
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
resources :collections do
|
|
27
|
+
mount MongoBrowser::API::Collections
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
module MongoBrowser::API
|
|
2
|
+
class Documents < Grape::API
|
|
3
|
+
|
|
4
|
+
desc "Get a list of paginated documents"
|
|
5
|
+
params do
|
|
6
|
+
optional :page, type: Integer, desc: "Page number"
|
|
7
|
+
end
|
|
8
|
+
get do
|
|
9
|
+
collection = server.database(params[:db_name]).collection(params[:collection_name])
|
|
10
|
+
documents = collection.documents_with_pagination(params[:page])
|
|
11
|
+
present documents, with: MongoBrowser::Entities::PagedDocuments
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
params do
|
|
15
|
+
requires :id, type: String, desc: "Document id"
|
|
16
|
+
end
|
|
17
|
+
segment "/:id" do
|
|
18
|
+
desc "Get a document"
|
|
19
|
+
get do
|
|
20
|
+
collection = server.database(params[:db_name]).collection(params[:collection_name])
|
|
21
|
+
document = collection.find(params[:id])
|
|
22
|
+
|
|
23
|
+
error!("Document not found", 404) if document.nil?
|
|
24
|
+
present document, with: MongoBrowser::Entities::Document
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
desc "Deletes a document with the given id"
|
|
28
|
+
delete do
|
|
29
|
+
collection = server.database(params[:db_name]).collection(params[:collection_name])
|
|
30
|
+
document = collection.find(params[:id])
|
|
31
|
+
collection.remove!(document)
|
|
32
|
+
{ success: true }
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
37
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module MongoBrowser::API
|
|
2
|
+
class Mongo < Grape::API
|
|
3
|
+
format :json
|
|
4
|
+
rescue_from :all, backtrace: true
|
|
5
|
+
|
|
6
|
+
before do
|
|
7
|
+
method = env["REQUEST_METHOD"]
|
|
8
|
+
path = env["PATH_INFO"]
|
|
9
|
+
|
|
10
|
+
logger.info "[api] #{method} #{path}"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
helpers do
|
|
14
|
+
def server
|
|
15
|
+
@server ||= MongoBrowser::Models::Server.current
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def logger
|
|
19
|
+
Grape::API.logger
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
resource :databases do
|
|
24
|
+
mount MongoBrowser::API::Databases
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
desc "Returns info about the server"
|
|
28
|
+
get "/server_info" do
|
|
29
|
+
server.info
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
desc "Returns application version"
|
|
33
|
+
get "/version" do
|
|
34
|
+
{
|
|
35
|
+
version: MongoBrowser::VERSION,
|
|
36
|
+
environment: ENV["RACK_ENV"]
|
|
37
|
+
}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
require "sinatra"
|
|
2
2
|
require "sinatra/reloader"
|
|
3
|
-
require "sinatra/
|
|
3
|
+
require "sinatra/json"
|
|
4
4
|
|
|
5
5
|
require "sprockets"
|
|
6
6
|
require "sass"
|
|
@@ -10,189 +10,23 @@ require "mongo_browser/middleware/sprockets_sinatra"
|
|
|
10
10
|
|
|
11
11
|
module MongoBrowser
|
|
12
12
|
class Application < Sinatra::Base
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
configure :development do
|
|
16
|
-
register Sinatra::Reloader
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
enable :sessions
|
|
20
|
-
|
|
13
|
+
set :logging, true
|
|
21
14
|
set :root, File.join(File.dirname(__FILE__), "../../app")
|
|
22
|
-
set :public_folder, File.join(
|
|
23
|
-
|
|
24
|
-
set :method_override, true
|
|
25
|
-
|
|
26
|
-
register Sinatra::RespondWith
|
|
15
|
+
set :public_folder, Proc.new { File.join(root, "../public") }
|
|
27
16
|
|
|
28
17
|
use Middleware::SprocketsSinatra, :root => File.join(settings.root, "..")
|
|
29
18
|
|
|
30
|
-
if settings.test?
|
|
31
|
-
require File.join(settings.root, "../spec/support/fixtures")
|
|
32
|
-
|
|
19
|
+
if settings.development? or settings.test?
|
|
33
20
|
require "mongo_browser/middleware/sprockets_specs"
|
|
34
21
|
use Middleware::SprocketsSpecs, :root => File.join(settings.root, "..")
|
|
35
22
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
# Execute e2e runner
|
|
41
|
-
get "/e2e" do
|
|
42
|
-
File.read(File.join(settings.root, "../spec/javascripts/runner_e2e.html"))
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
# Load database fixtures
|
|
46
|
-
get "/e2e/load_fixtures" do
|
|
47
|
-
Fixtures.instance.load!
|
|
48
|
-
|
|
49
|
-
respond_to do |format|
|
|
50
|
-
format.json { true }
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
# Loads given template from assets/templates directory
|
|
56
|
-
get "/ng/templates/:name.html" do |template_name|
|
|
57
|
-
send_file File.join(settings.root, "assets/templates/#{template_name}.html")
|
|
23
|
+
require "mongo_browser/application/development"
|
|
24
|
+
register Development
|
|
58
25
|
end
|
|
59
26
|
|
|
60
27
|
# Welcome page
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
File.read(File.join(settings.public_folder, "index.html"))
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
# Databases list
|
|
67
|
-
get "/api/databases.json" do
|
|
68
|
-
databases = server.databases.map do |db|
|
|
69
|
-
{
|
|
70
|
-
id: db.id,
|
|
71
|
-
name: db.name,
|
|
72
|
-
size: db.size,
|
|
73
|
-
count: db.count
|
|
74
|
-
}
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
respond_to do |format|
|
|
78
|
-
format.json { databases.to_json }
|
|
79
|
-
end
|
|
80
|
-
end
|
|
81
|
-
|
|
82
|
-
# Delete a database
|
|
83
|
-
delete "/api/databases.json" do
|
|
84
|
-
database = server.database(params[:id])
|
|
85
|
-
database.drop!
|
|
86
|
-
|
|
87
|
-
respond_to do |format|
|
|
88
|
-
format.json { true }
|
|
89
|
-
end
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
# Database stats
|
|
93
|
-
get "/api/databases/:db_name/stats.json" do |db_name|
|
|
94
|
-
database = server.database(db_name)
|
|
95
|
-
|
|
96
|
-
respond_to do |format|
|
|
97
|
-
format.json { database.stats.to_json }
|
|
98
|
-
end
|
|
99
|
-
end
|
|
100
|
-
|
|
101
|
-
# Collections list
|
|
102
|
-
get "/api/databases/:db_name/collections.json" do |db_name|
|
|
103
|
-
database = server.database(db_name)
|
|
104
|
-
collections = database.collections.map do |collection|
|
|
105
|
-
{
|
|
106
|
-
dbName: collection.db_name,
|
|
107
|
-
name: collection.name,
|
|
108
|
-
size: collection.size
|
|
109
|
-
}
|
|
110
|
-
end
|
|
111
|
-
|
|
112
|
-
respond_to do |format|
|
|
113
|
-
format.json { collections.to_json }
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
# Delete a collection
|
|
118
|
-
delete "/api/databases/:db_name/collections.json" do |db_name|
|
|
119
|
-
success = begin
|
|
120
|
-
collection = server.database(db_name).collection(params[:id])
|
|
121
|
-
collection.drop!
|
|
122
|
-
true
|
|
123
|
-
rescue Mongo::OperationFailure => e
|
|
124
|
-
false
|
|
125
|
-
end
|
|
126
|
-
|
|
127
|
-
respond_to do |format|
|
|
128
|
-
format.json { success }
|
|
129
|
-
end
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
# Collection stats
|
|
133
|
-
get "/api/databases/:db_name/collections/:collection_name/stats.json" do |db_name, collection_name|
|
|
134
|
-
collection = server.database(db_name).collection(collection_name)
|
|
135
|
-
|
|
136
|
-
respond_to do |format|
|
|
137
|
-
format.json { collection.stats.to_json }
|
|
138
|
-
end
|
|
139
|
-
end
|
|
140
|
-
|
|
141
|
-
# Documents list
|
|
142
|
-
get "/api/databases/:db_name/collections/:collection_name/documents.json" do |db_name, collection_name|
|
|
143
|
-
collection = server.database(db_name).collection(collection_name)
|
|
144
|
-
documents, pagination = collection.documents_with_pagination(params[:page])
|
|
145
|
-
|
|
146
|
-
documents.map! do |doc|
|
|
147
|
-
{
|
|
148
|
-
id: doc.id.to_s,
|
|
149
|
-
data: doc.data
|
|
150
|
-
}
|
|
151
|
-
end
|
|
152
|
-
|
|
153
|
-
respond_to do |format|
|
|
154
|
-
format.json do
|
|
155
|
-
{
|
|
156
|
-
documents: documents,
|
|
157
|
-
size: pagination.size,
|
|
158
|
-
page: pagination.current_page,
|
|
159
|
-
totalPages: pagination.total_pages
|
|
160
|
-
}.to_json
|
|
161
|
-
end
|
|
162
|
-
end
|
|
163
|
-
end
|
|
164
|
-
|
|
165
|
-
# Delete a document
|
|
166
|
-
delete "/api/databases/:db_name/collections/:collection_name/documents.json" do |db_name, collection_name|
|
|
167
|
-
collection = server.database(db_name).collection(collection_name)
|
|
168
|
-
document = collection.find(params[:id])
|
|
169
|
-
collection.remove!(document)
|
|
170
|
-
|
|
171
|
-
respond_to do |format|
|
|
172
|
-
format.json { true }
|
|
173
|
-
end
|
|
174
|
-
end
|
|
175
|
-
|
|
176
|
-
get "/api/server_info.json" do
|
|
177
|
-
server_info = server.info
|
|
178
|
-
|
|
179
|
-
respond_to do |format|
|
|
180
|
-
format.json { server_info.to_json }
|
|
181
|
-
end
|
|
182
|
-
end
|
|
183
|
-
|
|
184
|
-
get "/api/version.json" do
|
|
185
|
-
respond_to do |format|
|
|
186
|
-
format.json do
|
|
187
|
-
{ version: MongoBrowser::VERSION }.to_json
|
|
188
|
-
end
|
|
189
|
-
end
|
|
190
|
-
end
|
|
191
|
-
|
|
192
|
-
private
|
|
193
|
-
|
|
194
|
-
def server
|
|
195
|
-
@server ||= Server.current
|
|
28
|
+
get "/*" do
|
|
29
|
+
erb :index
|
|
196
30
|
end
|
|
197
31
|
end
|
|
198
32
|
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
class MongoBrowser::Application
|
|
2
|
+
module Development
|
|
3
|
+
def self.registered(app)
|
|
4
|
+
app.helpers Sinatra::JSON
|
|
5
|
+
|
|
6
|
+
app.register Sinatra::Reloader
|
|
7
|
+
|
|
8
|
+
app.set :spec_root, File.join(app.settings.root, "../spec")
|
|
9
|
+
|
|
10
|
+
# Execute jasmine runner
|
|
11
|
+
app.get "/jasmine" do
|
|
12
|
+
File.read(File.join(app.settings.spec_root, "javascripts/runner.html"))
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
# Execute e2e runner
|
|
16
|
+
app.get "/e2e" do
|
|
17
|
+
File.read(File.join(app.settings.spec_root, "javascripts/runner_e2e.html"))
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# Load database fixtures
|
|
21
|
+
app.get "/e2e/load_fixtures" do
|
|
22
|
+
require File.join(app.settings.spec_root, "support/fixtures")
|
|
23
|
+
fixtures = Fixtures.instance
|
|
24
|
+
|
|
25
|
+
fixtures.load!
|
|
26
|
+
fixtures.load_documents!
|
|
27
|
+
|
|
28
|
+
json success: true
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|