tg_cli 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -0
- data/.rspec +2 -0
- data/.travis.yml +8 -0
- data/Gemfile +26 -0
- data/Guardfile +11 -0
- data/README.md +70 -0
- data/Rakefile +6 -0
- data/lib/tg_cli/base.rb +99 -0
- data/lib/tg_cli/group_base.rb +100 -0
- data/lib/tg_cli/main.rb +57 -0
- data/lib/tg_cli/version.rb +18 -0
- data/lib/tg_cli.rb +11 -0
- data/spec/lib/tg_cli/base_spec.rb +15 -0
- data/spec/lib/tg_cli/group_base_spec.rb +6 -0
- data/spec/lib/tg_cli/main_spec.rb +35 -0
- data/spec/spec_helper.rb +25 -0
- data/tg_cli.gemspec +55 -0
- metadata +172 -0
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# Sources
|
2
|
+
source "http://rubygems.org"
|
3
|
+
|
4
|
+
# Parse tg_cli.gemspec
|
5
|
+
gemspec
|
6
|
+
|
7
|
+
####
|
8
|
+
# For development or testing
|
9
|
+
###
|
10
|
+
|
11
|
+
# Require rbconfig to figure out the target OS
|
12
|
+
require 'rbconfig'
|
13
|
+
|
14
|
+
platforms :ruby do
|
15
|
+
unless ENV['TRAVIS']
|
16
|
+
if RbConfig::CONFIG['target_os'] =~ /darwin/i
|
17
|
+
gem 'rb-fsevent', :require => false
|
18
|
+
gem 'ruby-growl', :require => false
|
19
|
+
gem 'growl', :require => false
|
20
|
+
end
|
21
|
+
if RbConfig::CONFIG['target_os'] =~ /linux/i
|
22
|
+
gem 'rb-inotify', :require => false
|
23
|
+
gem 'libnotify', :require => false
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/Guardfile
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
guard 'bundler' do
|
2
|
+
watch('Gemfile')
|
3
|
+
watch(/^.+\.gemspec/)
|
4
|
+
end
|
5
|
+
|
6
|
+
guard 'rspec', :version => 2 do
|
7
|
+
watch(%r{^spec/.+_spec\.rb$})
|
8
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
9
|
+
watch('spec/spec_helper.rb') { "spec" }
|
10
|
+
watch(%r{^spec/support/.*\.rb$}) { "spec" }
|
11
|
+
end
|
data/README.md
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
# TgCli [![Build Status](http://travis-ci.org/TechnoGate/tg_cli.png)](http://travis-ci.org/TechnoGate/tg_cli) [![Still Maintained](http://stillmaintained.com/TechnoGate/tg_cli.png)](http://stillmaintained.com/TechnoGate/tg_cli)
|
2
|
+
|
3
|
+
[![Click here to lend your support to: Open Source Projects and make a donation at www.pledgie.com!](http://pledgie.com/campaigns/16123.png?skin_name=chrome)](http://www.pledgie.com/campaigns/16123)
|
4
|
+
|
5
|
+
## Introduction
|
6
|
+
|
7
|
+
TODO
|
8
|
+
|
9
|
+
## Features
|
10
|
+
|
11
|
+
TODO
|
12
|
+
|
13
|
+
## Getting Started
|
14
|
+
|
15
|
+
### Installation
|
16
|
+
|
17
|
+
```bash
|
18
|
+
$ gem install tg_cli
|
19
|
+
```
|
20
|
+
|
21
|
+
### Usage
|
22
|
+
|
23
|
+
TODO
|
24
|
+
|
25
|
+
## Contributing
|
26
|
+
|
27
|
+
Please feel free to fork and send pull requests, but please follow the
|
28
|
+
following guidelines:
|
29
|
+
|
30
|
+
- Prefix each commit message with the filename or the module followed by a
|
31
|
+
colon and a space, for example 'README: fix a typo' or 'Server/Project: Fix
|
32
|
+
a typo'.
|
33
|
+
- Include tests.
|
34
|
+
- __Do not change the version__, We will take care of that.
|
35
|
+
|
36
|
+
## Contact
|
37
|
+
|
38
|
+
For bugs and feature request, please use __Github issues__, for other
|
39
|
+
requests, you may use:
|
40
|
+
|
41
|
+
- [Github private message](https://github.com/inbox/new/eMxyzptlk)
|
42
|
+
- Email: [contact@technogate.fr](mailto:contact@technogate.fr)
|
43
|
+
|
44
|
+
Don't forget to follow me on [Github](https://github.com/eMxyzptlk) and
|
45
|
+
[Twitter](https://twitter.com/eMxyzptlk) for news and updates.
|
46
|
+
|
47
|
+
## License
|
48
|
+
|
49
|
+
### This code is free to use under the terms of the MIT license.
|
50
|
+
|
51
|
+
Copyright (c) 2011 TechnoGate <support@technogate.fr>
|
52
|
+
|
53
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
54
|
+
a copy of this software and associated documentation files (the
|
55
|
+
"Software"), to deal in the Software without restriction, including
|
56
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
57
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
58
|
+
permit persons to whom the Software is furnished to do so, subject to
|
59
|
+
the following conditions:
|
60
|
+
|
61
|
+
The above copyright notice and this permission notice shall be included
|
62
|
+
in all copies or substantial portions of the Software.
|
63
|
+
|
64
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
65
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
66
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
67
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
68
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
69
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
70
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/Rakefile
ADDED
data/lib/tg_cli/base.rb
ADDED
@@ -0,0 +1,99 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'thor/group'
|
3
|
+
require 'thor/actions'
|
4
|
+
|
5
|
+
module TechnoGate
|
6
|
+
module TgCli
|
7
|
+
# A {Base} is the superclass for all commands which are single
|
8
|
+
# commands, e.g. `vagrant init`, `vagrant up`. Not commands like
|
9
|
+
# `vagrant box add`. For commands which have more subcommands, use
|
10
|
+
# a {GroupBase}.
|
11
|
+
#
|
12
|
+
# A {Base} is a subclass of `Thor::Group`, so view the documentation
|
13
|
+
# there on how to add arguments, descriptions etc. The important note
|
14
|
+
# about this is that when invoked, _all public methods_ will be called
|
15
|
+
# in the order they are defined. If you don't want a method called when
|
16
|
+
# the command is invoked, it must be made `protected` or `private`.
|
17
|
+
#
|
18
|
+
# The best way to get examples of how to create your own command is to
|
19
|
+
# view the various Vagrant commands, which are relatively simple, and
|
20
|
+
# can be found in the Vagrant source tree at `lib/vagrant/command/`.
|
21
|
+
#
|
22
|
+
# # Defining a New Command
|
23
|
+
#
|
24
|
+
# To define a new single command, create a new class which inherits
|
25
|
+
# from this class, then call {register} to register the command. That's
|
26
|
+
# it! When the command is invoked, _all public methods_ will be called.
|
27
|
+
# Below is an example `SayHello` class:
|
28
|
+
#
|
29
|
+
# class SayHello < Vagrant::Command::Base
|
30
|
+
# register "hello", "Says hello"
|
31
|
+
#
|
32
|
+
# def hello
|
33
|
+
# env.ui.info "Hello"
|
34
|
+
# end
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# In this case, the above class is invokable via `vagrant hello`. To give
|
38
|
+
# this a try, just copy and paste the above into a Vagrantfile somewhere.
|
39
|
+
# The command will be available for that project!
|
40
|
+
#
|
41
|
+
# Also note that the above example uses `env.ui` to output. It is recommended
|
42
|
+
# you use this instead of raw "puts" since it is configurable and provides
|
43
|
+
# additional functionality, such as colors and asking for user input. See
|
44
|
+
# the {UI} class for more information.
|
45
|
+
#
|
46
|
+
# ## Defining Command-line Options
|
47
|
+
#
|
48
|
+
# Most command line actions won't be as simple as `vagrant hello`, and will
|
49
|
+
# probably require parameters or switches. Luckily, Thor makes adding these
|
50
|
+
# easy:
|
51
|
+
#
|
52
|
+
# class SayHello < Vagrant::Command::Base
|
53
|
+
# register "hello", "Says hello"
|
54
|
+
# argument :name, :type => :string
|
55
|
+
#
|
56
|
+
# def hello
|
57
|
+
# env.ui.info "Hello, #{name}"
|
58
|
+
# end
|
59
|
+
# end
|
60
|
+
#
|
61
|
+
# Then, the above can be invoked with `vagrant hello Mitchell` which would
|
62
|
+
# output "Hello, Mitchell." If instead you're looking for switches, such as
|
63
|
+
# "--name Mitchell", then take a look at `class_option`, an example of which
|
64
|
+
# can be found in the {PackageCommand}.
|
65
|
+
class Base < Thor::Group
|
66
|
+
include Thor::Actions
|
67
|
+
|
68
|
+
# Register the command with the main Vagrant CLI under the
|
69
|
+
# given name. The name will be used for accessing it from the CLI,
|
70
|
+
# so if you name it "lamp", then the command to invoke this
|
71
|
+
# will be `vagrant lamp`.
|
72
|
+
#
|
73
|
+
# The description is used when the help is listed, and is meant to be
|
74
|
+
# a brief (one sentence) description of what the command does.
|
75
|
+
#
|
76
|
+
# Some additional options may be passed in as the last parameter:
|
77
|
+
#
|
78
|
+
# * `:alias` - If given as an array or string, these will be aliases
|
79
|
+
# for the same command. For example, `vagrant version` is also
|
80
|
+
# `vagrant --version` and `vagrant -v`
|
81
|
+
#
|
82
|
+
# @param [String] usage
|
83
|
+
# @param [String] description
|
84
|
+
# @param [Hash] opts
|
85
|
+
def self.register(usage, description, opts=nil)
|
86
|
+
desc description
|
87
|
+
Main.register(self, extract_name_from_usage(usage), usage, desc, opts)
|
88
|
+
end
|
89
|
+
|
90
|
+
protected
|
91
|
+
|
92
|
+
# Extracts the name of the command from a usage string. Example:
|
93
|
+
# `init [box_name] [box_url]` becomes just `init`.
|
94
|
+
def self.extract_name_from_usage(usage)
|
95
|
+
/^([-_a-zA-Z0-9]+)(\s+(.+?))?$/.match(usage).to_a[1]
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require 'thor/group'
|
3
|
+
require 'thor/actions'
|
4
|
+
|
5
|
+
module TechnoGate
|
6
|
+
module TgCli
|
7
|
+
# A {GroupBase} is the superclass which should be used if you're
|
8
|
+
# creating a CLI command which has subcommands such as `vagrant box`,
|
9
|
+
# which has subcommands such as `add`, `remove`, `list`. If you're
|
10
|
+
# creating a simple command which has no subcommands, such as `vagrant up`,
|
11
|
+
# then use {Base} instead.
|
12
|
+
#
|
13
|
+
# Unlike {Base}, where all public methods are executed, in a {GroupBase},
|
14
|
+
# each public method defines a separate task which can be invoked. The best
|
15
|
+
# way to get examples of how to create a {GroupBase} command is to look
|
16
|
+
# at the built-in commands, such as {BoxCommand}.
|
17
|
+
#
|
18
|
+
# # Defining a New Command
|
19
|
+
#
|
20
|
+
# To define a new command with subcommands, create a new class which inherits
|
21
|
+
# from this class, then call {register} to register the command. That's it! When
|
22
|
+
# the command is invoked, the method matching the subcommand is invoked. An
|
23
|
+
# example is shown below:
|
24
|
+
#
|
25
|
+
# class SayCommand < Vagrant::Command::GroupBase
|
26
|
+
# register "say", "Say hello or goodbye"
|
27
|
+
#
|
28
|
+
# desc "hello", "say hello"
|
29
|
+
# def hello
|
30
|
+
# env.ui.info "Hello"
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# desc "goodbye", "say goodbye"
|
34
|
+
# def goodbye
|
35
|
+
# env.ui.info "Goodbye"
|
36
|
+
# end
|
37
|
+
# end
|
38
|
+
#
|
39
|
+
# In this case, the above class is invokable via `vagrant say hello` or
|
40
|
+
# `vagrant say goodbye`. To give it a try yourself, just copy and paste
|
41
|
+
# the above into a Vagrantfile somewhere, and run `vagrant` from within
|
42
|
+
# that directory. You should see the new command!
|
43
|
+
#
|
44
|
+
# Also notice that in the above, each task follows a `desc` call. This
|
45
|
+
# call is used to provide usage and description for each task, and is
|
46
|
+
# required.
|
47
|
+
#
|
48
|
+
# ## Defining Command-line Options
|
49
|
+
#
|
50
|
+
# ### Arguments
|
51
|
+
#
|
52
|
+
# To define arguments to your commands, such as `vagrant say hello mitchell`,
|
53
|
+
# then you simply define them as arguments to the method implementing the
|
54
|
+
# task. An example is shown below (only the method, to keep things brief):
|
55
|
+
#
|
56
|
+
# def hello(name)
|
57
|
+
# env.ui.info "Hello, #{name}"
|
58
|
+
# end
|
59
|
+
#
|
60
|
+
# Then, if `vagrant say hello mitchell` was called, then the output would
|
61
|
+
# be "Hello, mitchell"
|
62
|
+
#
|
63
|
+
# ### Switches or Other Options
|
64
|
+
#
|
65
|
+
# TODO
|
66
|
+
class GroupBase < Thor
|
67
|
+
include Thor::Actions
|
68
|
+
|
69
|
+
# Register the command with the main Vagrant CLI under the given
|
70
|
+
# usage. The usage will be used for accessing it from the CLI,
|
71
|
+
# so if you give it a usage of `lamp [subcommand]`, then the command
|
72
|
+
# to invoke this will be `vagrant lamp` (with a subcommand).
|
73
|
+
#
|
74
|
+
# The description is used when a listing of the commands is given
|
75
|
+
# and is meant to be a brief (one sentence) description of what this
|
76
|
+
# command does.
|
77
|
+
#
|
78
|
+
# Some additional options may be passed in as the last parameter:
|
79
|
+
#
|
80
|
+
# * `:alias` - If given as an array or string, these will be aliases
|
81
|
+
# for the same command. For example, `vagrant version` is also
|
82
|
+
# `vagrant --version` and `vagrant -v`
|
83
|
+
#
|
84
|
+
# @param [String] usage
|
85
|
+
# @param [String] description
|
86
|
+
# @param [Hash] opts
|
87
|
+
def self.register(usage, description, opts=nil)
|
88
|
+
@_name = Base.extract_name_from_usage(usage)
|
89
|
+
Main.register(self, @_name, usage, description, opts)
|
90
|
+
end
|
91
|
+
|
92
|
+
protected
|
93
|
+
|
94
|
+
# Override the basename to include the subcommand name.
|
95
|
+
def self.basename
|
96
|
+
"#{super} #{@_name}"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
data/lib/tg_cli/main.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'thor'
|
2
|
+
|
3
|
+
module TechnoGate
|
4
|
+
module TgCli
|
5
|
+
# Entrypoint for the Vagrant CLI. This class should never be
|
6
|
+
# initialized directly (like a typical Thor class). Instead,
|
7
|
+
# use {Environment#cli} to invoke the CLI.
|
8
|
+
#
|
9
|
+
# # Defining Custom CLI Commands
|
10
|
+
#
|
11
|
+
# If you're looking to define custom CLI commands, then look at
|
12
|
+
# one of the two following classes:
|
13
|
+
#
|
14
|
+
# * {Command::Base} - Implementing a single command such as `vagrant up`, e.g.
|
15
|
+
# one without subcommands. Also take a look at {Command::NamedBase}.
|
16
|
+
# * {Command::GroupBase} - Implementing a command with subcommands, such as
|
17
|
+
# `vagrant box`, which has the `list`, `add`, etc. subcommands.
|
18
|
+
#
|
19
|
+
# The above linked classes contain the main documentation for each
|
20
|
+
# type of command.
|
21
|
+
class Main < Thor
|
22
|
+
# Registers the given class with the CLI so it can be accessed.
|
23
|
+
# The class must be a subclass of either {Command::Base} or {Command::GroupBase}.
|
24
|
+
# Don't call this method directly, instead call the {Command::Base.register}
|
25
|
+
# or {Command::GroupBase.register} methods.
|
26
|
+
#
|
27
|
+
# @param [Class] klass Command class
|
28
|
+
# @param [String] name Command name, accessed at `vagrant NAME`
|
29
|
+
# @param [String] usage Command usage, such as "vagrant NAME [--option]"
|
30
|
+
# @param [String] description Description of the command shown during the
|
31
|
+
# command listing.
|
32
|
+
# @param [Hash] opts Other options (not gone into detail here, look at
|
33
|
+
# the source instead).
|
34
|
+
def self.register(klass, name, usage, description, opts=nil)
|
35
|
+
opts ||= {}
|
36
|
+
|
37
|
+
if klass <= GroupBase
|
38
|
+
# A subclass of GroupBase is a subcommand, since it contains
|
39
|
+
# many smaller commands within it.
|
40
|
+
desc usage, description, opts
|
41
|
+
subcommand name, klass
|
42
|
+
elsif klass <= Base
|
43
|
+
# A subclass of Base is a single command, since it
|
44
|
+
# is invoked as a whole (as Thor::Group)
|
45
|
+
desc usage, description, opts
|
46
|
+
define_method(name) { |*args| invoke klass, args }
|
47
|
+
end
|
48
|
+
|
49
|
+
if opts[:alias]
|
50
|
+
# Alises are defined for this command, so properly alias the
|
51
|
+
# newly defined method/subcommand:
|
52
|
+
map opts[:alias] => name
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module TechnoGate
|
2
|
+
module TgCli
|
3
|
+
MAJOR = 0
|
4
|
+
MINOR = 0
|
5
|
+
TINY = 1
|
6
|
+
PRE = ''
|
7
|
+
|
8
|
+
def self.version
|
9
|
+
# Init the version
|
10
|
+
version = [MAJOR, MINOR, TINY]
|
11
|
+
# Add the pre if available
|
12
|
+
version << PRE unless PRE.nil? || PRE !~ /\S/
|
13
|
+
# Return the version joined by a dot
|
14
|
+
version.join('.')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
data/lib/tg_cli.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Base do
|
4
|
+
|
5
|
+
subject { Base }
|
6
|
+
|
7
|
+
context "extracting a name from a usage string" do
|
8
|
+
it "should extract properly" do
|
9
|
+
subject.send(:extract_name_from_usage, "init").should == "init"
|
10
|
+
subject.send(:extract_name_from_usage, "init [foo] [bar]").should == "init"
|
11
|
+
subject.send(:extract_name_from_usage, "init <foo> [bar]").should == "init"
|
12
|
+
subject.send(:extract_name_from_usage, "ssh-config").should == "ssh-config"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Main do
|
4
|
+
subject { Main }
|
5
|
+
|
6
|
+
context "#registering" do
|
7
|
+
it {should respond_to :register }
|
8
|
+
|
9
|
+
it "should register a base command as a single invokable" do
|
10
|
+
base = Class.new(Base)
|
11
|
+
name = "__test_registering_single_subcommand"
|
12
|
+
subject.register(base, name, name, "A description")
|
13
|
+
expect { subject.tasks[name] }.should_not raise_error
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should register a group base as a subcommand" do
|
17
|
+
base = Class.new(GroupBase)
|
18
|
+
name = "_test_registering_single_group"
|
19
|
+
subject.register(base, name, name, "A description")
|
20
|
+
subject.subcommands.should include(name)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should alias methods if the alias option is given" do
|
24
|
+
base = Class.new(Base) do
|
25
|
+
def execute
|
26
|
+
true
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
name = "__test_registering_with_alias"
|
31
|
+
subject.register(base, name, name, "A description", :alias => "--ALIAS")
|
32
|
+
subject.start(["--ALIAS"]).should be_true
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require 'rspec'
|
4
|
+
require 'tg_cli'
|
5
|
+
|
6
|
+
include TechnoGate
|
7
|
+
include TgCli
|
8
|
+
|
9
|
+
RSpec.configure do |config|
|
10
|
+
def config.escaped_path(*parts)
|
11
|
+
Regexp.compile(parts.join('[\\\/]'))
|
12
|
+
end unless config.respond_to? :escaped_path
|
13
|
+
|
14
|
+
# == Mock Framework
|
15
|
+
#
|
16
|
+
# If you prefer to use mocha, flexmock or RR, uncomment the appropriate line:
|
17
|
+
#
|
18
|
+
config.mock_with :mocha
|
19
|
+
# config.mock_with :flexmock
|
20
|
+
# config.mock_with :rr
|
21
|
+
# config.mock_with :rspec
|
22
|
+
end
|
23
|
+
|
24
|
+
# Include support files.
|
25
|
+
Dir["#{File.expand_path('../', __FILE__)}/support/**/*.rb"].each { |f| require f }
|
data/tg_cli.gemspec
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "tg_cli/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "tg_cli"
|
7
|
+
s.version = TechnoGate::TgCli.version
|
8
|
+
s.authors = ["Wael Nasreddine"]
|
9
|
+
s.email = ["wael.nasreddine@gmail.com"]
|
10
|
+
s.homepage = ""
|
11
|
+
s.summary = "Helpers around Thor extracted from the Vagrant gem."
|
12
|
+
s.description = s.summary
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
####
|
20
|
+
# Run-time dependencies
|
21
|
+
####
|
22
|
+
|
23
|
+
# Bundler
|
24
|
+
s.add_dependency 'bundler', '~>1.0.0'
|
25
|
+
|
26
|
+
# Thor
|
27
|
+
s.add_dependency 'thor', '~>0.14.6'
|
28
|
+
|
29
|
+
####
|
30
|
+
# Development dependencies
|
31
|
+
####
|
32
|
+
|
33
|
+
# Guard
|
34
|
+
s.add_development_dependency 'guard', '~>0.8.4'
|
35
|
+
s.add_development_dependency 'guard-bundler', '~>0.1.3'
|
36
|
+
s.add_development_dependency 'guard-rspec', '~>0.4.5'
|
37
|
+
|
38
|
+
# Documentation
|
39
|
+
s.add_development_dependency 'yard', '~>0.7.2'
|
40
|
+
|
41
|
+
####
|
42
|
+
# Development / Test dependencies
|
43
|
+
####
|
44
|
+
|
45
|
+
# RSpec / Capybara
|
46
|
+
s.add_development_dependency 'rspec', '~>2.6.0'
|
47
|
+
|
48
|
+
# Mocha
|
49
|
+
s.add_development_dependency 'mocha', '~>0.10.0'
|
50
|
+
|
51
|
+
####
|
52
|
+
# Debugging
|
53
|
+
####
|
54
|
+
s.add_development_dependency 'pry', '~>0.9.6.2'
|
55
|
+
end
|
metadata
ADDED
@@ -0,0 +1,172 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: tg_cli
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Wael Nasreddine
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-11-17 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: &16114980 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.0.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *16114980
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: thor
|
27
|
+
requirement: &16502820 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ~>
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 0.14.6
|
33
|
+
type: :runtime
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *16502820
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: guard
|
38
|
+
requirement: &16589840 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: 0.8.4
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *16589840
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: guard-bundler
|
49
|
+
requirement: &16587560 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.1.3
|
55
|
+
type: :development
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *16587560
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: guard-rspec
|
60
|
+
requirement: &16585400 !ruby/object:Gem::Requirement
|
61
|
+
none: false
|
62
|
+
requirements:
|
63
|
+
- - ~>
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 0.4.5
|
66
|
+
type: :development
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: *16585400
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: yard
|
71
|
+
requirement: &16672740 !ruby/object:Gem::Requirement
|
72
|
+
none: false
|
73
|
+
requirements:
|
74
|
+
- - ~>
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: 0.7.2
|
77
|
+
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: *16672740
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: rspec
|
82
|
+
requirement: &16672140 !ruby/object:Gem::Requirement
|
83
|
+
none: false
|
84
|
+
requirements:
|
85
|
+
- - ~>
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 2.6.0
|
88
|
+
type: :development
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *16672140
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: mocha
|
93
|
+
requirement: &16671620 !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ~>
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: 0.10.0
|
99
|
+
type: :development
|
100
|
+
prerelease: false
|
101
|
+
version_requirements: *16671620
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: pry
|
104
|
+
requirement: &16670940 !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ~>
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: 0.9.6.2
|
110
|
+
type: :development
|
111
|
+
prerelease: false
|
112
|
+
version_requirements: *16670940
|
113
|
+
description: Helpers around Thor extracted from the Vagrant gem.
|
114
|
+
email:
|
115
|
+
- wael.nasreddine@gmail.com
|
116
|
+
executables: []
|
117
|
+
extensions: []
|
118
|
+
extra_rdoc_files: []
|
119
|
+
files:
|
120
|
+
- .gitignore
|
121
|
+
- .rspec
|
122
|
+
- .travis.yml
|
123
|
+
- Gemfile
|
124
|
+
- Guardfile
|
125
|
+
- README.md
|
126
|
+
- Rakefile
|
127
|
+
- lib/tg_cli.rb
|
128
|
+
- lib/tg_cli/base.rb
|
129
|
+
- lib/tg_cli/group_base.rb
|
130
|
+
- lib/tg_cli/main.rb
|
131
|
+
- lib/tg_cli/version.rb
|
132
|
+
- spec/lib/tg_cli/base_spec.rb
|
133
|
+
- spec/lib/tg_cli/group_base_spec.rb
|
134
|
+
- spec/lib/tg_cli/main_spec.rb
|
135
|
+
- spec/spec_helper.rb
|
136
|
+
- tg_cli.gemspec
|
137
|
+
homepage: ''
|
138
|
+
licenses: []
|
139
|
+
post_install_message:
|
140
|
+
rdoc_options: []
|
141
|
+
require_paths:
|
142
|
+
- lib
|
143
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
144
|
+
none: false
|
145
|
+
requirements:
|
146
|
+
- - ! '>='
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
segments:
|
150
|
+
- 0
|
151
|
+
hash: 4598389211369895346
|
152
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
segments:
|
159
|
+
- 0
|
160
|
+
hash: 4598389211369895346
|
161
|
+
requirements: []
|
162
|
+
rubyforge_project:
|
163
|
+
rubygems_version: 1.8.11
|
164
|
+
signing_key:
|
165
|
+
specification_version: 3
|
166
|
+
summary: Helpers around Thor extracted from the Vagrant gem.
|
167
|
+
test_files:
|
168
|
+
- spec/lib/tg_cli/base_spec.rb
|
169
|
+
- spec/lib/tg_cli/group_base_spec.rb
|
170
|
+
- spec/lib/tg_cli/main_spec.rb
|
171
|
+
- spec/spec_helper.rb
|
172
|
+
has_rdoc:
|