ggem 1.3.0 → 1.4.0
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 +0 -2
- data/Gemfile +2 -3
- data/{LICENSE → LICENSE.txt} +1 -1
- data/README.md +15 -17
- data/Rakefile +1 -8
- data/bin/ggem +4 -1
- data/ggem.gemspec +9 -8
- data/lib/ggem.rb +2 -1
- data/lib/ggem/cli.rb +89 -31
- data/lib/ggem/gem.rb +19 -23
- data/lib/ggem/template.rb +26 -13
- data/lib/ggem/template_file/Gemfile.erb +2 -3
- data/lib/ggem/template_file/{LICENSE.erb → LICENSE.txt.erb} +1 -1
- data/lib/ggem/template_file/README.md.erb +4 -4
- data/lib/ggem/template_file/Rakefile.erb +1 -8
- data/lib/ggem/template_file/gemspec.erb +10 -8
- data/lib/ggem/template_file/gitignore.erb +0 -2
- data/lib/ggem/template_file/lib.rb.erb +4 -2
- data/lib/ggem/template_file/test_helper.rb.erb +5 -3
- data/lib/ggem/version.rb +1 -1
- data/test/helper.rb +7 -11
- data/test/{name_set.rb → support/name_set.rb} +10 -8
- data/test/system/ggem_tests.rb +44 -0
- data/test/unit/gem_tests.rb +23 -0
- metadata +12 -27
- data/lib/ggem/template_file/test_irb.rb.erb +0 -9
- data/test/gem_tests.rb +0 -57
- data/test/irb.rb +0 -9
data/.gitignore
CHANGED
data/Gemfile
CHANGED
data/{LICENSE → LICENSE.txt}
RENAMED
data/README.md
CHANGED
@@ -1,33 +1,31 @@
|
|
1
1
|
# GGem
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
## Installation
|
6
|
-
|
7
|
-
```
|
8
|
-
$ gem install ggem
|
9
|
-
```
|
3
|
+
Consistantly generate a ruby gem project ready to test, build, and deploy. Uses and emulates most of Bundler's gem building features.
|
10
4
|
|
11
5
|
## Usage
|
12
6
|
|
13
7
|
```
|
8
|
+
$ ggem --help
|
14
9
|
$ ggem my-gem
|
10
|
+
$ git commit -m "Gem created with ggem"
|
15
11
|
```
|
16
12
|
|
17
|
-
|
13
|
+
GGem creates a folder and files for developing, testing, and releasing a gem. It is safe to run on existing gem folders, adding/overwriting where necessary.
|
18
14
|
|
19
|
-
|
15
|
+
## Features
|
20
16
|
|
21
|
-
|
17
|
+
* creates `lib` and gem files similar to `bundle gem` (as of Bundler 1.2.4)
|
18
|
+
* creates `test` files
|
19
|
+
* source control using Git
|
20
|
+
* test using Assert
|
21
|
+
* release using Bundler
|
22
|
+
* adds `TODO` entries in files where user input is needed
|
22
23
|
|
23
|
-
|
24
|
-
|
25
|
-
Your new gem provides some Rake tasks for convenience:
|
26
|
-
|
27
|
-
* all the bundler gem rake tasks (http://github.com/carlhuda/bundler/)
|
28
|
-
* all the testing rake task stuff from assert (http://github.com/teaminsight/assert)
|
24
|
+
## Installation
|
29
25
|
|
30
|
-
|
26
|
+
```
|
27
|
+
$ gem install ggem
|
28
|
+
```
|
31
29
|
|
32
30
|
## Contributing
|
33
31
|
|
data/Rakefile
CHANGED
data/bin/ggem
CHANGED
data/ggem.gemspec
CHANGED
@@ -1,21 +1,22 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "ggem/version"
|
3
5
|
|
4
6
|
Gem::Specification.new do |gem|
|
5
7
|
gem.name = "ggem"
|
6
8
|
gem.version = GGem::VERSION
|
7
|
-
gem.summary = %q{"Juh Gem", baby! (this makes gems)}
|
8
|
-
gem.description = %q{"Juh Gem", baby! (this makes gems)}
|
9
|
-
|
10
9
|
gem.authors = ["Kelly Redding"]
|
11
10
|
gem.email = ["kelly@kellyredding.com"]
|
11
|
+
gem.description = %q{"Juh Gem", baby! (this makes gems)}
|
12
|
+
gem.summary = %q{"Juh Gem", baby! (this makes gems)}
|
12
13
|
gem.homepage = "http://github.com/kellyredding/ggem"
|
13
14
|
|
14
|
-
gem.files = `git ls-files`.split(
|
15
|
-
gem.
|
16
|
-
gem.
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
18
|
gem.require_paths = ["lib"]
|
18
19
|
|
19
20
|
gem.add_development_dependency("assert")
|
20
|
-
|
21
|
+
|
21
22
|
end
|
data/lib/ggem.rb
CHANGED
@@ -1 +1,2 @@
|
|
1
|
-
require 'ggem/
|
1
|
+
require 'ggem/version'
|
2
|
+
require 'ggem/gem'
|
data/lib/ggem/cli.rb
CHANGED
@@ -1,48 +1,106 @@
|
|
1
|
-
require 'quickl'
|
2
1
|
require 'ggem'
|
3
|
-
require
|
2
|
+
require 'ggem/version'
|
4
3
|
|
5
|
-
module
|
4
|
+
module GGem
|
6
5
|
|
7
|
-
|
8
|
-
# ggem command line tool
|
9
|
-
#
|
10
|
-
# SYNOPSIS
|
11
|
-
# #{command_name} [options] GEM_NAME
|
12
|
-
#
|
13
|
-
# OPTIONS
|
14
|
-
# #{summarized_options}
|
15
|
-
#
|
16
|
-
# DESCRIPTION
|
17
|
-
# This is a command line tool for using ggem
|
18
|
-
#
|
19
|
-
class Ggem < Quickl::Command(__FILE__, __LINE__)
|
6
|
+
class CLI
|
20
7
|
|
21
|
-
|
8
|
+
def self.run(*args)
|
9
|
+
self.new.run(*args)
|
10
|
+
end
|
22
11
|
|
23
|
-
|
24
|
-
|
12
|
+
def initialize
|
13
|
+
@cli = CLIRB.new do
|
14
|
+
option 'debug', 'run in debug mode'
|
15
|
+
end
|
16
|
+
end
|
25
17
|
|
26
|
-
|
18
|
+
def run(*args)
|
19
|
+
begin
|
20
|
+
# parse manually in the case that parsing fails before the debug arg
|
21
|
+
debug_mode ||= args.include?('-d') || args.include?('--debug')
|
22
|
+
@cli.parse!(args)
|
23
|
+
raise CLIRB::Error, "please provide a gem name" if @cli.args.size < 1
|
27
24
|
|
28
|
-
|
29
|
-
|
25
|
+
path = GGem::Gem.new(Dir.pwd, *args).save!.path
|
26
|
+
puts "created gem and initialized git repo in #{path}"
|
27
|
+
rescue CLIRB::HelpExit
|
28
|
+
puts help
|
29
|
+
rescue CLIRB::VersionExit
|
30
|
+
puts GGem::VERSION
|
31
|
+
rescue CLIRB::Error => exception
|
32
|
+
puts "#{exception.message}\n\n"
|
33
|
+
puts debug_mode ? exception.backtrace.join("\n") : help
|
34
|
+
exit(1)
|
35
|
+
rescue Exception => exception
|
36
|
+
puts "#{exception.class}: #{exception.message}"
|
37
|
+
puts exception.backtrace.join("\n") if debug_mode
|
38
|
+
exit(1)
|
30
39
|
end
|
40
|
+
exit(0)
|
41
|
+
end
|
31
42
|
|
32
|
-
|
33
|
-
|
34
|
-
|
43
|
+
def help
|
44
|
+
"Usage: ggem GEM-NAME\n\n"\
|
45
|
+
"Options:"\
|
46
|
+
"#{@cli}"
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
class CLIRB # Version 1.0.0, https://github.com/redding/cli.rb
|
52
|
+
Error = Class.new(RuntimeError);
|
53
|
+
HelpExit = Class.new(RuntimeError); VersionExit = Class.new(RuntimeError)
|
54
|
+
attr_reader :argv, :args, :opts, :data
|
35
55
|
|
56
|
+
def initialize(&block)
|
57
|
+
@options = []; instance_eval(&block) if block
|
58
|
+
require 'optparse'
|
59
|
+
@data, @args, @opts = [], [], {}; @parser = OptionParser.new do |p|
|
60
|
+
p.banner = ''; @options.each do |o|
|
61
|
+
@opts[o.name] = o.value; p.on(*o.parser_args){ |v| @opts[o.name] = v }
|
62
|
+
end
|
63
|
+
p.on_tail('--version', ''){ |v| raise VersionExit, v.to_s }
|
64
|
+
p.on_tail('--help', ''){ |v| raise HelpExit, v.to_s }
|
65
|
+
end
|
36
66
|
end
|
37
67
|
|
38
|
-
|
39
|
-
def
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
68
|
+
def option(*args); @options << Option.new(*args); end
|
69
|
+
def parse!(argv)
|
70
|
+
@args = (argv || []).dup.tap do |args_list|
|
71
|
+
begin; @parser.parse!(args_list)
|
72
|
+
rescue OptionParser::ParseError => err; raise Error, err.message; end
|
73
|
+
end; @data = @args + [@opts]
|
74
|
+
end
|
75
|
+
def to_s; @parser.to_s; end
|
76
|
+
def inspect
|
77
|
+
"#<#{self.class}:#{'0x0%x' % (object_id << 1)} @data=#{@data.inspect}>"
|
44
78
|
end
|
45
79
|
|
80
|
+
class Option
|
81
|
+
attr_reader :name, :opt_name, :desc, :abbrev, :value, :klass, :parser_args
|
82
|
+
|
83
|
+
def initialize(name, *args)
|
84
|
+
settings, @desc = args.last.kind_of?(::Hash) ? args.pop : {}, args.pop || ''
|
85
|
+
@name, @opt_name, @abbrev = parse_name_values(name, settings[:abbrev])
|
86
|
+
@value, @klass = gvalinfo(settings[:value])
|
87
|
+
@parser_args = if [TrueClass, FalseClass, NilClass].include?(@klass)
|
88
|
+
["-#{@abbrev}", "--[no-]#{@opt_name}", @desc]
|
89
|
+
else
|
90
|
+
["-#{@abbrev}", "--#{@opt_name} #{@opt_name.upcase}", @klass, @desc]
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
private
|
95
|
+
|
96
|
+
def parse_name_values(name, custom_abbrev)
|
97
|
+
[ (processed_name = name.to_s.strip.downcase), processed_name.gsub('_', '-'),
|
98
|
+
custom_abbrev || processed_name.gsub(/[^a-z]/, '').chars.first || 'a'
|
99
|
+
]
|
100
|
+
end
|
101
|
+
def gvalinfo(v); v.kind_of?(Class) ? [nil,gklass(v)] : [v,gklass(v.class)]; end
|
102
|
+
def gklass(k); k == Fixnum ? Integer : k; end
|
103
|
+
end
|
46
104
|
end
|
47
105
|
|
48
106
|
end
|
data/lib/ggem/gem.rb
CHANGED
@@ -2,55 +2,51 @@ require 'fileutils'
|
|
2
2
|
require 'ggem/template'
|
3
3
|
|
4
4
|
module GGem
|
5
|
+
|
5
6
|
class Gem
|
6
7
|
|
7
8
|
attr_reader :root_path, :name
|
8
9
|
|
9
10
|
def initialize(path, name)
|
10
|
-
@root_path = path
|
11
|
-
self.name = name
|
11
|
+
@root_path, self.name = path, name
|
12
12
|
end
|
13
13
|
|
14
|
-
def
|
15
|
-
|
14
|
+
def save!
|
15
|
+
Template.new(self).tap{ |t| t.save; t.init }
|
16
|
+
self
|
16
17
|
end
|
17
18
|
|
18
|
-
def
|
19
|
-
|
20
|
-
gsub(/([A-Z])([a-z])/, '_\1\2').
|
21
|
-
gsub(/_+/, '_').
|
22
|
-
sub(/^_/, '').
|
23
|
-
downcase
|
24
|
-
end
|
19
|
+
def path; File.join(@root_path, @name); end
|
20
|
+
def name=(name); @name = normalize_name(name); end
|
25
21
|
|
26
22
|
def module_name
|
27
|
-
|
23
|
+
transforms = {'_' => '', '-' => ''}
|
24
|
+
@module_name ||= transform_name(transforms){ |part| part.capitalize }
|
28
25
|
end
|
29
26
|
|
30
27
|
def ruby_name
|
31
|
-
@ruby_name ||= transform_name{|part| part.downcase }
|
32
|
-
end
|
33
|
-
|
34
|
-
def save
|
35
|
-
Template.new(self).tap do |t|
|
36
|
-
t.save
|
37
|
-
t.init
|
38
|
-
end
|
28
|
+
@ruby_name ||= transform_name{ |part| part.downcase }
|
39
29
|
end
|
40
30
|
|
41
31
|
private
|
42
32
|
|
33
|
+
def normalize_name(name)
|
34
|
+
und_camelcs = [ /([A-Z])([a-z])/, '_\1\2' ]
|
35
|
+
rm_dup_und = [ /_+/, '_' ]
|
36
|
+
rm_lead_und = [ /^_/, '' ]
|
37
|
+
name.gsub(*und_camelcs).gsub(*rm_dup_und).sub(*rm_lead_und).downcase
|
38
|
+
end
|
39
|
+
|
43
40
|
def transform_name(conditions={}, &block)
|
44
41
|
n = (block ? block.call(self.name) : self.name)
|
45
42
|
conditions.each do |on, glue|
|
46
43
|
if (a = n.split(on)).size > 1
|
47
|
-
n = a.
|
48
|
-
block.call(part) if block
|
49
|
-
end.join(glue)
|
44
|
+
n = a.map{ |part| block.call(part) if block }.join(glue)
|
50
45
|
end
|
51
46
|
end
|
52
47
|
n
|
53
48
|
end
|
54
49
|
|
55
50
|
end
|
51
|
+
|
56
52
|
end
|
data/lib/ggem/template.rb
CHANGED
@@ -9,34 +9,47 @@ module GGem
|
|
9
9
|
end
|
10
10
|
|
11
11
|
def save
|
12
|
-
save_folder
|
12
|
+
save_folder # (gem root path)
|
13
13
|
save_folder "lib/#{@gem.ruby_name}"
|
14
|
-
save_folder "test"
|
14
|
+
save_folder "test/support"
|
15
|
+
save_folder "test/system"
|
16
|
+
save_folder "test/unit"
|
17
|
+
save_folder "log"
|
18
|
+
save_folder "tmp"
|
15
19
|
|
16
|
-
save_file('gitignore.erb',
|
17
|
-
save_file('Gemfile.erb',
|
18
|
-
save_file('gemspec.erb',
|
19
|
-
save_file('Rakefile.erb',
|
20
|
-
save_file('README.md.erb',
|
21
|
-
save_file('LICENSE.erb',
|
20
|
+
save_file('gitignore.erb', '.gitignore')
|
21
|
+
save_file('Gemfile.erb', 'Gemfile')
|
22
|
+
save_file('gemspec.erb', "#{@gem.name}.gemspec")
|
23
|
+
save_file('Rakefile.erb', 'Rakefile')
|
24
|
+
save_file('README.md.erb', 'README.md')
|
25
|
+
save_file('LICENSE.txt.erb', 'LICENSE.txt')
|
22
26
|
|
23
27
|
save_file('lib.rb.erb', "lib/#{@gem.ruby_name}.rb")
|
24
28
|
save_file('lib_version.rb.erb', "lib/#{@gem.ruby_name}/version.rb")
|
25
29
|
|
26
|
-
save_file('test_irb.rb.erb', 'test/irb.rb')
|
27
30
|
save_file('test_helper.rb.erb', 'test/helper.rb')
|
31
|
+
|
32
|
+
save_empty_file('log/.gitkeep')
|
33
|
+
save_empty_file('tmp/.gitkeep')
|
28
34
|
end
|
29
35
|
|
30
36
|
def init
|
31
|
-
|
37
|
+
cmd = "cd #{@gem.path} &&"\
|
38
|
+
" git init && git add --all &&"\
|
39
|
+
" git add -f log/.gitkeep && git add -f tmp/.gitkeep"
|
40
|
+
`#{cmd}`
|
32
41
|
end
|
33
42
|
|
34
43
|
private
|
35
44
|
|
36
45
|
def save_folder(relative_path=nil)
|
37
|
-
|
38
|
-
|
39
|
-
|
46
|
+
path = File.join([@gem.path, relative_path].compact)
|
47
|
+
FileUtils.mkdir_p(path)
|
48
|
+
end
|
49
|
+
|
50
|
+
def save_empty_file(relative_path)
|
51
|
+
path = File.join(@gem.path, relative_path)
|
52
|
+
FileUtils.touch(path)
|
40
53
|
end
|
41
54
|
|
42
55
|
def save_file(source, output)
|
@@ -2,6 +2,10 @@
|
|
2
2
|
|
3
3
|
TODO: Write a gem description
|
4
4
|
|
5
|
+
## Usage
|
6
|
+
|
7
|
+
TODO: Write code samples and usage instructions here
|
8
|
+
|
5
9
|
## Installation
|
6
10
|
|
7
11
|
Add this line to your application's Gemfile:
|
@@ -16,10 +20,6 @@ Or install it yourself as:
|
|
16
20
|
|
17
21
|
$ gem install <%= @gem.name %>
|
18
22
|
|
19
|
-
## Usage
|
20
|
-
|
21
|
-
TODO: Write usage instructions here
|
22
|
-
|
23
23
|
## Contributing
|
24
24
|
|
25
25
|
1. Fork it
|
@@ -1,21 +1,23 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "<%= @gem.ruby_name %>/version"
|
3
5
|
|
4
6
|
Gem::Specification.new do |gem|
|
5
7
|
gem.name = "<%= @gem.name %>"
|
6
8
|
gem.version = <%= @gem.module_name %>::VERSION
|
7
|
-
gem.description = %q{TODO: Write a gem description}
|
8
|
-
gem.summary = %q{TODO: Write a gem summary}
|
9
|
-
|
10
9
|
gem.authors = ["TODO: authors"]
|
11
10
|
gem.email = ["TODO: emails"]
|
11
|
+
gem.description = %q{TODO: Write a gem description}
|
12
|
+
gem.summary = %q{TODO: Write a gem summary}
|
12
13
|
gem.homepage = "http://github.com/__/<%= @gem.name %>"
|
13
14
|
|
14
|
-
gem.files = `git ls-files`.split(
|
15
|
-
gem.
|
16
|
-
gem.
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
17
18
|
gem.require_paths = ["lib"]
|
18
19
|
|
19
20
|
gem.add_development_dependency("assert")
|
20
|
-
# gem.add_dependency("gem-name", ["~> 0.0"])
|
21
|
+
# TODO: gem.add_dependency("gem-name", ["~> 0.0"])
|
22
|
+
|
21
23
|
end
|
@@ -1,5 +1,7 @@
|
|
1
|
-
# this file is automatically required
|
2
|
-
# put test helpers here
|
1
|
+
# this file is automatically required when you run `assert`
|
2
|
+
# put any test helpers here
|
3
3
|
|
4
|
-
# add root dir to the load path
|
4
|
+
# add the root dir to the load path
|
5
5
|
$LOAD_PATH.unshift(File.expand_path("../..", __FILE__))
|
6
|
+
|
7
|
+
# TODO: put test helpers here...
|
data/lib/ggem/version.rb
CHANGED
data/test/helper.rb
CHANGED
@@ -1,14 +1,12 @@
|
|
1
|
-
# this file is automatically required
|
2
|
-
# put test helpers here
|
1
|
+
# this file is automatically required when you run `assert`
|
2
|
+
# put any test helpers here
|
3
3
|
|
4
|
-
# add
|
5
|
-
$LOAD_PATH.unshift(File.expand_path("
|
4
|
+
# add the root dir to the load path
|
5
|
+
$LOAD_PATH.unshift(File.expand_path("../..", __FILE__))
|
6
6
|
|
7
7
|
class Assert::Context
|
8
8
|
|
9
|
-
TMP_PATH = File.expand_path
|
10
|
-
|
11
|
-
|
9
|
+
TMP_PATH = File.expand_path "../../tmp", __FILE__
|
12
10
|
|
13
11
|
def self.create_paths(name_set)
|
14
12
|
called_from = caller.first
|
@@ -20,13 +18,12 @@ class Assert::Context
|
|
20
18
|
|
21
19
|
Assert::Macro.new(macro_name) do
|
22
20
|
paths.flatten.each do |path|
|
23
|
-
|
24
21
|
should "create the path '#{path}'", called_from do
|
25
22
|
assert File.exists?(path), "'#{path}' does not exist"
|
26
23
|
end
|
27
|
-
|
28
24
|
end
|
29
25
|
end
|
26
|
+
|
30
27
|
end
|
31
28
|
|
32
29
|
def self.generate_name_set(name_set)
|
@@ -36,15 +33,14 @@ class Assert::Context
|
|
36
33
|
Assert::Macro.new(macro_name) do
|
37
34
|
name_set.variations.each do |variation|
|
38
35
|
[:name, :module_name, :ruby_name].each do |name_type|
|
39
|
-
|
40
36
|
should "know its :#{name_type} given '#{variation}'", called_from do
|
41
37
|
the_gem = GGem::Gem.new(TMP_PATH, variation)
|
42
38
|
assert_equal name_set.send(name_type), the_gem.send(name_type)
|
43
39
|
end
|
44
|
-
|
45
40
|
end
|
46
41
|
end
|
47
42
|
end
|
43
|
+
|
48
44
|
end
|
49
45
|
|
50
46
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
module GGem
|
2
2
|
module NameSet
|
3
3
|
|
4
|
-
|
5
4
|
class Base
|
6
5
|
attr_reader :variations, :name, :module_name, :ruby_name
|
7
6
|
|
@@ -9,7 +8,12 @@ module GGem
|
|
9
8
|
[ '',
|
10
9
|
'lib',
|
11
10
|
"lib/#{@ruby_name}",
|
12
|
-
'test'
|
11
|
+
'test',
|
12
|
+
'test/support',
|
13
|
+
'test/system',
|
14
|
+
'test/unit',
|
15
|
+
'log',
|
16
|
+
'tmp'
|
13
17
|
]
|
14
18
|
end
|
15
19
|
|
@@ -19,18 +23,19 @@ module GGem
|
|
19
23
|
"#{@name}.gemspec",
|
20
24
|
"Rakefile",
|
21
25
|
"README.md",
|
22
|
-
"LICENSE",
|
26
|
+
"LICENSE.txt",
|
23
27
|
|
24
28
|
"lib/#{@ruby_name}.rb",
|
25
29
|
"lib/#{@ruby_name}/version.rb",
|
26
30
|
|
27
31
|
"test/helper.rb",
|
28
|
-
|
32
|
+
|
33
|
+
"log/.gitkeep",
|
34
|
+
"tmp/.gitkeep",
|
29
35
|
]
|
30
36
|
end
|
31
37
|
end
|
32
38
|
|
33
|
-
|
34
39
|
class Simple < Base
|
35
40
|
def initialize
|
36
41
|
@variations = ['simple']
|
@@ -40,7 +45,6 @@ module GGem
|
|
40
45
|
end
|
41
46
|
end
|
42
47
|
|
43
|
-
|
44
48
|
class Underscored < Base
|
45
49
|
def initialize
|
46
50
|
@variations = ['my_gem', 'my__gem', 'MyGem', 'myGem', 'My_Gem']
|
@@ -50,7 +54,6 @@ module GGem
|
|
50
54
|
end
|
51
55
|
end
|
52
56
|
|
53
|
-
|
54
57
|
class HyphenatedOther < Base
|
55
58
|
def initialize
|
56
59
|
@variations = ['my-gem']
|
@@ -60,6 +63,5 @@ module GGem
|
|
60
63
|
end
|
61
64
|
end
|
62
65
|
|
63
|
-
|
64
66
|
end
|
65
67
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
require 'assert'
|
2
|
+
require 'test/support/name_set'
|
3
|
+
require 'ggem'
|
4
|
+
|
5
|
+
module GGem
|
6
|
+
|
7
|
+
class BaseTests < Assert::Context
|
8
|
+
desc "GGem"
|
9
|
+
|
10
|
+
NS_SIMPLE = GGem::NameSet::Simple
|
11
|
+
NS_UNDER = GGem::NameSet::Underscored
|
12
|
+
NS_HYPHEN = GGem::NameSet::HyphenatedOther
|
13
|
+
|
14
|
+
[ NS_SIMPLE, NS_UNDER, NS_HYPHEN ].each do |ns|
|
15
|
+
should generate_name_set(ns.new)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
19
|
+
|
20
|
+
class SaveTests < BaseTests
|
21
|
+
desc "when saving gems"
|
22
|
+
setup_once do
|
23
|
+
FileUtils.rm_rf(TMP_PATH)
|
24
|
+
FileUtils.mkdir_p(TMP_PATH)
|
25
|
+
GGem::Gem.new(TMP_PATH, NS_SIMPLE.new.variations.first).save!
|
26
|
+
GGem::Gem.new(TMP_PATH, NS_UNDER.new.variations.first).save!
|
27
|
+
GGem::Gem.new(TMP_PATH, NS_HYPHEN.new.variations.first).save!
|
28
|
+
end
|
29
|
+
teardown_once do
|
30
|
+
FileUtils.rm_rf(TMP_PATH)
|
31
|
+
end
|
32
|
+
|
33
|
+
should create_paths(NS_SIMPLE.new)
|
34
|
+
should create_paths(NS_UNDER.new)
|
35
|
+
should create_paths(NS_HYPHEN.new)
|
36
|
+
|
37
|
+
should "init a git repo in the gem path" do
|
38
|
+
exp_path = File.join(TMP_PATH, NS_SIMPLE.new.name, '.git')
|
39
|
+
assert File.exists?(exp_path), ".git repo config doesn't exist"
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require "assert"
|
2
|
+
require "ggem/gem"
|
3
|
+
|
4
|
+
class GGem::Gem
|
5
|
+
|
6
|
+
class BaseTests < Assert::Context
|
7
|
+
desc "GGem::Gem"
|
8
|
+
setup do
|
9
|
+
@gem = GGem::Gem.new(TMP_PATH, 'a-gem')
|
10
|
+
end
|
11
|
+
subject { @gem }
|
12
|
+
|
13
|
+
should have_readers :root_path, :name
|
14
|
+
should have_imeths :save!, :path, :name=, :module_name, :ruby_name
|
15
|
+
|
16
|
+
should "know its root path and path" do
|
17
|
+
assert_equal TMP_PATH, subject.root_path
|
18
|
+
assert_equal File.join(TMP_PATH, 'a-gem'), subject.path
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ggem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 1
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 0
|
10
|
-
version: 1.
|
10
|
+
version: 1.4.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kelly Redding
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2013-02-16 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: assert
|
@@ -31,20 +31,6 @@ dependencies:
|
|
31
31
|
type: :development
|
32
32
|
requirement: *id001
|
33
33
|
prerelease: false
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: quickl
|
36
|
-
version_requirements: &id002 !ruby/object:Gem::Requirement
|
37
|
-
none: false
|
38
|
-
requirements:
|
39
|
-
- - ">="
|
40
|
-
- !ruby/object:Gem::Version
|
41
|
-
hash: 3
|
42
|
-
segments:
|
43
|
-
- 0
|
44
|
-
version: "0"
|
45
|
-
type: :runtime
|
46
|
-
requirement: *id002
|
47
|
-
prerelease: false
|
48
34
|
description: "\"Juh Gem\", baby! (this makes gems)"
|
49
35
|
email:
|
50
36
|
- kelly@kellyredding.com
|
@@ -57,7 +43,7 @@ extra_rdoc_files: []
|
|
57
43
|
files:
|
58
44
|
- .gitignore
|
59
45
|
- Gemfile
|
60
|
-
- LICENSE
|
46
|
+
- LICENSE.txt
|
61
47
|
- README.md
|
62
48
|
- Rakefile
|
63
49
|
- bin/ggem
|
@@ -67,7 +53,7 @@ files:
|
|
67
53
|
- lib/ggem/gem.rb
|
68
54
|
- lib/ggem/template.rb
|
69
55
|
- lib/ggem/template_file/Gemfile.erb
|
70
|
-
- lib/ggem/template_file/LICENSE.erb
|
56
|
+
- lib/ggem/template_file/LICENSE.txt.erb
|
71
57
|
- lib/ggem/template_file/README.md.erb
|
72
58
|
- lib/ggem/template_file/Rakefile.erb
|
73
59
|
- lib/ggem/template_file/gemspec.erb
|
@@ -75,12 +61,11 @@ files:
|
|
75
61
|
- lib/ggem/template_file/lib.rb.erb
|
76
62
|
- lib/ggem/template_file/lib_version.rb.erb
|
77
63
|
- lib/ggem/template_file/test_helper.rb.erb
|
78
|
-
- lib/ggem/template_file/test_irb.rb.erb
|
79
64
|
- lib/ggem/version.rb
|
80
|
-
- test/gem_tests.rb
|
81
65
|
- test/helper.rb
|
82
|
-
- test/
|
83
|
-
- test/
|
66
|
+
- test/support/name_set.rb
|
67
|
+
- test/system/ggem_tests.rb
|
68
|
+
- test/unit/gem_tests.rb
|
84
69
|
homepage: http://github.com/kellyredding/ggem
|
85
70
|
licenses: []
|
86
71
|
|
@@ -115,7 +100,7 @@ signing_key:
|
|
115
100
|
specification_version: 3
|
116
101
|
summary: "\"Juh Gem\", baby! (this makes gems)"
|
117
102
|
test_files:
|
118
|
-
- test/gem_tests.rb
|
119
103
|
- test/helper.rb
|
120
|
-
- test/
|
121
|
-
- test/
|
104
|
+
- test/support/name_set.rb
|
105
|
+
- test/system/ggem_tests.rb
|
106
|
+
- test/unit/gem_tests.rb
|
data/test/gem_tests.rb
DELETED
@@ -1,57 +0,0 @@
|
|
1
|
-
require "assert"
|
2
|
-
require "name_set"
|
3
|
-
|
4
|
-
require "ggem/gem"
|
5
|
-
|
6
|
-
module GGem
|
7
|
-
class GGemTests < Assert::Context
|
8
|
-
desc "GGem::Gem"
|
9
|
-
end
|
10
|
-
|
11
|
-
class RootPathTests < GGemTests
|
12
|
-
before { @gem = Gem.new(TMP_PATH, 'a-gem') }
|
13
|
-
|
14
|
-
should "know its root path" do
|
15
|
-
assert_equal TMP_PATH, @gem.root_path
|
16
|
-
end
|
17
|
-
|
18
|
-
should "know its path" do
|
19
|
-
assert_equal File.join(TMP_PATH, 'a-gem'), @gem.path
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
class NameTests < GGemTests
|
24
|
-
[ GGem::NameSet::Simple,
|
25
|
-
GGem::NameSet::Underscored,
|
26
|
-
GGem::NameSet::HyphenatedOther
|
27
|
-
].each do |ns|
|
28
|
-
should generate_name_set(ns.new)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
class SaveTests < GGemTests
|
33
|
-
NS_SIMPLE = GGem::NameSet::Simple.new
|
34
|
-
NS_UNDER = GGem::NameSet::Underscored.new
|
35
|
-
NS_HYPHEN = GGem::NameSet::HyphenatedOther.new
|
36
|
-
|
37
|
-
desc "after it's been saved"
|
38
|
-
setup_once do
|
39
|
-
FileUtils.mkdir_p(TMP_PATH)
|
40
|
-
Gem.new(TMP_PATH, NS_SIMPLE.variations.first).save
|
41
|
-
Gem.new(TMP_PATH, NS_UNDER.variations.first).save
|
42
|
-
Gem.new(TMP_PATH, NS_HYPHEN.variations.first).save
|
43
|
-
end
|
44
|
-
teardown_once do
|
45
|
-
FileUtils.rm_rf(TMP_PATH)
|
46
|
-
end
|
47
|
-
|
48
|
-
should create_paths(NS_SIMPLE)
|
49
|
-
should create_paths(NS_UNDER)
|
50
|
-
should create_paths(NS_HYPHEN)
|
51
|
-
|
52
|
-
should "init a git repo in the gem path" do
|
53
|
-
assert File.exists?(File.join(TMP_PATH, NS_SIMPLE.name, '.git')), ".git repo config doesn't exist"
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|