karo 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of karo might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rbenv-gemsets +1 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +7 -0
- data/README.md +21 -0
- data/Rakefile +61 -0
- data/bin/karo +11 -0
- data/features/karo.feature +19 -0
- data/features/step_definitions/karo_steps.rb +34 -0
- data/features/support/env.rb +16 -0
- data/karo.gemspec +29 -0
- data/lib/karo/assets.rb +54 -0
- data/lib/karo/cache.rb +37 -0
- data/lib/karo/cli.rb +56 -0
- data/lib/karo/config.rb +41 -0
- data/lib/karo/db.rb +66 -0
- data/lib/karo/version.rb +3 -0
- data/lib/karo.rb +5 -0
- data/test/tc_something.rb +7 -0
- metadata +183 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 44dece09021fc876f10803a137f5909a6a621224
|
4
|
+
data.tar.gz: afbe83d75b36bbf57b52901dbe3b979f3dafccd3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1400628e1e9d333cf829210ae2025a282216bcf196d721a0182d131d57b41883831108f680a46e25a023f4f2819a66692da700f5c3d58eca215f4a032ba239d9
|
7
|
+
data.tar.gz: afe685bcc5200489ce67459d1fbb87dbf4d0aafbd7ec665b6deec6ff7d387d686f55b3beb38a6b8b70b6170627866fc6a85bcd21dfc1eac8a044f27d0510cada
|
data/.gitignore
ADDED
data/.rbenv-gemsets
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
karo
|
data/CHANGELOG.md
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
Copyright (c) 2013 YOUR NAME
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
4
|
+
|
5
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
6
|
+
|
7
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# Getting Started [![Code Climate](https://codeclimate.com/github/rahult/karo.png)](https://codeclimate.com/github/rahult/karo) [![Dependency Status](https://gemnasium.com/rahult/karo.png)](https://gemnasium.com/rahult/karo) [![Gem Version](https://badge.fury.io/rb/karo.png)](http://badge.fury.io/rb/karo)
|
2
|
+
|
3
|
+
**Karo** is a commandline companion for a rails application which makes db, assets syncs accross multiple rails servers easier while development
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Karo is released as a Ruby Gem. The gem is to be installed within a Ruby
|
8
|
+
on Rails application. To install, simply add the following to your Gemfile:
|
9
|
+
|
10
|
+
```ruby
|
11
|
+
# Gemfile
|
12
|
+
gem 'karo'
|
13
|
+
```
|
14
|
+
|
15
|
+
After updating your bundle, you can use Karo function from the command line
|
16
|
+
|
17
|
+
## Usage (Commandline)
|
18
|
+
|
19
|
+
```bash
|
20
|
+
karo help
|
21
|
+
```
|
data/Rakefile
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
def dump_load_path
|
2
|
+
puts $LOAD_PATH.join("\n")
|
3
|
+
found = nil
|
4
|
+
$LOAD_PATH.each do |path|
|
5
|
+
if File.exists?(File.join(path,"rspec"))
|
6
|
+
puts "Found rspec in #{path}"
|
7
|
+
if File.exists?(File.join(path,"rspec","core"))
|
8
|
+
puts "Found core"
|
9
|
+
if File.exists?(File.join(path,"rspec","core","rake_task"))
|
10
|
+
puts "Found rake_task"
|
11
|
+
found = path
|
12
|
+
else
|
13
|
+
puts "!! no rake_task"
|
14
|
+
end
|
15
|
+
else
|
16
|
+
puts "!!! no core"
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
if found.nil?
|
21
|
+
puts "Didn't find rspec/core/rake_task anywhere"
|
22
|
+
else
|
23
|
+
puts "Found in #{path}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
require 'bundler'
|
27
|
+
require 'rake/clean'
|
28
|
+
|
29
|
+
require 'rake/testtask'
|
30
|
+
|
31
|
+
require 'cucumber'
|
32
|
+
require 'cucumber/rake/task'
|
33
|
+
gem 'rdoc' # we need the installed RDoc gem, not the system one
|
34
|
+
require 'rdoc/task'
|
35
|
+
|
36
|
+
include Rake::DSL
|
37
|
+
|
38
|
+
Bundler::GemHelper.install_tasks
|
39
|
+
|
40
|
+
|
41
|
+
Rake::TestTask.new do |t|
|
42
|
+
t.pattern = 'test/tc_*.rb'
|
43
|
+
end
|
44
|
+
|
45
|
+
|
46
|
+
CUKE_RESULTS = 'results.html'
|
47
|
+
CLEAN << CUKE_RESULTS
|
48
|
+
Cucumber::Rake::Task.new(:features) do |t|
|
49
|
+
t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty --no-source -x"
|
50
|
+
t.fork = false
|
51
|
+
end
|
52
|
+
|
53
|
+
Rake::RDocTask.new do |rd|
|
54
|
+
|
55
|
+
rd.main = "README.rdoc"
|
56
|
+
|
57
|
+
rd.rdoc_files.include("README.rdoc","lib/**/*.rb","bin/**/*")
|
58
|
+
end
|
59
|
+
|
60
|
+
task :default => [:test,:features]
|
61
|
+
|
data/bin/karo
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
Feature: Fetch assets
|
2
|
+
In order to get project assets onto a new computer
|
3
|
+
I want a one-command way to keep them up to date
|
4
|
+
So I don't have to do it myself
|
5
|
+
|
6
|
+
Scenario: Basic UI
|
7
|
+
When I get help for "karo"
|
8
|
+
Then the exit status should be 0
|
9
|
+
And the banner should be present
|
10
|
+
And there should be a one line summary of what the app does
|
11
|
+
And the banner should document that this app takes options
|
12
|
+
And the banner should document that this app's arguments are:
|
13
|
+
|from|which is required|
|
14
|
+
|to |which is required|
|
15
|
+
|
16
|
+
Scenario: Happy Path
|
17
|
+
Given a path with some files at "/tmp/karo/server_assets/" to be synced at "/tmp/karo/client_assets/"
|
18
|
+
When I successfully run `karo /tmp/karo/server_assets/ /tmp/karo/client_assets/`
|
19
|
+
Then the assets should be synced out in the directory "/tmp/karo/client_assets/"
|
@@ -0,0 +1,34 @@
|
|
1
|
+
include FileUtils
|
2
|
+
|
3
|
+
FILES = %w(image.jpg document.pdf)
|
4
|
+
|
5
|
+
def create(path)
|
6
|
+
base_directory = File.dirname(path)
|
7
|
+
assets_directory = File.basename(path)
|
8
|
+
|
9
|
+
# Delete and create the path
|
10
|
+
Dir.chdir base_directory do
|
11
|
+
rm_rf assets_directory
|
12
|
+
mkdir assets_directory
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
Given(/^a path with some files at "(.*?)" to be synced at "(.*?)"$/) do |from_path, to_path|
|
17
|
+
create from_path
|
18
|
+
create to_path
|
19
|
+
|
20
|
+
# Create test assets to be used for syncing
|
21
|
+
Dir.chdir from_path do
|
22
|
+
FILES.each { |_| touch _ }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
Then(/^the assets should be synced out in the directory "(.*?)"$/) do |sync_to_path|
|
27
|
+
File.exist?(sync_to_path).should == true
|
28
|
+
|
29
|
+
Dir.chdir sync_to_path do
|
30
|
+
FILES.each do |file|
|
31
|
+
File.exist?(file).should == true
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'aruba/cucumber'
|
2
|
+
require 'methadone/cucumber'
|
3
|
+
|
4
|
+
ENV['PATH'] = "#{File.expand_path(File.dirname(__FILE__) + '/../../bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
|
5
|
+
LIB_DIR = File.join(File.expand_path(File.dirname(__FILE__)),'..','..','lib')
|
6
|
+
|
7
|
+
Before do
|
8
|
+
# Using "announce" causes massive warnings on 1.9.2
|
9
|
+
@puts = true
|
10
|
+
@original_rubylib = ENV['RUBYLIB']
|
11
|
+
ENV['RUBYLIB'] = LIB_DIR + File::PATH_SEPARATOR + ENV['RUBYLIB'].to_s
|
12
|
+
end
|
13
|
+
|
14
|
+
After do
|
15
|
+
ENV['RUBYLIB'] = @original_rubylib
|
16
|
+
end
|
data/karo.gemspec
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'karo/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "karo"
|
8
|
+
spec.version = Karo::VERSION
|
9
|
+
spec.authors = ["Rahul Trikha"]
|
10
|
+
spec.email = ["rahul.trikha@gmail.com"]
|
11
|
+
spec.description = "SSH toolbox to make running logs, sync, cache commands easier for a given rails app"
|
12
|
+
spec.summary = spec.description
|
13
|
+
spec.homepage = "http://rahult.github.io/karo/"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "pry"
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
23
|
+
spec.add_development_dependency "rake"
|
24
|
+
spec.add_development_dependency "rdoc"
|
25
|
+
spec.add_development_dependency "aruba"
|
26
|
+
spec.add_development_dependency "rake", "~> 0.9.2"
|
27
|
+
spec.add_dependency "awesome_print"
|
28
|
+
spec.add_dependency "thor"
|
29
|
+
end
|
data/lib/karo/assets.rb
ADDED
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'karo/config'
|
2
|
+
require 'thor'
|
3
|
+
|
4
|
+
module Karo
|
5
|
+
|
6
|
+
class Assets < Thor
|
7
|
+
|
8
|
+
include Thor::Actions
|
9
|
+
|
10
|
+
desc "pull", "syncs assets from server shared/system/dragonfly/<environment> directory into local system/dragonfly/development directory"
|
11
|
+
def pull
|
12
|
+
configuration = Config.load_configuration(options)
|
13
|
+
|
14
|
+
path_local = File.expand_path("public/system/dragonfly/development")
|
15
|
+
empty_directory path_local unless File.exists?(path_local)
|
16
|
+
|
17
|
+
path_server = File.join(configuration["path"], "shared/system/dragonfly/#{options[:environment]}")
|
18
|
+
|
19
|
+
host = "deploy@#{configuration["host"]}"
|
20
|
+
cmd = "rsync -az --progress #{host}:#{path_server}/ #{path_local}/"
|
21
|
+
|
22
|
+
system "#{cmd}"
|
23
|
+
|
24
|
+
say "Assets sync complete", :green
|
25
|
+
end
|
26
|
+
|
27
|
+
desc "push", "syncs assets from system/dragonfly/development directory into local server shared/system/dragonfly/<environment> directory"
|
28
|
+
def push
|
29
|
+
configuration = Config.load_configuration(options)
|
30
|
+
|
31
|
+
path_local = File.expand_path("public/system/dragonfly/development")
|
32
|
+
unless File.exists?(path_local)
|
33
|
+
raise Thor::Error, "Please make sure that this local path exists? '#{path_local}'"
|
34
|
+
end
|
35
|
+
|
36
|
+
host = "deploy@#{configuration["host"]}"
|
37
|
+
|
38
|
+
path_server = File.join(configuration["path"], "shared/system/dragonfly/#{options[:environment]}")
|
39
|
+
|
40
|
+
cmd_1 = "ssh #{host} 'mkdir -p #{path_server}'"
|
41
|
+
cmd_2 = "rsync -az --progress #{path_local}/ #{host}:#{path_server}/"
|
42
|
+
|
43
|
+
if yes?("Are you sure?", :yellow)
|
44
|
+
system "#{cmd_1}"
|
45
|
+
system "#{cmd_2}"
|
46
|
+
say "Assets sync complete", :green
|
47
|
+
else
|
48
|
+
say "Assets sync cancelled", :yellow
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
data/lib/karo/cache.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'karo/config'
|
2
|
+
require 'thor'
|
3
|
+
|
4
|
+
module Karo
|
5
|
+
|
6
|
+
class Cache < Thor
|
7
|
+
|
8
|
+
desc "search", "searches for any matching cache files from the shared/cache directory"
|
9
|
+
def search(name="")
|
10
|
+
configuration = Config.load_configuration(options)
|
11
|
+
path = File.join(configuration["path"], "shared/cache")
|
12
|
+
ssh = "ssh #{configuration["user"]}@#{configuration["host"]}"
|
13
|
+
cmd = "find #{path} -type f -name \"*#{name}*\""
|
14
|
+
|
15
|
+
system "#{ssh} '#{cmd}'"
|
16
|
+
end
|
17
|
+
|
18
|
+
desc "remove", "removes any matching cache files from the shared/cache directory"
|
19
|
+
def remove(name="")
|
20
|
+
invoke :search
|
21
|
+
|
22
|
+
configuration = Config.load_configuration(options)
|
23
|
+
path = File.join(configuration["path"], "shared/cache")
|
24
|
+
ssh = "ssh #{configuration["user"]}@#{configuration["host"]}"
|
25
|
+
cmd = "find #{path} -type f -name \"*#{name}*\" -delete"
|
26
|
+
|
27
|
+
if yes?("Are you sure?", :yellow)
|
28
|
+
system "#{ssh} '#{cmd}'"
|
29
|
+
say "Cache removed", :green
|
30
|
+
else
|
31
|
+
say "Cache not removed", :yellow
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
data/lib/karo/cli.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
require 'karo/version'
|
2
|
+
require 'karo/config'
|
3
|
+
require 'karo/assets'
|
4
|
+
require 'karo/cache'
|
5
|
+
require 'karo/db'
|
6
|
+
require 'thor'
|
7
|
+
require 'ap'
|
8
|
+
|
9
|
+
module Karo
|
10
|
+
|
11
|
+
class CLI < Thor
|
12
|
+
|
13
|
+
class_option :config_file, type: :string, default: Config.default_file_name,
|
14
|
+
aliases: "-c", desc: "name of the file containing server configuration"
|
15
|
+
class_option :environment, aliases: "-e", desc: "server environment", default: "production"
|
16
|
+
|
17
|
+
desc "log", "displays server log for a given environment"
|
18
|
+
def log(name="")
|
19
|
+
configuration = Config.load_configuration(options)
|
20
|
+
|
21
|
+
path = File.join(configuration["path"], "shared/log/#{options["environment"]}.log")
|
22
|
+
ssh = "ssh #{configuration["user"]}@#{configuration["host"]}"
|
23
|
+
|
24
|
+
if name.eql?("")
|
25
|
+
cmd = "tail -f #{path}"
|
26
|
+
else
|
27
|
+
cmd = "tail #{path} | grep -A 10 -B 10 #{name}"
|
28
|
+
end
|
29
|
+
|
30
|
+
system "#{ssh} '#{cmd}'"
|
31
|
+
end
|
32
|
+
|
33
|
+
desc "cache [search, remove]", "find or clears a specific or all cache from shared/cache directory on the server"
|
34
|
+
subcommand "cache", Cache
|
35
|
+
|
36
|
+
desc "assets [pull, push]", "syncs assets between server shared/system/dragonfly/<environment> directory and local system/dragonfly/development directory"
|
37
|
+
subcommand "assets", Assets
|
38
|
+
|
39
|
+
desc "db [pull, push]", "syncs MySQL database between server and localhost"
|
40
|
+
subcommand "db", DB
|
41
|
+
|
42
|
+
desc "config", "displays server configuration stored in a config file"
|
43
|
+
def config
|
44
|
+
configuration = Config.load_configuration(options)
|
45
|
+
|
46
|
+
ap configuration if configuration
|
47
|
+
end
|
48
|
+
|
49
|
+
desc "version", "displays karo's current version"
|
50
|
+
def version
|
51
|
+
say Karo::VERSION
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
data/lib/karo/config.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'thor'
|
3
|
+
|
4
|
+
module Karo
|
5
|
+
|
6
|
+
class NoConfigFileFoundError < StandardError; end
|
7
|
+
|
8
|
+
class Config
|
9
|
+
|
10
|
+
def self.default_file_name
|
11
|
+
".karo.yml"
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.load_configuration(options)
|
15
|
+
begin
|
16
|
+
config_file = File.expand_path(options[:config_file])
|
17
|
+
configuration = read_configuration(config_file)[options[:environment]]
|
18
|
+
|
19
|
+
if configuration.nil? || configuration.empty?
|
20
|
+
raise Thor::Error, "Please pass a valid configuration for an environment '#{options[:environment]}' within this file '#{config_file}'"
|
21
|
+
else
|
22
|
+
configuration
|
23
|
+
end
|
24
|
+
rescue Karo::NoConfigFileFoundError
|
25
|
+
raise Thor::Error, "Please make sure that this configuration file exists? '#{config_file}'"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def self.read_configuration(file_name)
|
32
|
+
if File.exist?(file_name)
|
33
|
+
YAML.load_file(file_name)
|
34
|
+
else
|
35
|
+
raise NoConfigFileFoundError
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
data/lib/karo/db.rb
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'karo/config'
|
2
|
+
require 'thor'
|
3
|
+
require 'yaml'
|
4
|
+
require 'erb'
|
5
|
+
require 'ap'
|
6
|
+
|
7
|
+
module Karo
|
8
|
+
|
9
|
+
class DB < Thor
|
10
|
+
|
11
|
+
include Thor::Actions
|
12
|
+
|
13
|
+
desc "pull", "syncs MySQL database from server to localhost"
|
14
|
+
def pull
|
15
|
+
configuration = Config.load_configuration(options)
|
16
|
+
|
17
|
+
local_db_config_file = File.expand_path("config/database.yml")
|
18
|
+
unless File.exists?(local_db_config_file)
|
19
|
+
raise Thor::Error, "Please make sure that this file exists locally? '#{local_db_config_file}'"
|
20
|
+
end
|
21
|
+
|
22
|
+
local_db_config = YAML.load(File.read('config/database.yml'))
|
23
|
+
|
24
|
+
if local_db_config["development"].nil? || local_db_config["development"].empty?
|
25
|
+
raise Thor::Error, "Please make sure MySQL development configuration exists within this file? '#{local_db_config_file}'"
|
26
|
+
end
|
27
|
+
|
28
|
+
local_db_config = local_db_config["development"]
|
29
|
+
|
30
|
+
say "Loading local database configuration", :green
|
31
|
+
|
32
|
+
server_db_config_file = File.join(configuration["path"], "shared/config/database.yml")
|
33
|
+
|
34
|
+
host = "deploy@#{configuration["host"]}"
|
35
|
+
cmd = "ssh #{host} 'cat #{server_db_config_file}'"
|
36
|
+
|
37
|
+
server_db_config_output = `#{cmd}`
|
38
|
+
yaml_without_any_ruby = ERB.new(server_db_config_output).result
|
39
|
+
server_db_config = YAML.load(yaml_without_any_ruby)
|
40
|
+
|
41
|
+
if server_db_config[options[:environment]].nil? || server_db_config[options[:environment]].empty?
|
42
|
+
raise Thor::Error, "Please make sure MySQL development configuration exists within this file? '#{server_db_config_file}'"
|
43
|
+
end
|
44
|
+
|
45
|
+
server_db_config = server_db_config[options[:environment]]
|
46
|
+
|
47
|
+
say "Loading #{options[:environment]} server database configuration", :green
|
48
|
+
|
49
|
+
# Drop local database and re-create
|
50
|
+
system "mysql -v -h #{local_db_config["host"]} -u#{local_db_config["username"]} -p#{local_db_config["password"]} -e 'DROP DATABASE `#{local_db_config["database"]}`; CREATE DATABASE IF NOT EXISTS `#{local_db_config["database"]}`;'"
|
51
|
+
|
52
|
+
ssh = "ssh #{configuration["user"]}@#{configuration["host"]}"
|
53
|
+
|
54
|
+
system "#{ssh} \"mysqldump --opt -C -u#{server_db_config["username"]} -p#{server_db_config["password"]} #{server_db_config["database"]}\" | mysql -v -h #{local_db_config["host"]} -C -u#{local_db_config["username"]} -p#{local_db_config["password"]} #{local_db_config["database"]}"
|
55
|
+
|
56
|
+
say "Database sync complete", :green
|
57
|
+
end
|
58
|
+
|
59
|
+
desc "push", "syncs MySQL database from localhost to server"
|
60
|
+
def push
|
61
|
+
say "Pending Implementation...", :yellow
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
data/lib/karo/version.rb
ADDED
data/lib/karo.rb
ADDED
metadata
ADDED
@@ -0,0 +1,183 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: karo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Rahul Trikha
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-06-30 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: pry
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rdoc
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: aruba
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - '>='
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rake
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.9.2
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.9.2
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: awesome_print
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: thor
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: SSH toolbox to make running logs, sync, cache commands easier for a given
|
126
|
+
rails app
|
127
|
+
email:
|
128
|
+
- rahul.trikha@gmail.com
|
129
|
+
executables:
|
130
|
+
- karo
|
131
|
+
extensions: []
|
132
|
+
extra_rdoc_files: []
|
133
|
+
files:
|
134
|
+
- .gitignore
|
135
|
+
- .rbenv-gemsets
|
136
|
+
- CHANGELOG.md
|
137
|
+
- Gemfile
|
138
|
+
- LICENSE.txt
|
139
|
+
- README.md
|
140
|
+
- Rakefile
|
141
|
+
- bin/karo
|
142
|
+
- features/karo.feature
|
143
|
+
- features/step_definitions/karo_steps.rb
|
144
|
+
- features/support/env.rb
|
145
|
+
- karo.gemspec
|
146
|
+
- lib/karo.rb
|
147
|
+
- lib/karo/assets.rb
|
148
|
+
- lib/karo/cache.rb
|
149
|
+
- lib/karo/cli.rb
|
150
|
+
- lib/karo/config.rb
|
151
|
+
- lib/karo/db.rb
|
152
|
+
- lib/karo/version.rb
|
153
|
+
- test/tc_something.rb
|
154
|
+
homepage: http://rahult.github.io/karo/
|
155
|
+
licenses:
|
156
|
+
- MIT
|
157
|
+
metadata: {}
|
158
|
+
post_install_message:
|
159
|
+
rdoc_options: []
|
160
|
+
require_paths:
|
161
|
+
- lib
|
162
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - '>='
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
|
+
requirements:
|
169
|
+
- - '>='
|
170
|
+
- !ruby/object:Gem::Version
|
171
|
+
version: '0'
|
172
|
+
requirements: []
|
173
|
+
rubyforge_project:
|
174
|
+
rubygems_version: 2.0.2
|
175
|
+
signing_key:
|
176
|
+
specification_version: 4
|
177
|
+
summary: SSH toolbox to make running logs, sync, cache commands easier for a given
|
178
|
+
rails app
|
179
|
+
test_files:
|
180
|
+
- features/karo.feature
|
181
|
+
- features/step_definitions/karo_steps.rb
|
182
|
+
- features/support/env.rb
|
183
|
+
- test/tc_something.rb
|