tg_cli 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format documentation
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ script: "rake spec"
2
+ rvm:
3
+ - 1.8.7
4
+ - 1.9.2
5
+ - 1.9.3
6
+ notifications:
7
+ recipients:
8
+ - wael.nasreddine@gmail.com
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
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ require 'rspec/core/rake_task'
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
@@ -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
@@ -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,11 @@
1
+ begin
2
+ require "bundler/setup"
3
+ rescue LoadError
4
+ require "rubygems"
5
+ require "bundler/setup"
6
+ end
7
+
8
+ require "tg_cli/version"
9
+ require "tg_cli/main"
10
+ require "tg_cli/base"
11
+ require "tg_cli/group_base"
@@ -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,6 @@
1
+ require 'spec_helper'
2
+
3
+ describe GroupBase do
4
+
5
+ subject { GroupBase }
6
+ 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
@@ -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: