tg_cli 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/.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 [](http://travis-ci.org/TechnoGate/tg_cli) [](http://stillmaintained.com/TechnoGate/tg_cli)
|
2
|
+
|
3
|
+
[](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:
|