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 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: