perplect-gemerator 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/Manifest ADDED
@@ -0,0 +1,15 @@
1
+ lib/generators/gem/templates/fresh_rakefile.erb
2
+ lib/generators/gem/templates/gitignore.erb
3
+ lib/generators/gem/templates/gemerated.erb
4
+ lib/generators/gem/templates/lib/module.rb.erb
5
+ lib/generators/gem/templates/bin/binary.erb
6
+ lib/generators/gem/templates/test/module_test.rb.erb
7
+ lib/generators/gem/templates/README.rdoc.erb
8
+ lib/generators/gem.rb
9
+ lib/gemerator.rb
10
+ lib/generator.rb
11
+ README.rdoc
12
+ init.rb
13
+ bin/gemerate
14
+ Rakefile
15
+ Manifest
data/README.rdoc ADDED
@@ -0,0 +1,26 @@
1
+ = Gemerator
2
+
3
+ Quickly generate the basic structure of a GitHub-hosted RubyGem
4
+
5
+ == Installation
6
+
7
+ gem install perplect-gemerator
8
+
9
+ == Usage
10
+
11
+ Simply run:
12
+
13
+ gemerate new_awesome_gem
14
+
15
+ You will be guided through the whole process of generating your new gem. Afterwards, a list of useful Rake tasks that you will use frequently while developing your gem will appear.
16
+
17
+ == License
18
+
19
+ Copyright © 2009 David Knorr
20
+
21
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
22
+
23
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
24
+
25
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26
+
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require 'rubygems'
2
+ require 'echoe'
3
+
4
+ Echoe.new('gemerator', '0.0.1') do |p|
5
+ p.description = 'Quickly generate the basic structure of a GitHub-hosted RubyGem'
6
+ p.url = 'http://github.com/perplect/gemerator/tree/master'
7
+ p.author = 'David Knorr'
8
+ p.email = 'perplect@gmail.com'
9
+ p.development_dependencies = []
10
+ end
11
+
data/bin/gemerate ADDED
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.join(File.dirname(__FILE__), '..', 'init')
4
+
5
+ Gemerator.run!
6
+
data/gemerator.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{gemerator}
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["David Knorr"]
9
+ s.date = %q{2009-05-18}
10
+ s.default_executable = %q{gemerate}
11
+ s.description = %q{Quickly generate the basic structure of a GitHub-hosted RubyGem}
12
+ s.email = %q{perplect@gmail.com}
13
+ s.executables = ["gemerate"]
14
+ s.extra_rdoc_files = ["lib/generators/gem/templates/fresh_rakefile.erb", "lib/generators/gem/templates/gitignore.erb", "lib/generators/gem/templates/gemerated.erb", "lib/generators/gem/templates/lib/module.rb.erb", "lib/generators/gem/templates/bin/binary.erb", "lib/generators/gem/templates/test/module_test.rb.erb", "lib/generators/gem/templates/README.rdoc.erb", "lib/generators/gem.rb", "lib/gemerator.rb", "lib/generator.rb", "README.rdoc", "bin/gemerate"]
15
+ s.files = ["lib/generators/gem/templates/fresh_rakefile.erb", "lib/generators/gem/templates/gitignore.erb", "lib/generators/gem/templates/gemerated.erb", "lib/generators/gem/templates/lib/module.rb.erb", "lib/generators/gem/templates/bin/binary.erb", "lib/generators/gem/templates/test/module_test.rb.erb", "lib/generators/gem/templates/README.rdoc.erb", "lib/generators/gem.rb", "lib/gemerator.rb", "lib/generator.rb", "README.rdoc", "init.rb", "bin/gemerate", "Rakefile", "Manifest", "gemerator.gemspec"]
16
+ s.has_rdoc = true
17
+ s.homepage = %q{http://github.com/perplect/gemerator/tree/master}
18
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Gemerator", "--main", "README.rdoc"]
19
+ s.require_paths = ["lib"]
20
+ s.rubyforge_project = %q{gemerator}
21
+ s.rubygems_version = %q{1.3.2}
22
+ s.summary = %q{Quickly generate the basic structure of a GitHub-hosted RubyGem}
23
+
24
+ if s.respond_to? :specification_version then
25
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
26
+ s.specification_version = 3
27
+
28
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
29
+ else
30
+ end
31
+ else
32
+ end
33
+ end
data/init.rb ADDED
@@ -0,0 +1,12 @@
1
+ require 'fileutils'
2
+ require 'highline'
3
+ require 'erb'
4
+ require 'activesupport'
5
+
6
+ require 'gemerator'
7
+ require 'generator'
8
+
9
+ Dir[File.join(File.dirname(__FILE__), 'lib', 'generators', '**', '*.rb')].each do |file|
10
+ require file
11
+ end
12
+
data/lib/gemerator.rb ADDED
@@ -0,0 +1,9 @@
1
+ module Gemerator
2
+ class << self
3
+ def run!
4
+ gem_generator = Generators::Gem.new
5
+ gem_generator.run!
6
+ end
7
+ end
8
+ end
9
+
data/lib/generator.rb ADDED
@@ -0,0 +1,65 @@
1
+ module Gemerator
2
+ class Generator
3
+ include FileUtils
4
+
5
+ def initialize
6
+ @highline = HighLine.new
7
+ @events = []
8
+ end
9
+
10
+ def run!
11
+ output
12
+ end
13
+
14
+ def create_directory(name)
15
+ mkdir File.join(name.split('/'))
16
+ record 'create', name
17
+ end
18
+
19
+ def create_file(directory, template, name)
20
+ File.open(File.join(directory, name), 'w') do |file|
21
+ file.puts erb_result(template)
22
+ end
23
+ record 'create', "#{directory}/#{name}"
24
+ end
25
+
26
+ def output
27
+ @events.flatten!
28
+ puts
29
+ puts @highline.color(@highline.list(@events, :columns_across, 2), :green)
30
+ end
31
+
32
+ protected
33
+
34
+ def record(event, details)
35
+ @events << [event, details]
36
+ end
37
+
38
+ def inside(name, command)
39
+ `cd #{name} && #{command} && cd ..`
40
+ end
41
+
42
+ def ask(question)
43
+ @highline.ask @highline.color(question, :blue)
44
+ end
45
+
46
+ def yes?(question)
47
+ @highline.agree @highline.color(question, :blue)
48
+ end
49
+
50
+ def say(stuff)
51
+ @highline.say @highline.color(stuff, :magenta)
52
+ end
53
+
54
+ protected
55
+
56
+ def erb_result(name)
57
+ content = ''
58
+ File.new(File.join(File.dirname(__FILE__), 'generators', 'gem', 'templates', "#{name}.erb")).each_line do |line|
59
+ content << line
60
+ end
61
+ ERB.new(content).result(binding)
62
+ end
63
+ end
64
+ end
65
+
@@ -0,0 +1,8 @@
1
+ = <%= @gem_name.camelize %>
2
+
3
+ <%= @gem_description %>
4
+
5
+ == TODO
6
+
7
+ README content will be added later.
8
+
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env ruby
2
+
@@ -0,0 +1,11 @@
1
+ require 'rubygems'
2
+ require 'echoe'
3
+
4
+ Echoe.new('<%= @gem_name %>', '0.0.1') do |p|
5
+ p.description = '<%= @gem_description %>'
6
+ p.url = 'http://github.com/<%= @github_username %>/<%= @gem_name %>/tree/master'
7
+ p.author = '<%= @author_name %>'
8
+ p.email = '<%= @author_email %>'
9
+ p.development_dependencies = []
10
+ end
11
+
@@ -0,0 +1,22 @@
1
+ <%= headline = "#{@gem_name.camelize} Was Gemerated!" %>
2
+ <%= '=' * headline.length %>
3
+
4
+ Whenever you add new files:
5
+
6
+ rake manifest
7
+
8
+ To run your tests:
9
+
10
+ rake test
11
+
12
+ To install your gem locally:
13
+
14
+ rake install
15
+
16
+ To rebuild the Gem specification before releasing a new version:
17
+
18
+ rake build_gemspec
19
+
20
+ More tasks has been made available to you by Echoe:
21
+
22
+ rake -T
@@ -0,0 +1,3 @@
1
+ pkg
2
+ doc
3
+
@@ -0,0 +1,3 @@
1
+ module <%= @gem_name.classify %>
2
+ end
3
+
@@ -0,0 +1,8 @@
1
+ require 'test/unit'
2
+
3
+ class <%= @gem_name.classify %>Test < Test::Unit::TestCase
4
+ def test_truth
5
+ assert true
6
+ end
7
+ end
8
+
@@ -0,0 +1,111 @@
1
+ module Gemerator
2
+ module Generators
3
+ class Gem < Generator
4
+ def initialize
5
+ super
6
+ @gem_name = ARGV.first
7
+ @gem_description = ask('Gem description?')
8
+ @github_username = ask('GitHub username?')
9
+ @author_name = `git config --global user.name`.chomp
10
+ @author_email = `git config --global user.email`.chomp
11
+
12
+ if yes? 'Create binary?'
13
+ binary_name = ask('Name of binary? (Default is gem name)')
14
+ @binary_name = binary_name.empty? ? @gem_name : binary_name
15
+ end
16
+ end
17
+
18
+ def run!
19
+ create_gem_directory
20
+ initialize_git_repository
21
+ add_git_remote
22
+ create_lib_directory
23
+ create_module_file
24
+ create_test_directory
25
+ create_module_test_file
26
+
27
+ if @binary_name
28
+ create_bin_directory
29
+ create_binary_file
30
+ end
31
+
32
+ create_rakefile_file
33
+ create_readme_file
34
+ create_gitignore_file
35
+ generate_manifest
36
+ add_all_files_to_index
37
+
38
+ if yes? 'Commit now?'
39
+ initial_commit
40
+
41
+ if yes? 'Push to GitHub now?'
42
+ push_to_github
43
+ end
44
+ end
45
+
46
+ super
47
+
48
+ say erb_result('gemerated')
49
+ end
50
+
51
+ private
52
+
53
+ def create_gem_directory
54
+ create_directory @gem_name
55
+ end
56
+
57
+ def initialize_git_repository
58
+ inside @gem_name, 'git init'
59
+ record 'git', 'init'
60
+ end
61
+
62
+ def add_git_remote
63
+ inside @gem_name, "git remote add origin git@github.com:#{@github_username}/#{@gem_name}.git"
64
+ record 'git', 'add remote'
65
+ end
66
+
67
+ def generate_manifest
68
+ inside @gem_name, 'rake manifest'
69
+ record 'generate', 'manifest'
70
+ end
71
+
72
+ def add_all_files_to_index
73
+ inside @gem_name, 'git add .'
74
+ record 'git', 'add all files'
75
+ end
76
+
77
+ def initial_commit
78
+ inside @gem_name, 'git commit -m "Initial commit"'
79
+ record 'git', 'initial commit'
80
+ end
81
+
82
+ def push_to_github
83
+ inside @gem_name, 'git push origin master'
84
+ record 'git', 'push'
85
+ end
86
+
87
+ def method_missing(symbol, *args, &block)
88
+ if /^create_(.+)_directory$/ =~ symbol.to_s
89
+ create_directory "#{@gem_name}/#{$1}"
90
+ elsif /^create_(.+)_file$/ =~ symbol.to_s
91
+ file = files[$1.to_sym]
92
+ create_file @gem_name, file[0], file[1]
93
+ else
94
+ super
95
+ end
96
+ end
97
+
98
+ def files
99
+ {
100
+ :module => ['lib/module.rb', "lib/#{@gem_name}.rb"],
101
+ :module_test => ['test/module_test.rb', "test/#{@gem_name}_test.rb"],
102
+ :binary => ['bin/binary', "bin/#{@binary_name}"],
103
+ :rakefile => ['fresh_rakefile', 'Rakefile'],
104
+ :readme => ['README.rdoc', 'README.rdoc'],
105
+ :gitignore => ['gitignore', '.gitignore']
106
+ }
107
+ end
108
+ end
109
+ end
110
+ end
111
+
metadata ADDED
@@ -0,0 +1,84 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: perplect-gemerator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - David Knorr
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-05-18 00:00:00 -07:00
13
+ default_executable: gemerate
14
+ dependencies: []
15
+
16
+ description: Quickly generate the basic structure of a GitHub-hosted RubyGem
17
+ email: perplect@gmail.com
18
+ executables:
19
+ - gemerate
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - lib/generators/gem/templates/fresh_rakefile.erb
24
+ - lib/generators/gem/templates/gitignore.erb
25
+ - lib/generators/gem/templates/gemerated.erb
26
+ - lib/generators/gem/templates/lib/module.rb.erb
27
+ - lib/generators/gem/templates/bin/binary.erb
28
+ - lib/generators/gem/templates/test/module_test.rb.erb
29
+ - lib/generators/gem/templates/README.rdoc.erb
30
+ - lib/generators/gem.rb
31
+ - lib/gemerator.rb
32
+ - lib/generator.rb
33
+ - README.rdoc
34
+ - bin/gemerate
35
+ files:
36
+ - lib/generators/gem/templates/fresh_rakefile.erb
37
+ - lib/generators/gem/templates/gitignore.erb
38
+ - lib/generators/gem/templates/gemerated.erb
39
+ - lib/generators/gem/templates/lib/module.rb.erb
40
+ - lib/generators/gem/templates/bin/binary.erb
41
+ - lib/generators/gem/templates/test/module_test.rb.erb
42
+ - lib/generators/gem/templates/README.rdoc.erb
43
+ - lib/generators/gem.rb
44
+ - lib/gemerator.rb
45
+ - lib/generator.rb
46
+ - README.rdoc
47
+ - init.rb
48
+ - bin/gemerate
49
+ - Rakefile
50
+ - Manifest
51
+ - gemerator.gemspec
52
+ has_rdoc: true
53
+ homepage: http://github.com/perplect/gemerator/tree/master
54
+ post_install_message:
55
+ rdoc_options:
56
+ - --line-numbers
57
+ - --inline-source
58
+ - --title
59
+ - Gemerator
60
+ - --main
61
+ - README.rdoc
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: "0"
69
+ version:
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: "1.2"
75
+ version:
76
+ requirements: []
77
+
78
+ rubyforge_project: gemerator
79
+ rubygems_version: 1.2.0
80
+ signing_key:
81
+ specification_version: 3
82
+ summary: Quickly generate the basic structure of a GitHub-hosted RubyGem
83
+ test_files: []
84
+