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 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
@@ -0,0 +1,9 @@
1
+ .DS_Store
2
+ results.html
3
+ pkg
4
+ html
5
+ tmp
6
+ Gemfile.lock
7
+ public
8
+ config
9
+ .karo.yml
data/.rbenv-gemsets ADDED
@@ -0,0 +1 @@
1
+ karo
data/CHANGELOG.md ADDED
@@ -0,0 +1,8 @@
1
+ # Changelog
2
+
3
+ ## v1.0.0
4
+
5
+ ### Features
6
+
7
+ - Added basic commands to sync db, assets from remote rails servers
8
+ - Added basic commands to show log, clear cache from remote rails servers
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in karo.gemspec
4
+ gemspec
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,11 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'karo'
4
+
5
+ begin
6
+ Karo::CLI.start(ARGV)
7
+ rescue SystemExit, Interrupt
8
+ puts "Exiting"
9
+ rescue Exception => e
10
+ puts e
11
+ end
@@ -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
@@ -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
@@ -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
@@ -0,0 +1,3 @@
1
+ module Karo
2
+ VERSION = "1.0.0"
3
+ end
data/lib/karo.rb ADDED
@@ -0,0 +1,5 @@
1
+ require "karo/version"
2
+ require "karo/cli"
3
+
4
+ module Karo
5
+ end
@@ -0,0 +1,7 @@
1
+ require 'test/unit'
2
+
3
+ class TestSomething < Test::Unit::TestCase
4
+ def test_truth
5
+ assert true
6
+ end
7
+ end
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