mongoid-shell 0.1.0
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 +4 -0
- data/.rspec +3 -0
- data/.travis.yml +9 -0
- data/CHANGELOG.md +4 -0
- data/Gemfile +9 -0
- data/LICENSE.md +22 -0
- data/README.md +37 -0
- data/Rakefile +24 -0
- data/lib/config/locales/en.yml +10 -0
- data/lib/mongoid-shell.rb +8 -0
- data/lib/mongoid/shell/commands.rb +2 -0
- data/lib/mongoid/shell/commands/base.rb +46 -0
- data/lib/mongoid/shell/commands/mongodump.rb +30 -0
- data/lib/mongoid/shell/errors.rb +2 -0
- data/lib/mongoid/shell/errors/base.rb +81 -0
- data/lib/mongoid/shell/errors/missing_session_error.rb +11 -0
- data/lib/mongoid/shell/properties.rb +4 -0
- data/lib/mongoid/shell/properties/database.rb +14 -0
- data/lib/mongoid/shell/properties/host.rb +14 -0
- data/lib/mongoid/shell/properties/password.rb +15 -0
- data/lib/mongoid/shell/properties/username.rb +15 -0
- data/lib/mongoid/shell/version.rb +5 -0
- data/lib/mongoid_shell.rb +2 -0
- data/mongoid-shell.gemspec +20 -0
- data/spec/mongoid/commands/base_spec.rb +32 -0
- data/spec/mongoid/commands/mongodump_spec.rb +19 -0
- data/spec/mongoid/mongoid_shell_spec.rb +8 -0
- data/spec/spec_helper.rb +11 -0
- metadata +108 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/LICENSE.md
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2012 Daniel Doubrovkine, Artsy Inc.
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
Mongoid::Shell [](https://travis-ci.org/dblock/mongoid-shell)
|
2
|
+
==============
|
3
|
+
|
4
|
+
Create mongo command-lines from Mongoid configuration.
|
5
|
+
|
6
|
+
Commands can be created for the current default session or you can pass a session as an argument to a new command.
|
7
|
+
|
8
|
+
``` ruby
|
9
|
+
Mongoid::Shell::Commands::Mongodump.new # will use Mongoid.default_session
|
10
|
+
Mongoid::Shell::Commands::Mongodump.new(session: Moped::Session.new([ "127.0.0.1:27017" ]))
|
11
|
+
```
|
12
|
+
|
13
|
+
Supported Commands
|
14
|
+
==================
|
15
|
+
|
16
|
+
### Mongodump
|
17
|
+
|
18
|
+
``` ruby
|
19
|
+
mongodump = Mongoid::Shell::Commands::Mongodump.new({ collection: 'test' })
|
20
|
+
mongodump.to_s # mongodump --host localhost:27017 --db test --collection test
|
21
|
+
```
|
22
|
+
|
23
|
+
Supports `--db`, `--host`, `--username`, `--password` and `--collection`.
|
24
|
+
|
25
|
+
Contributing
|
26
|
+
------------
|
27
|
+
|
28
|
+
Fork the project. Make your feature addition or bug fix with tests. Send a pull request. Bonus points for topic branches.
|
29
|
+
|
30
|
+
Copyright and License
|
31
|
+
---------------------
|
32
|
+
|
33
|
+
MIT License, see [LICENSE](http://github.com/dblock/mongoid-shell/raw/master/LICENSE.md) for details.
|
34
|
+
|
35
|
+
(c) 2013 [Daniel Doubrovkine](http://github.com/dblock), [Artsy Inc.](http://artsy.net)
|
36
|
+
|
37
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
|
4
|
+
require File.expand_path('../lib/mongoid/shell/version', __FILE__)
|
5
|
+
|
6
|
+
begin
|
7
|
+
Bundler.setup(:default, :development)
|
8
|
+
rescue Bundler::BundlerError => e
|
9
|
+
$stderr.puts e.message
|
10
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
11
|
+
exit e.status_code
|
12
|
+
end
|
13
|
+
|
14
|
+
require 'rake'
|
15
|
+
|
16
|
+
require 'rspec/core'
|
17
|
+
require 'rspec/core/rake_task'
|
18
|
+
|
19
|
+
RSpec::Core::RakeTask.new(:spec) do |spec|
|
20
|
+
spec.pattern = FileList['spec/**/*_spec.rb']
|
21
|
+
end
|
22
|
+
|
23
|
+
task :default => :spec
|
24
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
en:
|
2
|
+
mongoid:
|
3
|
+
shell:
|
4
|
+
errors:
|
5
|
+
messages:
|
6
|
+
missing_session:
|
7
|
+
message: "Missing session."
|
8
|
+
summary: "The command requires a session."
|
9
|
+
resolution: "Your code is missing a parameter to `new` or `command_for`.
|
10
|
+
Typically you can obtain a session from `Mongoid.default_session`."
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Shell
|
3
|
+
module Commands
|
4
|
+
class Base
|
5
|
+
|
6
|
+
attr_accessor :session
|
7
|
+
|
8
|
+
class << self
|
9
|
+
|
10
|
+
def command_for(session)
|
11
|
+
self.new({ session: session })
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
def initialize(options = nil)
|
17
|
+
options ||= {}
|
18
|
+
options[:session] ||= Mongoid.default_session
|
19
|
+
options.each do |sym, val|
|
20
|
+
self.send "#{sym}=", val
|
21
|
+
end
|
22
|
+
raise Mongoid::Shell::Errors::MissingSessionError unless @session
|
23
|
+
end
|
24
|
+
|
25
|
+
def cmd
|
26
|
+
self.class.name.downcase.split(':').last
|
27
|
+
end
|
28
|
+
|
29
|
+
def vargs(args = {})
|
30
|
+
args.map do |key, property|
|
31
|
+
value = self.send(property)
|
32
|
+
next unless value
|
33
|
+
# TODO: quote other special characters?
|
34
|
+
value = '"' + value + '"' if value.include? ' '
|
35
|
+
"#{key} #{value}"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_s
|
40
|
+
[ self.cmd, vargs ].flatten.compact.join(" ")
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Shell
|
3
|
+
module Commands
|
4
|
+
class Mongodump < Mongoid::Shell::Commands::Base
|
5
|
+
include Mongoid::Shell::Properties::Host
|
6
|
+
include Mongoid::Shell::Properties::Database
|
7
|
+
include Mongoid::Shell::Properties::Username
|
8
|
+
include Mongoid::Shell::Properties::Password
|
9
|
+
|
10
|
+
attr_accessor :collection, :query
|
11
|
+
|
12
|
+
def initialize(attrs = {})
|
13
|
+
super
|
14
|
+
end
|
15
|
+
|
16
|
+
def vargs
|
17
|
+
super({
|
18
|
+
'--host' => :host,
|
19
|
+
'--db' => :database_name,
|
20
|
+
'--username' => :username,
|
21
|
+
'--password' => :password,
|
22
|
+
'--collection' => :collection,
|
23
|
+
'--query' => :query
|
24
|
+
})
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Shell
|
3
|
+
module Errors
|
4
|
+
class Base < StandardError
|
5
|
+
|
6
|
+
# Problem occurred.
|
7
|
+
attr_reader :problem
|
8
|
+
|
9
|
+
# Summary of the problem.
|
10
|
+
attr_reader :summary
|
11
|
+
|
12
|
+
# Suggested problem resolution.
|
13
|
+
attr_reader :resolution
|
14
|
+
|
15
|
+
# Compose the message.
|
16
|
+
# === Parameters
|
17
|
+
# [key] Lookup key in the translation table.
|
18
|
+
# [attributes] The objects to pass to create the message.
|
19
|
+
def compose_message(key, attributes = {})
|
20
|
+
@problem = create_problem(key, attributes)
|
21
|
+
@summary = create_summary(key, attributes)
|
22
|
+
@resolution = create_resolution(key, attributes)
|
23
|
+
|
24
|
+
"\nProblem:\n #{@problem}"+
|
25
|
+
"\nSummary:\n #{@summary}"+
|
26
|
+
"\nResolution:\n #{@resolution}"
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
BASE_KEY = "mongoid.shell.errors.messages" #:nodoc:
|
32
|
+
|
33
|
+
# Given the key of the specific error and the options hash, translate the
|
34
|
+
# message.
|
35
|
+
#
|
36
|
+
# === Parameters
|
37
|
+
# [key] The key of the error in the locales.
|
38
|
+
# [options] The objects to pass to create the message.
|
39
|
+
#
|
40
|
+
# Returns a localized error message string.
|
41
|
+
def translate(key, options)
|
42
|
+
::I18n.translate("#{BASE_KEY}.#{key}", { :locale => :en }.merge(options)).strip
|
43
|
+
end
|
44
|
+
|
45
|
+
# Create the problem.
|
46
|
+
#
|
47
|
+
# === Parameters
|
48
|
+
# [key] The error key.
|
49
|
+
# [attributes] The attributes to interpolate.
|
50
|
+
#
|
51
|
+
# Returns the problem.
|
52
|
+
def create_problem(key, attributes)
|
53
|
+
translate("#{key}.message", attributes)
|
54
|
+
end
|
55
|
+
|
56
|
+
# Create the summary.
|
57
|
+
#
|
58
|
+
# === Parameters
|
59
|
+
# [key] The error key.
|
60
|
+
# [attributes] The attributes to interpolate.
|
61
|
+
#
|
62
|
+
# Returns the summary.
|
63
|
+
def create_summary(key, attributes)
|
64
|
+
translate("#{key}.summary", attributes)
|
65
|
+
end
|
66
|
+
|
67
|
+
# Create the resolution.
|
68
|
+
#
|
69
|
+
# === Parameters
|
70
|
+
# [key] The error key.
|
71
|
+
# [attributes] The attributes to interpolate.
|
72
|
+
#
|
73
|
+
# Returns the resolution.
|
74
|
+
def create_resolution(key, attributes)
|
75
|
+
translate("#{key}.resolution", attributes)
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Shell
|
3
|
+
module Properties
|
4
|
+
module Password
|
5
|
+
|
6
|
+
# current password
|
7
|
+
def password
|
8
|
+
return nil unless session.context.cluster.auth && session.context.cluster.auth.first
|
9
|
+
session.context.cluster.auth.first[1][1]
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Shell
|
3
|
+
module Properties
|
4
|
+
module Username
|
5
|
+
|
6
|
+
# current username
|
7
|
+
def username
|
8
|
+
return nil unless session.context.cluster.auth && session.context.cluster.auth.first
|
9
|
+
session.context.cluster.auth.first[1][0]
|
10
|
+
end
|
11
|
+
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
require "mongoid/shell/version"
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "mongoid-shell"
|
6
|
+
s.version = Mongoid::Shell::VERSION
|
7
|
+
s.authors = [ "Daniel Doubrovkine" ]
|
8
|
+
s.email = "dblock@dblock.org"
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.required_rubygems_version = '>= 1.3.6'
|
11
|
+
s.files = `git ls-files`.split("\n")
|
12
|
+
s.require_paths = [ "lib" ]
|
13
|
+
s.homepage = "http://github.com/dblock/mongoid-shell"
|
14
|
+
s.licenses = [ "MIT" ]
|
15
|
+
s.summary = "Derive shell commands from Mongoid configuration options."
|
16
|
+
s.add_dependency "mongoid"
|
17
|
+
s.add_dependency "i18n"
|
18
|
+
end
|
19
|
+
|
20
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mongoid::Shell::Commands::Base do
|
4
|
+
context "without a default session" do
|
5
|
+
before :each do
|
6
|
+
Mongoid.stub(:default_session).and_return(nil)
|
7
|
+
end
|
8
|
+
it "raises an exception when a session is missing" do
|
9
|
+
expect {
|
10
|
+
Mongoid::Shell::Commands::Base.new({})
|
11
|
+
}.to raise_error Mongoid::Shell::Errors::MissingSessionError, /Missing session./
|
12
|
+
end
|
13
|
+
it "raises an exception when options are missing" do
|
14
|
+
expect {
|
15
|
+
Mongoid::Shell::Commands::Base.new(nil)
|
16
|
+
}.to raise_error Mongoid::Shell::Errors::MissingSessionError, /Missing session./
|
17
|
+
end
|
18
|
+
end
|
19
|
+
it "creates a command using the default session" do
|
20
|
+
command = Mongoid::Shell::Commands::Base.new
|
21
|
+
command.session.should eq Mongoid.default_session
|
22
|
+
end
|
23
|
+
it "creates a command using the session provided" do
|
24
|
+
session = Moped::Session.new([ "127.0.0.1:27017" ])
|
25
|
+
command = Mongoid::Shell::Commands::Base.new(session: session)
|
26
|
+
command.session.should eq session
|
27
|
+
end
|
28
|
+
it "command_for" do
|
29
|
+
command = Mongoid::Shell::Commands::Base.command_for(Mongoid.default_session)
|
30
|
+
command.session.should eq Mongoid.default_session
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Mongoid::Shell::Commands::Mongodump do
|
4
|
+
context "default session" do
|
5
|
+
it "defaults to local" do
|
6
|
+
Mongoid::Shell::Commands::Mongodump.new.to_s.should == "mongodump --host localhost:27017 --db mongoid_shell_tests"
|
7
|
+
end
|
8
|
+
it "includes collection" do
|
9
|
+
Mongoid::Shell::Commands::Mongodump.new({
|
10
|
+
collection: 'test'
|
11
|
+
}).to_s.should == "mongodump --host localhost:27017 --db mongoid_shell_tests --collection test"
|
12
|
+
end
|
13
|
+
it "includes query" do
|
14
|
+
Mongoid::Shell::Commands::Mongodump.new({
|
15
|
+
query: 'find x'
|
16
|
+
}).to_s.should == 'mongodump --host localhost:27017 --db mongoid_shell_tests --query "find x"'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'rspec'
|
6
|
+
require 'mongoid'
|
7
|
+
require 'mongoid-shell'
|
8
|
+
|
9
|
+
Mongoid.configure do |config|
|
10
|
+
config.connect_to('mongoid_shell_tests')
|
11
|
+
end
|
metadata
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mongoid-shell
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Daniel Doubrovkine
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-01-27 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: mongoid
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: i18n
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
description:
|
47
|
+
email: dblock@dblock.org
|
48
|
+
executables: []
|
49
|
+
extensions: []
|
50
|
+
extra_rdoc_files: []
|
51
|
+
files:
|
52
|
+
- .gitignore
|
53
|
+
- .rspec
|
54
|
+
- .travis.yml
|
55
|
+
- CHANGELOG.md
|
56
|
+
- Gemfile
|
57
|
+
- LICENSE.md
|
58
|
+
- README.md
|
59
|
+
- Rakefile
|
60
|
+
- lib/config/locales/en.yml
|
61
|
+
- lib/mongoid-shell.rb
|
62
|
+
- lib/mongoid/shell/commands.rb
|
63
|
+
- lib/mongoid/shell/commands/base.rb
|
64
|
+
- lib/mongoid/shell/commands/mongodump.rb
|
65
|
+
- lib/mongoid/shell/errors.rb
|
66
|
+
- lib/mongoid/shell/errors/base.rb
|
67
|
+
- lib/mongoid/shell/errors/missing_session_error.rb
|
68
|
+
- lib/mongoid/shell/properties.rb
|
69
|
+
- lib/mongoid/shell/properties/database.rb
|
70
|
+
- lib/mongoid/shell/properties/host.rb
|
71
|
+
- lib/mongoid/shell/properties/password.rb
|
72
|
+
- lib/mongoid/shell/properties/username.rb
|
73
|
+
- lib/mongoid/shell/version.rb
|
74
|
+
- lib/mongoid_shell.rb
|
75
|
+
- mongoid-shell.gemspec
|
76
|
+
- spec/mongoid/commands/base_spec.rb
|
77
|
+
- spec/mongoid/commands/mongodump_spec.rb
|
78
|
+
- spec/mongoid/mongoid_shell_spec.rb
|
79
|
+
- spec/spec_helper.rb
|
80
|
+
homepage: http://github.com/dblock/mongoid-shell
|
81
|
+
licenses:
|
82
|
+
- MIT
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options: []
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
segments:
|
94
|
+
- 0
|
95
|
+
hash: 408535153
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 1.3.6
|
102
|
+
requirements: []
|
103
|
+
rubyforge_project:
|
104
|
+
rubygems_version: 1.8.24
|
105
|
+
signing_key:
|
106
|
+
specification_version: 3
|
107
|
+
summary: Derive shell commands from Mongoid configuration options.
|
108
|
+
test_files: []
|