gomon 0.0.1
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/README.md +61 -0
- data/gomon.gemspec +17 -0
- data/lib/gomon.rb +4 -0
- data/lib/gomon/base.rb +37 -0
- data/lib/gomon/dump.rb +22 -0
- data/lib/gomon/options.rb +29 -0
- data/lib/gomon/restore.rb +29 -0
- data/lib/gomon/uri.rb +16 -0
- data/lib/gomon/version.rb +3 -0
- metadata +56 -0
data/README.md
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# Gomon
|
2
|
+
|
3
|
+
Ruby wrappers around mongodb cli tools.
|
4
|
+
|
5
|
+
## Prerequisites
|
6
|
+
|
7
|
+
This gem depends on no other gems. Ruby 1.9+
|
8
|
+
It assumes the presence of `mongorestore` and `mongodump` commands.
|
9
|
+
It was built around the latest tools at the moment of this writing, meaning version 2.2.2. So if is possible that arguments format and/or names have changed from previous versions, making them potentially not compatible with Gomon.
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
Directly : `gem install gomon`.
|
14
|
+
Gemfile : `gem 'gomon'`.
|
15
|
+
|
16
|
+
## Usage
|
17
|
+
|
18
|
+
The tools currently supported are `mongodump` and `mongorestore`.
|
19
|
+
They are wrapped in `Gomon::Dump` and `Gomon::Restore` respectively.
|
20
|
+
|
21
|
+
These two classes are used in the same way: first, instantiate the object, then, invoke `call` without arguments on it. In most cases, the only difference of usage will be the options passed to the constructor.
|
22
|
+
|
23
|
+
### Example
|
24
|
+
|
25
|
+
> gd = Gomon::Dump.new uri: "mongodb://user:pass@host:12345/database", other: '--journal'
|
26
|
+
> gd.cmd_string
|
27
|
+
=> "mongodump --host 'host' --port '12345' --username 'user' --password 'pass' --db 'database' --journal"
|
28
|
+
> gd.call
|
29
|
+
# Dumping `database` from host...
|
30
|
+
# Executing: mongodump --host 'host' --port '12345' --username 'user' --password 'pass' --db 'database' --journal
|
31
|
+
# ....
|
32
|
+
# Done dumping.
|
33
|
+
=> nil
|
34
|
+
|
35
|
+
### Options
|
36
|
+
|
37
|
+
The two classes accepts a hash of options when initializing, as in `gd = Gomon::Dumper.new(db: 'gem_test')`. This hash can contain:
|
38
|
+
|
39
|
+
* Any option accepted by `mongodump` or `mongorestore`. You should refer to the [MongoDB Manual](http://docs.mongodb.org/manual/reference/mongorestore/) for more on them;
|
40
|
+
* Singular options that have no value, as '--drop', can be supplied with the key `:other`;
|
41
|
+
* If the key `:uri` is present, its value will be parsed and split to retrieve the username, password, host, port, and database;
|
42
|
+
* Specific to `Gomon::Restore`: the option value for the key `:path` will be used as its last argument, as is.
|
43
|
+
|
44
|
+
If you want to set options once the object is already created, you can use `add_option(key, value)` or `add_options({key: value, ...})`. However, there will be no special treatment for options: even if you supply `:uri`, or `:other`, they won't be handled the way they are when creating the object.
|
45
|
+
|
46
|
+
|
47
|
+
## What's next
|
48
|
+
|
49
|
+
* There is no test at all yet. This shall change.
|
50
|
+
* Better support for manipulating options once the object is created.
|
51
|
+
|
52
|
+
## Contributions
|
53
|
+
|
54
|
+
1. Check for open issues or open a fresh issue to start a discussion around a feature idea or a bug. In the first case, please include a use-case.
|
55
|
+
2. Fork the repository on Github, make a feature branch, work on this branch.
|
56
|
+
3. If necessary, write a test which shows that the bug was fixed or that the feature works as expected.
|
57
|
+
4. Send a pull request and annoy us until we notice it. :)
|
58
|
+
|
59
|
+
## Changelog
|
60
|
+
|
61
|
+
* `0.1`: First version. Provices basic functionnality for `Gomon::Dump` & `Gomon::Restore`
|
data/gomon.gemspec
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
2
|
+
require 'gomon/version'
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "gomon"
|
6
|
+
s.version = Gomon::VERSION
|
7
|
+
s.platform = Gem::Platform::RUBY
|
8
|
+
s.authors = ["Novelys", "Kevin Soltysiak"]
|
9
|
+
s.email = ["contact@novelys.com"]
|
10
|
+
s.homepage = "http://github.com/novelys/gomon"
|
11
|
+
s.summary = "Ruby wrappers around mongo utilities."
|
12
|
+
s.description = "A set of ruby classing wrapping mongodb cli tools, making them pleasant to integrate to ruby scripts, rake tasks, etc"
|
13
|
+
s.rubyforge_project = s.name
|
14
|
+
s.required_rubygems_version = ">= 1.3.6"
|
15
|
+
s.files = `git ls-files`.split("\n")
|
16
|
+
s.require_path = 'lib'
|
17
|
+
end
|
data/lib/gomon.rb
ADDED
data/lib/gomon/base.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'gomon/options'
|
2
|
+
require 'gomon/uri'
|
3
|
+
|
4
|
+
module Gomon
|
5
|
+
class Base
|
6
|
+
include Options
|
7
|
+
include Uri
|
8
|
+
|
9
|
+
def initialize(opts = {})
|
10
|
+
@tool = 'mongodump'
|
11
|
+
|
12
|
+
# Default options
|
13
|
+
@options = {host: 'localhost', port: '27017'}
|
14
|
+
@singular_options = opts.delete(:other)
|
15
|
+
|
16
|
+
# Extract uri into options
|
17
|
+
if (uri = opts.delete(:uri))
|
18
|
+
add_options parse_uri(uri)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Keep track of other options
|
22
|
+
add_options opts
|
23
|
+
end
|
24
|
+
|
25
|
+
# String to execute
|
26
|
+
def cmd_string
|
27
|
+
"#{tool} #{cli_options}"
|
28
|
+
end
|
29
|
+
|
30
|
+
# Execute before/after hookes if any, execute command
|
31
|
+
def call
|
32
|
+
before_cmd
|
33
|
+
system(cmd_string)
|
34
|
+
after_cmd
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/lib/gomon/dump.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'gomon/base'
|
2
|
+
|
3
|
+
module Gomon
|
4
|
+
class Dump < Base
|
5
|
+
attr_reader :tool
|
6
|
+
|
7
|
+
def initialize(opts = {})
|
8
|
+
super
|
9
|
+
|
10
|
+
@tool = 'mongodump'
|
11
|
+
end
|
12
|
+
|
13
|
+
def before_cmd
|
14
|
+
puts "Dumping `#{@options[:db]}` from #{@options[:host]}..."
|
15
|
+
puts "Executing: #{cmd_string}"
|
16
|
+
end
|
17
|
+
|
18
|
+
def after_cmd
|
19
|
+
puts "Done dumping."
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Gomon
|
2
|
+
module Options
|
3
|
+
# Add a single options
|
4
|
+
def add_option(key, value)
|
5
|
+
add_options({key => value})
|
6
|
+
end
|
7
|
+
|
8
|
+
# Add many options
|
9
|
+
def add_options(opts = {})
|
10
|
+
@options.merge! opts
|
11
|
+
end
|
12
|
+
|
13
|
+
# Returns the options string
|
14
|
+
def cli_options
|
15
|
+
options_as_array.join(' ')
|
16
|
+
end
|
17
|
+
|
18
|
+
# Returns options as an array
|
19
|
+
def options_as_array
|
20
|
+
ary = @options.each_with_object([]) do |(key, value), memo|
|
21
|
+
memo << "--#{key} '#{value}'"
|
22
|
+
end
|
23
|
+
|
24
|
+
ary << @singular_options if @singular_options
|
25
|
+
|
26
|
+
ary
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'gomon/base'
|
2
|
+
|
3
|
+
module Gomon
|
4
|
+
class Restore < Base
|
5
|
+
attr_reader :tool
|
6
|
+
|
7
|
+
def initialize(opts = {})
|
8
|
+
@path = opts.delete(:path) || 'dump/*'
|
9
|
+
super(opts)
|
10
|
+
@tool = 'mongorestore'
|
11
|
+
end
|
12
|
+
|
13
|
+
# String to execute
|
14
|
+
def cmd_string
|
15
|
+
"#{super} '#{@path}'"
|
16
|
+
end
|
17
|
+
|
18
|
+
# Hook to execute before restoring
|
19
|
+
def before_cmd
|
20
|
+
puts "Restoring from dir `#{@path}` into `#{@options[:db]}` at #{@options[:host]}..."
|
21
|
+
puts "Executing: #{cmd_string}"
|
22
|
+
end
|
23
|
+
|
24
|
+
# Hook to execute after restoring
|
25
|
+
def after_cmd
|
26
|
+
puts "Done restoring."
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/gomon/uri.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
module Gomon
|
2
|
+
module Uri
|
3
|
+
# Parse mongodb uri into options
|
4
|
+
def parse_uri(uri)
|
5
|
+
matches = uri.match /mongodb:\/\/([^:]*):([^@]*)@([^:]*):(\d*)\/(.*)/i
|
6
|
+
|
7
|
+
{
|
8
|
+
username: matches[1],
|
9
|
+
password: matches[2],
|
10
|
+
host: matches[3],
|
11
|
+
port: matches[4],
|
12
|
+
db: matches[5]
|
13
|
+
}
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
metadata
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: gomon
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Novelys
|
9
|
+
- Kevin Soltysiak
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2013-01-13 00:00:00.000000000 Z
|
14
|
+
dependencies: []
|
15
|
+
description: A set of ruby classing wrapping mongodb cli tools, making them pleasant
|
16
|
+
to integrate to ruby scripts, rake tasks, etc
|
17
|
+
email:
|
18
|
+
- contact@novelys.com
|
19
|
+
executables: []
|
20
|
+
extensions: []
|
21
|
+
extra_rdoc_files: []
|
22
|
+
files:
|
23
|
+
- README.md
|
24
|
+
- gomon.gemspec
|
25
|
+
- lib/gomon.rb
|
26
|
+
- lib/gomon/base.rb
|
27
|
+
- lib/gomon/dump.rb
|
28
|
+
- lib/gomon/options.rb
|
29
|
+
- lib/gomon/restore.rb
|
30
|
+
- lib/gomon/uri.rb
|
31
|
+
- lib/gomon/version.rb
|
32
|
+
homepage: http://github.com/novelys/gomon
|
33
|
+
licenses: []
|
34
|
+
post_install_message:
|
35
|
+
rdoc_options: []
|
36
|
+
require_paths:
|
37
|
+
- lib
|
38
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
45
|
+
none: false
|
46
|
+
requirements:
|
47
|
+
- - ! '>='
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 1.3.6
|
50
|
+
requirements: []
|
51
|
+
rubyforge_project: gomon
|
52
|
+
rubygems_version: 1.8.23
|
53
|
+
signing_key:
|
54
|
+
specification_version: 3
|
55
|
+
summary: Ruby wrappers around mongo utilities.
|
56
|
+
test_files: []
|